【问题标题】:errors when decode H.264 frames using ffmpeg使用 ffmpeg 解码 H.264 帧时出错
【发布时间】:2013-02-06 23:08:51
【问题描述】:

在解码从基于 H.264 的 SIP 视频呼叫的远程端接收的 H.264 帧时出现以下错误。感谢您对理解错误的帮助。

non-existing PPS 0 referenced
decode_slice_header error
non-existing PPS 0 referenced
decode_slice_header error
no frame!

non-existing PPS 0 referenced
decode_slice_header error
non-existing PPS 0 referenced
decode_slice_header error
no frame!

【问题讨论】:

    标签: ffmpeg h.264


    【解决方案1】:

    您需要添加框架spspps信息。 ffmpeg 需要这些信息来进行解码。您可以在 SDP 文件中找到这些值。

    在 SDP 文件中,您应该查看 NAL 单元,您可以看到类似 z0IAHukCwS1xIADbugAzf5GdyGQl、aM4xUg 的内容

    这些值基于 64 编码,您应该将其转换为十六进制格式。我正在使用 wireshark,wireshark 会为你自己转换这些值。之后,您将获得 sps 和 pps 值。

    现在您必须在数据框之前添加这些 Nal 信息。

    00 00 00 01 sps 00 00 00 01 pps 00 00 00 01 数据

    对于 h264,我一直使用这些格式进行解码。

    【讨论】:

      【解决方案2】:

      解码一个帧或一个切片,解码sliceHeader,它指的是一个PPS或“图片参数集”。它包含有关框架细节的信息,例如宽度、高度等。

      我猜您的数据是通过流输入通道传入的,在这种情况下,SPS 和 PPS 会在流中较早发送。

      您可能必须将其连接到您的流中。

      【讨论】:

        【解决方案3】:

        这只是意味着ffmpeg还没有看到一个关键帧,它带有SPS和PPS信息。 SPS 和 PPS 在解码传入的帧/片时至关重要。定期发送关键帧(即每 5-10 秒或更长时间);因此,如果事实证明您在关键帧到达之前加入了流;在关键帧出现之前,您会在每一帧看到此警告。

        一旦关键帧从线路中显示出来,ffmpeg 就会有足够的信息来解码该帧(以及下一个关键帧之前的任何后续帧),因此这些警告将消失。

        【讨论】:

        • 这似乎是问题所在。即使我的客户端使用 SIP INFO 请求它,远程端也不会发送关键帧。有什么想法可以解决这个问题吗?我在远端使用旧版本的 Bria。
        • 远端没有发送任何关键帧?这很奇怪。不确定 Bria 是否有配置关键帧间隔的选项,但值得研究。所以总的来说,你根本看不到任何来自远程端的视频,或者需要一段时间才能看到它?
        • 您很可能遇到一般解码问题。您看到的错误,它们会停止吗?我们可以看看你的一些 ffmpeg 解码代码吗?
        • 或者您可能遇到解码帧的渲染问题(即解码器和渲染器之间的颜色空间不匹配)。无论如何,这里有很多活动部件。如果您可以指定平台,您渲染视频的方式;这也能让我更好地了解正在发生的事情。
        • 尝试在远程编码器上将关键帧间隔设置为几秒。如果它设置为自动模式并且相机是静态的,您可以在很长一段时间内接收帧
        猜你喜欢
        • 2017-04-19
        • 2019-02-21
        • 2011-12-11
        • 2011-08-11
        • 2011-10-30
        • 2022-11-04
        • 2017-06-23
        • 2018-01-24
        • 1970-01-01
        相关资源
        最近更新 更多