HEVC标准概览-很概括很详细

HEVC的设计兼顾提高编码效率、降低传输压力、增强丢包容忍性、优化并行处理在内的多个目标。 
本章将简要描述HEVC实现这些目标的关键技术以及标准HEVC编码器的处理流程。 
解码流程和具体的语法会在之后的章节讨论。 
一、编解码层面 

HEVC的编码分层沿用了H.261以来的混合模式(帧间预测、帧内预测、2D转换)。下图表达了编码HEVC标准码流的基本过程。 

HEVC_flow 

HEVC标准编码过程大致如下:帧首先被切分成多个块状区域,分别传输给解码器。图像序列的第一个画面(以及每一个可被拖放的帧)只使用帧内预测编码(只使用同一帧中其它区域进行预测,不依赖其他帧)。 

其它帧中的块大多数使用帧间预测编码,过程包括选择预测模式、参考图像的运动数据和生成每个块的运动矢量(MV)。 

编码器和解码器通过旁路传输预测模式信息和运动矢量(MV),计算运动补偿,进而重建帧间预测数据。 

帧内或帧间的预测结果和实际画面之间的残差数据经过空间-线性变换、采样、量化、熵编码后和预测信息一起传输。 

编码器会重复解码器的处理循环(上图中灰色方框的部分),以保证编解码双方对子序列作出一致的预测。但编码器量化的参数被解码器逆采样、逆转换还原后只能得到近似的残差。 

残差和预测的结果合并后会进入一或两个循环滤波器以去处块效应。最终得出的画面(解码器的输出)会存储在缓冲区中作为视频中其它图像预测参考。 

编解码帧序很可能会和从源下来的帧序不一样,因此对解码器来说,需要一段缓冲区来应对解码顺序(码流顺序DTS)和输出顺序(显示顺序PTS)间的差距。 

一般而言,HEVC编码器输入都应该是逐行扫描的(逐行源,或去交错处理后的隔行源)。HEVC的编码设计没有特意去支持隔行扫描,因为隔行扫描已经不再用于最终显示,在分发中使用隔行的场景也在大量减少。 

但HEVC提供了一个元数据让编码器可以声明这是一个按照场编码的隔行视频(每帧中其实只有一个场),每个画面中只有一半的信息。这样就简单而有效地降低了解码器支持隔行视频的复杂度。 

下面我们介绍一些HEVC混合编码特性中的要点。 

1) 编码树单元(CTU)和编码树块(CTB): 
 前代标准中的核心编码层是宏块,包含一个16×16的亮度块采样,对于一般的yuv420而言,会伴随两个8×8的色度块采样。类似结构在HEVC中被称作CTU,但它的大小是可以由编码器设定的,并且可以超越16×16。CTU由一个亮度CTB、几个色度CTB和一些关联的语法元素组成。亮度CTB的可选大小有16×16、32×32、64×64,更大的块会有更好的压缩率。HEVC还支持使用树结构和四叉树将CTB切分为更小的块。 

2) 编码单元(CU)和编码块(CB): 
 CTU中的四叉树确定了亮度和色度CB的大小和位置,四叉树的根节点与CTU关联。亮度CB最大可以支持到亮度CTB的大小。把CTU切成亮度和色度CB的过程是一体的。一个亮度CB、两个色度CB和关联的语法元素构成一个CU。一个CTB可以只包含一个CU,也可以包含好几个CU,每一个CU都有一个分区关联的预测单元(PU)和一个变换树单元(TU)。 

3) 预测单元(PU)和预测块(PB): 
 某帧图像采用帧内预测还是帧间预测是在CU层面决策的。PU分区结构的根也在CU层。根据预测决策的结果,亮度和色度CB进一步拆分为亮度和色度PB。HEVC支持从4×4到64×64大小的PB。 

4) 变换单元(TU)和变换块(TB): 
 预测残差使用块变换编码。TU树结构的根在CU层面。亮度CB的残差可能和亮度TB完全一样,或者进一步切分为更小的亮度TB。色度TB也是一样的。4×4、8×8、16×16、32×32的TB都各自定义了近似DCT变换的基本整型方法。对于4×4的亮度帧内预测的残差变换,还有一个DCT变换表衍生的整型变换供选择。 

