0

送信者と受信者の 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 パケットを取得するために読み取るバイト数を認識していません。

これは正しいですか? はいの場合、どうすれば変更できますか? 前もって感謝します !

4

2 に答える 2

1

名前付きパイプを通過するとき、RTP は適切にパケット化されません。次のいずれかを行うことができます。

  1. rtpvp8pay 要素を使用せずに、エンコードされたストリームをバイトストリームとして直接送信します。

  2. rtpstreampay や rtpgdppay など、バイトストリーム形式を処理する GStreamer の別の RTP 要素を使用します。(ただし、rtpstreampay は GStreamer 1.0 要素である可能性があると思います。)

于 2014-07-04T01:27:21.693 に答える