【问题标题】:How to find any of I/B/P frames in h264?如何在 h264 中找到任何 I/B/P 帧?
【发布时间】:2014-06-26 11:05:46
【问题描述】:

我需要在 h264 字节流中找到任何 (I/B/P) 新帧。

听说过NAL header,但是有这么奇怪的流:

00 00 00 01 09 F0 00 00 00 01 
67 64 00 1E AC B2 01 40 5F F2 
E0 22 00 00 07 D2 00 01 D4 C0 
1E 2C 5C 90 00 00 00 01 68 EB 
C3 CB 22 C0 00 00 01 06 05 FF 
  1. 00 00 00 01 之间的 0x09 0xF0 是什么意思?
  2. 如何检测新框架(I/B/P 中的任何一个)?

【问题讨论】:

    标签: video-streaming h.264 mpeg-4 bytestream


    【解决方案1】:

    从哪里开始。

    首先0x09 0xF0 是一个访问单元分隔符。这是你的框架的开始。但请注意,这是一个可选的 NALU,可能并不存在于所有帧中。其次,一个帧可以由多个切片组成,每个切片可以是I/P/B类型。因此,可以找到包含所有三种切片类型的帧。我可以更详细地了解如何确定切片类型,以及如果不存在 AUD,如何找到帧的开始。但是这两个主题都非常大,应该(并且可能确实)有自己的 Stack Overflow 问题。

    【讨论】:

    • 看来你真的明白h264编码是如何工作的了,也许你对我的问题有了答案:我要写mpeg-ts muxer,并且需要设置PTS(没有DTS,-stream没有' t 有 b 帧)。我可以简单地生成它还是无论如何我都需要解析 h264?顺便说一句,我的输出流中不需要音频 - 如果它很重要的话。
    • AVC 比特流不包含任何时间戳,因此您可以自己生成。但是,您应该检查 SPS 的 VUI 参数,如果设置了 fixed_frame_rate_flag,您的 pts 应该增加 90000 * ( ( ( 2 * num_units_in_tick ) / time_scale)。除非丢帧。
    猜你喜欢
    • 1970-01-01
    • 2018-10-25
    • 2019-06-20
    • 2018-08-30
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 2017-09-10
    • 2017-02-19
    相关资源
    最近更新 更多