5) 运动矢量: 
 标准中采用了基于邻近PB和参考帧数据来预测方向的高级运动矢量预测(AMVP)。MV编码还可以使用一种允许继承邻近PB的MV的合并模式。此外,HEVC中还包含有一个增强版的H.264/AVC直接运动预测。 

6) 运动补偿: 
 MV使用四分之一采样预测。分级采样的插值使用7阶或8阶的滤波器(H.264/AVC中插值使用二分之一采样的6阶滤波器和四分之一采样的线性插值)。和H.264/AVC一样,HEVC也使用多参考帧。每一个PB可以根据单向或者双向预测传送一个或者两个运动矢量。同H.264/AVC一样,预测信号上可以附加采样和偏移以声明预测权重。 

7) 帧内预测: 
 不使用帧间预测时,就只能基于邻近的块来做空间上的帧内预测。HEVC的帧内预测支持33个方向模式(H.264/AVC中是8个)。HEVC还设计了增强的二维变换和可选的DC预测模式。需要由预先解码出的邻近PB计算得出最优的帧内预测模式。 

8) 量化控制: 
 和H.264/AVC一样,HEVC也使用URQ(一致量化还原)。由于HEVC引入了更多的变换块,所以量化参数矩阵也随之增多。 

9) 熵编码: 
 HEVC使用CABAC来做熵编码。和H.264/AVC中的CABAC相比,得益于新引入的并行处理架构,速度、压缩率和内存占用等方面均得到了大幅改善。 

10) 内置环路滤波器: 
 和H.264/AVC一样,HEVC的帧间预测循环中也内置去除块效应的滤波器。相比H.264/AVC,HEVC的设计更重视简化决策和滤波器的流程,并且为并行处理而优化。 

11) 采样自适应偏移(SAO): 
 帧间预测循环的去块效应滤波器之后引入了一个非线性的幅值映射的流程。主要目的是通过编码器端的直方图分析产出一些参数以增强解码器端的幅值信号还原。 
二、语法层面 

H.264/AVC以来的语法基本得到了保留,HEVC在其基础上加入了不少为应用多样性及网络丢包而设计的特性。 

1) 参数集结构: 
 能被多个区块共享的解码信息包含在参数集中。这个结构负责保证把必不可少的解码信息传输到解码端。它由H.264/AVC中的图像序列参数集扩展而来,在HEVC中被称为VPS。 

2) NAL语法单元: 
 每个语法结构都会被放进一个叫做NAL(网络抽象层)中的逻辑上的数据包中。这个包的包头中有两个字节表明了它装载的是什么用途的数据(用于判断是否需要重传)。 

3) 片: 
 可以不依赖同帧中的其它数据独立进行预测、残差重建、熵编码的部分被称为“片”。片可以是一个帧也可以只是一个帧中的一部分。片的主要作用之一是在丢包时同步用。在包式传输中一个片可以包含的数据量是被严格限制的,在这个限制内调整片内包含的CTU数量可以有效地最小化包传输产生的额外开销。 

4) 增强信息(SEI)和视频可用性信息(VUI): 
SEI和VUI用于存储视频元数据,比如说时间戳、使用的色彩空间、3D填充的方式等等。 
三、并行化设计和片的改良 

最后要介绍的是HEVC中增强的并行处理架构和为包传输而改良的片结构。这两个特性可能会在某些应用中十分有用,具体实现可以考量自己的情况采用它们。 

1) 并行块(Tile) 
 HEVC定义了一个可选的方式,可以把一帧图像分割成并行块。并行块的主要目的是在增强并行处理的能力同时又不引入新的错误扩散。并行块是一些在一帧图像内使用一些共有的信息编码而成,但可以独立解码的区域。一般的做法是将图像切割成包含大体相同数量CTU的并行块。并行块的引入使得简单粗粒度的并行化处理成为可能,线程之间将不再需要考虑复杂的同步和锁。 

tiles 

