送信者と受信者の 2 つの 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 パケットを取得するために読み取るバイト数を認識していません。
これは正しいですか? はいの場合、どうすれば変更できますか? 前もって感謝します !