Annex B 格式是 H.264 (也称为 AVC) 视频编码标准中的一种数据表示格式,用于将视频数据从编码器传输到解码器。它主要用于流媒体传输和文件存储。
文章目录
- Annex B 格式的定义
- Annex B 格式的主要特点
- Annex B 与其他格式的对比
- Annex B 格式示例
- 将 H.264 数据从 MP4 格式转换为 Annex B 格式
- 附加信息
- H.264 标准
- MP4 容器格式
Annex B 格式的定义
在 H.264 标准中,Annex B 是一种数据格式规范,定义了如何将 H.264 码流以适合网络传输和文件存储的方式进行编码。Annex B 格式以一系列 NAL (Network Abstraction Layer) 单元组成,每个单元以特定的起始码分隔。
Annex B 格式的主要特点
-
起始码:
- 在 Annex B 格式中,每个 NAL 单元以一个或多个起始码 (
start code
) 开始。起始码是一个 3 字节或 4 字节的字节序列,常用的有:- 3 字节起始码:
0x000001
- 4 字节起始码:
0x00000001
- 3 字节起始码:
- 这些起始码用于标识 NAL 单元的开始位置。
- 在 Annex B 格式中,每个 NAL 单元以一个或多个起始码 (
-
NAL 单元:
- NAL 单元是 H.264 视频数据的基本传输单元,每个 NAL 单元包含一个完整的编码视频数据块。
- NAL 单元可以有不同的类型,如 IDR 帧、P 帧、B 帧、SPS、PPS 等。
-
NAL 单元类型:
- 每个 NAL 单元的第一个字节包含了 NAL 单元的类型信息。常见的类型包括:
- SPS (Sequence Parameter Set):序列参数集,包含解码视频流所需的全局配置信息。
- PPS (Picture Parameter Set):图像参数集,包含解码视频流的图像参数信息。
- IDR (Instantaneous Decoder Refresh):关键帧,用于刷新解码器的状态。
- Non-IDR Frames:包括 I 帧、P 帧、B 帧等其他类型的帧。
- 每个 NAL 单元的第一个字节包含了 NAL 单元的类型信息。常见的类型包括:
Annex B 与其他格式的对比
特性 | Annex B 格式 | AVC/MPEG-4 Part 10 | MP4 格式 |
---|---|---|---|
起始码 | 使用 0x000001 或 0x00000001 | 不使用起始码 | 不使用起始码 |
数据组织 | NAL 单元以起始码分隔 | NAL 单元前有长度字段 | NAL 单元前有长度字段 |
用途 | 流媒体传输、文件存储 | 编码标准 | 容器格式 |
Annex B 格式示例
假设有以下 H.264 NAL 单元数据:
0x000001 0x65 0x88 0x84 0x21 0x00 0x00 0x00 0x01 0x41 0xC8 0x00 0x00 0x00 0x01 0x68 0xEB 0x21 0x00 0x00 0x00 0x01 0x65 0x88 0x84 0x21
这里的 0x000001
和 0x00000001
是起始码,后面的字节是 NAL 单元的内容。
将 H.264 数据从 MP4 格式转换为 Annex B 格式
MP4 格式中,NAL 单元前有一个 4 字节的长度字段,而 Annex B 格式中则使用起始码来分隔 NAL 单元。
附加信息
H.264 标准
H.264 标准是由 ITU-T H.264 和 ISO/IEC 14496-10(MPEG-4 Part 10)定义的,用于视频编码的标准。它提供了高效的视频压缩技术,广泛应用于视频流媒体、高清视频存储等领域。
MP4 容器格式
MP4 是一种常用的多媒体文件容器格式,可以包含视频、音频、字幕等多种媒体数据。MP4 文件中的视频数据通常以 AVCC 格式存储,其中 NAL 单元前面会有一个 4 字节的长度字段。