2) 错峰并行处理(WPP) 
 主要用于熵编码。当WPP开启时,片先被分成数个CTU行。第一行正常处理,第二行在第一行处理完2个CTU后开始处理,第三行在第二行处理完2个CTU后开始处理。每一行相对前一行都有2个CTU的延迟。WPP提供了一种在适当的层级上(比如说片)并行化的方式。WPP可以提供比并行块更好的压缩效率,而且不会引入块效应。 

wavefront 

3) 依赖更小片(Dependent slice segments) 
 这个设计允许数据与错峰并行处理或者并行块关联起来,在碎片化的包传输网络中,相对于一次编码一整片而言,这种做法可以更快进入解码流程,从而降低延迟。与错峰并行处理一起使用用时,它也需要类似错峰的机制。这项设计尤为适合低延迟要求下的并行处理。 

接下来的两章里,我们将会把关键特性的细节进一步展开来讲。 

HEVC标准概览(三)高层语法 

HEVC从H.264/AVC的NAL(网络抽象层)继承了大量的语法元素。 

NAL负责把视频编码层的数据映射到RTP/IP、ISO MP4、H.222.0/MPEG-2等视频传输层上,并提供丢包处理的框架。 

本章节不复述NAL单元、参数集、存取单元、码流格式、包格式等基本概念。 

NAL单元根据是否装载有视频编码数据分为VCL和non-VCL两类。为了优化任意点解码和解码初始化,HEVC标准中根据不同的视频种类进一步细分出子类。 

下表列举了HEVC中NAL单元的种类及用途。 

nal 

下面我们介绍几个HEVC在语法上的新特性: 
一、任意点解码和码流拼接 

H.264/AVC中,码流必须从一个包含关键帧的IDR单元开始,它必须不依赖NAL中的前置的包就可以独立解码。IDR是封闭GOP(group of pictures)的标志性组成部分。 

新的纯随机读取(CRA)语法定义了如何使用处于随机读取点(RAP)位置的关键帧。 

比如说,告诉解码器从一个临时有效的位置直接开始解码,忽略之前的视频数据,这种做法被称作开放式的GOP操作。 

随机位置读取的支持对频道切换、拖动操作和动态流服务是十分关键的。 

某些解码顺序在CRA帧之后,显示顺序在CRA帧之前的帧可能会参考解码器buffer中还不存在的帧,于是这些解码器无法解码的帧就只能被丢弃。基于这种情况,这些帧被定义为拖动可跳过的前置帧(RASL)。 

不同的码流之间切换可以通过断点连接帧(BLA)来拼接。简单的把需要切换的码流的RAP帧标记为BLA放到当前帧的下一个CRA帧的地方,然后传输新码流就可以完成码流拼接的工作。 

RAP帧可以是IDR、CRA、BLA帧,CRA和BLA的后面都可能跟随着RASL帧(BLA的NAL单元的标记可定)。BLA帧之后的RASL帧解码器必须抛弃,因为它们可能参考了拼接前源码流的帧导致无法解码。 

还有一种解码顺序在RAP帧之后,显示顺序在RAP帧之前的帧,叫做拖动可解码的前置帧(RADL),这种帧不会参考解码顺序在RAP之前的帧。 

RASL和RADL可以统称为前置帧(LP)。 

解码和显示顺序都在RAP帧之后的帧叫做后置帧,它们不可以将LP作为它们的参考。 
二、临时分层编码 

类似H.264/AVC的可伸缩编码扩展(SVC)的功能,HEVC可以在NAL的头上临时定一个分级预测的层。这样就可以只解析到NAL层面就实现可伸缩性。 

某些情况下,针对同一个码流,解码器可以自主决定临时解码层的数量。从低级子层到更高级子层切换的操作可以在临时子层帧(TSA)和步进临时子层帧(STSA)完成。 

TSA点允许切换到比当前子层高的任意子层,STSA只允许切换到只比当前子层高一级的下一层(除非更高的层也包含TSA或者STSA帧)。 
三、扩展参数集 

新加入VPS元数据描述包括临时层级依赖在内的编码视频的全部特征。主要目的是增强在系统层的兼容扩展性。 

