本文为 QoS 弱网优化系列的第二篇html
做者|安基程、田伟峰
审校| 泰一网络
变分辨率在弱网场景的实际应用中很是常见,网络情况很差的时候下降分辨率能够下降码率,减小块效应,网络好的时候增长分辨率能够提高清晰度及主观体验。ide
目前主流的视频编码标准,好比 H.26四、H.265,在编码过程当中若是要进行分辨率切换,则必需要先编码一个 I 帧,而 I 帧只能使用帧内预测,编码效率低下。这在弱网变分辨率的时候就容易形成卡顿。下图中展现了每秒钟切换分辨率的码率波动效果,高低两个分辨率,每秒钟切换一次。性能
上图中横坐标表示编码的帧数,纵坐标表示每帧的大小,图中最高的 4 个尖峰表示从低分辨率切换到高分辨率时编的 I 帧,在这 4 个尖峰中间的较低尖峰是从高分辨率切换到低分辨率编码的 I 帧。可见编码 I 帧带来的码率波动仍是很是明显的,这在弱网下就颇有可能形成以下图所示的卡顿。测试
https://v.youku.com/v_show/id_XNTEzMTY3MzU5Ng==.html优化
视频中左一的男士在伸手刚接到左三女士递出的传单之时进入弱网,切换分辨率,产生了卡顿。阿里云
新一代的压缩标准,如 VP九、AV一、VVC/H.266 等都支持在作帧间预测的时候当前帧和其参考帧使用不一样的分辨率,其基本思想是对参考帧作重采样 (re-sampling) 以使得其和当前帧的分辨率匹配,从而进行帧间预测,以实现分辨率切换的时候不用编 I 帧的目的。编码
阿里云 RTC codec 的变分辨率编码 (resolution change coding, 如下简称 RCC) 也使用和上述标准相似的基本思想,经过参考帧重采样等手段使得以前已编码的其余分辨率的参考帧也能为当前帧所用,维持帧间的参考链不断,充分利用帧间信息冗余提高压缩效率,省去编码效率低下的 I 帧。3d
本文对阿里云 RTC codec 的 RCC 特性进行测试,使用 6 个视频会议序列(背景不动,运动幅度较小),和 5 个运动程度较大的序列,高低两个分辨率,一秒钟切换一次,只评价分辨率切换帧的码率和视频质量,由于对于后续的帧,使用 RCC 与否,编码方式并无变化。code
对于视频会议序列,相同视频质量下码率有 70% 节省,对于运动序列,相同视频质量下码率有 58% 的节省,由于视频内容越静止不动,帧间编码的比例越高,则 RCC 的优点越明显,因此视频会议序列 RCC 的增益比运动序列要高,是合理的。
下图展现了一个测试序列使用 RCC 后码率波动的变化,蓝线表示的是未加 RCC 的码率波动,红线表示的是加了 RCC 以后的码率波动,能够看到使用 RCC 后分辨率切换处的编码 I 帧码率尖峰明显没有了,码率更加平稳,并且视频质量 PSNR 也有所提高。
蓝线中分辨率切换处的 I 帧平均码率为 840kbps, PSNR=33.5db, 39.7db, 40.6db for Y, U, V 三个份量;而红线中分辨率切换帧的平均码率为 360kbps, PSNR=36.3db, 40.9db, 42.0db for Y, U, V 三个份量。
即开了 RCC 以后,分辨率切换时的 I 帧码率下降了近 60%,同时亮度的 PSNR 提高了近 3 个 db。
除了前述的单纯 codec level 变分辨率不编 I 帧带来的一帧的压缩性能提高以外,RCC 在和 LTR (Long Term Reference) 结合后会进一步下降弱网下频繁请求 I 帧的可能性。
LTR 抗弱网的原理在上一篇分享《阿里云 RTC QoS 屏幕共享弱网优化之若干编码器相关优化》中已有所介绍,在此结合 RCC 会进一步提高其抗弱网效果,原理以下:
本文在 RTC level 模拟弱网场景,使其一秒钟切换一次分辨率,下面两图分别是未加 RCC 和 加了 RCC 以后的效果,能够看到未加 RCC 的画面在分辨率切换时会有明显的卡顿以及编 I 帧形成的 flicker 效应,而加了 RCC 的则会很流畅,画面也没有 flicker 效应。
上图是未加 RCC,一秒钟切换一次分辨率的效果,有屡次明显的小卡顿,且画面有频繁 I 帧形成的 flicker 效应。
上图是加了 RCC,一秒钟切换一次分辨率的效果,总体比较流畅,感受不到卡顿,视频质量也比较平稳,没有 flicker 效应。
「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。