资讯详情

[实验七] H.264调试

一、H.264概述

H.264,同时也是MPEG-第十部分,是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合视频组(JVT,Joint Video Team)高压缩数字视频编解码器标准。这个标准通常被称为H.264/AVC(或者AVC/H.264或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC)并明确说明其两方面的开发者。 H264标准各主要部分Access Unit delimiter(访问单元分割符),SEI(附加增强信息),primary coded picture(基本图像编码),Redundant Coded Picture(冗余图像编码)。还有Instantaneous Decoding Refresh(IDR,即时解码刷新),Hypothetical Reference Decoder(HRD,假设参考解码),Hypothetical Stream Scheduler(HSS,假设码流调度器)。

H264标准的主要特点如下:

  1. 编码效率更高:相同H.与263等标准的特效相比,平均可以节省50%以上的码率。
  2. 高质量的视频画面:H.264可以在低码率下提供高质量的视频图像,在低带宽上提供高质量的图像传输H.264应用亮点。
  3. 提高网络适应性:H.264可以在实时通信应用(如视频会议)的低延迟模式下工作,也可以在无延迟的视频存储或视频流服务器中工作。
  4. 混合编码结构:相同H.263相同,H.264也使用采用DCT变换编码加DPCM差分编码的混合编码结构还增加了基于内容的多模式运动估计、帧预测、多帧预测、变长编码和4x新的编码方法,如二维整数变换,提高了编码效率。
  5. H.264编码选项较少:在H.在263中编码时,往往需要设置相当多的选项,这增加了编码的难度H.264实现了简洁的回归基础,降低了编码的复杂性。
  6. H.264可应用于不同场合:H.264可以根据不同的环境使用不同的传输和播放速度,并提供丰富的错误处理工具,可以很好地控制或消除丢包和误码。
  7. 恢复功能错误:H.264提供了解决网络传输包丢失问题的工具,适用于在高误码率传输的无线网络中传输视频数据。
  8. 复杂性高:264性能的改进是以增加复杂性为代价获得的。据估计,H.264编码的计算复杂度相当于H.解码复杂度约为263的3倍H.263的2倍。

二、文件分析

本实验中使用的测试视频是test.mp在码流分析仪中打开如下:

2.1 SPS文件解析

SPS即H.264文件中的序列参数集(sequence parameter set),是H.264中的一种语法结构包括应用 0 一个或多个完整编码视频序列的语法元素,由条带头中的语法元素组成 pic_parameter_set_id 确定引用的图像参数集,语法元素由图像参数集中 seq_parameter_set_id 确定所引用的序列参数集。

本测试文件test.mp4的SPS内容如下:

2.1.1 profile_idc

profile_idc是比特流所遵守的配置,测试视频profile_idc100即比特遵循高级简单

2.1.2constraint_set0_flag

当constraint_set0_flag 等于 0 指比特流可以遵守或不遵守基准简表中的所有规定。

2.1.3constraint_set1_flag

当constraint_set0_flag 等于 0 这意味着比特流可以遵守或不遵守主要简表中的所有规定。

2.1.4constraint_set2_flag

当constraint_set0_flag 等于 0 时是指该比特流可以遵从也可以不遵从扩展简表中的所有规定。

2.1.5 constraint_set3_flag

  • 如果 profile_idc等于66、77或88,level_ idc等于 11,constraint_set3_flag 等于 1 是指该比特流遵从H.264简表和级别1级b所有规定,constraint_set3_flag等于0是指可以遵循或不遵循的比特流H.264简介及级别b所有级别的规定。
  • 否则(profile_idc等于100、110、122或144level_ idc不等于 11),constraint_set3_flag 等于1留作未来使用。根据H.规定264标准时profile_idc等于100、110、122或144level_ idc不 等于 比特流在11点constraint_set3_flag 应等于0。当profile_idc等于100、110、122或144level_ idc服从不等于11点H.264标准解码器将被忽略constraint_set3_flag 的值。

2.1.6reserved_zero_4bits

应等于0。reserved_zero_4bits 其他值将由 ITU-T | ISO/IEC 未来的规定将被忽略。解码器将被忽略 reserved_zero_4bits 的值。

2.1.7level_idc

是比特流所遵守的水平。

2.1.8 seq_parameter_set_id

seq_parameter_set_id 用于识别图像参数集中指的序列参数集。seq_parameter_set_id 的值应在 0-31 的范围内,包括 0 和 31。

