gstreamer mux导致错误的管道

时间:2016-03-21 21:47:48

标签: command-line media gstreamer pipeline gobject

我正在构建一个管道,我需要将多个视频(在本例中为2个)复用到多路复用器(multistreamscimux)中。当我构建管道时,它会抛出错误的管道:意外的引用。

从多路复用单个视频的管道中生成以下png。我正在尝试创建一个从rtpbin开始的管道,该管道进入multistreamrtpscimux.rtpsrc_2。但我想我可能在指定多路复用器源和接收器垫的方式上犯了一个错误。我尝试了here中提到的那些但无法解决它。  任何帮助表示赞赏。

enter image description here

这是我正在尝试构建的实际管道。

gst-launch-1.0 -v rtpbin name=rtpbin_0  videotestsrc pattern=ball is-live=true 
name=vidsource_0 ! video/x-raw, framerate=30/1, width=180, height=90 ! textoverlay
 text="" valignment=4 ! x264enc aud=false name=videoenc_0 ! video/x-h264,
profile=baseline, stream-format=byte-stream,alignment=au ! rtph264pay mtu=1256 
pt=109  ! multistreamrtpmux name=multirtpmux_0 csis-string="22446601" 
vid-headerext-id=1 vid-header-extension-string="04" frame-marking-headerext-id=2 
frame-marking-header-extension-string="48" ! msrtpscimux.rtpsink_0 
 multistreamrtpscimux name=msrtpscimux ! rtpbin name=rtpbin_1  videotestsrc pattern=ball
 is-live=true name=vidsource_1 ! video/x-raw, framerate=30/1, width=180, height=90
 ! textoverlay text="" valignment=4 ! x264enc aud=false name=videoenc_1 !
video/x-h264, profile=baseline, stream-format=byte-stream,alignment=au ! 
rtph264pay mtu=1256 pt=109  ! multistreamrtpmux name=multirtpmux_1 
csis-string="22446601" vid-headerext-id=1 vid-header-extension-string="04" 
frame-marking-headerext-id=2 frame-marking-header-extension-string="48" !
multirtpmux_1.rtpsrc msrtpscimux.rtpsink_1 msrtpscimux. msrtpscimux.rtpsrc ! 
netsim drop-probability=0.0 delay-probability=0.0 ! 
application/x-rtp ! rtpbin_0.send_rtp_sink_0 rtpbin_0.send_rtp_src_0 !
multisocketudpsink name=videosink rtpbin_0.send_rtcp_src_0 !  
multisocketudpsink name=rtcpsink sync=false async=false

1 个答案:

答案 0 :(得分:0)

我能够通过在每个子流中指定要连接的mux元素的sinkpads来解决这个问题,然后最终使用其参数指定mux元素。 一个简短的例子如下.. 用于连接

[videotestsrc]->[multirtpmux]--[sinkpad_0             ]
                               |     msrtpscimux      |
[videotestsrc]->[multirtpmux]--[sinkpad_1             ]

对于上面我使用的

videotestsrc pattern=ball ! multistreamrtpmux name=multirtpmux_0 ! \
msrtpscimux.rtpsink_0 videotestsrc pattern=red ! \
 multistreamrtpmux name=multirtpmux_1 ! msrtpscimux.rtpsink_3 \
multistreamrtpscimux name=msrtpscimux

注意:我不使用msrtpscimux.rtpsink_3 multistreamrtpscimux name = msrtpscimux之间的管道来表示我正在使用不同的子流