常见编解码器

1.H264

概述

H.264/MPEG-4第10部分,或称AVC(Advanced Video Coding,高级视频编码),是一种视频压缩标准。一种被广泛使用的高精度视频的录制、压缩和发布格式。第一版标准的最终草案于2003年5月完成。

H.264/MPEG-4 AVC是一种面向块的基于运动补偿的编解码器标准。

由ITU-T视频编码专家组与ISO/IEC联合工作组——即动态图像专家组(MPEG)——联合组成的联合视频组(JVT,Joint Video Team)开发。

因ITU-T H.264标准和 ISO/IEC MPEG-4 AVC标准(正式名称是ISO/IEC 14496-10 — MPEG-4第十部分,高级视频编码)共同管理。

H.264因其是蓝光盘的一种编解码标准而著名,所有蓝光盘(blue-ray)播放器都必须能解码H.264。它也被广泛用于网络流媒体数据如Vimeo、YouTube、以及Apple的iTunes Store,网络软件如Adobe Flash Player和Microsoft Silverlight,以及各种高清晰度电视陆地广播(ATSC,ISDB-T,DVB-T或DVB-T2),线缆(DVB-C)以及卫星(DVB-S和DVB-S2)。

新特性

H.264/AVC包含了一系列新的特征,使得它比起以前的编解码器不但能够更有效的进行编码,还能在各种网络环境下的应用中使用。

1.多参考帧的运动补偿。

比起以前的视频编码标准,H.264/AVC以更灵活的方式使用已编码的更多帧来作为参考帧。在某些情况下,可以使用最多32个参考帧(在以前的标准里面,参考帧的数目不是1就是对B帧来说的2)。

该特性对大多数场景串行都可以带来一定的码率降低或者质量提高。对某些类型的场景串行,例如快速重复的闪光,反复的剪切或者背景遮挡的情况,它能很显著的降低编码的码率。

2、变块尺寸运动补偿。

可使用最大16x16至最小4x4的块来进行运动估计与运动补偿,能够对图像串行中的运动区域进行更精确的分区。这些类型共有16×16、16×8、8×16、8×8、8×4、4×8、4×4。

为了减少混叠(Aliasing)并得到更锐化的图像,采用六抽头的滤波器(六阶数字滤波器)来产生二分之一像素的亮度份量预测值。

3、宏块对结构允许场模式中采用16x16的宏块(相对于MPEG-2中的16x8)。

4、1/4像素精度的运动补偿能够提供更高精度的运动块预测,由于色度通常是亮度抽样的1/2(参见4:2:0),这时运动补偿的精度就达到了1/8像素精度。

5、加权的运动预测,指在运动补偿时可以使用增加权重和偏移的办法。它能在一些特殊的场合,如淡入、淡出、淡出而后淡入等情况提供相当大的编码增益。

6、使用了一个Loop的除块效应滤波器,能够减轻普遍存在于其他基于离散余弦变换(DCT)的视频编解码器的块效应。

7、一个匹配的整数4x4变换(类似于离散余弦变换的设计),同样在高精度拓展中,采用整数8x8变换,并能在4x4变换和8x8变换中进行自适应的选择。

8、在第一次4x4变换后,对DC系数(色度的DC系数和某种特殊状况的亮度DC系数)再进行一次Hadamard变换,使得在平滑区域得到更好的压缩效果。

9、利用临近块的边界像素的Intra空间预测(比曾在MPEG-2视频部分使用的直流系数预测和在H.263+和MPEG-4视频部分使用的变换系数预测的效果要好)。

10、基于上下文的二元算数编码(CABAC),它能够灵活的将各种语法元素,在已知相应上下文概率分布的状况下进行更有效的无损熵编码。

11、基于上下文的变长编码(CAVLC),用于对量化后的变化系数进行编码。比起CABAC它的复杂度相对较低,压缩比不高,但是比起以前的视频编码标准所使用的熵编码方案,它又是相当有效的。

12、对既不是用CABAC也不是用CAVLC的语法元素,使用指数哥伦布码(Exponential-Golomb,Exp-Golomb)熵编码方案,进行编码。

13、使用一个网络抽像层 (NAL),使得相同的视频语法可以适用于多种网络环境中;并且使用了串行参数集(SPSs)和图像参数集(PPSs)来提供更高的强健性(robustness)和灵活性。

14、切换条带(Switching slices,包括SP和SI两种),它使得编码器能够指令解码器跳转到一个正在处理的视频码流,用来解决视频码流码率切换和"窍门模式"(Trick mode)操作。当解码器利用SP/SI条带跳转到一个视频码流中间时,除非之后的解码帧引用/

15、换帧之前的图像作为参考帧,它都可以得到完全一致的解码重建图像。

16、灵活的宏块排列模式(FMO for Flexible macroblock ordering,也被称为条带组slice groups技术)和任意条带排列(ASO for arbitrary slice ordering)模式,用来更改图像编码的最基本单位-宏块的编码顺序。它能够用来提高有绕信道下码流的强韧性(robustness)以及一些其它的目的。

17、数据分区(DP for Data partitioning),能够将重要程度不同的语法元素分开打包传输,并使用非平等数据保护(UEP for unequal error protection)等技术来改善视频码流对抗信道误码/丢包的强韧性(Robustness).

18、冗余条带(RS for Redundant Slices),同样是一个提高码流鲁棒性的技术。编码器利用该技术可以发送图像某区域(或者全部)的另一个编码表示(通常是较低分辨率的编码码流)使得当主表示发生错误或者丢失的时候能够用冗余的第二个编码表示来解码。 19、使用了一个自动的字节码流打包方法,避免了码流中出现与开始码重复的码字。开始码是码流中用于随机访问和重建同步的码字。

20、补充增强信息(SEI for Supplemental Enhancement Information)和视频可用信息(VUI for Video Usability Information)增加了向视频码流中加入信息的办法,为各种应用提供了用途。 辅助图层(Auxiliary pictures),可以用来实现某些特殊的功能,例如alpha复合(alpha compositing)。

21、帧编号,使用该功能支持创建一个视频串行的子串行,可用来支持实现时域的可伸缩性,还支持对丢失的整帧图像进行检测和隐藏(丢失可能是由于网络丢包或者信道误码造成的)。

22、图像顺序计数,使用该功能使得各帧图像的顺序和解码图像的像素值与时间信息无关,即使用一个单独的系统对时间信息进行传输、控制、更改,从而不影响解码图像的像素值。

参考文档

