改进而不改变VP9 — 1

作者:Alex Eleftheriadis,Vidyo(原文链接

翻译:刘通

原标题:Improving VP9 Without Changing It

 

Vidyo最近公布了自己对可扩展VP9的编码器实现,相较于WebM的开源VP9编解码器实现有显著的性能和效率提高,特别是在移动设备上。除此之外,Vidyo的VP9编解码器与WebRTC完全兼容,并且还兼容使用WebM VP9编解码器的任何应用,包括Google Chrome浏览器。在这个系列的三篇文章中,我会比较详细的解释这个新设计的具体情况和好处。但是在此之前,首先要了解VP9的背景和基础知识,可扩展性和视频编解码器的总体概念。

在2015年年末VP9视频编解码器第一次在Google Chrome上出现。尽管WebRTC着名地要求在浏览器中支持VP8和H.264,VP9的出现还是给大家带来了一个替代选项,它开源,免版税,性能优于H.264,当然也比更老的VP8要好。

VP9对于实时通信的重要意义远远的超出了现在大家的认知,它以开源代码和免版税的软件包提供了最先进的压缩效率。正如我2016年4月在BlogGeek.Me的客座文章中提到的,这是第一个将最先进的可扩展性带到基于浏览器的视频通信的编解码器。可扩展性已经被证明是实现高质量多点视频的重要工具,并且在含版税的H.264和HEVC编解码器中也得到了支持。

可扩展编码意味着同样的视频比特流包含了许多数据子集(成为层),可以允许你以不同的分辨率重建原始数据。可伸缩性可以是在多个维度中,即时间,空间或者质量,其中前两个用于实时通信应用。

时间可伸缩性意味着相同的比特流可以让你获得数据的一个子集,并以不同的帧速率来表示视频。图1表示了在不使用可伸缩性的时候(也就是只有一层的时候)视频编码是如何在实时通信中工作的。每个图片都用前一个编码过的图片作为参考;这样编码器就只需要发送相连图片之间的区别就可以了,也就减少了需要传递的数据量。这些图片称为P。第一个图片不使用前一个图片进行预测,表示为内图片,或者I图片。一个限制是,为了解码一个图片,就必须接收到这条链中所有的预测图片。这个图片编码结构通常被称为IPPP。

vp9-1

图1:单层编码

图2展示了当使用三个时域层的时候编码是如何进行的。图片显示的时候在垂直方向有一些便宜,以便轻松分辨不同的层。让我们假设最高帧速率为30fps。底层(层0)每四个图片编码一个图,所以提供7.5fps的速率。注意这层的编码方式与图1所示的相同—第一个图像是I图像,后面的都是P图像。

vp9-2

图2:三层时域可扩展性

层1是通过在层0的两个图像之前添加一个图像的方式来构建的。在图2中,指的就是P1.注意它使用层0的前一张图片进行编码。如果我们把P1的图片和P0的图片加起来,总共的速率是15fps。最后,层2通过加入所有剩下的图像(P2)来构造。这些图像还是使用低一层的前一张图进行编码。对于第一个P2来说,这表示I0(或者后来的P0),而对于第二个P2,这代表时间2的P1。如果我们把P2和P0、P1的图像加起来,我们总共的帧速率就达到了30fps。

这种结构叫做分层P图像编码结构,有几个有用的特性。第一,我们可以在不影响我们对低层的解码能力的前提下将高层移除。然后可以在不进行信号处理的情况下载任何给定的时间点降低帧速率。第二,这个结构还允许我们在任何时间点都添加更高的时域层。举个例子,我现在正在用层0以7.5fps的速率接收和解码,但是我决定改使用全部的30fps工作,通过这个结构就可以在不引入任何延迟或者需要额外的信号处理工作的前提下进行改变。这个结构还可以显著地提高稳定性。比如只有第0层才需要可靠的接受。

填写常用邮箱,接收社区更新

WebRTC 中文社区由

运营