h264协议帧头数据解析

原文出自http://blog.csdn.net/season_hangzhou/article/details/51123979

可以使用Binary Viewer工具查看hexadecimal(十六进制)数据
一、序言

h264常见的帧头数据为:

00 00 00 01 67    (SPS):SPS即Sequence Paramater Set,又称作序列参数集。SPS中保存了一组编码视频序列(Coded video sequence)的全局参数。所谓的编码视频序列即原始视频的一帧一帧的像素数据经过编码之后的结构组成的序列。而每一帧的编码后数据所依赖的参数保存于图像参数集中。一般情况SPS和PPS的NAL Unit通常位于整个码流的起始位置。但在某些特殊情况下,在码流中间也可能出现这两种结构,主要原因可能为:

1:解码器需要在码流中间开始解码;

2:编码器在编码的过程中改变了码流的参数(如图像分辨率等);

00 00 00 01 68    (PPS):除了序列参数集SPS之外,H.264中另一重要的参数集合为图像参数集Picture Paramater Set(PPS)。通常情况下,PPS类似于SPS,在H.264的裸码流中单独保存在一个NAL Unit中,只是PPS NAL Unit的nal_unit_type值为8;而在封装格式中,PPS通常与SPS一起,保存在视频文件的文件头中。

00 00 00 01 65    ( IDR 帧) : I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)

00 00 00 01 61    (P帧) :P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)

二、start code

start code有两种,四个字节的“00 00 00 01”和三个字节的“00 00 01”都是。

三:帧格式

H264帧由NALU头和NALU主体组成。

NALU头由一个字节组成,它的语法如下:

+---------------+

|0|1|2|3|4|5|6|7|

+-+-+-+-+-+-+-+-+

|F|NRI|  Type   |

+---------------+

F: 1个比特.

forbidden_zero_bit. 在 H.264 规范中规定了这一位必须为 0.

NRI: 2个比特.

nal_ref_idc. 取00~11,似乎指示这个NALU的重要性,如00的NALU解码器可以丢弃它而不影响图像的回放,0~3,取值越大,表示当前NAL越重要,需要优先受到保护。如果当前NAL是属于参考帧的片,或是序列参数集,或是图像参数集这些重要的单位时,本句法元素必需大于0。

Type: 5个比特.

nal_unit_type. 这个NALU单元的类型,1~12由H.264使用,24~31由H.264以外的应用使用,简述如下:

0     没有定义

1-23  NAL单元  单个 NAL 单元包

1     不分区,非IDR图像的片

2     片分区A

3     片分区B

4     片分区C

5     IDR图像中的片

6     补充增强信息单元(SEI)

7     SPS

8     PPS

9     序列结束

10    序列结束

11    码流借宿

12    填充

13-23 保留

24    STAP-A   单一时间的组合包

25    STAP-B   单一时间的组合包

26    MTAP16   多个时间的组合包

27    MTAP24   多个时间的组合包

28    FU-A     分片的单元

29    FU-B     分片的单元

30-31 没有定义

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。