我有两个 GStreamer 实例:一个发送者和一个接收者。我想流式传输 RTP / VP8 视频。如果我通过 UDP 流式传输,它工作得非常好,如下所示:
发件人
gst-launch-0.10 -v videotestsrc ! vp8enc ! rtpvp8pay ! udpsink host=127.0.0.1 port=9001
接收者
gst-launch-0.10 udpsrc port=9001 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)VP8-DRAFT-IETF-01, payload=(int)96" ! rtpvp8depay ! vp8dec ! ffmpegcolorspace ! autovideosink
这很好用。但是,当我尝试通过 FIFO / 命名管道(使用 mkfifo() 完成)流式传输时:
发件人
gst-launch-0.10 -v videotestsrc ! vp8enc ! rtpvp8pay ! filesink location = myPipe
接收者
gst-launch-0.10 filesrc location = myPipe ! capsfilter caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)VP8-DRAFT-IETF-01, payload=(int)96 ! rtpvp8depay ! vp8dec ! ffmpegcolorspace ! autovideosink
它失败了,我的接收器不断输出:
WARNING: from element /GstPipeline:pipeline0/GstRtpVP8Depay:rtpvp8depay0: Could not decode stream.
Additional debug info:
gstbasertpdepayload.c(387): gst_base_rtp_depayload_chain (): /GstPipeline:pipeline0/GstRtpVP8Depay:rtpvp8depay0:
Received invalid RTP payload, dropping
我想我在某处读到(但无法再次找到它),这是因为使用 UDP 时,RTP 数据包被正确分离,而使用这样的命名管道时,正在写入的数据包被“链接”(未正确分离)因此 gstreamer 不知道要读取多少字节才能获得 RTP 数据包。
这是正确的,如果是,我该如何改变?提前致谢 !