H.265/HEVC视频编码标准详解:从Profiles到分层结构
H.265/HEVC视频编码标准详解:从Profiles到分层结构
H.265/HEVC(高效视频编码)是继H.264/AVC之后的视频压缩标准,旨在提供更高的压缩效率和更好的视频质量。本文将详细介绍H.265/HEVC的Profiles(档次)、Levels(级别)、Tier(层)以及其分层结构,帮助读者更好地理解这一视频编码标准。
Profiles(档次)、Levels(级别)和Tier(层)
Profiles(档次)
Profile(档次)规定了编码器可采用哪些编码工具或算法,共三个档次:
- Main profile:每像素8bit的位深,是最常见的档次。
- Main Still Picture profile:支持单个静态图像,按照Main档次的规定进行编码,Bitstream contains only a single (intra) picture。
- Main 10 profile:除了8bit位深,也可扩展支持10bit位深。支持Main 10的解码器必须同时可解码Main档次的码流。
Levels(级别)和Tier(层)
Level(级别)是对解码端的负载和内存占用影响较大的一系列编码约束的组合,如最大采样率,最大图像尺寸,最小压缩率,最大比特率,DPB容量和CPB(解码缓冲区)大小等。Tier(层)是为了不同应用需要的最高比特率的不同做出区分,有main和high两种。
标准规定HEVC有13个level(级别)和2个Tier(层):
HEVC的分层结构
分层结构概述
与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。
Caption:上图中的Network Abstraction Layer属于其他协议定义的内容。VCL可认为是视频编码后的裸码流,NAL是将VCL裸码流进行打包后进行网络传输的码流。Bitstream是有NAL units组成。
VCL
VCL采用了把图片内静态压缩、图片间的动态压缩、2D变换,以及码流层的熵压缩等压缩技术组合在一起的混合编码技术,其编码框架如下图所示:
典型的HEVC编码器结构
和H.254/AVC相比,H.265/HEVC采用了许多新的编码方法,如下表所示:
特性 | HEVC/H.265 | AVC/H.264 |
---|---|---|
Year | 2013 | 2003 |
Other Name | MPEG-H | MPEG-4 Part 10 |
Resolutions | Up to 8K | Up to 4K |
Profiles | 3 profiles; 13 levels; 2 tiers | 21 profiles; 17 levels |
Block size | Tree structure 8x8,16x16,32x32,64x64 Square, sym./asym. rect. | Macroblock 16x16(4x4) Square, sym. rect. |
Transforms | Integer-DCT(4x4,8x8,16x16,32x32) Integer-DST(4x4 Intra) | Integer-DCT(4x4,8x8) Hadamard(2x3,4x4 ) |
Intra-prediction | Up to 33 angular modes(+DC+planar mode) | Up to 9 modes |
Motion prediction Motion-copy mode MV precision | Advanced MV prediction(spatial+temp. co-located) Merge, Skip 1/4 pixel 7/8 tap | Spatial mediam+temp. co-located Direct, Skip 1/2 pixel 6-tap +1/4 pixel bilinear |
In-loop filtering | Deblocking, SAO | deblocking |
Quantization Entropy Coding | URQ CABAC | URQ CAVLC, CABAC |
NAL
HEVC码流是由一系列NAL unit(NALU)组成,每个NAL包含整数字节的数据,头两个字节为NAL unit Header(1 byte in H.264),剩余的为负载数据(原始字节序列负荷RBSP)。不同的NAL单元分为VCL NAL和non VCL NAL单元,前者携带编码过的图像数据,后者包含多帧共享的控制参数信息。
HEVC NAL 结构
NAL unit 头包含的信息:
- 第一bit‘F’为forbidden−zero位,固定为0
- 6-bits NALType确定NAL的类型,其中VCL NAL和non-VCL NAL各有32类
- LayerID表示NAL所在的Access unit所属的层,该字段是为了HEVC的继续扩展设置
- TID(temporal identifier),确定了NAL所在的unit的时域上的层次,如下图:对于a、b而言,虚线下TID都是0,虚线上TID都是1。同一picture内的NAL,TID字段内容相同,作用:TID小的NAL不能依赖TID大的NAL,还可用于控制视频选择部分帧播放。
VCL-NALU和non VCL-NALU具体类型如下:
NAL 类型
NALU Payload
- NALU负载长度为整数字节,承载视频压缩后的原始字节序列载荷(Raw Byte Sequence Payload,RBSP)。
- RBSP是对视频编码后的原始比特流片段SODB(STring OF Data Bits)进行添加尾部(添加结尾比特1,以凑足整字节)的包装。
- RBSP可以包含一个SS的压缩数据,VPS、SPS、PPS、补充增强信息等,也可以为定界、序列结束、比特流结束、填充数据等。
- 在字节流环境中,如果NALU对应的Slice为一帧的开始,则其开始码为0x00000001,若对应的Slice不是一帧的开始,则为0x000001。
- 为避免NALU载荷中的字节流片段与的NALU的起始码及结束码发生冲突,需要对RBSP字节流做避免冲突处理,经过处理后的RBSP才可以直接作为NALU的载荷信息。同时注意到在解码的时候,这些处理是会被逆处理恢复的。
下面是H.264/AVC的NALU sequence的一个示意图:
H.264 NALU Sequence
本文原文来自CSDN博客