scatter brain
scatter brain

Reputation: 25

play encoded stream in gstreamer

I used the following GStreamer pipeline to store my encoded stream in a binary file:

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

Now i want to play previously recorded files in GStreamer using the following pipeline:

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

But then it gives the following error:

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 ...

I know that the best way to capture video is using Muxers but is there any way to play my previous files?

Thanks

Upvotes: 0

Views: 4564

Answers (2)

br1
br1

Reputation: 443

Or, to playback a raw h264 file with gstreamer 1.0:

gst-launch-1.0 filesrc location=/tmp/video.h264 ! h264parse ! avdec_h264 ! autovideosink

Upvotes: 2

av501
av501

Reputation: 6729

Not sure your pipeline is right.

If you want to write to a file why not simply use filesink and filesrc.

fdsink > vid.bin will not work fine because if you see the prints by gstreamer gst-launch will also go into the file. [Just open vid.bin in an text editor and you will see what I mean].

Also for x264 stream to be stored without a muxer you need to use byte-stream=1 in your x264enc to store it in annexb format so that it is decodable.

To play back raw x264 stream you need to have a color space convertor before the video sink

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

plays just fine here at my end

Upvotes: 4

Related Questions