笔记:新一代高效视频编码H.265/HEVC原理、标准与实现

第一章绪论

3个色彩基本分量,或亮度和色度分量。

每秒播放的帧的数目叫做帧率,单位fps。为了使人眼能够有平滑连续的感受,视频的帧率需要达到25~30 fps以上。

H.265/HEVC几乎在每个模块都引入了新编码技术

1.帧内预测

2.帧间预测

3 变换量化

4 去方块滤波

5 样点自适应补偿(sample adaptive offset,SAO)滤波处于去方块滤波之后,通过解析去方块滤波后的像素的统计特性,为像素添加相应的偏移值,可以在一定程度上削弱振铃效应。

6 熵编码

特色编码技术:

1 编码单元:CTU(coding tree unit)编码树单元和编码树模块(coding tree block CTB)

2 改进的帧内预测技术

3 先进的帧间预测技术

4 RQT(residual quad-tree transform是一种基于四叉树自适应变换)技术:

5 ACS(adaptive coefficient scanning)技术:对角扫描、水平扫描、垂直扫描。 

6 SAO技术(sample adaptive offset,SAO)

7 IBDI(Internal bit depth increase)技术是指在编码器的输入端将未压缩图像像素深度由P比特增加到Q比特(Q>P),在解码器的输出端又将解压缩图像像素深度从Q比特恢复到P比特。IBDI 结束提高了编码器的编码精度,降低了帧内/帧间预测的误差。

第二章 数字视频格式

时间分辨率:每秒图像的帧数即帧率。

空间分辨率:图像的像素行数及每行的像素数表示,空间分辨率越高,图像的细节越清晰。

颜色空间:也称为色彩模型。

(1)RGB颜色空间:RGB颜色空间的分量与亮度密切相关,即只要亮度改变,3个分量都会随之相应改变,并不适用于图像处理。

(2)YUV颜色空间:Y表示明亮度,也就是灰阶值,而U和V表示的是色度,用于指定像素的颜色。亮度是通过RGB输入信号来建立的,方法是将RGB信号按特定比列叠加到一起,色度U反映的是RGB输入信号蓝色部分与信号亮度值之间的差异。色度V反映了RGB输入信号红色部分与信号亮度值的差异。

(3)YCbCr颜色空间:

第三章 编码结构

3.1编码结构描述

在视频编码中,存在2种GOP类型,封闭式GOP和开放式GOP,在封闭式GOP类型中,每一个GOP以IDR图像开始。各个GOP之间独立编解码。在开放式GOP类型中,第一个GOP中的第一个帧内编码图像为IDR图像,后续GOP中的第一个帧内编码图像为non-IDR图像,也就是说,后面GOP中的这件编码图像可以越过NON-IDR图像,使用前一个GOP钟的已编码图像做参考图像。

每个GOP又被划为多个片(slice),片与片之间进行独立编解码。其主要目的之一是在数据丢失情况下进行重新同步。每个片由一个或多个片段(slice segment ss)组成。

每个CTU包括一个亮度树形编码块和两个色差 树形编码快,一个SS在编码时,先被分割为相同打下的CTU,每一个CTU按照四叉树分割方式被划分为不同类型的编码单元。slice到CU的之间的编码结构。

GOP->SS->CTU->一个CTB 

                             二个色差树形编码模块

码流结构:将属于GOP层、slience层中共用的大部分语法元素游离出来,组成序列参数集(SPS)和图像参数集(PPS).SPS包含了CVS(code video sequence)中所有图像共用的信息。

SPS 的内容大致包括解码相关的信息,如档次级别、分辨率、某档次中编码工具开关表示和设计的参数、时域可分级信息等。

PPS包含一幅图像所用的公共参数,即一幅图像中所有SS引用同一个PPS。

H265的语法架构增加了视频参数集,某内容大致包括多个子层共享的语法元素,其他不属于SPS的特定信息等。

