H.264 码流结构解析 (整理)

1. H.264简介

MPEGMoving Picture Experts Group)和VCEGVideo Coding Experts Group)已经联合开发了一个比早期研发的MPEGH.263 性能更好的视频压缩编码标准,这就是被命名为AVCAdvanced Video Coding),也被称为ITU-T H.264 建议和MPEG-4 的第10部分的标准,简称为H.264/AVC H.264。这个国际标准已经与20033 月正式被ITU-T所通过并在国际上正式颁布。为适应高清视频压缩的需求,2004 年又增加了FRExt 部分;为适应不同码率及质量的需求,2006年又增加了可伸缩编码 SVC。 

2. H.264编码格式

H.263 定义的码流结构是分级结构,共四层。自上而下分别为:图像层(picturelayer)、块组层(GOB layer)、宏块层(macroblock layer)和块层(block layer)。而与H.263相比,H.264 的码流结构和H.263的有很大的区别,它采用的不再是严格的分级结构。

H.264 支持4:2:0的连续或隔行视频的编码和解码。H.264 压缩与H.263MPEG-4相比,视频压缩比提高了一倍。

H.264 的功能分为两层:视频编码层(VCL, Video CodingLayer)和网络提取层(NAL, Network Abstraction Layer)。VCL数据即编码处理的输出,它表示被压缩编码后的视频数据序列。在VCL数据传输或存储之前,这些编码的VCL 数据,先被映射或封装进NAL单元中。每个NAL 单元包括一个原始字节序列负荷(RBSP, Raw Byte Sequence Payload)、一组对应于视频编码的NAL头信息。RBSP的基本结构是:在原始编码数据的后面填加了结尾比特。一个bit“1”若干比特“0”,以便字节对齐。

                           

3. H.264传输

H.264 的编码视频序列包括一系列的NAL单元,每个NAL 单元包含一个RBSP,见表1。编码片(包括数据分割片IDR片)和序列RBSP 结束符被定义为VCL NAL单元,其余为NAL 单元。典型的RBSP单元序列如图2 所示。每个单元都按独立的NAL单元传送。单元的信息头(一个字节)定义了RBSP 单元的类型,NAL 单元的其余部分为RBSP数据。

  

 

RBSP类型

描述

参数集PS

序列的全局,如图像尺寸、视频格式等

增强信息SEI

视频序列解码的增强信息

图像界定PD

视频图像的边界

编码片

片的头信息和数据

数据分割

DP片层的数据,用于错误恢复解码

序列结束符

表明下一图像为IDR图像

流结束符

表明该流中已没有图像

填充数据

哑元数据,用于填充字节

 

4.H264码流结构层次

H.264 码流结构解析 (整理)_第1张图片

起始码:如果NALU对应的Slice为一帧的开始,则用4字节表示,即0x00000001否则用3字节表示,0x000001

NAL Headerforbidden_bitnal_reference_bit(优先级),nal_unit_type(类型)。

脱壳操作:为了使NALU主体不包括起始码,在编码时每遇到两个字节(连续)的0就插入一字节0x03,以和起始码相区别。解码时,则将相应的0x03删除掉。

 

Nal_unit_type

NAL 类型

C

0

未使用

 

1

不分区、非IDR图像的片

234

2

片分区A

2

3

片分区B

3

4

片分区C

4

5

IDR 图像中的片

23

6

补充增强信息单元(SEI)

5

7

序列参数集

0

8

图像参数集

1

9

分界符

6

10

序列结束

7

11

码流结束

8

12

填充

9

13~23

保留

 

24~31

未使用

 

sub_mb_pred mb_pred:运动补偿或者是帧内预测。

 

5. H.264解码

NAL 头信息的nal_referrence_idcNRI)用于在重建过程中标记一个NAL单元的重要性,值为0 表示这个NAL单元没有用预测,因此可以被解码器抛弃而不会有错误扩散;值高于0 表示NAL 单元要用于无漂移重构,且值越高,对此NAL单元丢失的影响越大。

NAL 头信息的隐藏比特位,在H.264编码器中默认为0,当网络识别到单元中存在比特错误时,可将其置为1。隐藏比特位主要用于适应不同种类的网络环境(比如有线无线相结合的环境)。

 H.264 码流结构解析 (整理)_第2张图片

NAL 单元解码的流程为:首先从NAL单元中提取出RBSP 语法结构,然后按照如图4所示的流程处理RBSP 语法结构。输入的是NAL单元,输出结果是经过解码的当前图像的样值点。

NAL 单元中分别包含了序列参数集和图像参数集。图像参数集和序列参数集在其他NAL单元传输过程中作为参考使用,在这些数据NAL 单元的片头中,通过语法元素pic_parameter_set_id设置它们所使用的图像参数集编号;而相应的每个图像参数集中,通过语法元素seq_paramter_set_id设置他们使用的序列参数集编号。

 6.各分层结构的语法元素参考G50 标准。

你可能感兴趣的:(H264解码模型,H264格式,NAL单元结构,H264码流结构,RBSP序列)