博客
关于我
H.264(层次结构,NAL,SPS) 详细重要参数
阅读量:798 次
发布时间:2023-04-05

本文共 2047 字,大约阅读时间需要 6 分钟。

H.264编码器输出的Bit流结构分析

H.264编码器输出的Bit流中,每个Bit都隶属于某个句法元素。句法元素被组织成有层次的结构,分别描述各个层次的信息。

1.1 元素分层结构

H.264分层结构由五层组成,分别是序列参数集、图像参数集、片(Slice)、和宏块和子块。参数集是一个独立的数据单位,不依赖于参数集外的其它句法元素。图2描述了参数集与参数集外的句法元素之间的关系。

图2

图2描述了参数集与参数集外的句法元素之间的关系。

一个参数集不对应某一个特定的图像或序列,同一序列参数集可以被多个图像参数集引用,同理,同一个图像参数集也可以被多个图像引用。只在编码器认为需要更新参数集的内容时,才会发出新的参数集。

IDR图像

在H.264中,图像以序列为单位进行组织。一个序列的第一个图像叫做IDR图像,IDR图像都是I帧。H.264引入IDR图像为了解码的同步。当解码器解码到IDR图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。这样,如果前一个序列出现重大错误,在这里可以获得重新同步的机会。IDR图像之后的图像永远不会使用IDR之前的图像的数据来解码。

IDR是I帧,但I帧不一定是IDR。I帧之后的图像有可能会使用I帧之前的图像做运动参考。

1.2 描述子

描述子描述从Bit流中取出句法元素的方法。

编号 语法 说明
1 ae (e) CABAC
2 b (8) 读进连续的8个Bit
3 ce (v) CAVLC
4 f (n) 读进连续的n个Bit
5 i (n)/i (v) 读进连续的若干Bit,并把它们解释为有符号整数
6 me (v) 映射指数Golomb熵编码
7 se (v) 有符号指数Golomb熵编码
8 te (v) 截断指数Golomb熵编码
9 u (n)/u (v) 读进连续的若干Bit,并把它们解释为无符号整数
10 ue (v) 无符号指数Golomb熵编码

1.3 句法的表示方法

句法元素的名称由小写字母和一系列下划线组成,变量名称是大小写字母组成,中间没有下划线。

2.1 NAL语法

编码器将每个NAL各自独立、完整地放入一个分组,因为分组都有头部,解码器可以方便地检测出NAL的分界,并依次取出NAL进行解码。

每个NAL前有一个起始码 0x000001,解码器检测每个起始码,作为一个NAL的起始标识,当检测到下一个起始码时,当前NAL结束。同时H.264规定,当检测到0x000000时,也可以表征当前NAL的结束。对于NAL中数据出现0x000001或0x000000时,H.264引入了防止竞争机制。如果编码器检测到NAL数据存在0x000001或0x000000时,编码器会在最后个字节前插入一个新的字节0x03,这样:

0x000000->0x00000300

0x000001->0x00000301

0x000002->0x00000302

0x000003->0x00000303

解码器检测到0x000003时,把03抛弃,恢复原始数据。

解码器在解码时,首先逐个字节读取NAL的数据,统计NAL的长度,然后再开始解码。

2.2 序列参数集(SPS)

序列参数集(SPS)用于描述编码器的序列参数。以下是序列参数集的主要内容:

句法 C 说明
seq_parameter_set_rbsp() 0
profile_idc 0
constraint_set0_flag 0
constraint_set1_flag 0
reserved_zero_5bits 0
level_idc 0
seq_parameter_set_id 0
log2_max_frame_num_minus4 0
pic_order_cnt_type 0
delta_pic_order_always_zero_flag 0
offset_for_ref_frame[i] 0
num_ref_frames 0
gaps_in_frame_num_value_allowed_flag 0
pic_width_inmbs_minus1 0
pic_height_in_map_units_minus1 0
frame_mbs_only_flag 0
mb_adaptiv_frame_field_flag 0
direct_8x8_inference_flag 0
frame_cropping_flag 0
frame_crop_left_offset 0
frame_crop_right_offset 0
frame_crop_top_offset 0
frame_crop_bottom_offset 0
vui_parameters_present_flag 0
rbsp_trailing_bits() 0

这些参数共同描述了序列的编码参数,确保解码器能够正确解码视频数据。

转载地址:http://yvrfk.baihongyu.com/

你可能感兴趣的文章