我发现了一个基于gst启动的工作示例,用于通过RTP发送和接收视频流。我已经把它们重写给C了。Sender工作正常,但Receiver没有。我有两台计算机,A和B。当流B->A时,它工作正常,但当A->B时,B没有显示流。流到B(与wireshark核对)。你能看看代码,看看有没有我没有发现的错误吗?
以下是gst发布应用程序:

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

最佳答案

您没有连接到rtpbin中的请求pt map信号,而是在udpsrc上设置了caps。一般的想法是rtpbin告诉你“嘿,我有一个新的payloadnumber进来了,我应该给这个分配什么上限?”。然后提供您现在直接在udpsrc上设置的上限(减去payloadnumber)。我不确定这是否有帮助,但你应该这样做。使用GST_DEBUG=*rtp*:5运行接收器也可能提供一些线索。

08-26 09:02