对于一个SS,通过引用它所使用的PPS,该PPS又引用其对应的SPS,该SPS又引用它对用的VPS,最终得到SS的共用信息。

参数集是一个独立的数据单位,它包含视频的不同层级编码单元的共享信息 ,只有当参数集直接或间接被SS引用时才生效。一个参数集并不对应某个特定的图像或CVS,同一个VPS或SPS可以被多个CVS引用,同一个PPS可以被多个图像引用。

NAL单元根据是否装在视频编码数据被分为VCLU(video coding layer nal unit)和non-VCLU。非编码数据的参数集作为non-VCLU进行传输,这为传递关键数据提供了高鲁棒机制。

参数集的独立使得其可以提前发送,也可以在需要增加新参数集的时候在发送,可以被多次重发或者采用特殊技术加以保护,甚至采用带外(out-of-band)发送的方式。片段SS是视频编码数据的基本单位,

一个SS的压缩数据生成一个VCLU进行数据传输。

片段SS是视频编码数据的基本单位,一个SS的压缩数据生成一个VCLU进行传输。最终,一个视频序列的编码码流由一系列SS所生成的多个VCLU单元和夹杂其间的一些分割标示数据和参数集数据组成。分割标示数据用于区分一个SS属于那副图像,那个CVS。

3.2 视频参数集

3.2.1 视频层描述

H.265/HEVC中引入VPS,以克服H.264/AVC中存在的不足,同时设计简洁,可扩展多层视频编码提供方便。VPS主要用于传输视频分级信息,由利于兼容标准在可分级视频编码或多视点视频编码的扩展。

一个给定的视频序列,无论它每一层的SPS是否相同,都参考相同的VPS,VPS包含的信息有:

1)多个自层和操作点共享的语法元素。

2)回话所需的有关操作点的关键信息,如档次、级别。

3)其他不属于SPS的操作点特性信息,例如与多层或子层相关的虚拟参考解码器(Hypothetical Reference Decoder HRD)参数。对每个操作点的关键信息的编码,不要求可变长编码,这样有利于减轻大多数网络组成单元的负担。

3.3 序列参数集

一个CVS由一个随机接入点开始,第一幅图像可以是IDR图像,也可以是non-IDR图像。non-IDR图像可以是BLA(BROKEN LINK ACCESS) 图像或CRA(clean Random Access)图像。对于一段视频码流,其可能包含一个或者多个编码视频序列CVS,序列参数集SPS的内容激素hi包含一个CVS中所有编码图像的共享编码参数,SPS通过被PPS引用而作用于编码图像,一个CVS中所有被使用的PPS必须引用同一个SPS。

3.4 图像参数集

在编码视频流中,一个CVS包含了多幅图像,每幅图像可能包括一个或多个SS,每个SS头提供了其所引用 的PPS标识号,以此得到相应PPS中的公用信息。对于同一幅图像,其内所有的SS都用同一个PPS。需要注意的是,PPS中存在一些与SPS中相同的参数,PPS中的这些参数将会SPS中他们的取值,也就是说SS使用PPS中的这些参数进行解码。在解码开始时,所有的PPS 全部是非活动状态,而且在解码的任意时刻最多只能由一个PPS处于激活状态。

3.5 片段层

3.5.1 片与片段

一幅图像可以被分割为一个或多个片(slice),每个片的压缩数据都是对了的,slice头信息无法通过前一个slice的头信息得到。这就要求slice不能跨过它的边界来进行帧内或帧间预测,且在进行熵编码前需要进行初始化。但在进行环路滤波时,允许滤波器跨越slice边界进行滤波。除了slice边界可能受环路滤波影响外,slice的解码过程可以不适用任何来自其他slice的影响,且有利于实现并行运算,使用slice的主要目的是当数据丢失后能在次保证解码同步。  

根据编码类型不同,slice可分为以下几部分

I Slice 该slice中所有CU编码过程都使用帧内预测。

