使用Gstreamer压缩H264流
我正在尝试创建一个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缓冲区(使用推缓冲区)。 每个缓冲区的大小是4095。
不幸的是,在push 2缓冲区后GStreamer会打印以下调试消息:
错误:内部数据流错误。
有没有办法解决这个问题?
在解码器之前添加legacyh264parse或h264parse(取决于您的gst组件版本)。 您需要能够将全部帧发送到解码器。
发布avdec_h264这将是一个很好的ffmpegcolorspace能够将视频格式转换为您的显示需求。