在之前的两篇文章 H.264 NALUint 解析 和 H.264 NALUint 解析–实例 中针对NALUint做了一个比较全面的介绍了,同时也结合了实例分析。在实例分析的过程中,我们看到,我们解析出来的头两个NALUint分别为 SPS 和PPS。
SPS和PPS一般是一个H.264码流的头两个NAL。在解码阶段,需要首先把这两个NAL输送个解码器,以让解码器从中获取解码所需的相关参数。否则解码器将无法解码成功。因为在VCL NAL中没有描述整个码流序列的相关信息。智能从这两个NAL中获取。所以我们要特别的对待这连个NAL单元。再者不用担心,这两NAL都是编码器生成的,不需要我们手动去构造。
好了我们一步步来分析他们吧。在这篇文章中,我将将注意力放在SPS中,在下一篇文章中再分析PPS。
我们先来看一下,H.264标准中SPS的语法定义吧。
下面我们队这些字段逐个的进行一份说明:
profile_idc,level_idc: 指定本码流序列所使用的profile ,level。
constraint_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的值:
大体看过这些参数之后我们之后。其实这些参数都是控制解码过程的一些细节的选项参数或者一些计算的输入值。如果我们不是一个解码器开发者,那么这些参数中的很多对于我们来说都很是陌生,或者说也获取不到太多的信息。但是我们需要关注的是profile, level,还有就是计算图像是大小。