比较H.264 的两种封装:AnnexB 和 AVCC

在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,参数集单独存储,适合文件存储。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值