文章目录
- 一 实验要求
- 二、文件分析
-
- 0. 关于H.264...
- 1. SPS(Sequence Parameter Set)
-
-
-
- (1) profile_idc:
- (2) level_idc
- (3) seq_parameter_set_id
- (4) log2_max_frame_num_minus4
- (5) pic_order_cnt_type
- (6) log2_max_pic_order_cnt_lsb_minus4
- (7) max_num_ref_frames
- (8) gaps_in_frame_num_value_allowed_flag
- (9) pic_width_in_mbs_minus1
- (10) pic_height_in_map_units_minus1
- (11) frame_mbs_only_flag
- (12) mb_adaptive_frame_field_flag
- (13) direct_8x8_inference_flag
- (14) frame_cropping_flag
- (15) vui_parameters_present_flag
-
-
- 2 PPS
-
-
-
-
- 在实验码流中,pic_parameter_set_id = 0即当前PPS的id为0。
- 在实验码流中,seq_parameter_set_id = 0即当前PPS所引用的激活的SPS的id为0。
- 在实验码流中,entropy_coding_mode_flag = 0即选择通常为哥伦布编码或者CAVLC。
- 在实验码流中,pic_order_present_flag = 0,即片头不会给出这些参数,这些参数使用默认值。
- 在实验码流中,num_slice_groups_minus1 = 0即此帧中所有的slice都属于一个slice group。
- 在实验码流中,weighted_pred_flag = 0即不开启加权预测。
- 在实验码流中,weighted_bipred_idc = 0即默认加权预测。
- 在实验码流中,pic_init_qp_minus26 = 0,pic_init_qs_minus26 = 0。
- 在实验码流中,chroma_qp_index_offset = 0。
- 在实验码流中,deblocking_filter_control_present_flag = 1即slice header中包含去块滤波器相应的信息。
- 在实验码流中,constrained_intra_pred_flag = 0即I宏块可以使用来自Inter类型宏块的信息。
- 在实验码流中,redundant_pic_cnt_present_flag = 0即slice header中没有redundant_pic_cnt相应的信息。
-
-
-
- 3 分析单个GOP
- 三 实验总结
一 实验要求
一、选择一个.mp4或者.264文件。
二、在码流分析仪软件中打开该文件,从几个层次进行分析:
(1)分析SPS和PPS里都包含哪些主要的信息,给出参数值。(例如分辨率、帧率、GOP结构等等)
(2)以一个GOP为例,分析如下信息:
· 每个图像帧的类型及所用的编码比特数、QP值;并以图像帧号为横坐标、每帧所用比特数为纵坐标画出曲线图。
· 以图像帧号为横坐标、每帧所用QP为纵坐标画出曲线图。
· 以第一个I帧作为分析对象,基于该帧图像的空间特性,分析每个宏块所采用的编码类型及其比例。
· 以第一个P帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。
· 以某一个B帧作为分析对象,基于该帧图像的空间和时间特性,分析每个宏块所采用的编码类型及其比例。
二、文件分析
0. 关于H.264…
0.1 H.264格式简介
H.264是国际标准化组织(ISO)和国际电信联盟(ITU)在2002年12月共同提出的继MPEG-4之后的新一代数字视频压缩格式,其具有更高的编码效率,并注重对移动和IP网络的适应,考虑信道的特点,能控制误码扩散。
H.264的特点与优势:
· 压缩比高:在同等图像质量的条件下,采用H.264技术压缩后的码流,数据量只有MPEG-2的1/2;
· 容错率高:H.264码流具有较强的抗误码特性,可适应丢包率高、干扰严重的信道,如IP和无线网络;
· 网络适应性强:H.264提供了网络适应层,使得H.264的文件能容易地在不同网络上传输;
· 计算复杂度高:H.264使用较高的计算复杂度,换取优越的性能,其复杂度相当于MPEG-2的2—3倍
0.2 H.264编解码器
H.264编码器结构与前代MPEG-2标准差别不大,均主要采用变换编码、DPCM与运动补偿的混合结构。编解码器的结构如下图所示。
0.3 NALU
H.264由NAL Unit(网络抽象层单元)组成。在H.264标准协议中规定了多种不同的NAL Unit类型,有些类型包含了MP4的主要信息,有些包含了数据;其中两个重要的Unit是SPS 和PPS。
1. SPS(Sequence Parameter Set)
SPS即序列参数集。SPS中保存了一组编码视频序列(Coded video sequence)的全局参数。所谓的编码视频序列即原始视频的一帧一帧的像素数据经过编码之后的结构组成的序列。而每一帧的编码后数据所依赖的参数保存于PPS,也就是图像参数集中。
一般情况SPS和PPS的NAL Unit通常位于整个码流的起始位置。但在某些特殊情况下,在码流中间也可能出现这两种结构,主要原因可能为:
· 解码器需要在码流中间开始解码;
· 编码器在编码的过程中改变了码流的参数(如图像分辨率等);
在做视频播放器时,为了让后续的解码过程可以使用SPS中包含的参数,必须对其中的数据进行解析。其中H.264标准协议中规定的SPS格式位于文档的7.3.2.1.1部分,如下图所示:
结合我们本次实验的demo.mp4,查看其SPS:
SPS其中的每一个语法元素及其含义如下:
(1) profile_idc:
标识当前H.264码流的profile。我们知道,H.264中定义了三种常用的档次(profile):
基准档次:baseline profile;
主要档次:main profile;
扩展档次:extended profile;
在H.264的SPS中,第一个字节表示profile_idc,根据profile_idc的值可以确定码流符合哪一种档次。判断规律为:
profile_idc = 66 → baseline profile;
profile_idc = 77 → main profile;
profile_idc = 88 → extended profile;
在新版的标准中,还包括了High、High 10、High 4:2:2、High 4:4:4、High 10 Intra、High
4:2:2 Intra、High 4:4:4 Intra、CAVLC 4:4:4 Intra等,每一种都由不同的profile_idc表示。
另外,constraint_set0_flag ~ constraint_set5_flag是在编码的档次方面对码流增加的其他一些额外限制性条件。
在实验码流中,profile_idc = 0x42 = 66,因此码流的档次为baseline profile。
(2) level_idc
标识当前码流的Level。编码的Level定义了某种条件下的最大视频分辨率、最大视频帧率等参数,码流所遵从的level由level_idc指定。
在实验码流中,level_idc = 0x1e = 30,因此码流的级别为3。
(3) seq_parameter_set_id
表示当前的序列参数集的id。通过该id值,图像参数集pps可以引用其代表的sps中的参数。