比如说,对未来可伸缩编码或者多视角的视频需要被旧的解码器解码时,那么它就可以方便地忽略那些高级解码器才需要的码流扩展信息。 
四、参考帧集和参考帧列表 

为了管理解码多参考帧,已解码好的帧被放在解码帧缓冲区(DPB)中并被详细标记以供码流中后续的帧参考。每个片的头部都会包含一个帧序计数器(POC)以定位那些帧。 

保留下来用以参考的帧集合叫做参考帧集合(RPS)。 

下图演示了一小段码流的POC值、解码顺序和RPS。 

DPS 

H.264/AVC的DPB中有两个帧的列表,分别叫做参考帧列表0和参考帧列表1。定位具体帧的索引叫做参考帧索引,如果列表中只有一个帧,则参考帧索引为0,不在码流中传输。单向预测时,可以从0和1两个列表中选出一个帧。双向预测时,则会从两个列表中各选一帧。 

定位RPS和将参考帧列表用于帧间参考的语法比前代H.264/AVC的设计对丢包的兼容性更好,在拖动和其它播放模式下(快进、快退、动态码流切换等)也能工作地更好。 

这项优化的关键是让语法更加明确可展现,避免了之前对解码器解码过程中的中间状态和临时值的依赖。而且还比H.264/AVC中的语法更加简化了。 

HEVC标准概览(五)Profile、Tier和Level 
一、Profile、Tier和Level的概念 

这三个概念主要用于需要类似功能的不同实现之间的沟通。 

Profile指出码流中使用了哪些编码工具和算法。 

Level指出一些对解码端的负载和内存占用影响较大的关键参数约束。主要包括采样率、分辨率、最大码率,最小压缩率,DPB容量,CPB(解码缓冲区)大小。 

在HEVC的设计中,应用可以只依据最大的码率和CPB大小就可以区分。为了达成这个效果,有些Level定义了两个Tier——Main Tier用于大多数应用,High Tier用于那些最苛刻的应用。 

遵守某Level和tier的解码器可以解码所有等于或低于这个Level和Tier的码流。 

支持某Profile的解码器必须支持此Profile中的所有特性。 

编码器不必实现Profile中所有的特性,但产出的码流必须是遵守标准的,比如说要遵守与之兼容的解码器的约束。 
二、HEVC中的Profile和Level 

按照进度,2013年1月有三个Profile将被写入标准,分别是Main、Main10和Main Still Picture,针对不同的应用需求。 

减少Profile的数量可以增强设备通用性的。未来还会促进视频服务一定程度上的融合,比如说广播、移动、流,这些服务会逐渐汇聚到能全部支持它们的设备上。 

本文之前讨论的编码工具和高层语法加上下面的限制条件组成了三个Profile的草案。 

1) 只支持4:2:0色度采样; 
 2) 编码器使用多tile时,不能同时使用错峰并行处理。而且每个tile至少有256亮度采样宽,64亮度采样高。 
3) 在Main和Main Still Picture这两个Profile中支持8位深度的采样,Main10支持10位采样深度。 
4) Main Still Picture中,全部的码流只能一帧编码的视频(意即禁用帧间预测)。 

下表中13个Level计划包含在标准第一版中,它们的分辨率从176×144(QCIF)到7680×4320(8kx4k)。图像的宽和高均需小于等于8倍的MaxLumaPS再开方。MaxLumaPS是下图中的最大亮度帧尺寸(避免极端尺寸时解码器产生错误)。 

level 

有8个Level支持2个Tier(Level4及以上)。除了Level1偏高(要求350,000b)之外,CPB容量均等于最大码率的1秒容量。当使用Level最大的分辨率时,CPB最大容量为6帧图像(包括当前帧、用于参考的帧和准备输出的帧)。如果降低分辨率的话,CPB可以容纳16帧图像(取决与具体采用的分辨率)。 
Level还约束了每帧中垂直和水平方向tile的最大数量,以及每秒最大的tile数量 
HEVC标准概览(六)历史沿革 

ITU-T VCEG和ISO/IEC MPEG于2004年中完成了H.264/AVC的High Profile之后,就开始着手准备下一代的标准。 

