【问题标题】:usage of start code for H264 videoH264视频起始码的使用
【发布时间】:2015-02-09 23:20:42
【问题描述】:

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

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

KMurali

【问题讨论】:

  • 你会在这里找到答案stackoverflow.com/questions/24884827/…
  • 我正在尝试通过 RTP(因此是 UDP)流式传输 H.264,那么开始代码是否仍然适用?从这个RFC 开始,它没有提到起始码,我认为起始码不会出现,因为 UDP 是打包的(不是字节流)。我假设这个错了吗?我在实现这一点时遇到了问题,所以我想也许我可能错了。

标签: h.264


【解决方案1】:

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

  1. 附件 B(在原始 H.264 流中找到)
  2. AVCC(在 MP4 等容器中发现)

H.264 流由 NAL(一种封装单元)组成

(1) 附件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 格式。

两种格式可以相互转换。

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

MP4 to Annex B:删除长度,插入起始码,为每个 I 帧插入 SPS,为每个帧插入 PPS,为每个 GOP 插入 AU 分隔符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 2017-02-08
    相关资源
    最近更新 更多