HEVC/H265编码NAL单元详解

一、HEVC/H265引言

与AVC /H.264类似,HEVC/H265也采用视频编码层(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,其他类型帧等)。

图片
HEVC/H265编码NAL单元详解
HEVC/H265编码NAL单元详解

由上可知,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与STSA

TSA(Temporal sub-layer access):该图像可以切换到时域层大于或等于该图像时域层标识号的时域层

STSA(Step wise Temporal sub-layer access):从该图像切换该图像所属的时域层。

四、NAL单元的负载

视频编码输出的包含不同内容的数据比特流片段,这些比特流片段为SODB(String Of Data Bits),SODB 从左到右、从高到低顺序排列。在SODB后添加一些一个bit的停止比特和多个0,就形成了RBSP.

RBSP生成规则如下:

1)如果SODB为空,生成的RBSP也是空

2)RBSP第一个字节直接去取SODB最左端的8bit,第二个字节取SODB接下来的8bit,以此类推,直接到SODB所剩下的内容不足8bit为止。

3)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进行解码。

HEVC/H265编码NAL单元详解

 VPS,SPS,PPS和SS存在各级引用关系,一副图像中的所有SS引用同一个PPS,一个CVS中所有PPS引用同一个SPS。同一个视频序列中的所有SPS引用一个VPS。VPS,SPS,PPS存在相同参数,后者会覆盖前者。

六、h265的数据分析

    以下是一个h265的视频序列,打开的NAL类型如下:

图片

以上就是关于h265/hevc的NAL单元的基本介绍。

作者:江海细流 | 公众号:音视频技术充电营

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论