web-dev-qa-db-ja.com

gstreamerを使用してRTP経由でH.264ビデオをストリーミングする

私はgstreamerの初心者であり、それと一緒に使用しようとしています。私の最初の目標は、2つのデバイス間でh264ビデオの単純なrtpストリームを作成することです。これら2つのパイプラインを使用しています。

送信者:gst-launch-1.0 -v filesrc location=c:\\tmp\\sample_h264.mov ! x264enc ! rtph264pay ! udpsink Host=127.0.0.1 port=5000

受信者:gst-launch-1.0 -v udpsrc port=5000 ! rtpmp2tdepay ! decodebin ! autovideosink

しかし、最初のもの(送信者)では、次のエラーが発生しました:

Setting pipeline to PAUSED ...
Pipeline is PE*R*O L(LgIsNtG- l.a.u.n
h-1.0:5788): CRITICAL **: gst_adapter_map: assertion `size > 0' failed
ERROR: from element /GstPipeline:pipeline0/GstFileSrc:filesrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2812): gst_base_src_loop (): /GstPipeline:pipeline0/GstFileSrc:filesrc0:
streaming task paused, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...

他の多くの構成を試しましたが、適切なパイプラインが見つかりませんでした。

その他の情報:Gstreamerバージョン:1.0.7 OS:Windows 7

何かアイデア/提案? THX、

15
abir

filesrcは、指定されたファイルからデータを生バイトとして読み取ります。これらの未加工バイトをx264encで単にエンコードすることはできません。これを機能させるにはビデオデータが必要です。ストリームを再エンコードする前にdemuxer // decoderを追加してみてください)このようなもの:

送信者:

gst-launch-1.0 -v \
   filesrc location=/tmp/sample_h264.mov
   ! qtdemux \
   ! h264parse \
   ! ffdec_h264 \
   ! ffmpegcolorspace \
   ! x264enc \
   ! rtph264pay \
   ! udpsink Host=127.0.0.1 port=5000

テストビデオソースを使用して、これが機能するかどうかを簡単に確認する必要があります。

gst-launch-1.0 -v \
   videotestsrc 
   ! x264enc \
   ! rtph264pay \
   ! udpsink Host=127.0.0.1 port=5000
10
umläute