2.1.9 chroma_format_idc

chroma_format_idc 指与亮度取样对应的色度取样。chroma_format_idc 的值应该在 0 到 3 (包括 0 和 3)。当 chroma_format_idc 不存在时,应推断其值 1(4:2:0 色度格式)。

2.1.10 bit_depth_luma_minus8

bit_depth_luma_minus8 指亮度队列样值的比特深度和亮度量化参数范围的值偏移 QpBdOffsetY ,如下所示:

当 bit_depth_luma_minus8 不存在时,应推定其值为 0。bit_depth_luma_minus8 值的范围应该在 0 到 4 之间 (包括 0 和 4)。

2.1.11bit_depth_chroma_minus8

bit_depth_chroma_minus8 指色度队列样值的比特深度和色度量化参数范围的值偏移 QpBdOffsetC , 如下所示:

bit_depth_chroma_minus8 不存在时,应推定其值为 0。bit_depth_chroma_minus8 值的范围应该在 0 到 4 之 间(包括 0 和 4)。

2.1.12qpprime_y_zero_transform_bypass_flag

  • qpprime_y_zero_transform_bypass_flag 等于 1 是指当 QP'Y 等于 0 变换系数解码过程中的旁路操作和图 在去块效应滤波过程之前,将执行建筑过程。
  • qpprime_y_zero_transform_bypass_flag 等于 0 是指 变 换 系数解码过程和图像 构建过程在去块 在不改变旁路操作的情况下进行效应滤波过程。 qpprime_y_zero_transform_bypass_flag 当没有特别指定时,应推定其值为0。

2.1.13seq_scaling_matrix_present_flag

seq_scaling_matrix_present_flag 等 于 1 表示存在 i=0..7 的 标 志 seq_scaling_list_present_flag[i] 。 seq_scaling_matrix_present_flag 等于 0 这意味着没有这些标志,它们是由 Flat_4x4_16 序列级别的缩放比例列表 应推断(对应) i=0..5),由 Flat_8x8_16 序列级别的缩放比例列表应推断(对应) i=6..7)。当 seq_scaling_matrix_present_flag 没有特别规定的,应当推定其值 0。缩放比例列表 Flat_4x4_16 和 Flat_8x8_16 规定如下:

2.1.14log2_max_frame_num_minus4

log2_max_frame_num_minus4 以下公式可得出和 frame_num 相关的变量 MaxFrameNum 的值

2.1.15pic_order_cnt_type

pic_order_cnt_type是指解码图像顺序的计数方法,取值范围是 0 到 2(包括 0 和 2)。

2.1.16 log2_max_pic_order_nt_lsb_minus4

log2_max_pic_order_cnt_lsb_minus4表示用于图像顺序数解码过程中的变量 MaxPicOrderCntLsb 的值,公式如下:

2.1.17  num_ref_frames

num_ref_frames规定了可能在视频序列中任何图像帧间预测的解码过程中用到的短期参考帧和长期参考帧、互补参考场对以及不成对的参考场的最大数量。num_ref_frames 字段也决定了滑动窗口操作的大小。num_ref_frames 的取值范围应该在 0 到 MaxDpbSize 范围内,包括 0 和MaxDpbSize 。

2.1.18 gaps_in_frame_num_value_allowed_flag

表示frame_num 的允许值以及在 frame_num 值之间存在推测的差异的情况下进行的解码过程。

2.1.19 pic_width_in_mbs_minus1

pic_width_in_mbs_minus1 加 1 是指以宏块为单元的每个解码图像的宽度。

以宏块为单元的图像宽度变量由下列公式可得:

亮度分量的图像宽度变量由下列公式得出:

色度分量的图像宽度变量由下列公式得出:

2.1.20 pic_height_in_map_units_minus1

pic_height_in_map_units_minus1 加 1 表示以条带组映射为单位的一个解码帧或场的高度。 变量 PicHeightInMapUnits 和 PicSizeInMapUnits 由下列公式得出:

 2.1.21 frame_mbs_only_flag

frame_mbs_only_flag 等于 0 表示编码视频序列的编码图像可能是编码场或编码帧。frame_mbs_only_flag 等于 1 表示编码视频序列的每个编码图像都是一个仅包含帧宏块的编码帧。

 2.1.22 direct_8x8_inference_flag

