阿里云 RTC QoS 弱网对抗之变分辨率编码
本文为 QoS 弱网优化系列的第二篇
作者|安基程、田伟峰
审校| 泰一
视频编码中的变分辨率问题及解决
变分辨率在弱网场景的实际应用中非常常见,网络状况不好的时候降低分辨率可以降低码率,减少块效应,网络好的时候增加分辨率可以提升清晰度及主观体验。
目前主流的视频编码标准,比如 H.264、H.265,在编码过程中如果要进行分辨率切换,则必须要先编码一个 I 帧,而 I 帧只能使用帧内预测,编码效率低下。这在弱网变分辨率的时候就容易造成卡顿。下图中展示了每秒钟切换分辨率的码率波动效果,高低两个分辨率,每秒钟切换一次。

上图中横坐标表示编码的帧数,纵坐标表示每帧的大小,图中最高的 4 个尖峰表示从低分辨率切换到高分辨率时编的 I 帧,在这 4 个尖峰中间的较低尖峰是从高分辨率切换到低分辨率编码的 I 帧。可见编码 I 帧带来的码率波动还是非常明显的,这在弱网下就很有可能造成如下图所示的卡顿。
https://v.youku.com/v_show/id_XNTEzMTY3MzU5Ng==.html
视频中左一的男士在伸手刚接到左三女士递出的传单之时进入弱网,切换分辨率,产生了卡顿。
新一代的压缩标准,如 VP9、AV1、VVC/H.266 等都支持在做帧间预测的时候当前帧和其参考帧使用不同的分辨率,其基本思想是对参考帧做重采样 (re-sampling) 以使得其和当前帧的分辨率匹配,从而进行帧间预测,以实现分辨率切换的时候不用编 I 帧的目的。
阿里云 RTC codec 的变分辨率编码 (resolution change coding, 以下简称 RCC) 也使用和上述标准类似的基本思想,通过参考帧重采样等手段使得之前已编码的其他分辨率的参考帧也能为当前帧所用,维持帧间的参考链不断,充分利用帧间信息冗余提升压缩效率,省去编码效率低下的 I 帧。
Codec level 压缩性能测试
本文对阿里云 RTC codec 的 RCC 特性进行测试,使用 6 个视频会议序列(背景不动,运动幅度较小),和 5 个运动程度较大的序列,高低两个分辨率,一秒钟切换一次,只评价分辨率切换帧的码率和视频质量,因为对于后续的帧,使用 RCC 与否,编码方式并没有变化。
对于视频会议序列,相同视频质量下码率有 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。
RTC level 效果
除了前述的单纯 codec level 变分辨率不编 I 帧带来的一帧的压缩性能提升之外,RCC 在和 LTR (Long Term Reference) 结合后会进一步降低弱网下频繁请求 I 帧的可能性。
LTR 抗弱网的原理在上一篇分享《阿里云 RTC QoS 屏幕共享弱网优化之若干编码器相关优化》中已有所介绍,在此结合 RCC 会进一步提升其抗弱网效果,原理如下:
- 没有 LTR 时,在弱网场景下如果丢包或卡顿无法恢复,则会请求 I 帧;
- 增加了 LTR 之后,则不会请求 I 帧,而是会请求 LTR 帧恢复,编码效率提升很多;
- 如果是弱网下发生了分辨率切换,没有 RCC 的情况下,由于必须编码 IDR 帧,所以 LTR 被清空,如果此 I 帧太大,导致接收端收不到,则其会再次请求 I 帧,陷入一个恶性循环中。
- 如果开了 RCC ,不仅分辨率切换帧本帧不会编码 I 帧,其他的参考帧管理也和之前一样,LTR 也不会被清空,分辨率切换帧本帧的大小比 I 帧减少了很多,接收端收不到的概率大大降低,即使收不到,也可以请求 LTR 恢复,而不是 I 帧恢复。
本文在 RTC level 模拟弱网场景,使其一秒钟切换一次分辨率,下面两图分别是未加 RCC 和 加了 RCC 之后的效果,可以看到未加 RCC 的画面在分辨率切换时会有明显的卡顿以及编 I 帧造成的 flicker 效应,而加了 RCC 的则会很流畅,画面也没有 flicker 效应。

上图是未加 RCC,一秒钟切换一次分辨率的效果,有多次明显的小卡顿,且画面有频繁 I 帧造成的 flicker 效应。

