我正在尝试创建一个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会打印以下调试消息:
错误:内部数据流错误。
有什么方法可以解决这个问题吗?
答案 0 :(得分:3)
在解码器之前添加legacyh264parse或h264parse(取决于您的gst组件的版本)。您需要能够将完整帧发送到解码器。
发布avdec_h264,有一个ffmpegcolorspace能够将视频格式转换为显示要求会很不错。