H264H265视频编解码算法文章汇总
NAL Unit解析
1.NAL Unit格式
-
NAL Unit:
- NAL Unit = NAL Header + NAL Body
-
NAL Header:一个字节,包括:
-
forbidden_zero_bit:0禁止位,1bit;
-
nal_ref_idc:参考索引,代表当前NAL Unit重要性,2bit;
-
nal_unit_type: NAL Unit类型,5bit;
-
2.NAL Unit Header
image.png3.NAL Unit 有效负载数据及其封装
-
NAL Body包含了有效负载数据的封装;
-
NAL Body自外向内的封装共3层:
-
第一层:EBSP——扩展字节序列载荷
-
第二层:RBSP——原始字节序列载荷
-
第三层:SODB——数据字节流
-
3.1 Extended Byte String Payload
-
等同于NAL Body数据本身;
-
在EBSP中包含了一个特殊的字节0x03,表示“防止竞争校验字节” (emulation_prevention_three_byte);
-
作用: 防止NAL Body内部出现于NAL Unit起始码0x 00 00 01或0x 00 00 00 01冲突。
当内部的连续4字节数据出现了下列情况时:
-
0x 00 00 00
-
0x 00 00 01
-
0x 00 00 02
-
0x 00 00 03
在两个0字节之后会插入值为3的一个字节:
-
0x 00 00 03 00
-
0x 00 00 03 01
-
0x 00 00 03 02
-
0x 00 00 03 03
3.2 RBSP和SODB
-
RBSP:Raw Byte Sequence Payload
-
原始字节序列载荷:相当于NAL Body去掉附加03字节之后的数据;
-
同原始的语法元素码流相比,RBSP在末尾添加了rbsp_trailing_bits()部分;
-
rbsp_trailing_bits():包括一个1bit和若干个0bit,用于实现字节的对齐
-
-
SODB:String Of Data Bits
- 表示H.264的语法元素编码完成后的实际的原始二进制码流。SODB通常不能保证字节对齐。
网友评论