【实验8.1】H.264码流调试


一、 选择一个.mp4或者.264文件

二、实验要求

(1) 分析SPS和PPS里都包含哪些主要的信息,给出参数值。

SPS(Sequence Paramater Set,序列参数集)

在这里插入图片描述

  • profile_idc:(100)
    标识当前H.264码流的profile。
    H.264中定义了三种常用的档次profile:
      基准档次:baseline profile;
      主要档次:main profile;
      扩展档次:extended profile;

  • level_idc:(31)
    标识当前码流的Level。编码的Level定义了某种条件下的最大视频分辨率、最大视频帧率等参数,码流所遵从的level由level_idc指定。

  • seq_parameter_set_id:(0)
    表示当前的序列参数集的id。通过该id值,图像参数集pps可以引用其代表的sps中的参数。

在这里插入图片描述

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

  • bit_depth_luma_minus8: (0)
    用于计算亮度队列样值的比特深度以及亮度量化参数范围的取值偏移
    B i t D e p t h Y = 8 + b i t _ d e p t h _ l u m a _ m i n u s 8 BitDepth_Y = 8 + bit\_depth\_luma\_minus8 BitDepthY=8+bit_depth_luma_minus8 Q p B d O f f s e t Y = 6 ∗ b i t _ d e p t h _ l u m a _ m i n u s 8 QpBdOffset_Y = 6 * bit\_depth\_luma\_minus8 QpBdOffsetY=6bit_depth_luma_minus8

  • bit_depth_chroma_minus8:(0)
    用于计算色度队列样值的比特深度以及色度量化参数范围的取值偏移
    B i t D e p t h C = 8 + b i t _ d e p t h _ c h r o m a _ m i n u s 8 BitDepth_C = 8 + bit\_depth\_chroma\_minus8 BitDepthC=8+bit_depth_chroma_minus8 Q p B d O f f s e t C = 6 ∗ ( b i t _ d e p t h _ c h r o m a _ m i n u s 8 + r e s i d u a l c o l o u r _ t r a n s f o r m _ f l a g ) QpBdOffset_C = 6 * ( bit\_depth\_chroma\_minus8 + residual_colour\_transform\_flag ) QpBdOffsetC=6(bit_depth_chroma_minus8+residualcolour_transform_flag)

  • 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是图像序号的一种表示方法,在帧间编码中常用作一种参考帧标记的手段。

  • **pic_order_cnt_type **: (0)
    表示解码图像顺序picture order count(POC)的方法。POC是一种计量图像序号的方式,与frame_num有着不同的计算方法。该语法元素的取值为0、1或2。

  • log2_max_pic_order_cnt_lsb_minus4:(3)
    用于计算的图像顺序数解码过程中的变量MaxPicOrderCntLsb的值,该值表示POC的上限。

在这里插入图片描述

  • num_ref_frames:(16)
    规定了可能在视频序列中任何图像帧间预测的解码过程中用到的短期参考帧和长期参考帧、互补参考场对以及不成对的参考场的最大数量。

  • gaps_in_frame_num_value_allowed_flag:(0)
    标识位,说明frame_num中是否允许不连续的值。

  • pic_width_in_mbs_minus1:(39)
    P i c W i d t h I n M b s = p i c w i d t h i n m b s m i n u s 1 + 1 PicWidthInMbs=pic_width_in_mbs_minus1+1 PicWidthInMbs=picwidthinmbsminus1+1,是指以宏块为单元的每个解码图像的宽度
    亮度分量的图像宽度变量由下列公式得出: P i c W i d t h I n S a m p l e s L = P i c W i d t h I n M b s ∗ 16 PicWidthInSamples_L = PicWidthInMbs * 16 PicWidthInSamplesL=PicWidthInMbs16
    可以得出视频帧宽度为:frame_width=16×(39+1)=640
    在这里插入图片描述

  • pic_height_in_map_units_minus1:(22)
    P i c H e i g h t I n M a p U n i t s = p i c h e i g h t i n m a p u n i t s m i n u s 1 + 1 PicHeightInMapUnits = pic_height_in_map_units_minus1 + 1 PicHeightInMapUnits=picheightinmapunitsminus1+1,表示以条带组映射为单位的一个解码帧或场的高度
    P i c S i z e I n M a p U n i t s = P i c W i d t h I n M b s ∗ P i c H e i g h t I n M a p U n i t s PicSizeInMapUnits = PicWidthInMbs * PicHeightInMapUnits PicSizeInMapUnits=PicWidthInMbsPicHeightInMapUnits

  • direct_8x8_inference_flag: (0)
    表示B_Skip、B_Direct_16x16 和 B_Direct_8x8 亮度运动矢量的计算过程使用的方法。

  • frame_mbs_only_flag:(1)
    标识位,说明宏块的编码方式。当该标识位为0时,宏块可能为帧编码或场编码;该标识位为1时,所有宏块都采用帧编码。根据该标识位取值不同,PicHeightInMapUnits的含义也不同,为0时表示一场数据按宏块计算的高度,为1时表示一帧数据按宏块计算的高度。
    按照宏块计算的图像实际高度FrameHeightInMbs的计算方法为:
    F r a m e H e i g h t I n M b s = ( 2 − f r a m e _ m b s _ o n l y _ f l a g ) × P i c H e i g h t I n M a p U n i t s ∗ 16 FrameHeightInMbs = ( 2 − frame\_mbs\_only\_flag ) ×PicHeightInMapUnits*16 FrameHeightInMbs=(2frame_mbs_only_flag)×PicHeightInMapUnits16