P Slice 在I slice的基础上,该slice中的CU还可以使用帧间预测,每个预测快(PB)使用之多一个运动补偿预测信息。P slice 只使用图像参考列表lsit0.

B Slice 可以使用 list0 and list1

3.6 Tile单元

一副图像不仅可以划分为若干个slice,也可以划分为若干个title,即从水平和垂直方向将一副图像分割为若干矩形区域,一个矩形区域就是一个tile.没个tile包含整数个CTU,其可以独立解码。

3.6.2

slice和tile划分的目的都是为了进行独立解码。

Slice由一系列的SS组成,一个SS由一系列的CTU组成。tile直接由一系列的CTU组成。

SLICE/SS和TILE之间唏嘘遵守一些基本原则。

1.一个Slice/SS中的所有CTU属于同一个tile.

2.一个Tile中的所有CTU属于同一个slice/ss

3.7 树形编码块

H.265/HEVC标准中引入树形编码单元CTU,其尺寸由编码器指定,且可大于宏块尺寸。同一位置处的一个亮度CTB和两个色度CTB,再加上相应的语法元素形成一个CTU。

编码单元CU

预测单元PU

变换单元TU

第四章 预测编码

先进的视频编码往往采用帧内预测和帧间预测的方式,使用图像内已编码像素预测临近像素,或利用已编码图像预测待编码图像,从而有效去除视频空域和时域相关性。视频编码器对预测后的残差而不是原始像素值进行变换、量化、熵编码,由此大幅提高编码效率。

第五章 变换编码

图像变换编码时指将空间域中像素形式描述的图形转换至变换域,以变换系数的形式加以表示。绝大多数图形都含有较多平坦区域和内容变化缓慢的区域,适当的变换可使图像能量在空间域分散发布专为在变换域的相对集中分布,以达到去除空间冗余的目的。

5.1 离散余弦变换

5.1.1 DCT原理及特点

傅里叶变换表明,任何信号都能表示为多个不同振幅和频率的正弦波或余弦波信号的叠加。如果采用的是余杭函数,则信号分解过程称为余弦变换;若输入信号是离散的,则称之为离散余弦变换。数学上一共有8种类型8DCT。

5.2 离散正弦变换:存在8种类型的DST.

5.4 哈达玛变换

第6章 量化

量化是指将信号的连续取值(或大量可能的离散取值)映射为有限多个离散幅值的过程,实现信号取值多对一的映射。在视频编码中,残差信号经过离线余弦变换(DCT)后,变换系数往往具有较大的动态范围,因此对变换系数进行量化可以有效地较小信号取值空间 ,进而获得更好的压缩效果。同时,由于多对一的映射机制,量化过程不可避免地会引入失真,它也是视频编码中产生失真的根本原因。由于量化同时影响着视频的质量与比特率,因此量化是视频编码中非常重要的一个环节。

6.1 标准量化

6.2 均匀量化

6.3 Lioyd-Max量化器

6.4 熵编码量化器 

第七章 环路后处理

环路滤波技术,包括去方块滤波和像素自适应补偿两个模块。取方块滤波用于减低方块效应,像素自适应补偿用于改善振铃效应。

去方块滤波包括两个环节:滤波决策和滤波操作。

像素自适应补偿:对于图像你的强边缘,由于高频交流系数的量化失真,解码后在变会员周围产生波纹现象,这种失真被称为振铃效应

第八章 熵编码

熵编码是指按信息上元里进行的无损编码方式。熵编码可以有效去除视频元素符号的统计冗余,是保证视频编码压缩效率的中重要工具之一。

香农给出信息的定义:信息是事物运动状态或存在方式的不确定性的描述。

变长编码:哈夫曼编码

        指数哥伦布码

哈夫曼码的补规则结构导致了哈夫曼码的不足,指数哥伦布码是其中应用比较广泛的。

