使用 Gstreamer 将多个音频流混合成一个播放声音

Mix multiple audio streams into one playback-sound using Gstreamer

我想使用 Gstreamer 从同一端口上的多个点接收音频流。 事实上,我想将来自网络上不同节点的音频流式传输到一台收听传入音频流的设备,并且它应该在播放前混合多个音频。 我知道我应该使用 audiomixerliveadder 来完成这样的任务。 但是我做不到,而且调音台不能正常工作,当两个音频流进来时,输出的声音会很嘈杂和损坏。

我使用了以下命令:

gst-launch-1.0.exe -v udpsrc port=5001 caps="application/x-rtp" ! queue ! rtppcmudepay ! mulawdec ! audiomixer name=mix mix. ! audioconvert ! audioresample ! autoaudiosink

但是没用。

首先,您可能希望使用 audiomixer 而不是 liveadder,因为第一个保证不同音频流的同步。

然后,关于你的混音问题,你提到输出声音是"noisy and corrupted",这让我想到了音频电平的问题。虽然 audiomixer 将输出音频剪辑到允许的最大振幅范围,但如果您的源声音太大,它可能会导致音频伪影。因此,您可能希望在两个源上都使用 volume 属性。有关详细信息,请参阅 here and there

同一端口上的数据包不能像您在命令中编写的正常方式那样相互 demux,要从同一端口接收多个音频流,您应该使用 SSRCrtpssrcdemux 解复用器。 但是,要在多个端口上接收多个音频流并将它们混合,您可以使用 liveadder 元素。从两个端口接收两个音频流并混合它们的示例如下:

gst-launch-1.0 -v udpsrc name=src5001 caps="application/x-rtp" port=5001 ! rtppcmudepay ! mulawdec ! audioresample ! liveadder name=m_adder ! alsasink device=hw:0,0 udpsrc name=src5002 caps="application/x-rtp" port=5002 ! rtppcmudepay ! mulawdec ! audioresample ! m_adder.