H.265/HEVC学习笔记之二:码流分析

一、网络分层结构VCL和NAL

与H.264/AVC类似,H.265/HEVC采用了视频编码层(Video Code Layer,VCL)和网络适配层(Network Abstract Layer,NAL),VCL层包含了视频数据的内容,NAL主要负责对视频压缩后的数据进行划分和封装,保证数据能在不同的网络环境中传输。通过NAL,视频压缩数据将被根据其内容特性分割成具有不同特性的NAL单元(NAL Unit,NALU),并对NALU的内容特性进行标识。因此,传输网络根据NALU的标识就可以优化视频传输的性能,而不需再分析视频的内容特征。NALU可以直接作为载体进行传输,而由于不同网络支持的最大传输单元(Maximum Transmission Unit,MTU)是不一样的,因此存在一个网络分组包含一个或者多个NALU,或者多个网络分组包含一个NALU。

//对于一个码流文件来说,包含一系列NAL头,根据H.265对NALU的类型定义,可以解析出其是VPS、SPS、PPS等六种类型

二、网络适配层单元NALU

NAL根据视频压缩数据的特性将其封装为不同的NALU,NALU除了承载VPS、SPS、PPS等信息,还有视频片(Slice)的压缩数据,承载视频片压缩数据的NALU被称为VCLU(VCL NALU),承载其它信息的压缩数据的NALU则被称为non-VCLU(non-VCL NALU)。H.265/HEVC下NALU包含两部分的结构:NALU头(Header)和负载(Payload),NALU头长度为固定的两个字节,反映NALU的内容特征,NALU负载长度为整数字节,承载视频压缩后的原始字节序列载荷(Raw Byte Sequence Payload,RBSP)。RBSP是对视频编码后的原始比特流片段SODB(STring OF Data Bits)进行添加尾部(添加结尾比特1,以凑足整字节)的包装。

RBSP可以包含一个SS的压缩数据,VPS、SPS、PPS、补充增强信息等,也可以为定界、序列结束、比特流结束、填充数据等。【P277】在字节流环境中,如果NALU对应的Slice为一帧的开始,则其开始码为0x00000001,若对应的Slice不是一帧的开始,则为0x000001。为避免NALU载荷中的字节流片段与的NALU的起始码及结束码发生冲突,需要对RBSP字节流做避免冲突处理,经过处理后的RBSP才可以直接作为NALU的载荷信息。同时注意到在解码的时候,这些处理是会被逆处理恢复的。

NALU的结构图(fig1)

NALU语法表(tab1)

NALU头语法(tab2)

三、视频比特流中的NALU

压缩视频比特流是由连续排列的NALU组成的,其顺序和解码顺序是一致的。H.265/HEVC引入了接入单元(Access Unit,AU)的概念,将其定义为多个按解码顺序排列的NALU,且这些NALU的解码能生成一个图像。因此也可认为压缩视频比特流是由按顺序排列的AU组成的,可将AU看成压缩视频比特流的基本单位。



参考:

完成一个H.265/HEVC码流分析工具

视音频编解码学习工程:H.264分析器

你可能感兴趣的:(HEVC/H.265)