h264有官方标准文档,可以下载一个看看
先看一下哥伦布编码再看sps内容
指数哥伦布编码
规定语法元素的编解码模式的描述符如下:
比特串:
b(8): 任意形式的8比特字节(就是为了说明语法元素是为8个比特,没有语法上的含义)
f(n): n位固定模式比特串(其值固定,如forbidden_zero_bit的值恒为0)
i(n): 使用n比特的有符号整数(语法中没有采用此格式)
u(n): n位无符号整数
指数哥伦布编码:
ue(v): 无符号整数指数哥伦布码编码的语法元素
se(v): 有符号整数指数哥伦布编码的语法元素,位在先
te(v): 舍位指数哥伦布码编码语法元素,左位在先
ce(v):CAVLC
ae(v):CABAC。
指数哥伦布编码过程:
在表9-1中,比特串格式为“前缀+1+后缀”。
1)1后缀=codeNum+1,如codeNum = 3,则1后缀=4,即为100,后缀为00(100后面的00);
2)前缀与后缀的比特数相同,且前缀的各位比特为0,如codeNum=3,则最终编码所得的比特串为:00100.
对于ue(v),按上述规则进行编码;
对于se(v),则按照表9-3转换成codeNum,然后按上述规则进行编码;
有了上面的基础,现在我们看一下一段h264流的数据,就是之前一篇文章里提到的 AVC sequence header
就重复的使用这张图片的数据吧
在这里建议大家看一下h264文档的7.3.2.1 序列参数集RBSP语法,对照着文档我们可以开始分析数据
这里面我们只看sps的数据
67 42 80 1E 96 54 0A 0F D8 0A 84 .........42 44 D4
67 ---0110 0111
forbidden_zero_bit(1)= 0//网络传输正确
nal_ref_idc(2)= 11//参考值为3
nal_unit_type(5) = 0 0111:seq_parameter_set_rbsp( )//7,序列参数集
说明这个NALU的RBSP里装的是SPS数据 ,所以 processSPS
42 --- 0100 0010
profile _idc(8) = 66
80 --- 1000 0000
constraint_set0_flag(1):1
constraint_set1_flag(1):0
constraint_set2_flag(1):0
constraint_set3_flag(1):0
reserved_zero_4bits(4):0
1E ---- 0001 1110
level_idc(8) = 30
后面注意了seq_parameter_set_id以及后面几个是ue(v)类型的,就是哥伦布编码
96 54 0A 0F D8
1001 0110 0101 0100 0000 1010 0000 1111 1101 1000
1