【问题标题】:Decoding H.264 individual nal units解码 H.264 单个最终单元
【发布时间】:2015-05-31 21:17:25
【问题描述】:

我目前正在通过网络发送单个 NAL 单元。这些 NAL 单元由 x264 生成。现在是否可以将这些 NAL 单元单独馈送到 avcodec_decode_video2 中?

或者我是否必须连接最终单元直到它们代表相同的帧?如果是这样,那是怎么做的呢?

我还了解到我可能能够接收 SPS 和 PPS 数据包。然后等待至少一个数据包,并尝试解码。这是正确的吗?

任何可以提供的建议将不胜感激

【问题讨论】:

    标签: c++ ffmpeg decode h.264 x264


    【解决方案1】:

    是的,我们可以将 NAL 单元单独传递给解码器。 H264 能够分割成多个切片,每帧具有多个 NAL 单元。 PL。请参阅提供使用 ffmpeg 进行解码的步骤的教程。 http://dranger.com/ffmpeg/tutorial01.html

    还要检查 av_read_frame 调用的输出,以了解帧数据的来源。建议你pl。请参阅下面的堆栈溢出链接,该链接也解释了 NAL 解码的问题 H264: decode series of nal units with ffmpeg

    【讨论】:

    • 本教程使用 av_read_frame(),但我不是从文件中读取。这种方法是否仍然适用于通过网络的 NAL 单元? SPS 和 PPS 都是我发送到网络的单个数据包,x264 给了我 1300 字节的切片。所以我的 NAL 长度都没有超过这个大小。
    • int av_read_packet (AVFormatContext * s,AVPacket * pkt) 以前用于读取数据包数据,但现在已过时。我们必须使用 av_read_frame()。 PL。参考以下链接ffmpeg.sourcearchive.com/documentation/0.6/…
    【解决方案2】:

    我遇到了类似的问题 - 在数据包上设置 key_frame 解决了任何 NAL 问题。还要确保在编解码器上下文中设置额外的数据。

    【讨论】:

    • 嗨,你能澄清一下这是如何回答这个问题的吗?谢谢。
    • 检查你的数据包是否是 key_frame,如果是,则将标志设置为 packet->flags = != AV_PKT_FLAG_KEY 或者将其清除为 packet->flags &= ~AV_PKT_FLAG_KEY
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    相关资源
    最近更新 更多