【发布时间】:2011-01-17 10:44:55
【问题描述】:
我正在构建一个 gstreamer 管道,它从网络源接收两个 RTP 流:
- ILBC 音频流 + 对应的 RTCP 流
- H263视频流+对应的RTCP流
所有内容都放入一个 gstreamer 管道中,因此它将使用两个流中的 RTCP 来同步音频/视频。到目前为止,我已经想出了这个(使用 gst-launch 进行原型设计):
gst-launch -vvv gstrtpbin name=rtpbin
udpsrc caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H263-2000" port=40000 ! rtpbin.recv_rtp_sink_0
rtpbin. ! rtph263pdepay ! ffdec_h263 ! xvimagesink
udpsrc port=40001 ! rtpbin.recv_rtcp_sink_0
rtpbin.send_rtcp_src_0 ! udpsink port=40002 sync=false async=false
udpsrc caps="application/x-rtp,media=(string)audio,clock-rate=(int)8000,encoding-name=(string)PCMU,encoding-params=(string)1,octet-align=(string)1" port=60000 rtpbin.recv_rtp_sink_1
rtpbin. ! rtppcmudepay ! autoaudiosink
udpsrc port=60001 ! rtpbin.recv_rtcp_sink_1
rtpbin.send_rtcp_src_1 ! udpsink port=60002 sync=false async=false
如果网络源开始发送视频和音频,则此管道运行良好。如果稍后暂停视频流,gstreamer 仍会播放音频,甚至会在网络源恢复视频流时开始播放视频。
但是,我的问题是,如果网络源仅以音频流开始(稍后可能会添加视频),则管道似乎会暂停/冻结,直到视频流也开始。
由于视频在我的应用程序中是可选的(并且可以由用户随意添加/删除),有什么方法可以连接,例如一个“videotestsrc”,它将提供某种后备视频数据来保持没有网络视频数据时运行管道?
我尝试过使用“videotestsrc”和一个叫做“videomixer”的东西,但我认为混音器仍然需要两个流都处于活动状态。非常感谢任何反馈!
【问题讨论】:
标签: gstreamer