direct_8x8_inference_flag 表示 B_Skip、B_Direct_16x16 和 B_Direct_8x8 亮度运动矢量 的计算过程使用的方法。当 frame_mbs_only_flag 等于 0 时 direct_8x8_inference_flag 应等于 1。

2.1.23 frame_cropping_flag

frame_cropping_flag 等于 1 表示帧剪切偏移参数遵从视频序列参数集中的下一个值。frame_cropping_flag 等 于 0 表示不存在帧剪切偏移参数。

2.1.24 vui_parameters_present_flag

vui_parameters_present_flag 等于 1 表示存在 如 附 录 E 提 到 的 vui_parameters( ) 语法结构 。 vui_parameters_present_flag 等于 0 表示不存在如附录 E 提到的 vui_parameters( ) 语法结构。

2.2 PPS文件解析 

PPS即H.264文件中的图像参数集(picture parameter set),是一个语法结构,包含应用于零个或多个编码图像的语法元 素,由每个条带头部中的语法元素 pic_parameter_set_id 确定。

本测试文件test.mp4的PPS内容如下:

2.2.1 pic_parameter_set_id

pic_parameter_set_id 标识在条带头中提到的图像参数集。变量 pic_parameter_set_id 的值应该在 0 到 255 的 范围内(包括 0 和 255)。

2.2.2 seq_parameter_set_id

seq_parameter_set_id 是指活动的序列参数集。变量 seq_parameter_set_id 的值应该在 0 到 31 的范围内(包 括 0 和 31)。

2.2.3 entropy_coding_mode_flag

entropy_coding_mode_flag 用于选取语法元素的熵编码方式,在语法表中由两个标识符代表,具体如下:

  • 如果entropy_coding_mode_flag 等于0,那么采用语法表中左边的描述符所指定的方法
  • 否则(entropy_coding_mode_flag 等于1),就采用语法表中右边的描述符所指定的方法

2.2.4 pic_order_present_flag

pic_order_present_flag 等于 1 表示与图像顺序数有关的语法元素将出现于条带头中。 pic_order_present_flag 等于 0 表示条带头中不会出现与图像顺序数有关的语法元素。

2.2.5 num_slice_groups_minus1

num_slice_groups_minus1 加 1 表示一个图像中的条带组数。当 num_slice_groups_minus1 等于 0 时,图像中 所有的条带属于同一个条带组。num_slice_groups_minus1 的允许取值范围在附件 A 中给出。

2.2.6 num_ref_idx_l0_active_minus1

num_ref_idx_l0_active_minus1 表示参考图像列表 0 的最大参考索引号,该索引号将用来在一幅图像中 num_ref_idx_active_override_flag 等于 0 的条带使用列表 0 预测时,解码该图像的这些条带。当 MbaffFrameFlag 等于 1 时,num_ref_idx_l0_active_minus1 是帧宏块解码的最大索引号值,而 2 * num_ref_idx_l0_active_minus1 + 1 是场宏块解码的最大索引号值。num_ref_idx_l0_active_minus1 的值应该在 0 到 31 的范围内(包括 0 和 31)。

2.2.7 num_ref_idx_l1_active_minus1

num_ref_idx_l1_active_minus1 与 num_ref_idx_l0_active_minus1 具有同样的定义,只是分别用 11 和列表 1 取代 10 和列表 0。

2.2.8 weighted_pred_flag

weighted_pred_flag 等于 0 表示加权的预测不应用于 P 和 SP 条带。weighted_pred_flag 等于 1 表示在 P 和 SP 条带中应使用加权的预测。

2.2.9 weighted_bipred_idc

weighted_bipred_idc 等于 0 表示 B 条带应该采用默认的加权预测。weighted_bipred_idc 等于 1 表示 B 条带应 该 采 用具体指 明 的 加 权 预 测 。 weighted_bipred_idc 等 于 2 表 示 B 条 带 应 该 采 用 隐 含 的 加 权 预 测 。 weighted_bipred_idc 的值应该在 0 到 2 之间(包括 0 和 2)。

2.2.10 pic_init_qp_minus26

pic_init_qp_minus26 表示每个条带的 SliceQPY 初始值减 26。当解码非 0 值的 slice_qp_delta 时,该初始值在 条带层被修正,并且在宏块层解码非 0 值的 mb_qp_delta 时进一步被修正。pic_init_qp_minus26 的值应该在- (26 + QpBdOffsetY ) 到 +25 之间(包括边界值)。

2.2.11 pic_init_qs_minus26