VCEG在2004年开始准备,2005初确定关键技术方向(KTA),并开发了一个通用的KTA软件代码库。此代码库由H.264/AVC的参考软件joint model(JM)开发而来,它引入并验证了很多新技术。 

2005到2008年间,MPEG开始探索显著提升编码效率的可能性。它组织了数个Workshop,并在2009年4月为这些技术发布了一篇“征集证据”。随后专家开始观测征集而来的评估和测试结果。 

VCEG和MPEG分头调查后,达成了现有编码标准的效率可以显著提升的共识。2010年1月两个组织联合建立了JCT-VC,同时发表定义了未来标准概况的视频编码技术联合建议书(CfP)。 

2010年4月JCT-VC第1次会议,项目名确定为HEVC,研究了反馈给CfP的建议,从数个有前途的技术建议中收集了一些元素,产出了审议测试模型的第一个版本(TMuC)。会后实现了相应的代码库。一些关键性的技术已经在《IEEE 视频技术系统和电路汇报》里预先讨论了。虽然TMuC在前代标准基准上有显著的效率提升,但在每个功能块中都存在多余的编码工具,它还是一个来自各种贡献的简单集合体。 

2010年7月JCT-VC第2次会议,开始通过测试TMuC每个组件的方式选择每个功能块所需编码工具的最小集。 

2010年10月JCT-VC第3次会议,在详尽的组件测试的结果报告基础上,完成了HEVC测试模型版本1(HM 1)和相应的HEVC标准草案1(WD 1)。和TMuC相比,HM 1通过删除没必要的高复杂度的编码工具,大大地简化了代码库。 

随后的研究中,HM的编码工具被分为2类:追求高效率或低复杂度的。JCT-VC它们分别建立了测试场景。下表简述了HM 1中这两个方向的编码工具。 

HMcodingtool 

JCT-VC第4次到第11次会议中,除了编码效率,包括降低实现复杂度、统一编码工具、并行化设计等很多其它方面也被纳入研究范围。HEVC设计持续更新下,高效率和低复杂度之间的差异逐渐缩小,达成一个统一的Main Profile。下表简述了配置为高效率的HM 1和目前HEVC标准中的编码工具。 

HEVCcodingtool 

2012年2月JCT-VC第8次会议,产出了HEVC标准草案第6版,ISO/IEC草案委员会投票通过。 

2012年7月JCT-VC第10次会议,草案的第8个版本发布,作为国际标准草案投票,最终决定2013年1月作为ITU-T和ISO/IEC的最终国际标准草案发布。 

JCT-VC的母体目前已经在探索和准备HEVC未来的扩展。很可能支持更高精度的采样深度、增强的色彩采样、可伸缩编码、3D和多视角视频编码(以及为高级的3D显示器深度映射编码)等特性。 

HEVC标准概览(七)总结 

ITU-T VCEG和ISO/IEC MPEG合作开发了HEVC标准,当中包含了现代的高级视频编码技术。 

HEVC视频编码层的基本设计依然是传统基于块的运动补偿混合编码,但相对前代标准作出了许多重要改进。 

新特性共同发挥作用时,HEVC相对前代标准可以节省50%的码率(针对高分辨率视频尤为有效)。 

编码性能上的细节,可以参见J.-R. Ohm、G. J. Sullivan、H. Schwarz, T. K. Tan和T. Wiegand的《Comparison of the coding efficiency of video coding standards— Including High Efficiency Video Coding (HEVC)》。 

实现复杂度的分析超出了本文的范围。但现代处理器技术之下,解码器的复杂度并不是主要的负担(相对H.264/AVC),编码器的复杂度也是可控的。实现复杂度上的细节,可以参见F. Bossen、B. Bross、K. Sühring和D. Flynn的《HEVC complexity and implementation analysis》。 

标准的更多信息可以在JCT-VC的文档管理系统(http://phenix.int-evry.fr/jct/)查阅。 
致谢 

感谢ITU-T VCEG、ISO/IEC MPEG和JCT-VC专家们的贡献。 

你可能感兴趣的:(h264/h265,hevc简介)