HEVC标准概览

转载自:http://blog.yikuyiku.com/?p=3655

HEVC(高效视频编码标准)是ITU-T VCEG(国际电联电信标准化部视频编码组)与ISO/IEC MPEG(国际标准化组织国际电工委员会视频标准化组)的合作组织JCT-VC最新项目。ITU-T和ISO/IEC计划在2013年1月共同发布第一个版本(译者按:ITU-T已经在2013-01-25发布,标准可见JCT-VC草案10)。标准将会包含一系列的扩展,包括高精度色彩空间的支持、可伸缩编码(SVC)、3D与多视角视频。ISO/IEC将会把HEVC作为MPEG-H标准的第二部分(ISO/IEC 23008-2),ITU-T则会将其作为ITU-T的推荐标准 —— H.265。

在视频编码领域,ITU-T开发了H.261和H.263,ISO/IEC开发了MPEG-1和MPEG-4 Visual。它们共同开发的H.262/MPEG-2和H.264/MPEG-4 AVC标准产生了极大的影响,被广泛应用在各种产品中,对我们的生活产生了深刻影响。视频编码技术的发展一直致力于追求更高的压缩率,也不断增强其它特性,如恶劣网络下的传输,同时考量实现复杂度以及同时代数字设备的计算能力,以期能够广泛应用。

HEVC主要在H.264/MPEG-4 AVC的基础上发展而来。H.264/AVC项目1999-2003年间启动,2003-2009年间几经重要扩展,目前已经在每个H.262/MPEG-2标准没有覆盖到的领域内取代了之前的标准,成为了数字视频领域的使能技术。它的应用领域非常广,包括有高清电视信号的卫星传输、有线传输和其他地面传输系统、视频录制和编辑、摄像机、安防、互联网、移动网络视频、蓝光光碟、视频聊天、视频会议和远程演示等等。

如今视频服务越来越多样化,高清视频不断增长,甚至超高清视频(4kx2k、8kx4k分辨率)的需求也在逐步兴起。这些现实都在呼唤比H.264/AVC更高压缩效率的视频编码技术出现。尤其是超高分辨与3D和多视角复合使用的时候,对更高压缩效率的需求是十分强烈的。更高质量和分辨率的追求也会逐步反映在移动设备上,而只是目前来讲,移动设备和平板电脑视频的流量对移动网络已经造成了沉重的负担。

HEVC被设计来取代所有目前的H.264/AVC应用,它专注于两个关键问题:更高的视频分辨率和并行处理架构。它的码流尽量采用通用设计,以能被所有应用使用而不是只是和特定应用或设备适配。

与之前ITU-T和ISO/IEC开发的视频编码标准一样,HEVC标准只包含码流的语法结构以及码流和解码视频间的映射关系。编码和解码的具体实现只要遵循标准中语法元素的语法语义和约束就可以与其它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从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中的语法更加简化了。

一、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数量。


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值