使用gstreamer播放传入的RTP视频流

时间:2012-08-15 13:03:54

标签: c video-streaming gstreamer rtp

我找到了一个基于gst-launch的工作示例,用于通过RTP发送和接收视频流。我已将它们改写为C.发件人工作正常,但收件人却没有。我有2台计算机,A和B.当流B-> A时,它工作正常,但是当A-> B时,B没有显示流。流来到B(用wireshark检查)。你能看看代码,看看是否有任何我找不到的错误?

这是gst-launch app:

VIDEO_CAPS="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H263-1998"
gst-launch-0.10 -v gstrtpbin name=rtpbin latency=100 \
    udpsrc caps=$VIDEO_CAPS port=5000 \
    ! rtpbin.recv_rtp_sink_0 rtpbin. \
    ! rtph263pdepay \
    ! ffdec_h263 \
    ! ffmpegcolorspace \
    ! autovideosink
    udpsrc port=5001 \
    ! rtpbin.recv_rtcp_sink_0 rtpbin.send_rtcp_src_0 \
    ! udpsink host=$1 port=5005 sync=false async=false

相应的C代码在[1]上,因为它很长。

[1] http://pastebin.com/54eHvZWH

1 个答案:

答案 0 :(得分:0)

您没有连接到rtpbin中的request-pt-map信号,而是在udpsrc上设置大写字母。一般的想法是rtpbin告诉你“嘿,我有一个新的有效载荷数量,我应该分配给它的上限是多少?”。然后提供您现在直接在udpsrc上设置的大写字母(减去有效负载数)。我不确定这是否会有所帮助,但这就是你应该这样做的方式。使用GST_DEBUG = * rtp *:5运行接收器也可能提供一些线索。