2

我正在尝试创建一个 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。

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

错误:内部数据流错误。

有没有办法解决这个问题?

4

1 回答 1

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

  2. 发布 avdec_h264 最好有一个 ffmpegcolorspace 能够将视频格式转换为您的显示要求。

于 2012-10-06T08:37:31.743 回答