在gstreamer中播放编码流

时间:2012-10-03 05:55:40

标签: gstreamer

我使用以下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,但有没有办法播放我以前的文件?

由于

2 个答案:

答案 0 :(得分: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

在我的结尾播放就好了

答案 1 :(得分:2)

或者,使用gstreamer 1.0播放原始h264文件:

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