1. H265 NALU类型解析
F: 禁止位,必须为0,表示有效;为1的话表示无效。
Type: 6-bits NALType 确定NAL的类型,其中VCL NAL和non-VCL NAL各有32类。0-31是vcl nal单元;32-63,是非vcl nal单元。VCL是指携带编码数据的数据流,而non-VCL则是控制数据流。
vcl nal单元的类型(0-31)如下表:
non-vcl nal单元的类型(32-63)如下表:
Non-VCL NAL Type:Non-VCL NAL的种类如上图,Parameter sets包括VPS、SPS和PPS。
Delimiters(分隔符)包括AUD_NUT、EOS_NUT、EOB_NUT,其中AUD_NUT用于指示access unit的边界,所以和access unit内的VCL NAL有相同的TID,是access unit内的第一个NAL。EOS_NUT、EOB_NUT分别表示CVS和bitstream的结束,它们的TID为0,没有payload,只有2-Type的header。
Filler Data对解码过程并没有任何影响,payload就是由一串’11111111’和1-Type的’10000000’组成,主要用来填充
SEI:supplemental enhancement informatyion,辅助增强信息,提供可选的解码支持元数据。在HEVC中,SEI是prefix(SEI必须在Access unit的所有VCL NAL之前)或者suffix(SEI可以在Access unit的VCL NAL之后)的,而且SEI有些是只对当前Access unit有效,有些作用范围可能是多个Access unit甚至整个SVC。VUI是在SPS中的可选信息,VUI不直接影响解码过程,但是提供两个方面的信息:1、解码图像的展示信息,包括宽高比、扫描、分时等信息;2、限制解码端的一些信息,包括tiles、MV、参考图像等。
LayerID:表示NAL所在的Access unit所属的层,该字段是为了HEVC的继续扩展设置。也就是目前都是0,以后的扩展可能会用到。
TID:该值减一,时域层标识号,表示该NALU的时域层级。
2. H265 帧类型解析
和H.264的&0x1F不同,H.265是 :
int type = (code & 0x7E)>>1;
根据H265的NALU类型定义分析:
(1)控制数据流:
00 00 00 01 40 01 的nuh_unit_type的值为 32, 语义为视频参数集 VPS
00 00 00 01 42 01 的nuh_unit_type的值为 33, 语义为序列参数集 SPS
00 00 00 01 44 01 的nuh_unit_type的值为 34, 语义为图像参数集 PPS
00 00 00 01 4E 01 的nuh_unit_type的值为 39, 语义为补充增强信息 SEI
VPS、SPS、PPS:三者的结构和关系如下图所示:
3. H265一个图像序列的组成:VPS+SPS+PPS+SEI+一个I帧+若干个P帧。VPS、SPS、PPS、SEI、一个I帧、一个P帧都可以称为一个NALU。
4. H265的NALU结构:开始码+NALU头+NALU数据
(1)、开始码大小为四个字节,是一个固定值00 00 00 01(十六进制),标识一个NALU的开始。
(2)、NALU头大小为两个字节,共16位,第1位值为0,第2-7位为NALU的type位(共6位),标识当前NALU的类型
,第8-15位值为0,第16位值为1。
(3)、NALU数据为编码器编出来的图像信息或图像数据。
5. 六种类型的NALU
(1)、VPS(视频参数集):NALU头值为0x40 01(十六进制),NALU头type位值为32(十进制)。
(2)、SPS(序列参数集):NALU头值为0x42 01(十六进制),NALU头type位值为33(十进制)。
(3)、PPS(图像参数集):NALU头值为0x44 01(十六进制),NALU头type位值为34(十进制)。
(4)、SEI(补充增强信息):NALU头值为0x4e 01(十六进制),NALU头type位值为39(十进制)。
(5)、I帧:NALU头值为0x26 01(十六进制),NALU头type位值为19(十进制)。
(6)、P帧:NALU头值为0x02 01(十六进制),NALU头type位值为1(十进制)。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/ichenwin/article/details/121385557