pic_init_qs_minus26 表示在 SP 或 SI 条带中的所有宏块的 SliceQSY 初始值减 26。当解码非 0 值的 slice_qs_delta 时,该初始值在条带层被修正。pic_init_qs_minus26 的值应该在-26 到 +25 之间(包括边界值)。

2.2.12 chroma_qp_index_offset

chroma_qp_index_offset 表示为在 QPC 值的表格中寻找 Cb 色度分量而应加到参数 QPY 和 QSY 上的偏移。 chroma_qp_index_offset 的值应在-12 到 +12 范围内(包括边界值)。

2.2.13 deblocking_filter_control_present_flag

deblocking_filter_control_present_flag 等于 1 表示控制去块效应滤波器的特征的一组语法元素将出现在条带 头中。deblocking_filter_control_present_flag 等于 0 表示控制去块效应滤波器的特征的一组语法元素不会出现在条 带头中,并且它们的推定值将会生效。

2.2.14 constrained_intra_pred_flag

constrained_intra_pred_flag 等于 0 表示帧内预测允许使用残余数据,且使用帧内宏块预测模式编码的宏块 的预测可以使用帧间宏块预测模式编码的相邻宏块的解码样值。constrained_intra_pred_flag 等于 1 表示受限制的 帧内预测,在这种情况下,使用帧内宏块预测模式编码的宏块的预测仅使用残余数据和来自 I 或 SI 宏块类型的解码样值。

2.2.15 redundant_pic_cnt_present_flag

redundant_pic_cnt_present_flag 等于 0 表示 redundant_pic_cnt 语法元素不会在条带头、图像参数集中指明 (直接或与相应的数据分割块 A 关联)的数据分割块 B 和数据分割块 C 中出现。redundant_pic_cnt_present_flag 等 于 1 表示 redundant_pic_cnt 语法元素将出现在条带头、图像参数集中指明(直接或与相应的数据分割块 A 关联) 的数据分割块 B 和数据分割块 C 中。

2.2.16 transform_8x8_mode_flag

transform_8x8_mode_flag 等 于 1 表 示 8x8 变 换 解 码过程可能 正 在使用。 transform_8x8_mode_flag 等于 0 表示未使用 8x8 变换解码过程。当 transform_8x8_mode_flag 不存在时,默认其值 为 0。

2.2.17 pic_scaling_matrix_present_flag

pic_scaling_matrix_present_flag 等于 1 表示存在用来修改在序列参数集中指定的缩放比例列表的参数。 pic_scaling_matrix_present_flag 等于 0 表示用于该图像中的缩放比例列表应等于那些由序列参数集规定的。当 pic_scaling_matrix_present_flag 不存在时,默认其值为 0。

三、GOP分析

在ESEyE软件中打开测试文件南京博物馆.mp4

 其中红色条为I帧,蓝色条为P帧,绿色条为B帧,在下方的Frame Info区域中可以看到该I帧的Size为236749,位于GOP0中即第一个GOP。

以第三个GOP为例,该GOP共有30帧,第一个I帧随后是一个P帧,由于利用前面的I帧作为预测,大小比原来的I帧更小,为75678。该帧的Number in Stream为61不同于Number in Display为62是因为该P帧本来应该在第62帧的位置播放,但第61帧为B帧需要第62帧P帧作为预测,因此第62帧P帧应该在第61帧前解码,所以该P帧Number in Stream不同于Number in Display

随后的B帧由于使用了双向预测,大小比P帧更小,仅为1113

导出每一帧的类型、大小、时间如下 

绘制每一帧所用比特数如下

 

 可以看到I帧的大小最大,P帧其次,B帧最小

 

3.1 I帧

以第1帧为例

 该帧为帧内编码帧,所有宏块都是帧内编码(Intra)仅宏块尺寸有所差异,各类宏块个数如下,可以看到该帧共有920个I宏块

3.2 P帧

以第2帧为例

该帧为前向预测帧P帧,其中的部分宏块使用了预测,也有部分宏块为帧内编码,各类宏块个数如下,可以看到该帧中共有91个I宏块和829个P宏块

添加运动矢量,由于该帧和上一帧的差异不大,因此运动矢量信息也多为0

3.2 B帧

 以第3帧为例

该帧为双向预测帧B帧,所有宏块都用了预测,各类宏块个数如下,可以看到该帧中共有920个B宏块

添加运动矢量如下

 

 

 

 

标签: 重量变送器qsy7105

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台