H.264语法分析

来源:互联网 发布:新页进销存软件免费版 编辑:程序博客网 时间:2024/05/19 09:16

http://control.blog.sina.com.cn/admin/article/article_add.php 

在 H.264 定义的码流中,句法元素被组织成有层次的结构,分别描述各个层次的信息,如下图所示

264句法元素的分层结构

在H.264 中,句法元素共被组织成 序列、图像、片、宏块、子宏块五个层次。

在这样的结构中,每一层的头部和它的数据部分形成管理与被管理的强依赖关系,头部的句法元素是该层数据的核心,而一旦头部丢失,数据部分的信息几乎不可能再被正确解码出来,尤其在序列层及图像层。

264句法元素的分层结构

在 H.264 中,分层结构最大的不同是取消了序列层和图像层,并将原本属于序列和图像头部的大部分句法元素游离出来形成序列和图像两级参数集,其余的部分则放入片层。参数集是一个独立的数据单位,不依赖于参数集外的其他句法元素。由于参数集是独立的,可以被多次重发或者采用特殊技术加以保护。

复杂通信中的码流中可能出现的数据单位:

264句法元素的分层结构

IDR: 一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I图像。H.264 引入 IDR 图像是为了解码的重同步,当解码器解码到 IDR 图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。IDR 图像一定是 I 图像,但 I 图像不一定是 IDR 图像

NAL&VCL: H.264 的功能分为两层,即视频编码层(VCL)和网络提取层(NAL,Network Abstraction Layer)。VCL 数据即编码处理的输出,它表示被压缩编码后的视频数据序列。在 VCL 数据传输或存储之前,这些编码的 VCL 数据,先被映射或封装进 NAL 单元中。
每个 NAL 单元包括一个原始字节序列负荷(RBSP)、一组对应于视频编码数据的 NAL 头信息。NAL 单元序列的结构如下:

264句法元素的分层结构

RBSP的类型:

RBSP 类型描 述参数集 PS序列的全局参数,如图像尺寸、视频格式等等增强信息 SEI视频序列解码的增强信息图像定界符 PD视频图像的边界编码片片的头信息和数据数据分割DP 片层的数据,用于错误恢复解码序列结束符表明下一图像为 IDR 图像流结束符表明该流中已没有图像填充数据哑元数据,用于填充字节

PS: 包括序列参数集 SPS 和图像参数集 PPS
SPS 包含的是针对一连续编码视频序列的参数,如标识符 seq_parameter_set_id、帧数及 POC 的约束、参考帧数目、解码图像尺寸和帧场编码模式选择标识等等。
PPS对应的是一个序列中某一幅图像或者某几幅图像,其参数如标识符 pic_parameter_set_id、可选的 seq_parameter_set_id、熵编码模式选择标识、片组数目、初始量化参数和去方块滤波系数调整标识等等。
数据分割:组成片的编码数据存放在 3 个独立的 DP(数据分割,A、B、C)中,各自包含一个编码片的子集。分割A包含片头和片中每个宏块头数据。分割B包含帧内和 SI 片宏块的编码残差数据。分割 C包含帧间宏块的编码残差数据。每个分割可放在独立的 NAL 单元并独立传输。

NAL 层句法 :
nal_unit( NumBytesInNALunit ) {
// forbidden_zero_bit 等于 0
forbidden_zero_bit
// nal_ref_idc 指示当前 NAL 的优先级。取值范围为 0-3, 值越高,表示当前 NAL 越重要,需要优先受到保护。H.264 规定如果当前 NAL 是属于参考帧的片,或是序列参数集,或是图像参数集这些重要的数据单位时,本句法元素必须大于 0。
nal_ref_idc
// nal_unit_type 指明当前 NAL unit 的类型
nal_unit_type
NumBytesInRBSP = 0

for( i = 1; i < NumBytesInNALunit; i++ ) {
if( i + 2 < NumBytesInNALunit && next_bits( 24 ) = = 0x000003 ) {
rbsp_byte[ NumBytesInRBSP++ ]
rbsp_byte[ NumBytesInRBSP++ ]
i += 2
//emulation_prevention_three_byte NAL 内部为防止与起始码竞争而引入的填充字节 ,值为 0x03。
emulation_prevention_three_byte
} else
rbsp_byte[ NumBytesInRBSP++ ]
}
}

0 0