作者:Alex Eleftheriadis,Vidyo(原文链接)
翻译:刘通
原标题:Improving VP9 Without Changing It – part 3
前文链接:改进而不改变VP9—2
在这个系列文章的第一篇和第二篇中,我们讨论了VP9以及可伸缩性的实现。在最后这篇文章中,我们将要介绍codec本身,以及Vidyo新的可扩展VP9的实现有哪些优点。
编码器和解码器复杂性之间的不对称关系可以追溯到20世纪80年代末的第一个数字视频编解码器(H.261)的设计,这是历史上使用预测性,运动补偿混合结构的固有特征。编码器的复杂性一直是编解码器实现之间的差异点,许多公司都在开发自己的“神秘配方”以提高质量和压缩效率。
对于一个非专家的普通人来说,这常常是一个容易让人感到混乱的地方。视频编码标准是将解码过程和比特流语法标准化了,而不是对编码过程标准化。所以我们在优化编码过程的时候有极大的自由度。有趣的是,在DVD中已经被广泛应用的MPEG-2编解码器,编码器的性能在十年之内几乎翻番,而且底层的比特流语法并没有被改变。只是编码器可以做出更明智的决定了,可以选择应该在何处花费精力。这是因为工程师们做出了更好的设计,也是因为有更多的可用处理功率来进行这些运算了,即便在实时处理的时候也是一样。
Vidyo最近发布了自己的PaaS产品。作为PaaS,它就是设计出来方便所有人使用的—人们可以下载对应他们编程语言和环境的免费SDK,并且将代码和他们自己的应用结合起来就可以了。这是一个基于云端的服务,并且会根据使用情况进行收费。
尽管我们可以直接用WebM项目于的开源可扩展VP9,但是我们还是决定从零开始自己开发一个可扩展的VP9的实现。
对于我们来说移动端的表现是很重要的。因为编码工作是通过软件来进行的,所以需要从可用的CPU资源和电池中挤出尽可能多的性能。实际上,正如我在下文将要向你展示的那样,即便是在最简单的运行模式中,以及在我们的测试中,开源版本的VP9(下文简称OVP9)在典型的移动平台上并没有为720p内容的空间可扩展编码提供实时合适的性能。帧速率大概是15fps,只是通常要求的30fps的一半。这正是我们想要开发自己优化的版本的主要动机。
我们工作的成果现在可以在vidyo.io PaaS上获得,并且马上就可以在整个Vidyo平台上可用。性能的改进是很可观的。为了展示这个成果,我们需要对比两个编解码器的三项参数:质量vs.比特率vs.复杂度。这三个参数互相影响,所以想要做出合适的对比的话我们需要与它们之中的至少一项想混合。这里我们要将在整个操作范围内匹配编码器的质量,并且比较它们的复杂度。下面展示了我们内部测试的结果,当然实际使用中的结果有可能会不同,但是下图的结果展示了我们全新的VP9可以带来的好处。
图6
图6展示了编码一个720p,30fps,具有两个空间层,三个时间层的对比结果。图标是PSNR和比特率的关系图。坐标轴是顶层PSNR和总比特率。首先,在CPU模式8下使用OVP9在四个不同的操作点对视频进行编码。正如我们之前所提到的,这个是最简单的操作模式,它使用的是最少量的CPU资源,当然提供的压缩效率也是最低的。但是即便这样,OVP9也不能给两个可扩展层的720p提供满足要求的实时性能(30fps)。同样一段视频也使用了Vidyo的VP9实现(简称VVP9)进行了编码,编码工作在两个不同的复杂度中进行:分别是低复杂度模式和中等复杂度模式。我们可以看到VVP9在低模式中可以提供与OVP9相同或者稍微好一点的性能,但是在中等模式中你可以得到较为明显的提高。
图6告诉我们在这个配置中,我们已经匹配了两个编解码器的质量性能。现在的关键比较是看我们获得这种压缩效率的处理成本。表1展示了两个流行的移动平台中,以每秒帧数表示的两个编解码器的性能,一个是iPhone 6 Plus,一个是三星Galaxy S6 Edge+。
表1
左边的列是绝对fps,右边的列是VVP9和OVP9的编解码速率的百分比。我们可以看到,平均而言,在两种设备和比特率下,编码时我们得到了2.7到2.8倍的加速,同时也产生了更好的视频质量(PSNR)。在iPhone中低端模式的VVP9可以提供高于三倍的舒服。我们可以强调这些结果是由于有两个空间层的可扩展编码造成的。即便是在单层模式下,我们还是可以得到最高1.7倍的速度提升。正如上表所示的那样,解码速度也变得更快,虽然没有那么明显吧。这个结果跟预期的一样,因为解码过程要简单的多,并且没有那么多可以优化的空间。
特别的,显著增加的编码速度对于移动设备的电池寿命有着直接的影响。更快的编码速度意味着设备的CPU需要更少的时间来对每一个视频帧进行编码。如果编码速度低于30fps的话,就像OVP9的测试结果那样,就意味着即便是CPU用了全部的时间在编码视频上也不能达到通常摄像头的30fps速率。如果编码速率达到了30fps以上,就像我们VVP9的结果那样,就是说CPU有足够的时间来编码视频,然后可以处理其他应用的任务或者说干脆休息。这当然就会消耗更少的电池电量。解码的时候那些较少的提升也是一样的,只不过就是对电池的好处更少了一点而已。总体的能量消耗提升还取决于视频通讯应用必须执行的其他任务,包括了音频编码解码,UI管理等等。在专用于视频编码的移动设备中,这种节省可以等同于将电池的寿命翻番了。
这些提升同样的还在电脑端应用上存在。举个例子,在64位Windows环境中,我们看到在编码同样一段720p视频内容的时候,VVP9比OVP9块了大概1.6到1.7倍的速度。当然,电脑的电池电量和处理器资源不像移动设备那样受限制,但是编码表现增益还是会体现在解放处理器的时间给其他的任务,以及笔记本电脑更长的电池使用时间。
给Vidyo终端用户的结果就是他们可以享受到开放标准带来的全部好处,与现有的基于浏览器的实现完全兼容,或者其他任何VP9实现,同时可以享受到更好的性能,并且大大提高他们移动设备在不需要插件时对视频编码的能力。这是开放标准的强大优势之一:允许不同的实现可以互操作。