图像实际高度:frame_height=(2-1)2316=368
在这里插入图片描述

  • vui_parameters_present_flag:(1)
    等 于 1 表示存在vui_parameters( ) 语法结构 。

  • num_units_in_tick (1)
    是运行在 time_scale Hz 的频率(相应地时钟跳变计数器加一,称作一个时钟跳变)下的时钟的时间单元的数量。

  • time_scale :(96)
    是在一秒钟内的时间单元的数量。

帧率 =time_scale/num_units_in_tick=96

PPS(Picture Parameter Set,图像参数集)

在这里插入图片描述

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

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

  • entropy_coding_mode_flag:(0)
    熵编码模式标识,该标识位表示码流中熵编码/解码选择的算法。对于部分语法元素,在不同的编码配置下,选择的熵编码方式不同。例如在一个宏块语法元素中,宏块类型mb_type的语法元素描述符为“ue(v) | ae(v)”,在baseline profile等设置下采用指数哥伦布编码,在main profile等设置下采用CABAC编码。标识位entropy_coding_mode_flag的作用就是控制这种算法选择。当该值为0时,选择左边的算法,通常为指数哥伦布编码或者CAVLC;当该值为1时,选择右边的算法,通常为CABAC。

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

  • num_slice_groups_minus1:(0)
    表示某一帧中slice group的个数。当该值为0时,一帧中所有的slice都属于一个slice group。

  • num_ref_idx_l0_default_active_minus1、num_ref_idx_l1_default_active_minus1:(15、0)
    表示当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的默认值。

  • weighted_pred_flag:(0)
    标识位,表示在P/SP slice中是否开启加权预测。

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

  • pic_init_qp_minus26和pic_init_qs_minus26:(0、0)
    表示初始的量化参数。实际的量化参数由该参数、slice header中的slice_qp_delta/slice_qs_delta计算得到。

  • chroma_qp_index_offset:(-2)
    用于计算色度分量的量化参数,取值范围为[-12,12]。

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

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

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

(2) 以一个GOP为例,分析如下信息:

  • 每个图像帧的类型及所用的编码比特数、QP值;并以图像帧号为横坐标、每帧所用比特数为纵坐标画出曲线图;以图像帧号为横坐标、每帧所用QP为纵坐标画出曲线图。

利用Elecard StreamEye Tools软件中的Tools工具可以直接输出一些统计信息,其中包含type、size、offset、num
在这里插入图片描述
在这里插入图片描述

  • 以第一个I帧作为分析对象,基于该帧图像的空间特性,分析每个宏块所采用的编码类型及其比例。
    在这里插入图片描述
    I帧中,一共有920个宏块,进行帧内编码。
    在这里插入图片描述
    采用了不同的15种的编码类型,具体数据如下
    在这里插入图片描述

  • 以第一个P帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。
    在这里插入图片描述

黄色是P_skip块。它代表了这一帧的数据内容与前一帧相同,跳过不编码。
红色和橙色是采用不同格式的帧内编码宏块;
蓝色是采用前向预测编码的宏块。

具体一共采用了不同的12种的编码类型,其中使用前向预测的宏块数量较多,具体数据如下:
在这里插入图片描述
在这里插入图片描述

  • 以某一个B帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。

在这里插入图片描述
黄色是B_skip块。它代表了这一帧的数据内容与前一帧相同,跳过不编码。
蓝色是采用帧间预测编码的宏块。

采用了不同的7种的编码类型,使用B_Skip的宏块数量较多,具体数据如下

在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值