H264---封装格式:字节流格式(AnnexB)、AVCC 、RTP打包格式

本文详细介绍了H264的三种封装格式:AnnexB用于实时播放,AVCC适用于存储,而RTP封装则用于网络传输。AnnexB包含起始码,AVCC省略起始码但需要额外的NALU长度信息,RTP封装在IP网络中可能会涉及拆包或不拆包的策略。解码时需要处理RBSP到EBSP的转换,并理解RTP头和FU_A/FU_B分包格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

H.264的两种打包/封装方法:字节流AnnexB格式 AVCC格式
放用于网络发送时,要封装成RTP格式

1、AnnexB格式----用于实时播放

处于H264文档附录B(Annex-B Byte stream format)中

开始前缀(00000001或000001)+NALU数据  绝大部分编码器的默认输出格式
  一共有两种起始码start_code
   ①3字节0x000001  单帧多slice(即单帧多个NALU)之间间隔
   ②4字节0x00000001 帧之间,或者SPS等之前
4字节类型的开始码在在连续的数据传输中非常有用,因为用字节来对齐、分割流数据,比如:用连续的31个bit0后接一个bit1来分割流数据,是很容易的。

AnnexB格式每个NALU都包含起始码,且通常会周期性的在关键帧之前重复SPS和PPS
  👉👉👉所以解码器可以从视频流随机点开始进行解码,实时的流格式

2、AVCC—用于存储

解码器配置参数在一开始就配置好了,系统可以很容易的识别NALU的边界,不需要额外的起始码,减少了资源的浪费,同时可以在播放时调到视频的中间位置。这种格式通常被用于可以被随机访问的多媒体数据,如存储在硬盘的文件。MP4、MKV通常用AVCC格式来存储。

AVCC格式不使用起始码作为NALU的分界,这种格式在每个NALU前都加上一个大端格式的前缀(1、2、4字节,代表NALU长度)

所以在解析AVCC格式的时候需要将指定的前缀字节数的值保存在一个头部对象中,这个都通常称为extradata或者sequence header。同时,SPS和PPS数据也需要保存在extradata或者叫’sequence header’中。
H.264 extradata / sequence header’语法如下:

bits      
8   version ( always 0x01 )  
8   avc profile ( sps[0][1] )  
8   avc compatibility ( sps[0][2] )  
8   avc level ( sps[0][3] )  
6   reserved ( all bits on )  
2   NALULengthSizeMinusOne  变量告诉我们用几个字节来存储NALU的长度(前缀:124// 【第5字节的后2位】这个值是(前缀长度-1),如果值=3,那前缀就是4,因为4-1=3  
  值=0 对应前缀1字节 对应每个NALU包最大长度255字节
  值=
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值