0

次のGStreamerパイプラインを使用して、エンコードされたストリームをバイナリファイルに保存しました。

gst-launch v4l2src ! videorate ! video/x-raw-yuv, framerate=\(fraction\)10/1 \
  ! videoscale ! video/x-raw-yuv, format=\(fourcc\)I420,  width=640, height=480\
  ! ffmpegcolorspace ! x264enc ! fdsink > vid.bin

次に、次のパイプラインを使用して、GStreamerで以前に記録されたファイルを再生したいと思います。

cat vid.bin | gst-launch fdsrc ! ffdec_h264 ! autovideosink

ただし、次のエラーが発生します。

Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
ERROR: from element /GstPipeline:pipeline0/ffdec_h264:ffdec_h2640: Internal GStreamer error: negotiation problem.  Please file a bug at http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer.
Additional debug info:
gstffmpegdec.c(2804): gst_ffmpegdec_chain (): /GstPipeline:pipeline0/ffdec_h264:ffdec_h2640:
ffdec_h264: input format was not set before data start
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...

ビデオをキャプチャする最良の方法はMuxersを使用することですが、以前のファイルを再生する方法はありますか?

ありがとう

4

2 に答える 2

4

パイプラインが正しいかどうかわからない。

ファイルに書き込みたい場合は、単にfilesinkとfilesrcを使用しないでください。

fdsink> vid.binは正常に機能しません。これは、gstreamerによる印刷が表示された場合、gst-launchもファイルに含まれるためです。[テキストエディタでvid.binを開くだけで、私が何を意味するかがわかります]。

また、x264ストリームをマルチプレクサなしで保存するには、x264encでbyte-stream = 1を使用して、デコード可能になるようにannexb形式で保存する必要があります。

生のx264ストリームを再生するには、ビデオシンクの前に色空間コンバーターが必要です。

gst-launch filesrc location=inputfile ! legacyh264parse ! ffdec_h264 ! queue ! ffmpegcolorspace ! autovideosink

私の最後ではここでうまく再生されます

于 2012-10-03T17:11:42.163 に答える
2

または、gstreamer 1.0で生のh264ファイルを再生するには:

gst-launch-1.0 filesrc location=/tmp/video.h264 ! h264parse ! avdec_h264 ! autovideosink
于 2014-09-09T08:08:12.703 に答える