上图是加了 RCC,一秒钟切换一次分辨率的效果,整体比较流畅,感觉不到卡顿,视频质量也比较平稳,没有 flicker 效应。
「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。
阿里云 RTC QoS 弱网对抗之变分辨率编码的更多相关文章
- 阿里云 RTC QoS 弱网对抗之 LTR 及其硬件解码支持
LTR 弱网对抗由于需要解码器的反馈,因此用硬件解码器实现时需要做一些特殊处理.另外,一些硬件解码器对 LTR 的实现不是特别完善,会导致出现解码错误.本文为 QoS 弱网优化系列的第三篇,将为您详解 ...
- 阿里云 RTC QoS 屏幕共享弱网优化之若干编码器相关优化
屏幕共享是视频会议中使用频率最高的功能之一,但在实际场景中用户所处网络环境复杂,常遇到丢包或者拥塞的情况,所以如何优化弱网环境下的用户体验也成为了音视频通信中重要的一环.本文主要分享阿里云 RTC Q ...
- 网络QoS的平衡之道——音视频弱网对抗策略介绍
作者:网易智企云信资深音视频引擎开发工程师 王兴鹤 随着AI和5G的到来,音视频应用将变得越来越广泛,人们对音视频的品质需求也越来越高,视频分辨率已经从高清发展为超高清.VR,视频帧率也已出现60fp ...
- 【阿里云服务器】外网无法访问tomcat下部署的项目
问题提出:在ESC实例上部署了jdk和tomcat(略,上云了,上云了),启动tomct后,内网可以访问8080端口,外网无法访问8080. 系统环境:winsdow 2008 企业版 解决方案: 在 ...
- 阿里云apache服务器外网无法访问(配置安全组,添加80服务)
CentOS的系统 ,已经安装好了 apache php mysql 常规排错过程(ps:没耐心的童鞋请直接看最后一步,学习在阿里云控制台配置 安全组,允许 http服务) 第一步:检查apache ...
- 通过rinetd实现端口转发,同时访问阿里云RDS的内外网
配置方法如下: 1 wget http://www.boutell.com/rinetd/http/rinetd.tar.gz&&tar -xvf rinetd.tar.gz& ...
- Navicat通过云主机内网连接阿里云RDS
背景 公司为了安全起见,RDS设置只允许阿里云主机的内网端可以访问.这就意味,如果要操作RDS就需要连接到云主机上之后通过mysql shell操作.操作起来很复杂麻烦,今天看同事用Navicat f ...
- 阿里云内网和公网NTP服务器和其他互联网基础服务时间同步服务器
阿里云为云服务器ECS提供了内网NTP服务器,对于阿里云以外的设备,阿里云同时提供了 公网NTP服务器,供互联网上的设备使用. 内网和公网NTP服务器 以下为阿里云提供的内网和公网NTP服务器列表. ...
- 阿里云vpc网络SNAT实现内网实例通外网
需求场景: 因费用和安全考虑,内网部分机器没有分配公网IP,没绑定弹性公网IP,没有购买NAT服务,但是内网机器需要访问外网部分资源,如发送邮件. 操作步骤如下: 1.查看外网上的转发功能的开启没开启 ...
随机推荐
- Next.js 10
Next.js 10 October 27th 2020 https://nextjs.org/blog/next-10 refs xgqfrms 2012-2020 www.cnblogs.com ...
- js 如何打印出 prototype 的查找路径
js 如何打印出 prototype 的查找路径 Function function func (name) { this.name = name || `default name`; } f = n ...
- 发布npm包时,发布源码,而不是dist后的打包文件
基于webpack-scaffold 此脚手架配置 删除.gitignore文件中对dist文件夹的无视配置 修改package.json文件 { "private": true, ...
- AtCoder Beginner Contest 192 F - Potion
题目链接 点我跳转 题目大意 给定 \(N\) 个物品和一个 \(X\) ,第 \(i\) 个物品的重量为 \(ai\),你可以从中选择任意个物品(不能不选) 假定选择了 \(S\) 个物品,物品的总 ...
- 配置安装oh-my-bash
背景 最近项目上有用到petalinux,所以只能在bash环境下使用命令行,所以不能使用oh-my-zsh 之前看一个dalao用oh-my-bash来规避这个问题.所以这里试一下安装oh-my-b ...
- Wireshark安装使用及报文分析
先看链接!!! Wireshark使用教程:https://jingyan.baidu.com/article/93f9803fe902f7e0e56f5553.html Wireshark过滤规则筛 ...
- Docker 一键安装及Docker管理面板Portainer中文汉化
前言 Docker接触了一段时间了,批量操作过程中感觉太繁琐,所以找到了好评率比较高的Portainer面板,使用后感觉的确不错所以准备拿出来精力来做个汉化版,过程中发现词条非常多,所以暂时先汉 ...
- ISC BIND9 - 最详细、最认真的从零开始的BIND 9 服务讲解
DNS and BIND 服务的搭建说明 目录 目录 DNS and BIND 服务的搭建说明 1. 背景 1.1 DNS 1.2 FQDN 1.3 BIND 1.4 本文中搭建模拟DNS服务网络虚拟 ...
- Excel技巧—开始菜单之格式刷六大功能
转: Excel技巧-开始菜单之格式刷六大功能 点赞再看,养成习惯:千里之行,始于足下. 微信搜索[亦心Excel]关注这个不一样的自媒体人. 本文 GitHub https://github.com ...
- entitybuilder--一个简单的业务通用框架
关于业务通用框架的思考 业务系统是千差万别的,例如,保存.更新和删除订单,或者保存订单和保存客户,走的根本不是一个流程.但是,它们还是有共同点,它们的流程大致可以分成下面的几个部分: 拿到增删改等操作 ...