一、引言
与H.264/AVC 类似,H265/HEVC也采用视频编码层(Video Coding Layer,VCL)和网络适配层(Network Abstract Layer, NAL)的双层结构,以适应不同网络环境和视频应用。网络适配层的主要任务是对视频压缩后的数据进行划分和封装,并进行必要的标识,使其更好的适应各种网络环境。
二、NAL单元的基本结构
从NAL单元的基本结构可知,NAL单元由NAL头和原始字节序列负载(Raw Byte sequence payload,RBSP)
三、NAL头的语法定义
forbidden_zero_bits(1bit)
默认为0,值为1时表示错误,当网络发现NAL单元有比特错误时可设置该比特为1,以便接收方纠错或丢掉该单元
nuh_layer_id(6bit)
layerId预留位,用来指示VCL数据属于哪个层或者标识non-VLC数据,占用NALU header的第一个字节的最后一位和第二个字节的前五位,默认全为0,用于未来扩展,如用来表示可分级视频或3D视频等。
nuh_temporal_id_plus1(3bit)
该字段默认为1。temporal_id表示NAL单元的时域层级,根据图像时域层级就可以确定其重要性,如时域层级小的图像不会参考时域层级大的图像,如通常参数集或者idr帧的temporal_id为0。
nal_unit_type(6bits)
用来标识NAL单元类型。通常NAL单元类型包括参数集(VPS,PPS,SPS,SEI)以及slice 数据(如IDR,其他类型帧等)。
由上可知,H265的NAL的类型相对h264多了很多,取值从0~63,其中48~63语义尚未明确,不会影响解码过程。这里总结一下H265的帧相关概念:
IRAP:随机接入点(Intra Random Access point),其后置图像必须能独立正确解码。
Leading前置图像:解码在后,播放在前(类似B帧)。
TAIL后置图像:解码和播放都在其后。
RADL(Random Access Decoder Leading):不依赖IRAP前的前置图像,即从IRAP图像介入可以正确解码。
RASL(Random Access skip Leading):依赖IRAP前的前置图像,即从IRAP图像介入不可以正确解码。
IRAP分三种:
IDR(instantaneous decoder refreshing):IDR不依赖IDR帧前的图像解码,h264也有IDR帧概念。
CRA(clean Random access):允许其前置图像是RASL,以提高编码效率,当直接从CRA图像接入时,其RASL图像无法解码。
BLA(Broke Link access):特殊的CRA,明确其RASL不需要解码
TSA(Temporal sub-layer access):该图像可以切换到时域层大于或等于该图像时域层标识号的时域层
STSA(Step wise Temporal sub-layer access):从该图像切换该图像所属的时域层。
四、NAL单元的负载
视频编码输出的包含不同内容的数据比特流片段,这些比特流片段为SODB(String Of Data Bits),SODB 从左到右、从高到低顺序排列。在SODB后添加一些一个bit的停止比特和多个0,就形成了RBSP。
RBSP生成规则如下:
- 如果SODB为空,生成的RBSP也是空
- RBSP第一个字节直接取SODB最左端的8bit,第二个字节取SODB接下来的8bit,以此类推,直接到SODB所剩下的内容不足8bit为止。
- RBSP的下一个字节首先包含SODB的最后比特,然后添加比特1(RBSP停止位)。如果该字节包含比特数小于9,在后面添加0直到该字节包含8比特。
RBSP可以包含SS的压缩数据,也可以包含VPS,PPS,SPS,SEI等。
注意RBSP可以不能直接NAL单元负载,还有解决冲突问题。一般编码器输出端的NAL单元是带启动码0x000001或者0x000001。或者系统保留某些数据(如0x000002)。RBSP做了以下冲突处理:
0x000000->0x00000300;
0x00001->0x00000301;
0x000002->0x00000302;
0x000003->0x00000303;
五、参数集 H265/HEVC包含参数集(VPS,SPS,PPS,SEI),相比h264多了一个VPS。 1)VPS(视频参数集) 主要用传输视频分级信息,有利于兼容可分级视频以及3D视频,如视频包含最大的层级,也可包含profile,level等信息。一个给定的视频序列,无论它的SPS是否相同,都参考相同的VPS 2)SPS(序列参数集) 主要包含一个CVS(Code Video Sequence 编码视频序列,类似GOP)所有编码图像共享的编码参数,SPS通过PPS引用而作用图像 3)PPS(图像参数集) 一副图像序列,slice 通过引用PPS进行解码
VPS,SPS,PPS和SS存在各级引用关系,一副图像中的所有SS引用同一个PPS,一个CVS中所有PPS引用同一个SPS。同一个视频序列中的所有SPS引用一个VPS。VPS,SPS,PPS存在相同参数,后者会覆盖前者。
六、h265的数据分析
以下是一个h265的视频序列,打开的NAL类型如下:
以上就是关于h265/hevc的NAL单元的介绍