我对 H264 视频的起始代码 (0x00 0x00 0x00 0x01) 的使用有一般性问题。我不清楚此起始代码的用法,因为 RTP RFC 中没有与 H264 视频相关的引用。但是我确实在网上看到了很多引用资料,尤其是在 stackoverflow 中。

我很困惑,因为我看到一个客户端没有这个启动代码,而另一个客户端正在使用这个启动代码。所以,我正在寻找一个具体的答案,在哪里应该使用这个起始代码,哪里不应该使用。

穆拉利

最佳答案

有两种 H.264 流格式,它们有时被称为

  • 附件 B(在原始 H.264 流中找到)
  • AVCC(可在 MP4 等容器中找到)

  • H.264 流由 NAL(封装的单位)组成

    (1) Annex B :在每个 NAL 单元的字节 [x00][x00][x00][x01] 之前有 4 字节的起始代码。
    [start code]--[NAL]--[start code]--[NAL] etc
    

    (2) AVCC : 是大小前缀(意思是每个 NALU 以这个 NALU 的字节大小开始)
    [SIZE (4 bytes)]--[NAL]--[SIZE (4 bytes)]--[NAL] etc
    

    一些注意事项:
  • AVCC (MP4) 流格式不包含任何 SPS、PPS 或 AU 定界符类型的 NAL。由于该特定信息现在位于 MP4 元数据中。
  • 您可以在 MPEG-2 TS、RTP 和一些编码器默认输出中找到的 Annex B 格式。
  • 您可以在 MP4、FLV、MKV、AVI 和此类 A/V 容器格式中找到的 AVCC 格式。

  • 两种格式都可以相互转换。

    Annex B to MP4 :去除起始码,插入 NAL 长度,过滤掉 SPS、PPS 和 AU 分隔符。

    MP4 到附件 B :删除长度,插入起始码,为每个 I 帧插入 SPS,为每个帧插入 PPS,为每个 GOP 插入 AU 定界符。

    关于h.264 - H264视频起始码的使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28421375/

    10-10 08:59