H.264/AVC也提供了一个参考软件JM(http://iphome.hhi.de/suehring/tml/)以及开源的快速实现x264(http://www.videolan.org/x264.html),并可以免费下载。

应用领域和实现

苹果公司已经将H.264集成进入Mac OS X版本v10.4(昵称Tiger),并于2005年5月发布了支持H.264的QuickTime版本7.0。

第三代移动通信合作组织(3GPP)已经在第六次发布中批准H.264/AVC作为其移动多媒体电话服务标准的可选技术。

美国国防部下的运动图像标准协会(MISB for The Motion Imagery Standards Board)已经接受H.264/AVC为其核心应用的推荐视频编解码器。

互联网工程工作小组(IETF)已经完成了一个负载打包格式(RFC 3984)作为在其实时传输协议(RTP)上传输H.264/AVC码流的打包办法。

互联网流媒体协会(ISMA for Internet Streaming Media Alliance)已经接受H.264/AVC作为其ISMA 2.0的技术规范。

MPEG组织将H.264/AVC完全的集成进入了它的系统协议(例如MPEG-2和MPEG-4系统)和ISO媒体格式协议。

国际电信联盟ITU-T标准组已经采纳H.264/AVC作为其H.32x系列的多媒体电话系统的系统规范的一部分。ITU-T的采纳,使得H264/AVC已经被广泛的使用在视频会议系统中,并获得了视频电话主要的两家产品提供商(Polycom和Tandberg的支持。实际上所有新的视频会议产品都支持H.264/AVC。

H.264将很可能被各种视频点播服务(Video-On-Demand,VOD)使用,用来在互联网上提供电影和电视节目直接到个人电脑的点播服务。

H.264/MPEG-4 AVC SVC

可伸缩视频编码(Scalable Video Coding, SVC)是传统H.264/MPEG-4 AVC编码的改进。可提升更大的编码弹性,并具有时间可伸缩(Temporal Scalability)、空间可伸缩(Spatial Scalability)及信噪比可伸缩(SNR Scalability)三大特性,使视频传输更能适应在异质的网络带宽。

SVC的目标在于标准化已使编码的高品质的视频码流,其中包含一个或多个子位流(subset bitstream)进行解码, 可以自己用一个复杂和重建质量达到类似的利用现有的H.264/MPEG- 4 AVC的设计与相同数量的数据码流中的一个子集。

一个子集码流(subset bitstream)可以代表一个较低的空间或时间分辨率较低或质量的视频信号(每个单独或组合)相比。

时间(帧速率)的可扩展性:运动补偿,使依赖的结构完整的图片(即他们相关的数据包)可以从bitstream中被丢弃。(时间可扩展性已经启用的H.264/MPEG-4 AVC的。SVC还加强信息只提供参考,以改善其使用量。)

空间(图片大小)的可扩展性:视频编码是在多个空间分辨率。解码后的数据和样品较低的分辨率可以用来预测数据或样本,更高的分辨率,以降低bitrate更高的分辨率。

信噪比/质量 /富达可扩展性:编码视频是在一个单一的空间分辨率,但在不同的品质(qualities)。解码后的数据和样品素质较低,可用于预测数据或样本的高品质,减少bitrate以取得较高的品质(qualities)。

联合可扩展性(Combined scalability):结合上述三个扩展性。

技术细节

Scalable Video Coding包含了若干可伸缩的配置: Scalable Baseline, Scalable High, Scalable High Intra, Scalable Constrained Baseline and Scalable Constrained High Profile。

这些配置组合了基准层的H.264/MPEG-4 AVC的配置以及用于可伸缩的扩展工具:

Scalable Baseline Profile:面向会话、移动和监控应用,基本层为H.264/MPEG-4 AVC Baseline Profile,支持B slices,加权预测weighted prediction, CABAC 熵编码,增强层的8×8亮度变换,而基本层没有这些增强工具,空间可伸缩被限制在水平和垂直分辨率比值在1.5和2之间;而质量和时间可伸缩则没有限制。

Scalable High Profile:面向广播、流媒体、存储和视频会议的应用。基本层为H.264/MPEG-4 AVC High Profile,支持Scalable Video Coding扩展中的所有工具,空间分辨率、质量和时间可伸缩则没有限制。

Scalable High Intra Profile:面向专业应用,只采用瞬时解码刷新图像 Instantaneous Decoder Refresh (IDR)。IDR图像不会以之前的图像作为参考, 基本层为H.264/MPEG-4 AVC High Profile的只有IDR图像的模式;空间分辨率、质量和时间可伸缩则没有限制,但只对IDR图像有意义。

基本概念

1、VCL & NAL

H264原始码流是由一个接一个NALU(NAL Unit)组成,它的功能分为两层,VCL(Video Coding Layer)视频编码层和 NAL(Network Abstraction Layer)网络提取层。

VCL:包括核心压缩引擎和块、宏块和片的语法级别定义,设计目标是尽可能地独立于网络进行高效的编码。

NAL:负责将 VCL 产生的比特字符串适配到各种各样的网络和多元环境中,覆盖了所有片级以上的语法级别。

NAL是 H.264 为适应网络传输应用而制定的一层数据打包操作,传统的视频编码算法编完的视频码流在任何应用领域下(无论用于存储、传输等)都是统一的码流模式,视频码流仅有视频编码层 VCL(Video Coding Layer),而 H.264 可根据不同应用增加不同的 NAL 片头,以适应不同的网络应用环境,减少码流的传输差错。

在 VCL 进行数据传输或存储之前,这些编码的 VCL 数据,被映射或封装进NAL单元(NALU),一个 NALU = 一组对应于视频编码的 NALU 头部信息 + 一个原始字节序列负荷(RBSP,Raw Byte Sequence Payload)。

一个原始的 H.264 NALU 单元常由 [StartCode] [NALU Header] [NALU Payload] 三部分组成,其中 Start Code 用于标示这是一个NALU 单元的开始,必须是 “00 00 00 01”,实际原始视频图像数据保存在 VCL 分层的 NAL Units 中。

2、片(slice)

一个片 = Slice Header + Slice Data

片是 H.264 提出的新概念,实际原始视频图像数据保存在 VCL 层级的 NAL Unit 中,这部分数据在码流中被称作是片(slice)。

一个 slice 包含一帧图像的部分或全部数据,换言之,一帧视频图像可以编码为一个或若干个 slice。

一个 slice 最少包含一个宏块,最多包含整帧图像的数据。

在不同的编码实现中,同一帧图像中所构成的 slice 数目不一定相同。

一个 slice 编码之后被打包进一个 NALU,所以 slice = NALU。

设置片的目的是为了限制误码的扩散和传输,应使编码片相互间是独立的。

某片的预测不能以其他片中的宏块为参考图像,这样某一片中的预测误差才不会传播到其他片中。

若干宏块(Macroblock)被排列成片。

一个视频图像可编成一个或更多个片,每片包含整数个宏块 (MB),每片至少包含一个宏块。

​I slice 只包含 I 宏块 ​P slice 包含 P 和 I 宏块 ​B slice 包含 B 和 I 宏块 ​SP slice 包含 P 或 I 宏块,用于不同码流之间的切换 ​SI slice 一种特殊类型的编码宏块 ​
每一个 slice 总体来看都由两部分组成,一部分作为 slice header,用于保存 slice 的总体信息(如当前 slice 的类型等),另一部分为 slice body,通常是一组连续的宏块结构(或者宏块跳过信息)

3、宏块(Macroblock)

宏块是视频信息的主要承载者。

一个编码图像通常划分为多个宏块组成,包含着每一个像素的亮度和色度信息。

视频解码最主要的工作则是提供高效的方式从码流中获得宏块中像素阵列。

一个宏块由一个 16×16 亮度像素和附加的一个 8×8 Cb 和一个 8×8 Cr 彩色像素块组成。

宏块分类 意义

I 宏块 利用从当前片中已解码的像素作为参考进行帧内预测

P 宏块 利用前面已编码图像作为参考进行帧内预测

B 宏块 利用双向的参考图像(当前和未来的已编码图像帧)进行帧内预测

4、帧(frame)和场(filed)

视频的一场和一帧用来产生一个编码图像,一帧通常是一个完整的图像。

当采集视频信号时,如果采用隔行扫描(奇、偶数行),

则扫描下来的一帧图像就被分成了两个部分,这每一部分都被称为 [场],根据次序,分为 [顶场] 和 [底场]。

人眼可察觉到的电视视频图像刷新中的闪烁为 0.02 秒,即当电视系统的帧率低于 50 帧/秒,人眼可感觉得出画面的闪烁。

常规如 PAL 制式电视系统帧率为 25 帧/秒、NTSC 制式的则为 30 帧/秒,如果采用逐行扫描将不可避免地在视频刷新时产生闪烁现象。

而另一方面如果单纯的提高帧率达到避免闪烁刷新效果,则会增加系统的频带宽度。

在隔行扫描中,每一帧包含两个场(top field)和(bottom field),其中每个 field 包含一帧中一半数量的水平线,top field 包含所有奇数线,bottom field 则包含所有偶数线。

则在电视显示过程中,电子枪每发射一行隔一行—先发射奇数行13579…(top field)回头再发射2468…(bottom field)利用两次扫描来完成一幅图像,

因为视觉的滞留性,我们看到的效果是差不多的。如在 NTSC 视频中 frame 的频率为30次/秒-àfield的频率则为 60 次/秒,大于了人眼可察觉闪烁的频率。

帧编码方式 活动量较小或者静止的图像宜采用

场编码方式 活动量较大的运动图像

5、I 帧、P 帧、B 帧与 pts/dts

I 帧: 帧内编码帧,又称 intra picture(I 帧),通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象,I帧可以看成是一个图像经过压缩后的产物。

P 帧: 前向预测编码帧,又称 predictive-frame,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧。

B 帧:双向预测帧,又称 bi-directional interpolated prediction frame 既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧。

I frame: 自身可以通过视频解压算法解压成一张单独的完整的图片。

P frame:需要参考其前面的一个 I frame 或者 B frame 来生成一张完整的图片。

B frame: 则要参考其前一个 I 或者 P帧 及其后面的一个 P 帧来生成一张完整的图片。

PTS(Presentation Time Stamp) PTS 主要用于度量解码后的视频帧什么时候被显示出来。

DTS(Decode Time Stamp) DTS 主要是标识内存中的 bit 流什么时候开始送入解码器中进行解码。

DTS 主要用户视频的解码,在解码阶段使用。PTS主要用于视频的同步和输出,在 display 的时候使用。 再没有 B frame 的时候输出顺序是一样的。

6、GOP

GOP 是画面组,一个 GOP 是一组连续的画面。

GOP 一般有两个数字,例如 M = 3,N = 12,M 指定 I 帧与 P 帧之间的距离,N 指定两个 I 帧之间的距离。 那么现在的 GOP 结构是:I BBP BBP BBP BB I。

增大图片组能有效的减少编码后的视频体积,但是也会降低视频质量。

7、IDR

一个序列的第一帧叫做 IDR帧(Instantaneous Decoding Refresh,立即解码刷新)。

I 帧和 IDR 帧都是使用帧内预测,本质上是同一个东西,在解码和编码中为了方便,将视频序列中第一个 I 帧和其他 I 帧区分开,所以把第一个 I 帧称作 IDR,这样就方便控制编码和解码流程。

IDR 帧的作用是立刻刷新,使错误不致传播,从 IDR 帧开始,重新算一个新的序列开始编码,H.264 引入 IDR 帧是为了解码的重同步,当解码器解码到 IDR 帧时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。如果前一个序列出现重大错误,在这里可以获得重新同步的机会,IDR 帧之后的帧永远不会使用 IDR 之前的图像的数据来解码。

8、H264 码流分层结构

在 H264 中,句法元素共被组织成:序列、图像(帧)、片、宏块、子宏块五个层次。

句法元素的分层结构有助于更有效地节省码流。

例如,在一个图像中,经常会在各个片之间有相同的数据,如果每个片都同时携带这些数据,势必会造成码流的浪费。 更为有效的做法是将该图像的公共信息抽取出来,形成图像一级的句法元素,而在片级只携带该片自身独有的句法元素。

9、NALU Header & RBSP 结构

NALU = NAL Header + RBSP

每个 NALU 由一个字节的 Header 和 RBSP(Raw Byte Sequence Payload) 组成。

NALU Header 由三部分组成,forbidden_bit(1bit),nal_ref_idc(2bits)代表优先级,nal_unit_type(5bits)代表该 NALU 的类型。

forbidden_zero_bit:1 bit,H264 规定此位必须为 0

nal_ref_idc:用于表示当前 NALU 的重要性,值越大,越重要,解码器在解码处理不过来的时候,可以丢掉重要性为 0 的 NALU。

nal_ref_idc 不等于 0 时, NAL unit 的内容可能是 SPS/PPS/参考帧的片,nal_ref_idc 等于 0 时,NAL unit 的内容可能是非参考图像的片,当某个图像的片的 nal_ref_id 等于 0 时,该图像的所有片均应等于 0 ,nal_unit_type 是否包含 VCL 层编码数据分为 VCL NAL units 和 non-VCL NAL units。

VCL NAL units 中包含 VCL 层编码输出的数据, 而 non-VCL NAL units 则不包含。

例如:

  0  1  2  3  4  5  6  7
+--+--+--+--+--+--+--+--+
|0 |  1  |  nalu type   |
+--+--+--+--+--+--+--+--+

第一个字节 静止位,标志是否可用。

SODB 与 RBSP SODB 数据比特串 -> 是编码后的原始数据. RBSP 原始字节序列载荷 -> 在原始编码数据的后面添加了结尾比特。一个 bit “1” 若干比特 “0”,以便字节对齐。

2.H.265

简介

高清晰度: 数字视频的应用格式从720P向1080P全面升级,在一些视频应用领域甚至出现了4K×2K、8K×4K的数字视频格式。 高帧率: 数字视频帧率从30fps向60fps、120fps甚至240fps的应用场景升级。 高压缩率: 传输带宽和存储空间一直是视频应用中最关键的资源,因此,在有限的空间和管道中获得最佳的视频体验一直是用户的不懈追求。

由于数字视频应用在发展中面临上述趋势,如果继续采用H.264编码就会出现如下一些局限性。 宏块个数的爆发式增长,会导致用于编码宏块的预测模式、运动矢量、参考帧索引和量化级等宏块级参数信息所占用的码字过多,用于编码残差部分的码字明显减少。 即:单个宏块所表示的图像内容的信息大大减少,导致4×4或8×8块变换后的低频率相似程度也大大提高,会出现大量的冗余。

分辨率的大幅增加,表示同一个运动的运动矢量的幅值将大大增加,H.264中采用一个运动矢量预测值,对运动矢量差编码使用的是哥伦布指数编码,该编码方式的特点是数值越小使用的比特数越少。 因此,随着运动矢量幅值的大幅增加,H.264中用来对运动矢量进行预测以及编码的方法压缩率将逐渐降低。

并行度比较低: H.264的一些关键算法,例如采用CAVLC和CABAC两种基于上下文的熵编码方法、deblock滤波等都要求串行编码,并行度比较低。 针对GPU、DSP、FPGA、ASIC等这种并行化程序非常的CPU,H.264的这种串行化处理越来越成为制约运算性能的瓶颈。

基于上述视频应用的发展趋势和H.264的局限性,面向更高清晰度、更高频率、更高压缩率的高效视频编码标准H.265应运而生。

HEVC的核心目标: 在H.264的基础上,保证相同视频质量的前提下,视频流的码率减少50%。在提高压缩效率的同时,允许编码端适当提高复杂度。

HEVC的编码框架: 沿用H.263的混合编码框架,即用帧间和帧内预测编码消除时间域和空间域的相关性,对残差进行变换编码以消除空间相关性,熵编码消除统计上的冗余度。 HEVC在混合编码框架内,着力研究新的编码工具或技术,提高视频压缩效率。

HEVC的技术创新: 基于大尺度四叉树结构的分割技术,多角度帧内预测技术,运动估计融合技术,高精度运动补偿技术,自适应环路滤波技术以及基于语义的熵编码技术。

发展

伴随着每次视频压缩技术的进化,会产生多种影像服务和产品的诞生。 1995年实现标准化的MPEG-2得到了DVD和数字电视等领域采用,大幅扩大了视频压缩技术的应用范围。 MPEG-4在1998年实现标准化后,立即应用到了移动和互联网视频服务领域。伴随视频压缩技术的升级,各种影像服务和产品随之登场。 2013年以后,随着HEVC的出现,4K及8K电视及网络全高清影像服务也纷纷出现。箭头指示的是各服务和产品主要采用的压缩技术。

在广播电视、网络视频服务、电影院及公共大屏幕等众多领域,4K×2K和8K×4K视频发送将变得更容易实现。 个人电脑及智能手机等信息终端自不用说,平板电视、摄像机及数码相机等AV产品也会支持HEVC。 不仅是这些既有市场,HEVC还有可能在今后有望增长的新市场上大显身手。 例如,影像监控系统就是其中之一。影像监控系统最近几年在快速从原来的模拟摄像头组合VTR的方式,向经由IP网络发送、存储和浏览数码摄像头拍摄的视频的方法过渡。 为提高安全性,需要增加摄像头数量、提高影像的精细度,而与此同时,确保网络频带和存储容量增加。估计HEVC将作为解决这些课题的措施而被得到应用。

优缺点

优点: 高压缩率:在视频质量相同的条件下,较264平均减少50%的码流,可以节省大量的网络带宽及存储空间;可以在相同码流的条件下提供更加高质量的视频 支持8192×4320分辨率

缺点: HEVC使用到的技术和算法较前两代标准264和MPEG-2更为复杂,视频流在压缩过程中需要更多的选择和运算。 HEVC不支持大多数硬件,通常需要效率更高,更多的处理器来辅助,这意味着,如果有一个固件需要更新,而编解码器却跟不上升级速度的话, 那么我们的电视机顶盒和蓝光播放机是无法播放HEVC编码内容的,需要等待解决方案出现后才能继续使用。

基础概念及算法

码率

视频码率是视频数据(视频色彩量、亮度量、像素量)每秒输出的位数。一般用的单位是kbps。

在视频会议应用中,视频质量和网络带宽占用是矛盾的,通常情况下视频流占用的带宽越高则视频质量也越高。 如要求高质量的视频效果,那么需要的网络带宽也越大,解决这一矛盾的钥匙当然是视频编解码技术。 评判一种视频编解码技术的优劣,是比较在相同的带宽条件下,哪个视频质量更好。在相同的视频质量条件下,哪个占用的网络带宽更少。

码率越高理论上意味着质量越好,但是在肉眼分辨的范围内,码率高到一定程度就没什么差别了。 所以码率设置有最优值,以H.264文档中视频建议的码率:

视频大小 分辨率 建议码率 480P 720X480 1800Kbps 720P 1280X720 3500Kbps 1080P 1920X1080 8500Kbps

帧率

是用于测量显示帧数的量度。 所谓的测量单位为每秒显示帧数。 区别与码率,帧率是记录显示帧数的量度,而码率是数据传输时单位时间传送的数据位数。

由于人类眼睛的特殊生理结构,如果所看画面之帧率高于16的时候,就会认为是连贯的,此现象称之为视觉停留。 这也就是为什么电影胶片是一格一格拍摄出来,然后快速播放的。

而对游戏,一般来说,第一人称射击游戏比较注重FPS的高低,如果FPS<30的话,游戏会显得不连贯。 所以有一句有趣的话:“FPS(指FPS游戏)重在FPS(指帧率)。

每秒的帧数(fps)或者说帧率表示图形处理器处理场时每秒钟能够更新的次数。 高的帧率可以得到更流畅、更逼真的动画。一般来说30fps就是可以接受的,但是将性能提升至60fps则可以明显提升交互感和逼真感, 但是一般来说超过75fps一般就不容易察觉到有明显的流畅度提升了。

如果帧率超过屏幕刷新率只会浪费图形处理的能力,因为监视器不能以这么快的速度更新,这样超过刷新率的帧率就浪费掉了。

量化参数QP

QP是量化步长(Qstep)的序号,对于亮度编码而言,量化步长共有52个值,QP取值051,对于色度编码QP的取值039。

量化参数,反映了空间细节压缩情况。值越小,量化越精细,图像质量越高,产生的码流也越长。 QP 小,大部分的细节都会被保留,码率增大。 QP 增大,一些细节丢失,码率降低,但图像失真加强和质量下降。 也就是说,QP 和比特率成反比的关系,而且随着视频源复杂度的提高,这种反比关系会更明显。

GOP

GOP(Group Of Pictures, 图像组)是一组连续的图像,由一个I帧和多个B/P帧组成,是编解码器存取的基本单位。 GOP结构常用的两个参数M和N,M指定GOP中首个P帧和I帧之间的距离,N指定一个GOP的大小。 例如M=1,N=15,GOP结构为:IPBBPBBPBBPBBPB,GOP有两种:闭合式GOP和开放式GOP:

闭合式GOP:闭合式GOP只需要参考本GOP内的图像即可,不需参考前后GOP的数据。这种模式决定了,闭合式GOP的显示顺序总是以I帧开始以P帧结束

开放式GOP:开放式GOP中的B帧解码时可能要用到其前一个GOP或后一个GOP的某些帧。码流里面包含B帧的时候才会出现开放式GOP。

失真

衡量失真的三种准则:

均方差MSE 信噪比SNR 峰值信噪比PSNR

量化

1、大概的公式:l = floor(c/Qstep + f),c表示系数、Qstep表示量化步长、l表示量化后的值,floor是向下取整函数,f控制舍入关系

2、HEVC有52个量化步长,对应了52个量化参数QP,可以通过查表查询。

3、对于色度分量,量化参数限制为045。具体的说,当亮度分量的QP小于30时,色度分量的QP和亮度的相同,当亮度信号QP在3051时,两者的关系可以通过查表得出。

4、量化过程同时要完成整数DCT中的比例缩放运算,为了避免浮点计算,HEVC把分子分母进行放大处理,然后取整,以此保证运算精度,QP的运算方式也要进行调整:QP = floor(QP/6) + QP % 6 率失真优化

1、分层递归遍历所有的CU划分模式,选取最优的CU划分模式,这个过程称为CU划分模式判别

2、对于其中的每一个CU,遍历所有的PU模式,选取最优的PU模式,并在此基础上选择最优的TU模式

3、对于其中的每一个PU,遍历所有的预测模式,选取最优的预测模式,这个过程称为预测模式判别

(1)帧内预测模式。

​ ①遍历所有的预测模式,得到每种模式下的残差信号,再对残差信号进行Hadamard变换计算SATD值

​ ②利用SATD值计算每种预测模式的率失真代价,选取率失真代价最小的几种模式(与PU大小相关)为预测模式集

​ ③将已编码相邻块的预测模式补充到预测模式集中

​ ④遍历模式集合中的所有模式,并对残差信号进行正常编码(熵编码),计算率失真代价

​ ⑤选取最优的预测模式作为该PU的最优模式

​ ⑥当亮度块的模式确定之后,把该模式以及DC、planar、水平方向模式、垂直方向模式作为色度块的候选模式,选取最优的模式即可

(2)帧间预测模式。

​ HEVC采用了Merge和AMVP技术,更加高效地表示帧间预测参数,但是这两种方式有比较大的区别,因此帧间预测可以分成Merge帧间预测模式和非Merge帧间预测模式(采用AMVP技术),分别选取最优的Merge帧间预测模式和非Merge帧间预测模式,然后从中选取最优的模式。

​ 对于Merge帧间预测模式,遍历所有的候选模式,计算率失真代价,选择率失真代价最小的模式为最优模式。当采用merge帧间预测模式I按摩,且预测残差信号的编码比特数为零时,只需要编码skip标识和merge索引两个语法元素,此时该模式称为MODE_SKIP模式

​ 对于非Merge帧间预测模式(采用AMVP技术)

​ ①根据AMVP技术确定MVP列表,计算每个MVP的率失真代价,得到最优的MVP

​ ②以最优MVP为起始点,进行整像素运动预测,得到最优的整像素运动矢量

​ ③以整像素运动矢量为中心,进行半像素搜索,从周围的8个点确定最优的半像素精度运动矢量

​ ④以半像素精度矢量为中心,进行1/4像素精度的运动搜索,确定最优的1/4像素精度运动矢量

(3)PU模式判别

​ ①计算2Nx2N模式的率失真代价,将其作为最优代价,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至⑪,并将2Nx2N作为最优的PU模式

​ ②如果CU的深度已经取得最大值,且inter_4x4_enabled_flag是1,那么执行③,否则执行④

​ ③计算NxN模式的率失真,更新最优代价和模式,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至⑪,并将NxN作为最优的PU模式

​ ④计算Nx2N模式的率失真代价,更新最优代价和模式,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至⑪,并将Nx2N作为最优的PU模式

​ ⑤计算2NxN模式的率失真代价,更新最优代价和模式,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至⑪,并将2NxN作为最优的PU模式

​ ⑥如果TestAMP_Hor为1,当前CU执行水平方向上的AMP模式,否则执行本步骤。计算2NxnU模式的率失真代价,更新最优代价和模式,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至⑪,并将2NxnU作为最优的PU模式;否则计算2NxnD模式的率失真代价,更新最优的代价和模式,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至⑪,并将2NnD作为最优的PU模式

​ ⑦如果TestAMP_Ver为1,当前CU执行垂直方向上的AMP模式,否则执行本步骤。计算nLx2N模式的率失真代价,更新最优模式和代价,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至⑪,并将nLx2N作为最优的PU模式;否则计算nRx2N模式的率失真代价,更新最优模式和代价,如果预测残差的编码比特数为零,那么满足CBF_Fast,直接跳至⑪,并将nRx2N作为最优的PU模式

​ ⑧注意上面的都是帧间的模式,现在需要计算帧内2Nx2N模式的率失真代价,更新最优模式和代价

​ ⑨如果当前CU深度为最大值,计算帧内NxN模式的率失真代价,更新最优模式和代价

​ ⑩如果当前CU大于或等于PCM模式所允许的最小单元,并且代价大于PCM模式,那么更新最优模式和代价

​ ⑪结束搜索,得到最优的PU模式。注意对于每一种PU模式,都要夯实不同的TU划分,选取最优的TU模式,因此最优的PU模式包含了最优的TU模式

(4)CU划分模式判决

​ ①把CTU作为CU,计算率失真代价(最优PU模式时),此时应包含CU分割标志(split_flag)的编码比特数

​ ②对CU进行四叉树划分,计算每个子CU的最小率失真代价,并对所有子CU的率失真代价求和,得到该CU的率失真代价

​ ③为每个子CU作为CU重复②

​ ④重复③直到编码的最大深度

​ ⑤从最大的编码深度,比较4个子CU与CU的率失真代价,一次选出最优的划分方式。

​ ⑥对于每个CU,如果其帧间2Nx2N模式为MODE_SKIP,则满足Early_SKIP条件,直接结束该CU的进一步划分

编解码技术

H.265编码框架及编码单元结构

与H.263以来的编码标准一样,HEVC的设计沿用了经典的基于块的混合视频编码框架。 框架主要包括,帧内预测、帧间预测、转换、量化、去区块滤波器、熵编码等模块。

但在HEVC编码架构中,整体被分为了三个基本单位, 分别是:编码单位(coding unit,CU)、预测单位(predict unit,PU)和转换单位(transform unit,TU)。 视频编码的基本流程为:

1、将视频序列的每一帧划为固定大小的宏块,通常为16×16像素的亮度分量及2个8×8像素的色度分量,之后以宏块为单位进行编码。 2、对视频序列的第一帧及场景切换帧或者随机读取帧采用I帧编码方式,I帧编码只利用当前帧内的像素空间预测,类似于JPEG图像编码方式。 其大致过程为,利用帧内先前已经编码中的像素对当前块内的像素值作出预测(对应图中的帧内预测模块),将预测值与原始视频信号作差运算得到预测残差, 再对预测残差进行变换、量化及熵编码形成编码码流。 3、对其余帧采用帧间编码方式,包括前向预测P帧和双向预测B帧,帧间编码是对当前帧内的块在先前已编码帧中寻找最相似块(运动估计)作为当前块的预测值(运动补偿), 之后如I帧的编码过程对预测残差进行编码。 4、编码器中还含有一个解码器,模拟解码过程以获得解码重构图像,作为编码下一帧或下一块的预测参考。

解码步骤包括对变换量化后的系数激进型反量化、反变换,得到预测残差,之后预测残差与预测值相加,经滤波去除块效应后得到解码重构图像。

帧内预测,即利用当前图像内已编码像素生成预测值;

帧间预测,即利用当前图像之前已编码图像的重建像素生成预测值。

编码单元结构

H.264通常会以16×16像素为单位,将图片划分为多个大小相同的宏块,并以这些宏块作为编码时的最小元素。 H.265则是将切割画面的工作从使用者手工设定,转交给编码器来决定,让编码器视情况以16×16、32×32、64×64等尺寸, 将画面切割为数个编码树单元,一般来说区块尺寸越大,压缩效率就越好。

H.265没有沿用之前H.264之前宏块的概念,而是使用编码单元(CU)作为及基本的编码结构。 一个CU可以包含一个或多个不同尺寸的预测单元PU,一个PU包含若干个变换单元(TU)。 CU、PU、TU三种在编码中起的作用不一样,不过这种编码方式还是基于混合编码,只是采用这种划分方式能够更好地分割一幅图像,用于后续的预测和处理。 采用这种结构设计的目的是在增加灵活性的同时,使压缩预测更符合图像特性。

编码基本单元(CU)

CU的特点是方块,在LCU(最大编码单元)基础上划分的,通常LCU的大小64×64,可以使用递归分割四叉树的方法来得到。 大的CU适用于图像中比较平滑的部分, 而小的CU则适用于边缘和纹理较丰富的区域。 采用大尺寸CU主要是为了高清压缩编码的应用,毕竟如1080p甚至更大分辨率的视频图像, 其空间会有更大面积的一致性,因此采用更大的编码单元能更有效地减少空间冗余。

编码单元是否被划分取决于分割标志位split flag。0表示不再进行四叉树划分,1表示继续划分为4个独立的编码单元,如果比较平滑不用划分,如果细节明显,继续划分。

如果仍采用光栅扫描方式对CU寻址会很不方便,因此,H.265定义了Z扫描顺序,这种顺序保证了对于不同分割都能按照相同的遍历顺序进行寻址有利于程序中递归实现,和h264一样。

预测单元(PU)

PU是基本的预测单元,是在编码单元CU的基础上进行划分的,有skip、intra、inter三种模式可以分割,每个CU中可以包含一个或者多个PU。 PU可以是正方形的,也可以是长方形的,这是为了能够更好地区分背景与物体。

PU的划分方式可分为对称及不对称两种,要注意的是PU的尺寸不能超过其所属的CU。不对称的划分方式主要适用于CU中纹理偏差比较大的情况,增加预测的精准度,不对称的PU仅适用于帧间预测。

变换单元(TU)

TU是变换及量化的基本单元,它可以大于PU但是不能大于CU的大小。 TU同样采用二叉树的分割结构,所支持的尺寸从4×4至32×32的大小。 TU的形状取决于PU的划分模式,当PU为正方形时,TU也是正方形的, 当PU是长方形的,TU也是长方形的,一个CU可以包含一个或多个TU。

根据预测残差的局部变化特性,TU可以自适应地选择最优的模式。 大块的TU模式能够将能量更好地集中,小块的TU模式能够保存更多的图像细节。 这种灵活的分割结构,可以使变换后的残差能量得到充分压缩,以进一步提高编码增益。 ###帧内预测 利用图像的空间相关性,用周围重建像素值对当前编码块进行预测 。

H.265更多的帧内预测方向,在H.264采用9个帧内预测方向的场合, H.265预测方向拓展到33个,另外加上一个DC和一个planar,一共35中预测模式,使得预测更加精细, 增加更多提升更高效帧内压缩的可能的参考像素块。明显的代价是在增加的方向中搜索需要更多编码时间。

Planar模式

平面预测是一种新提出的预测方法,常用于内容平滑或纹理不清晰的单元。 它为预测单元中的每一个像素点也都要进行插值预测。 首先根据左侧相邻单元的右下角像素和上方相邻单元的下边界像素插值出当前预测单元下边界的每个像素点, 再根据上方相邻单元的右下角像素和左侧相邻单元的右边界像素插值出当前预测单元右边界的每个像素点, 然后利用上方相邻单元的下边界、左侧相邻单元的右边界以及插值出的当前单元的下边界和右边界插值出其余的像素点。

3.4 帧间预测

帧间预测利用连续图像之间的相关性,通过运动估计和运动补偿的编码方法去消除视频信息的时间冗余。 利用先前已编码重建帧作为参考帧进行预测。

帧间预测采用融合模式时,当前PU块的运动信息(包括运动矢量、参考索引、预测模式)都可以通过相邻PU的运动信息推导得到。 编码时,当前PU块只需要传送融合标记(Merge Flag)以及融合索引(Merge Index),无需传送其运动信息。

帧间预测还可以通过空域相邻PU以及时域相邻PU的运动矢量信息构造出一个预测运动矢量候选表, PU遍历运动矢量候选列表,在其中选择最佳的预测运动矢量。

广义B帧预测技术

在高效预测模式下,H.265仍然采用H.264中的等级B帧预测方式,同时还增加了广义B帧(GPB)预测方式取代低时延应用场景中的P帧预测方式。 GPB预测结构是指传统P帧采取类似与B帧的双向预测方式进行预测。在这种预测方式下,前向和后向参考列表中的参考图像必须为当前图像之前的图像,且两者为同一图像。 对P帧采取B帧的运动预测方式增加了运动估计的准确度,提高了编码效率,同时也有利于编码流程的统一。

去块滤波(Debtock)

去块滤波位于反变换之后,主要是去除压缩过程中产生的方块效应。 首先对垂直边界进行水平滤波,先亮度块后色度块。 再对水平边界进行垂直滤波,先亮度块后色度块。 H.265对8x8块的边界进行滤波,与H.264中对4x4边的边界进行滤波相比,H.265中去块滤波算法的时间复杂度有所降低。

采样点自适应偏移(SAO)

把一帧划分为若干个LCU,然后对每个LCU中每个像素进行SAO操作, 将根据其LCU像素特征选择一种像素补偿方式,以减少源图像与重构图像之间的失真。 自适应样点补偿方式分为带状补偿(BO)和边缘补偿(EO)两类。

带状补偿

带状补偿将像素值强度等级划分为若干个条带,每个条带内的像素拥有相同的补偿值。 进行补偿时根据重构像素点处的条带,选择相应的带状补偿值进行补偿。

现有的HM模型将像素值强度从0到最大值划分为32个等级。同时这32个等级条带还分为两类,第一类是位于中间的16个条带,剩余的16个条带是第二类。 编码时只将其中一类具有较大补偿值的条带偏移信息写入片头;另一类条带信息则不传送,这样的方式编码将具有较小偏移值的一类条带忽略不计,从而节省了编码比特数。

边缘补偿

边缘补偿主要用于对图像的轮廓进行补偿。它将当前像素值与相邻的2个像素值进行对比, 从而得到该像素点的类型。解码端根据码流中标识的像素点的类型信息进行相应的补偿校正。

自适应环路滤波(ALF)

ALF在编解码环路内,位于Debtock和SAO之后,用于恢复重建图像以达到重建图像与原始图像之间的均方差(MSE)最小。 ALF的系数是在帧级计算和传输的,可以整帧应用ALF,也可以对于基于块或基于量化树的部分区域进行ALF,如果是基于部分区域的ALF,还必须传递指示区域信息的附加信息。

对于亮度分量,采用CU为单位的四叉树ALF结构。滤波使用5x5,7x7和9x9三种大小的二维钻石型模板。 滤波器计算每个4x4块的Laplacian系数值,并根据该值将所有4x4块分成16类,分别对应16种滤波器。

对于色度分量,滤波时色度分量统一使用5x5矩形滤波模板,不需要通过Laplacian系数来选择滤波器类型。

并行设计 当前芯片架构已经从单核性能逐渐往多核并行方向发展,因此为了适应并行化程度非常高的芯片实现,H.265引入了很多并行运算的优化思路。

用垂直和水平的边界将图像划分为一些行和列,划分出的矩形区域为一个Tile,每个Tile包含整数个LCU,Tile之间可以互相独立,以此实现并行处理。 熵编码

H.265的熵编码只采取基于上下文的二进制熵编码算法(CABAC),在本质上与H.264的CABAC是一致的,只是在实现细节上有些差别。H.265减少了上下文的数量,以改进熵编码的性能和编码速度。

变换量化

H.265的变换支持4x4到32x32,比H.264增加了16x16和32x32两种变换核。 在H.264中,一个宏块只能采用一种变换核,而H.265提供了残差四叉树(RQT)的递归变换结构, 对于一个CU或者PU,可以采用多种变换核。

另外,对于4x4的TU,H.265提供了跳过变换模式,在这种模式中,预测残差只进行移位。 对于帧间预测的4x4变换块,H.265还提供了离散正弦变换(DST)。 在量化方面,H.265采用了与H.264相同的量化方法,H.265还提供了率失真优化量化方法(RDOQ)方法。 率失真优化量化就是在量化过程中引入率失真优化选择的思想,具体可以分为三个步骤:

对当前处理的TU,以4x4的块为单位进行扫描,对于4x4量化块的每个量化值,分别加一减一,这样就得到三个量化值,根据率失真代价最小准则对4x4量化块的每一个点选择最佳的量化值;

对于扫描到的每一个4x4的量化块,将其量化值设置为零,并与之前的率失真代价比较,选择一种最佳的量化方式;

对于当前TU来说,若最后一个非零系数的位置距离当前一个非零系数的位置较远,则将最后一个非零系数改为零,同时比较这种方式下的率失真代价并与之前的率失真代价进行比较,选择一种最佳的方式。 ###码流结构分析 重要参数

视频参数集VPS(Video Parameter Set)

VPS主要用于传输视频分级信息,有利于兼容标准在可分级视频编码或多视点视频的扩展。

用于解释编码过的视频序列的整体结构,包括时域子层依赖关系等。 HEVC中加入该结构的主要目的是兼容标准在系统的多子层方面的扩展, 处理比如未来的可分级或者多视点视频使用原先的解码器进行解码但是其所需的信息可能会被解码器忽略的问题。

对于给定视频序列的某一个子层,无论其SPS相不相同,都共享一个VPS。 其主要包含的信息有:多个子层或操作点共享的语法元素;档次和级别等会话关键信息,其他不属于SPS的操作点特定信息。 编码生成的码流中,第一个NAL单元携带的就是VPS信息。

序列参数集SPS(Sequence Parameter Set)

包含一个CVS中所有编码图像的共享编码参数。

一段HEVC码流可能包含一个或者多个编码视频序列,每个视频序列由一个随机接入点开始,即IDR/BLA/CRA。 序列参数集SPS包含该视频序列中所有slice需要的信息。

SPS的内容大致可以分为几个部分: 1、自引ID。 2、解码相关信息,如档次级别、分辨率、子层数等。 3、某档次中的功能开关标识及该功能的参数。 4、对结构和变换系数编码灵活性的限制信息。 5、时域可分级信息。 6、VUI。

图像参数集PPS(Picture Parameter Set)

包含一幅图像所用的公共参数,即一幅图像中所有片段SS(Slice Segment)引用同一个PPS。

PPS包含每一帧可能不同的设置信息,其内容同H.264中的大致类似, 主要包括: 1、自引信息。 2、初始图像控制信息,如初始QP等。 3、分块信息。

在解码开始的时候,所有的PPS全部是非活动状态,而且在解码的任意时刻,最多只能有一个PPS处于激活状态。 当某部分码流引用了某个PPS的时候,这个PPS便被激活,称为活动PPS,一直到另一个PPS被激活。

参数集包含了相应的编码图像的信息。SPS包含的是针对一连续编码视频序列的参数(标识符seq_parameter_set_id、帧数及POC的约束、参考帧数目、解码图像尺寸和帧场编码模式选择标识等等)。 PPS对应的是一个序列中某一幅图像或者某几幅图像,其参数如标识符pic_parameter_set_id、可选的seq_parameter_set_id、熵编码模式选择标识、片组数目、初始量化参数和去方块滤波系数调整标识等等。

通常,SPS和PPS在片的头信息和数据解码前传送至解码器。每个片的头信息对应一个pic_parameter_set_id,PPS被其激活后一直有效到下一个PPS被激活;类似的,每个PPS对应一个seq_parameter_set_id,SPS被其激活以后将一直有效到下一个SPS被激活。参数集机制将一些重要的、改变少的序列参数和图像参数与编码片分离,并在编码片之前传送至解码端,或者通过其他机制传输。

NALU type

前缀码后面跟随的前两个字节为NALU的语法元素,主要有四个部分组成:

forbidden_zero_bit = 0:占1个bit,与H.264相同,禁止位。 用以检查传输过程中是否发生错误,0表示正常,1表示违反语法。

nal_unit_type = 32:占6个bit,用来用以指定NALU类型

nuh_reserved_zero_6bits = 0:占6位,预留位,要求为0,用于未来扩展或3D视频编码

nuh_temporal_id_plus1 = 1:占3个bit,表示NAL所在的时间层ID

NALU的语法元素由H264的一个字节变为两个字节,而nal_unit_type则为NALU的类型,因此我们可以通过以下获取NALU的类型:

int type = (code & 0x7E)»1,

nal_unit_type NALU类型 备注 0 NAL_UNIT_CODE_SLICE_TRAIL_N 非关键帧 1 NAL_UNIT_CODED_SLICE_TRAIL_R 2 NAL_UNIT_CODED_SLICE_TSA_N 3 NAL_UINT_CODED_SLICE_TSA_R 4 NAL_UINT_CODED_SLICE_STSA_N 5 NAL_UINT_CODED_SLICE_STSA_R 6 NAL_UNIT_CODED_SLICE_RADL_N 7 NAL_UNIT_CODED_SLICE_RADL_R 8 NAL_UNIT_CODED_SLICE_RASL_N 9 NAL_UNIT_CODE_SLICE_RASL_R 10 ~ 15 NAL_UNIT_RESERVED_X 保留 16 NAL_UNIT_CODED_SLICE_BLA_W_LP 关键帧 17 NAL_UNIT_CODE_SLICE_BLA_W_RADL 18 NAL_UNIT_CODE_SLICE_BLA_N_LP 19 NAL_UNIT_CODE_SLICE_IDR_W_RADL 20 NAL_UNIT_CODE_SLICE_IDR_N_LP 21 NAL_UNIT_CODE_SLICE_CRA 22 ~ 31 NAL_UNIT_RESERVED_X 保留 32 NAL_UNIT_VPS VPS(Video Paramater Set) 33 NAL_UNIT_SPS SPS 34 NAL_UNIT_PPS PPS 35 NAL_UNIT_ACCESS_UNIT_DELIMITER 36 NAL_UNIT_EOS 37 NAL_UNIT_EOB 38 NAL_UNIT_FILLER_DATA 39 NAL_UNIT_SEI Prefix SEI 40 NAL_UNIT_SEI_SUFFIX Suffix SEI 41 ~ 47 NAL_UNIT_RESERVED_X 保留 48 ~ 63 NAL_UNIT_UNSPECIFIED_X 未规定 64 NAL_UNIT_INVALID

type值所代表的类型:VPS=32 SPS=33 PPS=34 IDR=19 P=1 B=0

计算公式

① 00 00 00 01 40 01 —> (0x40 & 0x7E)»1 = 32 —> VPS

② 00 00 00 01 42 01 —> (0x42 & 0x7E)»1 = 33 —> SPS

③ 00 00 00 01 44 01 —> (0x44 & 0x7E)»1 = 34 —> PPS

④ 00 00 00 01 26 01 —> (0x26 & 0x7E)»1 = 19 —> IDR

3.VP8

VP8 是一个开放的图像压缩格式,最早由 On2 Technologiesis 开发,随后由 Google 发布。同时 Google 也发布了 VP8编码的实做库:libvpx,以BSD授权条款的方式发布,随后也附加了专利使用权。而在经过一些争论之后,最终 VP8 的授权确认为一个开放源代码授权。VP8编码的开发从2008年9月13日开始,目的是要取代旧有的 VP7 编码格式。Google 在2010年收购了 On2 之后,各界便呼吁 Google发布 VP8的源代码,在2010年3月12日,自由软件基金会发表了一个公开信,希望 Google 能够逐渐的以 HTML5 和开放的 VP8,取代 Youtube 目前使用的 Adobe Flash Player 和 H.264。

一般处理视频的步骤都是:

编码:预测 -> 变换+量化处理 -> 熵编码 -> 环路过滤器

解码:熵编码 -> 预测 -> 反量化处理+变幻 -> 环路过滤器

p帧

就是通过当前帧已有的部分预测其他区块的内容。 可以是在当前帧进行,也可以通过运动补偿的方式在帧间进行。 ###帧内预测 帧内预测是用来编码帧间不同,在空间域上进行的预测编码算法,可以除去相邻块之间的空间冗余度,取得更为有效的压缩。

vp8的帧内预测基本上都是照抄h264的。“subblock"几乎和h264一样(他们竟然用了同样的名字),还有h264的4×4模式, whole block预测也基本上一样使用16×16模式。 色度预测模式也几乎没有区别,所以不可能拥有比h264更出色的效果了。但是值得一提的是,他们用TM_PRED替代了planar预测模式。在预测方式上看起来有些不同,但是实际上h264都提供了相似的实现方法。

虽然说h264的预测功能的确不错,但是这也是7年的老物了, 需要改进,所以我真的希望类似real这样的公司赶紧灭亡吧,一个存在了十几年而从来没有任何改进的格式(rm,rmvb), 我希望on2能做一些更有创造性的工作,而不是照搬h264的东西,因为h264的专利问题就是一个定时炸弹。 h264的帧内预测可是有专利的,真不知道on2怎么想的,我可不认为on2改个名字就能蒙混过关。

帧内预测对决:大部份照抄h264,甚至有的连名字都没改, 但是效果貌似还不如h264。 ###帧间预测: 帧内预测主要用在去除空间冗余上而帧间预测则主要用在去除时间冗余上。

运动估计就是在参考帧中寻找与当前编码宏块最匹配的宏块,而运动补偿就是计算二者的差值。 帧间预测主要由两个部分组成:参考帧和运动矢量。vp8支持3中参考帧:p帧,g帧(golden fream)和alt ref帧。 运动矢量上,vp8支持比h264更多的可变大小区块,次像素精度上,他支持四分之一像素和6-tap插值过滤。简而言之就是:

vp8参考帧:3 h264:16 vp8支持区块类型:6×16, 16×8, 8×16, 8×8, 4×4 h264:16×16, 16×8, 8×16, 但是还有更灵活的子区块:例如 8×8 可以被分为 8×8, 8×4, 4×8, 或者 4×4 VP8 chroma MV derivation: 4×4 色度均值处理 (有点类似于 MPEG-4 ASP) h264:直接使用,没有什么处理(没有均值处理,所以视觉效果比较好) H.264 拥有b帧和加权预测,但是vp8却没有 h264拥有更为灵活的架构,所以8×8并不常用,所以vp8弃用也没有太多影响。 但是色度处理上,h264因为没有均值,所以拥有比vp8更好地效果,但是理论上它需要更多的时间来编码。但是实际中差别并不是很明显。

vp8的插值过滤器似乎优秀一些,但是他是以牺牲性能为代价的。竟然还用高达6的色度,实际用处不大。

vp8没有使用b帧是个致命的缺陷。使用b帧可以提高10-20%压缩率并加快编码速度,但是on2在他们所有的视频编码格式中都没有应用b帧,但是即使如此也有可能引起专利问题。

帧间编码对决:部分与h264相似,但是架构上不如h264,虽然使用了更为优秀的过滤器,但是没有使用b帧,所以会严重导致压缩率降低。 ###变换与量化编码 总体来说,VP8肯定比H.264弱。

一个8 × 8变换缺乏细节,特别是在高的分辨率。很多转换也不是必要的,却在进行。所以比较慢。 由于专利,变换也有可能产生纠纷。一个良好的新思路是采用 分层直流转换间块。

转换: 类似H.264标准。慢一点,再稍微更准确的4 × 4变换。改进直流变换亮度(但色度不是)。 没有8 × 8变换。总体而言,更糟。

量化方面,核心过程基本上和所有的MPEG 视频格式一样,所以VP8也不例外。一个视频格式,如果想体现自己与众不同,那么他们主要的方式是通过改变量化尺度因子。 方法有两种,主要是:基础帧的偏移量,宏块级的偏移,对于视频来说整体适合或者部分适合。 VP8主要使用前者,但是远远低于H.264灵活的自定义量化矩阵,它允许调整亮度量化直流,交流亮度,色度直流,等等。 后者(宏块级量化选择)可以在理论实现“图像分割”功能,虽然很hack,但是效果嘛……

vp8的致命错误是已经不使用宏块级量化作为其核心功能。该算法利用宏块级量化的优势被称为"自适应量化”,是绝对至关重要的。 x264使用 执行方差的自适应量化(算法对比: 使用前, 使用后)后效果明显,至今仍然是x264视觉质量收益提供支持。

对量化对决:在成为杀手级视频格式前,缺少综合自适应量化将是绝对错误的。总体而言,非常糟糕。 ###熵编码 根据信息论的原理,可以找到最佳数据压缩编码的方法,数据压缩的理论极限是信息熵。 如果要求编码过程中不丢失信息量,即要求保存信息熵,这种信息保持编码 叫熵编码,是根据消息出现概率的分布特性而进行的,是无损数据压缩编码。 在视频编码中,熵编码把一系列用来表示视频序列的元素符号转变为一个用来传输或是存储的压缩码流。 输入的符号可能包括量化的变换系数(像上面所说的运行级或零树),运动向量(对于每个运动补偿块的向量值x和y),标记 (在序列中用来表示重同步位的点),头(宏块头,图象头,序列的头等)以及附加信息(对于正确解码来说不重要的信息)。

VP8使用的熵编码器有点类似于H.264,但有几个关键处又有所不同。首先,它忽略了范围/概率乘法表。第二,它是完全非自适应的:与H.264相比,它能够解码后的每一帧,概率值保持不变。

vp8这个方案的缺点是,像VP3/Theora(虽然没有那么严重),它偏向于以重新使用以前的运动矢量。 这是相当危险的,因为正如开发员们最近发现,一些情况下,即选取一个运动矢量编码器是不是"真实"的运动矢量,以略去潜在的负面的视觉影响。 ###环路滤波器 通常是在编码/解码帧后使用,通常是为了消除基于DCT的视频格式的方块现象。 VP8的环路滤波器与H.264依然相似,但有一些区别。首先,它有两种模式(即可以由编码器选择):快速模式和普通模式。快速模式比H.264 的简单,而正常模式较为复杂。 第二,宏块之间的滤波,VP8的过滤器比h264的宏块滤波器有更广泛的作用范围,h264的则仅限于边缘。

环路滤波器对比: 绝对比H.264的差,因缺乏自动适应性。虽然选择快速模式可以加快速度,但是成像结果惨不忍睹,十分模糊。

4.VP9

编码质量

VP9 和 h.265 在这个类别中没有太大区别。 使用任一编解码器,视频看起来都不错。然而,h.265 略优于 VP9,当比特率较高时反之亦然。

VP9 和 h.265 能够增加压缩的部分方式是通过使用更大的宏块。 宏块是图像或视频的处理单元,包含要显示的图像的像素。h.264 使用 16 x 16 宏块,而 VP9 和 h.265 使用 64x64 块。 这些宏块经过称为"帧内预测方向"的计算系列,将这些宏块重建为相同的原始图像,只是在非关键区域的细节略少。 这使得 VP9 和 h.265 能够提高效率,因为图像的天空或模糊背景等不太详细的区域不会被分解为更小的单元。 这些区域中丢失的细节并不会显着降低图像的整体质量,因为重要部分的渲染更加详细。

还应该注意的是,当您增加比特率时,H.264 产生较差的图像,尤其是在较低比特率时。 比较以相同比特率运行的图像时,VP9 和 h.265 都比使用 h.264 生成的图像更详细、更清晰。 换句话说,为了产生与 VP9 或 h.265 相同质量的图像,h.264 需要以更高的比特率运行。

其他因素也能导致图像的质量,例如改进的亚像素插值和运动矢量参考选择(运动估计)也可以提高图像质量。 这是因为它们有助于预测电影中下一帧的样子。 ###编码时间 为了达到更高的压缩率,VP9和h.265需要进行更多的处理。所有这些额外的处理意味着他们将需要更长的时间来编码视频。 这会损害您的延迟,因为花费在处理上的所有额外时间都会延迟您的视频播放。 除其他原因外,延迟对于确保您的实时视频流能够提供交互式体验非常重要。 VP9 和 h.265比 h.264 好 50%,但它们也慢 10 到 20 倍, 拖累流媒体性能。 因此,虽然 VP9 和 h.265 显示出更好的压缩率,但它的编码时间成本非常高,这将大大增加延迟。

VP9 和 h.265 都必须运行比 h.264 更多的压缩算法,会增加它们的 CPU 使用率。 即使完全优化,实时流媒体也是一个 CPU 密集型过程,因此增加已经很高的使用率将是一个问题。 但是,有一些东西可以缓解这种情况:硬件支持。专用芯片组将减少 CPU 消耗。

h.265 目前享有更多硬件支持,包括 Windows 10(可下载或通过 Intel Kaby Lake 或更新的处理器)Apple (iOS 11) 和 Android (Android 5.0) 设备。 虽然大多数移动设备支持 VP9,但大多数其他系统不支持。如果没有直接的硬件支持,VP9 编码过程将与 CPU 挂钩,消耗大量资源,降低电池寿命,并可能增加延迟。 h.264 得到了广泛的支持,并且首先不会像 VP9 或 h.265 那样消耗 CPU。 ###采用和浏览器实施 为了使用编解码器,需要支持硬件或软件编码器。 h.265 的采用率很低,这在很大程度上是由于专利许可。h.265 有四个与之相关的专利池:HEVC Advance、MPEG LA、Velos Media 和 Technicolor。 这使得它更加昂贵,阻碍了更广泛的采用,从而将其限制在特定的硬件编码器和移动芯片组中。 只有 Edge、Internet Explorer 和 Safari 支持 h.265,即使这样运行浏览器的设备仍需要支持 h.265 硬件编码。 即使在具有正确实现的浏览器中支持 h.265,WebRTC 也往往无法正常工作。如果没有 WebRTC 支持,很难实现实时延迟。

VP9 是免版税和开源的,为更广泛的采用扫清了道路。 它适用于主流浏览器 Chrome、Firefox 和 Edge 以及操作系统 Windows 10、Android 5.0、iOS 14 和 macOS BigSur。 由于 WebRTC 支持 VP9,它也可以直接在浏览器中工作。也有传言称Safari 支持也可能即将到来。

尽管 h.264 拥有一项与之相关的专利,但正如我们之前提到的,2013 年思科开源了其 h.264实施并以免费二进制下载的形式发布。 这极大地推动了 h.264 的广泛实施。因此,所有浏览器笔记本电脑和移动设备都支持 h.264。

提高压缩率和由此产生的更小的文件大小的最大优势是它在广播时消耗的带宽更少。 这意味着互联网速度较慢的用户仍然可以流式传输高质量的视频流。

那么哪种编解码器可以产生更好的压缩效率来创建更小的视频呢?

根据 Netflix 进行的一项测试,h.265 的性能比 VP9 高出约 20%。尽管其他测试产生了不同的结果,但它们都得出结论认为 h.265 会创建更小的文件大小。 根据所使用的客观指标,h.265比 VP9 节省0.6% 到 38.2% 的比特率。

然而,虽然消耗较少的带宽是有用的,但还应考虑其他因素。 全球固定宽带连接的平均上传速度为42.63 Mbps,这意味着即使 h.264 要求的连接速度更高,大多数地方也可以支持 4K 流媒体。 尽管移动设备的平均速度要低得多,为10.93 Mbps,但它们仍然可以支持 1080p 流。

VP9介于 h.264 和 h.265 之间。

解决带宽不匹配的问题。 使用ABR(自适应比特率)将修改比特率以提供最佳体验。 转码将广播分成多种质量,因此客户端可以根据可用带宽请求最佳质量。

至于"移动设备卡在 2 或 3G 连接上"的情况,现实是手掌大小的设备不需要流式传输最高分辨率来看起来不错。720 甚至 480 仍将显示良好的质量。

虽然带宽消耗对消费者来说可能并不重要,但必须承认,如果公司使用 VP9 或 h. 265. 节省来自较小的文件, 这意味着他们不会为 CDN 或云网络上的更多数据流支付那么多费用。 虽然这当然很好,但只有在真正的高分辨率设置(如 4K)下,数据消耗减半才会产生重大影响。

无论规模多大,省钱肯定是一件重要的事情。 这将我们带到了下一个点,它将展示两全其美;更好的压缩与相同的性能。 ###LCEVC 回避了整个论点 LCEVC概述

Low Complexity Enhancement Video Coding(LCEVC,低复杂度增强视频编码)是一种新的MPEG视频编解码器,目前作为MPEG-5第2部分进行标准化。 LCEVC并不是独立的视频编码器,而是对任意其他编码器的增强(例如AVC, VP9, HEVC, AV1, EVC或VVC)。 目的是降低计算负荷,并比在给定分辨率下单独使用增强编码器达到的压缩效率更高,尤其是在视频传输相关码率的情况下。 它的核心思想是使用常规视频编解码器作为较低分辨率的基本编码器,并通过将解码后的低分辨率视频与使用专用低复杂度编码工具编码的最多两个残差增强子层进行组合来重建全分辨率视频。

LCEVC编码器

编码过程可以分为三个步骤:

首先,使用非标准降尺度器对输入序列进行降尺度。 现在低于输入序列分辨率的视频被馈送到基本编码器中(例如AVC, HEVC, VVC)。

其次,使用规范的升频器,它可以使用内容自适应核和可选的编码器信号激活的非线性校正器。 升频后的基本重构用作第二步的输入LCEVC编码过程。增强子层L-1残差通过减去缩减后的输入序列和基本重建来创建。 应用量化和变换的逆工具,并进行自适应和可选的编码信号非对称去量化,从而创建子层1的重构。

最终,将子层1重构放大到全分辨率,并从原始输入序列中减去。所得的增强子层2(L-2)残差被馈送到时间预测中。 LCVEC使用零运动矢量时间方案,该方案在逐块的基础上运行。来自前一帧的残差存储在时间缓冲区中,并在激活了时间预测的情况下将其添加到L-2残差中。 使用与子层1所述相同的工具对残差进行转换,量化和编码。

LCEVC不是独立的编码器,但是需要基本编码器才能运行。基本编码器无需满足任何条件即可和LCEVC结合使用。

此外,LCEVC提供了自定义大多数解码工具的灵活性。 ​
​深入了解LCEVC的工作原理 ​
提高LCEVC压缩效率的关键工作原理是将高频细节和中低频核心信号适当地分开,以较低的分辨率对核心信号进行编码,然后使用一组非常专业的工具有效对高频细节进行编码。 总体来说,使用低分辨率的单层编码器对中低频进行编码的熵效率更高。LECVC增加了一种原生凸包编码,可以对智能上采样的功能进行编码。 更重要的是,对不可预测的高分辨率细节进行编码。因此,整体编码增益的一部分来自LCEVC结构。

LCEVC擅长保持运动一致性,从而避免了对象跟踪障碍。 当缺乏比特时,单层编码器会牺牲运动的一致性。 但是LCEVC通过使用更低的QP编码系数保留了更好的运动一致性和静态细节的最大编码效率。

LCEVC结合了智能上采样和传统编码的特点:对于智能上采样足以提供高保真重建的区域,LCEVC采用低复杂度编码器引导的智能上采样,无需传输残留数据。 对于智能上采样失败的区域,LCEVC允许编码器将重构保真度所需的校正有效地发送到源端。 LCEVC(低复杂度增强视频编码)将所有编解码器的压缩率提高了约 40%。 这是因为它是一个附加处理层,可与现有和未来版本的 MPEG 或其他编解码器(如 VP9 和 AV1)一起使用。 LCEVC具有对视频流技术产生巨大影响的巨大潜力。无需更改所有当前协议的组成,LCEVC 就可以使它们本身更加高效。

内容提供商将能够使用支持 LCEVC 的软件或基于硬件的编码器与 Red5 Pro 跨云平台相结合,以解锁实时流媒体,尽管它们是处理密集型视频格式建于。 根据使用的核心编解码器,这不仅适用于 4K,最终也适用于 8K UHD,还适用于为 360 度观看、虚拟现实和其他创新而设计的格式。

普遍采用 LCEVC 背后的驱动力是因为几乎任何设备都可以支持独立下载到观众设备或嵌入服务提供商应用程序播放器的瘦 LCEVC 客户端。 通过其 HTML5 JavaScript 实现,LCEVC 还支持无插件浏览器支持。这意味着广泛的实施应该相当简单。 ###什么是实用的 在考虑了此处概述的所有内容后,由于广泛采用和快速的编码速度,AVC/h.264 目前是最佳可用选项。 尽管提高压缩率和视频质量是重要的考虑因素,但现在的权衡太严重了。 具体来说,高编码时间和贪婪的 CPU 消耗对于实时流视频来说真的很糟糕。

也就是说,考虑到 VP9 是免费的并且还享有广泛的支持,一旦创建了更快的软件或硬件编码器,它将在不久的将来成为一个可行的选择。 在遥远的将来,AV1 最终将取代 VP9,但考虑到它目前所遭受的天文数字般的高编码时间,在它准备好广泛使用之前需要进行大量精简。 当然,LCEVC 可能会绕过更改编解码器以实现更好压缩的整个问题。也许它只是作为 h.264 和 AV1 之间的长期桥梁。

尽管如此,AV1 已准备好取代 h.264、h.265 和 VP8/9。随着视频消费量的增加,减少带宽限制将使发送用户正在寻找的高质量视频变得更加容易。 对于远离有线连接、更依赖手机连接的发展中地区尤其如此。它背后的财团拥有所有主要参与者,并且是免版税的。现在阻碍 AV1 的是缺乏实时编码器。 一旦这些变得广泛可用,AV1(尤其是与 LCEVC 配对时)将是前进的方向。

5.AV1

在线视频作为互联网第一大应用已经毋庸置疑,通过网络看直播,看电影综艺,发布小视频正在成为我们每天的生活常态。 更高清晰度、更高比特率、更节省网络流量是当下在线视频几个最核心的需求。 而支撑和推动这些需求的,是播放器背后看不到的视频编解码与视频传输两大底层支柱性技术。

视频传输主要由CDN产业把控,近两年来视频直播的大火带动了CDN供应商之间围绕着传输技术和价格的白热化竞争。 而技术门槛更高更复杂的视频编解码主要则由国外软件巨头和标准组织把控。

HEVC/H.265与VP9是当下代表着业内最新最先进的两大视频编码压缩技术体系,都肩负着视频暴增形势下不断推进更高清晰度(4K甚至是8K)同时更节省网络流量的伟大使命。 2015年9月,一个名叫Alliance for Open Media(AOM)的组织成立,宣布不晚于2017年3月发布一个全新的视频编码标准——AV1,目标是替代谷歌VP9以及与HEVC/H.265搏命。 主要由Amazon、Cisco、Google、Intel、Microsoft、Mozilla、Netflix7个巨头组成的豪华创世联盟进行AV1的研发。

HEVC/H.265由ITU-T视频编码专家组(VCEG)和MPEG组织共同发起,专利池由诸多企业和组织共同贡献。 2013年正式于ISO/IEC和ITU-T同时发布成为国际标准,历经多年发展基本进入了产品化阶段。 总体上来说,HEVC/H.265在编码性能和带宽节省率上应该更胜一筹,同样清晰度水平下码率至少能下降40%以上, 因此HEVC/H.265未来在企业级市场上的推广普及趋势比较明显。

虽然HEVC/H.265已成为国际标准,但由于其复杂专利结构导致的较高许可费用,创立之初也未充分考虑到网页播放的友好性。 更致命的是复杂的算法让解码端异常吃力,这些原因给了谷歌VP9有机可乘的便利。 VP9由于技术指标优异,加之完全免费开源、主打浏览器即播放(尤其是大量应用转向H5后)、解码复杂度低等相对优势,挤身为与HEVC/H.265相提并论和竞争的地位。

就目前来看,HEVC/H.265与VP9孰优孰劣并没有统一的答案,即便是业内普遍认为HEVC/H.265在技术面上略胜一筹。 技术从来就不是唯一的度量,还得看应用的广泛度也就是国际各大软硬件巨头的站队情况。 当然免费也不是,所以我们观止云看到的是当下企业级市场,侧重点基本都以HEVC/H.265为主,很少看到基于VP9的产品面世。 除技术原因外可能的理由之一就是业内也不太愿意让这么重要一个国际标准被一个独立的公司(谷歌)所控制。

就这样,自称为下一代编码标准的AV1就找到了出生的理由,又要在技术上能够与HEVC/H.265叫板,又兼具VP9免费开源、浏览器友好性等优势, 同时开发维护权在一个叫 Alliance for Open Media(AOM)的非盈利中立标准组织手里,而该组织的创世机构是7大科技巨头,后来Adobe等数十个巨头相继加入。

要致力于打造一个符合公共利益的下一代媒体编码算法、封装格式以及技术体系。 其核心关键词有四:Open(开放)、Fast(快)、Royalty-free(免费)、ULTRA High Definition(超高清)

Interoperable and open:可互操作和开放,对标H.265较封闭的专利池。 Optimized for the Internet:对于网络最友好性,对标H.265在浏览器、H5上的不适。 Scalable to any modern device at any bandwidth:任何终端设备及任何网络环境,轻量级处处可用,对标H.265对解码端的高压。 Designed with a low computational footprint and optimized for hardware:编码服务器占用的机柜要更少以及对硬件加速的支持,这一点可能透露出了AV1未来可能大规模推行在云端进行基于硬件加速的云编码,H.265这方面貌似不太好办。 Capable of consistent, highest-quality, real-time video delivery:能够保持一致性,最高质量,实时传输,既然用了- est最高级,既要做到最高质量,还能实时的传输,那么就必须将H.265仅拥有的技术优势踩在脚下了。 Flexible for both commercial and non-commercial content, including user-generated content:管你是商业的,非商业的,还是UGC的,通通免费,对标H.265较高的专利费。

目前关于AV1的资料不太多,从仅有的公开资料来看,AV1的代码主要来自于谷歌的VP10, 其专注点一是超高清视频的编码压缩上,包括支持更高比特率、更宽的色彩空间、更高的帧率,试图以此去实现直接在浏览器中播放4K ,60帧的视频。

二是为WebRTC协议提供一套高可用的编码算法。

谷歌、微软、思科:分别有VPx、WMV/MPEG、Thor等编码算法,这为AV1提供了直接的技术支撑。

未来,AV1和HEVC/H.265之间很可能会是长期并存和竞争的关系,不管AV1在其它方面究竟会表现如何,但免费总是好的。

视频标准的竞争技术不是唯一的,很有可能竞争的结果是HEVC/H.265就专注于企业级、私有云市场,而AV1将广泛应用于互联网上、公有云上。