【问题标题】:ffmpeg decode raw h264 distorted or gray imageffmpeg 解码原始 h264 失真或灰色图像
【发布时间】:2018-09-19 06:18:18
【问题描述】:

我需要对来自实时 DVR 摄像机的 H264 流进行解码。 为了方便示例,我将来自 DVR 摄像机的 RAW 流存储在以下文件 (test.h264) 中:http://f.zins.com.br/test.h264

为了解码直播流,我遵循以下 ffmpeg 示例:https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/decode_video.c

如果我用 VLC 打开 .h264 测试,图像看起来很完美。 如果您使用 avformat_open_inputavformat_find_stream_info 使用 ffmpeg 解码 .h264 测试,图像看起来也很完美。

但如果我使用https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/decode_video.c 示例进行解码,图像都会失真。我认为这是因为 H264 流可以与音频一起出现。

开启ffmpeg的调试,显示很多如下错误:

[h264 @ 092a9b00] Invalid NAL unit 0, skipping.
[h264 @ 092a9b00] Invalid NAL unit 0, skipping.
[h264 @ 092a9b00] Invalid NAL unit 0, skipping.
[h264 @ 092a9b00] error while decoding MB 16 1, bytestream -28
[h264 @ 092a9b00] Invalid NAL unit 8, skipping.
[h264 @ 092a9b00] Invalid NAL unit 8, skipping.
[h264 @ 092a9b00] Invalid NAL unit 8, skipping.

有没有办法让我只过滤直播中的视频忽略音频? 否则,是否有任何解决方案可以使用 decode_video.c 示例解码 test.h264 而不会扭曲帧?

扭曲的帧有时看起来像下图,有时几乎全是灰色的。

【问题讨论】:

  • .h264 应该是原始流并且不包含音频。这是什么,是具有单个流的 MPEG-PS。 Remux 到原始流:ffmpeg -i test.h264 -c copy raw.h264 并使用它。
  • 我已经这样做了,而且效果很好。问题是我不能对直播做同样的事情。在直播中,我得到的字节与它们存储在 test.h264 中的字节完全相同,但我有这些问题需要解码。
  • 因此,您需要使用 mpegps 解复用和读取数据包
  • 或者,您可以将直播流包装在自定义 AVIOContext 中,类似于 this example
  • @Alex Cohn,效果很好。非常感谢。

标签: ffmpeg libavcodec libav


【解决方案1】:

流在原始 h264 数据包周围有 mpeg 包装器,我们需要先对它们进行解复用。如果您无法提供带有 protocol supported by ffmpeg(例如 udp://)之类的 URL,您应该为您的直播构建自定义 AVIOContext 并将其传递给

avformat_open_input(&fmt_ctx, NULL, NULL, NULL)

类似于this example

现在您可以使用

开始通常的解复用器循环
av_read_frame(fmt_ctx, &pkt)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-12
    • 2011-11-24
    • 1970-01-01
    • 2014-02-06
    • 2013-12-03
    • 2011-02-24
    • 2011-08-26
    • 2012-10-29
    相关资源
    最近更新 更多