零阶指数哥伦布编解码简单,且对广义高斯信源的压缩也较高,在H.265/HEVC中,零阶指数哥伦布编码方法被用于视频参数集(VPS)、序列参数集(SPS)、图像参数集(PPS)

和片头信息等所涉及的大部分语法元素中。

第九章

网络适配层

H.265也采用了视频编码层和网络适配层的双层架构,以适应不同的网络和视频应用。网络适配层的主要任务就是对视频压缩后的数据进行划分和封装。并进行必要的标识,并进行必要的标识,使其可以很好地适应复杂多变的网络环境。

对网络工程师来说。了解编码原理、分析压缩视频流也有较大的难度。因此NAL直接根据视频数据的特性对压缩视频流进行封装和标识,使其可以被网络识别并进行优化处理。

NAL根据压缩视频比特流的内容特性将其划分成多个数据段,对每个数据段进行封装并对其内容特性进行标识,就生成了NALU,其内容特性信息存放于NALU头信息中。

NALU产生了几种组合形式:一个网络分组包含一个NALU:一个网络分组包含多个NALU,集多个NALU合并到一个网络分组;多个网络分组包包含一个NALU,即一个NALU被分割到多个网络分组;网络传输过程中,网络设备可以直接通过NALU的头信息获取NALU承载视频数据的内容特性,在此基础上优化视频流的传输,针对网路拥塞引起的求其分组问题,网络设备需要清楚各个分组的优先级,这可以直接通过NAL头信息获得。

图像类型:

所有的压缩视频数据都被封装到不同NALU的荷载部分,NALU除了承载VPS、SPS、PPS,主要承载视频片(slice)的压缩数据,承载视频片压缩数据的NALU倍称为VCLU(VCL NALU),承载其他信息的NALU倍称为non-VCL NALU).h.265/hevc中每个VCLU包含一个视频片段(SS)的压缩数据,承载视频片压缩数据的NALU倍称为VCLU(VCL NALU),承载其他信息的NALU倍称为non-VCLU。H.265/HEVC中每个VCLU包含一个视频片段SS(slice segment)的压缩数据。SS是VCL的压缩数据输出单位。

解码顺序也为压缩码流中图像的顺序。图像应按照时间顺序播放。

一段视频流总通常会间隔地存在一些随机接入点(intra random access point IRAP).从IRAP开始,后续视频流(播放顺序在IRAP后的图像)可以独立正确的解码,无需参考IRAP前面的信息。IRAP后的第一幅解码图像被称为IRAP图像,解码顺序在IRAP图像后而播放顺序在其前的图像被称为该IRAP图像的前置图像,播放顺序在IRAP图像后(解码顺序必在其后)的图像被吃完呢位该IRAP图像的后置(trailing )图像。

