H.264码流分析

目录

SPS

PPS

I帧

P帧

B帧

GOP


SPS

profile_idc:(100)

level_idc:(31)

seq_parameter_set_id:(0)

profile_idc,level_idc: 指定本码流序列所使用的profile ,level

chroma_format_idc: (1)
与亮度取样对应的色度取样。值为1时代表4:2:0 的色度格式

bit_depth_luma_minus8: (0)
用于计算亮度队列样值的比特深度以及亮度量化参数范围的取值偏移

bit_depth_chroma_minus8:(0)
用于计算色度队列样值的比特深度以及色度量化参数范围的取值偏移

qpprime_y_zero_transform_bypass_flag :(0)
等于 0 表示变换系数解码过程和图像构建过程在去块效应滤波过程之前执行而不使用变换旁路操作。

seq_scaling_matrix_present_flag :(0)
等 于 1 表示存在 i=0…7 的 标 志 seq_scaling_list_present_flag[ i ] 。
等于 0 则表示不存在这些标志并且由 Flat_4x4_16 表示的序列级别的缩放比例列表应被推断出来(对应 i=0…5),由 Flat_8x8_16 表示的序列级别的缩放比例列表应被推断出来(对应 i=6…7)。

log2_max_frame_num_minus4:(2)
用于计算MaxFrameNum的值。 MaxFrameNum是frame_num的上限值,frame_num是图像序号的一种表示方法,在帧间编码中常用作一种参考帧标记的手段。

onstraint_set0_flag, constraint_set1_flag,constraint_set2_flag:定义比特流必须遵从的相关规定。constraint_set0_flag对应的是Baseline Profile 的规范。constraint_set1_flag对应的是Main Profile的规范,constraint_set2_flag对应的是Extended profile的规范。当他们中不止一个位被设置为1的时候应该遵从所有这些规范。
seq_parameter_set_id: 用于在Sps与pps之间建立联系。这个值的范围是 0-31。在pps中有一个相同的字段:seq_parameter_set_id。

log2_max_frame_num_minus4: 用于计算MaxFrameNum的值:
MaxFrameNum=2(log2_max_frame_num_minus4 + 4)

其中log2_max_frame_num_minus4 的值应该在0-12之间。所以MaxFrameNum的值应该在 24 到 216 (16 - 256)之间。
pic_order_cnt_type : 指定解码图像顺序的计数方法 pic_order_cnt_type∈[0−2] 。
余下的一些参数都是用于解码过程中计算图像顺序所用的。
num_ref_frames: 指定解码过程中帧间预测需要用到的各种参考帧的最大数量。
pic_width_in_mbs_minus1: 指定以宏块为单位的图像宽度,picWidthInMbs = pic_width_in_mbs_minus1 + 1。
所以可以计算图像的像素单位宽度 width = picWidthInMbs * 16。
pic_height_in_map_units_minus1:指定帧或场的高度。picHeightInMapUints = pic_heigth_in_map_units_minus1 + 1。进而推导 height = picHeightInMapUints * 16。
frame_mbs_only_flag: 等于1表示视频序列的每个图像都是仅包含帧宏块的编码帧。
mb_adaptive_frame_field_flag: 表示帧或场宏块之间有没有交换,默认值应为0
direct_8x8_inference_flag: 指定亮度运动矢量的计算过程使用的方法。如果 frame_mbs_only_flag 等于0。那么这个位应置 1。
frame_cropping_flag: 指定是否存在输出图像剪切参数。1表示面的参数就是剪切参数。0表示没有。

大体看过这些参数之后我们之后。其实这些参数都是控制解码过程的一些细节的选项参数或者一些计算的输入值。如果我们不是一个解码器开发者,那么这些参数中的很多对于我们来说都很是陌生,或者说也获取不到太多的信息。但是我们需要关注的是profile, level,还有就是计算图像是大小。

PPS

其中的每一个语法元素及其含义如下:

(1) pic_parameter_set_id

表示当前PPS的id。某个PPS在码流中会被相应的slice引用,slice引用PPS的方式就是在Slice header中保存PPS的id值。该值的取值范围为[0,255]。

(2) seq_parameter_set_id

表示当前PPS所引用的激活的SPS的id。通过这种方式,PPS中也可以取到对应SPS中的参数。该值的取值范围为[0,31]。

(3) entropy_coding_mode_flag

熵编码模式标识,该标识位表示码流中熵编码/解码选择的算法。对于部分语法元素,在不同的编码配置下,选择的熵编码方式不同。例如在一个宏块语法元素中,宏块类型mb_type的语法元素描述符为“ue(v)
| ae(v)”,在baseline profile等设置下采用指数哥伦布编码,在main profile等设置下采用CABAC编码。

标识位entropy_coding_mode_flag的作用就是控制这种算法选择。当该值为0时,选择左边的算法,通常为指数哥伦布编码或者CAVLC;当该值为1时,选择右边的算法,通常为CABAC。

(4) bottom_field_pic_order_in_frame_present_flag

标识位,用于表示另外条带头中的两个语法元素delta_pic_order_cnt_bottom和delta_pic_order_cn是否存在的标识。这两个语法元素表示了某一帧的底场的POC的计算方法。

(5) num_slice_groups_minus1

表示某一帧中slice group的个数。当该值为0时,一帧中所有的slice都属于一个slice group。slice group是一帧中宏块的组合方式,定义在协议文档的3.141部分。

(6) num_ref_idx_l0_default_active_minus1、num_ref_idx_l0_default_active_minus1

表示当Slice Header中的num_ref_idx_active_override_flag标识位为0时,P/SP/B
slice的语法元素num_ref_idx_l0_active_minus1和num_ref_idx_l1_active_minus1的默认值。

(7) weighted_pred_flag

标识位,表示在P/SP slice中是否开启加权预测。

(8) weighted_bipred_idc

表示在B Slice中加权预测的方法,取值范围为[0,2]。0表示默认加权预测,1表示显式加权预测,2表示隐式加权预测。

(9) pic_init_qp_minus26和pic_init_qs_minus26

表示初始的量化参数。实际的量化参数由该参数、slice header中的slice_qp_delta/slice_qs_delta计算得到。

(10) chroma_qp_index_offset

用于计算色度分量的量化参数,取值范围为[-12,12]。

(11) deblocking_filter_control_present_flag

标识位,用于表示Slice header中是否存在用于去块滤波器控制的信息。当该标志位为1时,slice header中包含去块滤波相应的信息;当该标识位为0时,slice header中没有相应的信息。

(12) constrained_intra_pred_flag

若该标识为1,表示I宏块在进行帧内预测时只能使用来自I和SI类型宏块的信息;若该标识位0,表示I宏块可以使用来自Inter类型宏块的信息。

(13) redundant_pic_cnt_present_flag

标识位,用于表示Slice header中是否存在redundant_pic_cnt语法元素。当该标志位为1时,slice header中包含redundant_pic_cnt;当该标识位为0时,slice header中没有相应的信息。

 

I帧

一第一个I帧为例

 

I帧只有帧内编码

 

P帧

 

P帧有蓝色的帧将编码和黄色的块表示该部分内容与前一帧相同,跳过不编码。

 

B帧

 

 B帧有蓝色的帧将编码和黄色的块表示该部分内容与前一帧相同,跳过不编码。

GOP

下图为比特数曲线

橙色:Average

红色:Instance

lvse:Current

利用ESEyE软件中的Tools工具可以直接输出一些统计信息

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值