黄金帧编解码器实现高质量实时网络视频
扫描二维码
随时随地手机看文章
黄金帧 (Golden Frame)
对 On2 TrueMotion 编解码器的新用户而言,最令人惊喜的功能之一是黄金帧。就象其它压缩器一样,TrueMotion 也保留一个最新解压的帧作为当前帧的预测器。目前的各种编解码器中,有些保留最后几个帧;有些则采用一个无序解压的未来帧,然后用作预测器 (如在 B 帧之前传输 P 帧)。TrueMotion 编解码器和 VP7 则特别改为保留过去任意一个解压数据的帧。这种编解码器能够更新某个帧在未来任一点的任何部分。我们称这种二级参考帧为黄金帧,并已发掘出它的众多用途。
图1:On2 VP7的帧类型
注:这些帧类型仅供参考。利用 VP7 入门开发工具包,,用户可以准确控制帧何时使用或更新黄金帧或最后的帧参考缓冲器。
前景影响大
我们发现黄金帧的第一个用途是前景和背景视频的分割。例如,大多数视频会议应用中,总是有一个人在静态的背景前面讲话。这个发言人遮蔽了背景,但随着他在座位上的移动,会显露出局部背景。TrueMotion编解码器利用非移动的高质模块来更新黄金帧,即使前景快速移动,也可以保持高质量的背景图像。
丢包恢复
我们还可以在丢包情况下采用黄金帧。在一般的视频会议系统中,接收器在发现丢包时,会用信号通知发送者。发送者一接收到这个信号,就会对一个独立于前面各帧的帧 (即‘关键帧’) 进行编码来恢复。该帧由于必须从头开始编码,故往往非常大,这会导致视频的播放断断续续。另一种情况是,这是一个低质量的帧,看起来比周边的帧要模糊,而且产生视觉干扰脉冲。
On2 的VP7视频会议系统提供一个更好的选择方案:发送者可以发送一个只涉及黄金帧的帧。我们称之为恢复帧。由于我们不必对帧从头开始编码,因此可以获得一个质量更好而且更小的帧。
VP7恢复帧
帧0是关键帧
帧1到6都只根据前一个帧来构建预测器
帧7只以帧0为参考
即使帧1到6中的任一个丢失了,VP7仍然能够对帧7进行解码,因为它只以帧0为参考
图2:利用恢复帧来处理丢包问题
视频会议
多方视频会议也可以采用黄金帧。在多方会议系统中,各个用户的连接带宽都不同。一般的解决方案是把带宽减小到一个假定的最小公分母:所有用户都以最慢的连接都能接收的速度来收取数据。
基于On2 VP7技术的系统则采用了一种新颖的替代方案。通过使用黄金帧、普通帧和可抛弃帧,VP7 可获得四个级别的有限时间可调性。这意味着我们可以根据每一方的需要生成不同的比特流 (参见图3)。这样,会议中的高清方就不会受到较低速连接的影响。最重要的是,这种方案无需额外的CPU成本。
图3:采样时间可调性模式和On2 VP7
每一个比特流都需要较低的帧速率来解码。因此,带宽最低的用户可以接收 5 fps 的比特流;而带宽最大的用户可接收全 30fps。
黄金质量
On2 VP7技术还利用黄金帧来提高质量。在极缓慢地移动的镜头或变焦中,一个周期性的高质量黄金帧会恢复在重复应用环路滤波器或亚像素运动 (sub-pixel motion) 时所丢失的细节,从而保持图像的质量,而结果可以相当明显 (见图4)。在另一些情况下,黄金帧还可作为一个良好的预测器,预测屏幕上的某些图像何时返回到先前的位置。
竖:平均峰值信噪比 (分贝) 横:数据率 (每秒千比特)
图4:采用与不采用黄金帧的移动及日历的峰值信噪比 (PSNR) 之对比
实时质量
在最简单的模式下,On2 VP7编码器使用的周期数只比解码器多 30%,但仍然保持出色的质量。当有大量可用周期时,实时 VP7 更能够产生媲美最佳离线编码的质量。而且,这是自动实现的:VP7 乘以每一个编码帧,并自动调节其复杂性,以确保尽可能利用可用周期来获得最佳质量。
能够达到这样,是因为 TrueMotion VP7 采用了一套自适应算法 (adaptive algorithms) 和探试性 (heuristics) 方法。这些算法决定哪些运动向量和模式最可能产生最佳结果。工作良好的模式和运动向量会被探试得更频繁,而无法产生好结果的模式则被完全关闭、或被禁止到这个在所有模式下的误差超过了一个自适应阈值。这些阈值和两次调节间的周期也都是自适应的。当VP7的压缩速度足够快时,阈值和探试周期增加。当VP7工作顺利时,对模式的探试便更频繁。
在VP7拥有多余时间的极端情况下,它会回复到最低和最佳模式,甚至回到允许完全搜索和速率失真优化的某一点。在相反的极端情况下,VP7 可能在整个帧上只进行5或6次运动搜索,而每个宏模块 (macroblock) 只检查2或3个不同模式,就会产生结果。
实时模式
为了确保静态相机的视频会议具有出色的实时模式,On2 VP7 充分利用了预测有时是接近完美的这项特点。如果VP7 (通过运动或模式搜索) 发现预测器与它将进行编码的原始帧非常匹配,它会避免进行大量工作。在这种情况下,VP7放弃了正向变换、量化、令牌化(tokenization)、逆量化、逆向变换和重组代码等操作。唯一需要保留的是在比特流中加入一套代表所有0的令牌 (token),并直接把预测器拷贝到帧缓冲器中。如果这种情况时常发生,编码器实际上比解码器运行得快,故无法缩短从比特流读取令牌的时间。
这种技术可能对感知视频流质量有重大的影响。它可通过忽略较小的变化 (由相机噪声引起的波动) 来消除背景噪声。另外,它让编码器把所有可用周期都集中用在包含显着变化 (移动的部分) 的小部分视频屏幕上。因此,观者最关心的图像部分,亦即发言者的面孔,将获得最多的周期。
解码器的复杂度
为了确保解码速度,On2 VP7比特流采用了一种创新性的简单设计。
象其它编解码器一样,VP7也采用了一个环内去块效应滤波器 (一般称为环路滤波器),以解决模块边缘的方块效应问题。这种方案在模块边界上运用了一个自适应的一维 (one-dimensional) 模糊/低通滤波器。VP7 的滤波器可在字符算法中单独工作,任何可能溢出 (超出字符边界0-255) 的中间操作都会被钳位。这就确保了 SIMD 指令使用的最大宽度,并意味着,如果一个处理器能支持64位SIMD,则VP7的环路滤波器比相同的C操作快了将近8倍。
On2 VP7 的预测滤波器比许多其它编解码器简单。预测器总是由单一帧创建,而且在正向和后向参考帧之间绝没有插补。如果使用了任何亚像素运动,则可在该单一帧上运用单阶滤波器来完成。
简化的熵逻辑
On2 VP7还采用了一种比其它先进编解码器更简单的熵 (entropy) 编码技术。熵解码包含了简单的字符算法,可利用乘法或几种查找算法进行计算。虽然VP7使用了精密的自适应内容建模技术,但若每一比特位都根据比特流进行解析,则不适合。
灵活的解码实现方案
On2 VP7的比特流划分方法在构建快速解码器时保留了许多选项。所有模式和运动向量信息都存储在一个子流中;所有剩余信息则被存储在另一个单独的子流中。创建整个预测帧的工作可被分离出来,在处理器的一个单独内核上运行,而该处理器会分析和产生剩余信息供稍后重组之用。或者,VP7 解码器可采用较传统的运行方法,一次处理一个宏模块,从一个子流中取出单个模式和运动向量,然后从另一个子流的该宏模块中取出剩余信息。两个极端选择之间可进行折衷,以确保低数据率和低指令缓存失效率。
总结
由于On2的VP7 专有压缩技术具有种种优势,因此获得了市场的广泛采纳。黄金帧、出色的实时质量和解码器的简易性,都让On2 VP7成为目前网络视频及未来可能应用的理想选择。