前置图像又分为RADL(Random Access Decodable Leading) 图像和RSAL(Random Access Skipped Leading。依赖IRAP前码流信息的前置图像被称为RASL图像,即从IRAP图像介入,其RASL图像补鞥呢正确解码。

3种IRAP图像:IDRP CRA BLA.IDR图像在H.264 种就做IRAP图像使用,IDR图像要求其前置图像必须使RADL图像,也就是说IDR图像及其后续码流可以不依赖该IDR图像前的视频流信息进行独立解码。CRA图像则允许其前置图像时RASL图像,允许参考CRA图像前的视频流可以使RASL图像获得更高的编码效率。

CVS定义为连个相邻IRAP图像之间这段视频流。CVS包含的编码图像组如同早期标准中的GOP,是一个相对可以独立编码的单位。编码过程中通常以CVS为单位设置固定的时域编码结构。IDR图像将视频流划分而成的CVS具有一定的独立性。不同CVS内的视频压缩数据不糊相互参考,常被称为封闭式GOP,CRA图像将视频流划分成的CVS独立性较差,不同CVS中的图像可能会相互参考。这被称为开放式GOP.

9.3网络适配层单元

每一个NALU包含两部分:NALU(header)和NALU载荷(payload).NALU头长度为固定的两字节。反映NALU的内容特征。NALU载荷长度为整数字节,承载视频压缩后的比特流片段。

9.3.1 NALU 载荷

RBSP尾由称为RBSP(RAW BYTE SEQUENCE PAYLOAD )停止比特的一个比特1和其后的零个或多个比特0组成。RBSP即为整数字节化的SODB,RBSP的数据类型即为SODB的数据类型。

RBSP不能直接直接做诶NALU的载荷,因为字节流应用环境中0x000001为NALU的起始码,0x000000为结束码,因此未来避免NALU载荷中的字节流片段与NALU的起始码、结束码冲突、需要对RBSP字节流做如下冲突避免处理。

0x000000->0x00000300

0x000001->0x00000301

0x000002->0x00000302

0x000003->0x00000303

RBSP数据的最后一个字节等于0x00时(这种情况只会在RBSP的末尾是cabac_zero_word),字节0x03会被加入到数据的末尾。

9.4视频比特流中的NALU

压缩视频比特流由一个个连续排列的NALU组成,其顺序应与解码顺序一致。在H.265/HEVC中引入了接入单元(access unit AU)的概念,它定义为多个按解码顺序排列的NALU,这些NALU解码正好生成一个图像。AU可以看成压缩视频比特流的基本单位,压缩视频流由多个按顺序排列的AU组成。每个NALU都会属于某个AU单元,压缩视频流的第一个NALU则为第一个AU的第一个NALU。

9.4.2 不同的参数集VPS、sps和PPS都作为独立的数据单元生成相应的NALU,不同的参数集应遵循不同的使用方式,VPS和SPS包含了一个CVS的共有参数信息,一个CVS智能使用同一个VPS和SPS。PPS包含了一副图像的共有参数信息一副图像只能使用一个PPS。

PPS包含的参数信息可以被属于一幅图像或多幅图像的NALU调用。每个PPS在解码过程刚开始的时候不会被q,同一个时刻最多只有一个PPS在解码过程中被启动,而每个PPS的启动会使得之前的PPS失效。

SPS包含一个CVS共用的参数信息,可以被一个或多个PPS使用或者被一个或多个SEI NALU使用。每个SPS在解码过程刚开始的时候不会被启动,同一时刻最多只能有一个SPS在解码过程中被启动。

VPS包含一个CVS工友的参数信息,可以被一个或多个SPS使用,或者一个或多个SEI NALU使用。每个VPS在解码过程刚开始的时候不会被启动,同一时刻只能有一个SPS在解码过程中被启动,而每个VPS的启动会使得之前的VPS失效。

9.5 网络适配层单元的应用

一个H.265/HEVC 视频流只在一个RTP会话中传输的情况(single-session Transmission ,sst),一个H.265/HEVC视频流在多个RTP会话中传输的情况(MST)。

压缩视频业务分成2种应用场景:

1.分组流:分组流应用是指直接将编码器输出的NALU作为网络分组的有效载荷,接受端的解码器可以从网络分组中直接以NALU的形式获取压缩视频数据,如基于RTP/UDP/IP的实时视频通信。

根据承载NALU的数量。 

    一:单NALU分组:一个分组只承载一个NALU

    二:聚合分组(Aggregation Packet ,AP)一个分组承载多个NALU。

    三:分片分组(Fragmentation Packet,FP)一个分组只承载一个NALU的一部分。这个最为普遍使用。

    RTP的载荷结构与RTP分组的类型相关,前两个字节称为荷载头,荷载头的结构与NALU头的结构相同,其每个域的值根据 承载NALU的头确定。

2.字节流:字节流应用是指NALU按照解码顺序组织成有序的连续字节或比特流进行传输、处理。为了保证解码器以NALU的形式获得视频数据,须在NALU边界插入同步标识。基于流的传输系统有H.320、MPEG-2.

猜你喜欢

转载自blog.csdn.net/Doubao93/article/details/118426164