在H.264视频编码中,Annex B模式和AVCC模式(也称为ISO/IEC 14496-15模式)是两种不同的码流封装格式,用于组织和存储H.264的原始字节序列载荷(RBSP),主要区别体现在NALU(网络抽象层单元)的分隔方式和参数集(SPS/PPS)的存储方式上。
1. Annex B模式(ITU-T标准定义)
Annex B是H.264标准中由ITU-T定义的封装格式,广泛用于广播电视、实时流媒体等场景(如TS流、RTP传输)。
核心特点:
-
NALU分隔方式:
每个NALU前添加起始码(Start Code) 作为分隔符,起始码为0x000001(3字节)或0x00000001(4字节,通常用于NALU开头)。
例如:一个NALU的封装格式为[0x000001] + [NALU头部] + [NALU载荷]。 -
参数集(SPS/PPS)的存储:
SPS和PPS作为独立的NALU,与其他帧数据(如I帧、P帧的NALU)混合存储在码流中,通常在序列开始或关键帧前重复发送,确保解码器能随时获取参数。 -
典型应用:
常用于MPEG-TS(传输流)、RTP(实时传输协议)、HLS(HTTP直播流)等场景,兼容性强,适合流式传输。
2. AVCC模式(ISO标准定义)
AVCC模式(由ISO/IEC 14496-15定义)是另一种封装格式,主要用于文件存储(如MP4、MOV容器)。
核心特点:
-
NALU分隔方式:
不使用起始码,而是在每个NALU前添加长度字段(Length Field),用固定字节数(通常为4字节)表示该NALU的载荷长度(不包含长度字段本身)。
例如:一个NALU的封装格式为[4字节长度] + [NALU头部] + [NALU载荷]。 -
参数集(SPS/PPS)的存储:
SPS和PPS不与帧数据混合,而是单独存储在容器的moov盒子(元数据区)中,形成“extradata”结构(包含SPS和PPS的集合)。解码器初始化时先读取extradata获取参数集,后续帧数据中不再重复发送。 -
典型应用:
用于MP4、MOV、3GP等文件格式,适合本地存储或基于文件的传输(如HTTP下载),解析效率高(通过长度字段可快速定位NALU边界)。
3. 关键区别对比
| 维度 | Annex B模式 | AVCC模式 |
|---|---|---|
| 分隔符 | 起始码(0x000001或0x00000001) | 长度字段(通常4字节) |
| SPS/PPS存储位置 | 与帧数据混合在码流中 | 单独存储在容器元数据(extradata) |
| 适用场景 | 实时流媒体(TS、RTP、HLS) | 文件存储(MP4、MOV) |
| 解析方式 | 需扫描起始码定位NALU边界 | 通过长度字段直接定位 |
| 冗余性 | SPS/PPS可能重复发送(冗余) | 仅存储一次(高效) |
4. 转换与兼容性
两种模式可以相互转换:
- Annex B → AVCC:从码流中提取SPS/PPS,生成extradata,并用长度字段替换起始码。
- AVCC → Annex B:从extradata中读取SPS/PPS,插入到码流起始位置,并用起始码替换长度字段。
许多工具(如FFmpeg)支持自动转换,例如:
# 将Annex B格式的h264文件转为AVCC格式(MP4容器)
ffmpeg -i input.264 -c:v copy output.mp4
总结
- Annex B:依赖起始码分隔NALU,参数集随码流传输,适合实时流媒体。
- AVCC:依赖长度字段分隔NALU,参数集单独存储,适合文件存储。
399

被折叠的 条评论
为什么被折叠?



