使用Gstreamer压缩H264流

时间:2012-10-06 08:27:46

标签: gstreamer

我正在尝试创建一个GStreamer管道( v 1.0 ),以便记录和播放特殊的文件格式。

出于录制目的,我使用以下管道:

gst-launch-1.0 videotestsrc ! video/x-raw-yuv, format=\(fourcc\)I420,  width=640, height=480 ! videoconvert ! x264enc byte-stream=1 ! queue ! appsink

appsink 中(使用new_sample()回调)我使用压缩方法压缩H264流并最终存储在输出文件中。

我使用以下管道播放录制的文件:

gst-launch-1.0 appsrc ! video/x-h264 ! avdec_h264 ! autovideosink

appsrc 中,我解压缩H264流并将其发送到appsrc缓冲区(使用push-buffer)。每个缓冲区的大小为4095。

不幸的是,推送2缓冲区后的GStreamer会打印以下调试消息:

错误:内部数据流错误。

有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

  1. 在解码器之前添加legacyh264parse或h264parse(取决于您的gst组件的版本)。您需要能够将完整帧发送到解码器。

  2. 发布avdec_h264,有一个ffmpegcolorspace能够将视频格式转换为显示要求会很不错。