博客
关于我
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/

你可能感兴趣的文章
MySQL事务原理以及MVCC详解
查看>>
MySQL事务及其特性与锁机制
查看>>
mysql事务理解
查看>>
MySQL事务详解结合MVCC机制的理解
查看>>
MySQL事务隔离级别:读未提交、读已提交、可重复读和串行
查看>>
MySQL事务隔离级别:读未提交、读已提交、可重复读和串行
查看>>
webpack css文件处理
查看>>
mysql二进制包安装和遇到的问题
查看>>
MySql二进制日志的应用及恢復
查看>>
mysql互换表中两列数据方法
查看>>
mysql五补充部分:SQL逻辑查询语句执行顺序
查看>>
mysql交互式连接&非交互式连接
查看>>
MySQL什么情况下会导致索引失效
查看>>
Mysql什么时候建索引
查看>>
MySql从入门到精通
查看>>
MYSQL从入门到精通(一)
查看>>
MYSQL从入门到精通(二)
查看>>
mysql以下日期函数正确的_mysql 日期函数
查看>>
mysql以服务方式运行
查看>>
mysql优化--索引原理
查看>>