用gstreamer混合多个rtp音频流

时间:2020-01-23 13:08:16

标签: linux gstreamer gstreamer-1.0

我正在尝试在其他一些计算机上混合使用以下命令创建的多个音频udp rtp数据包,但是经过大量搜索后,我找不到合适的命令来混合接收到的音频。

我使用以下命令将其他计算机上的音频流传输到我的计算机上:

gst-launch-1.0 autoaudiosrc ! audioconvert ! rtpL24pay ! udpsink host=<MY_COMPUTER_IP> port=<some_port_number>

,我可以使用以下命令在计算机上接收流:

gst-launch-1.0 -v udpsrc port=<port_number> caps="application/x-rtp,channels=(int)2,format=(string)S16LE,media=(string)audio,payload=(int)96,clock-rate=(int)44100,encoding-name=(string)L24" ! rtpL24depay ! audioconvert ! autoaudiosink sync=false

但是我想将接收到的流混合在一起,并仅在一个管道中将其作为一种音频播放,我该怎么做?

1 个答案:

答案 0 :(得分:2)

要混合两个音频流,可以使用GStreamer的audiomixer插件。最基本的例子是:

生成2个并行RTP(通过UDP)流并生成不同频率的测试音频

gst-launch-1.0 audiotestsrc freq=523 ! audioconvert ! rtpL24pay ! udpsink host=127.0.0.1 port=5000 \
audiotestsrc freq=659 ! audioconvert ! rtpL24pay ! udpsink host=127.0.0.1 port=5001

2种不同的RTP(通过UDP)流的接收器,它们混合了流所承载的2种音频

gst-launch-1.0 -v udpsrc port=5000 caps="application/x-rtp,channels=(int)2,format=(string)S16LE,media=(string)audio,payload=(int)96,clock-rate=(int)44100,encoding-name=(string)L24" \
! queue ! rtpL24depay ! audioconvert ! audiomixer name=mixer ! autoaudiosink \
udpsrc port=5001 caps="application/x-rtp,channels=(int)2,format=(string)S16LE,media=(string)audio,payload=(int)96,clock-rate=(int)44100,encoding-name=(string)L24" \
! queue ! rtpL24depay ! audioconvert ! mixer.