屏幕共享是视频会议中使用频率最高的功能之一,但在实际场景中用户所处网络环境复杂,常遇到丢包或者拥塞的情况,所以如何优化弱网环境下的用户体验也成为了音视频通信中重要的一环。本文主要分享阿里云 RTC QoS 如何通过若干编码器相关优化提升弱网环境下的屏幕共享体验。

作者:长程/田伟峰

审校:泰一

内容说明:

本文介绍以下四个方面的优化:

  • Screen Content Coding Tools
  • Long Term Reference (LTR)
  • Fast QP Rate Control
  • Content Adaptive Frame Rate

对本文中效果测试的说明:

  1. 为保证视频质量,屏幕共享的 Codec 设置了最大 QP (Quantization Parameter),在本文后面的测试中,这个最大 QP 对所有配置都是一样的。
  2. 为了更好的比较,效果测试中展示了流畅性和清晰度两个维度的效果。
  3. 对于流畅性的比较,由于视频分辨率太大,所以对其画面进行了缩放,使得原始版本和改进版本可以放在同一个视野中播放,以很好的看到卡顿和延迟的改进。画面模糊是由于上述原因降分辨率所致,在清晰度的对比中可以看到原始分辨率的画面。

Screen Content Coding Tools

Codec 中增加并改进了对于屏幕内容(其内容多为如 Word、Excel、PPT 等计算机生成的图形,文字等,具有重复纹理多,色彩分布较离散,无噪声等特点)特别适合的 Coding Tools 如 Intra Block Copy (Current Picture Reference),Transform Skip 等,显著提升了屏幕内容的压缩效率,可以做到相对于原 Codec,对于屏幕内容视频相同质量下平均可以节省带宽 20%+,编码时间只增加 10%,对某些典型序列场景带宽可以节省 40%+,由于是非标准的 Coding Tools,实际使用中会根据 SDP 协商,当所有与会方都支持该特性时才会开启。

SCC Tools 效果

流畅性效果

测试 SCC Tools 在弱网下的改进效果。

上图中,上半部分是增加了 Screen Content Coding Tools 编码出来的码流,下半部分是原始 Codec 编出的码流,可以看出使用 Screen Content Coding Tools 之后卡顿和延迟明显降低了。

清晰度效果

上面的动图可以看到卡顿情况的改进,下图展示的是清晰度的对比,左边是原始版本,右边是增加了 SCC Tools 版本,可以看到 SCC Tools 版本和原始版本相比清晰度并没有下降。

Long Term Reference (LTR)

长期参考帧技术是一种网络模块和编码器共同配合完成的参考帧选择技术。在 RTC 场景下一般的编码参考策略是向前一帧参考(在不考虑 SVC 的情况下),因为参考的距离越近压缩效果越好,出于实时的考虑编码只有 I 帧和 P 帧,没有 B 帧。而长期参考帧是一种可跨帧的参考帧选择策略,这种策略打破了传统的向前一帧的限制,可以更加灵活地选择参考帧。

长期参考帧策略的目的是在有 P 帧丢失的场景下,接收端不需要重新请求 I 帧也能继续正确的解码和播放,其相对于 I 帧可以明显提升编码效率,节省带宽。该技术可以绕过丢失的帧,利用丢失帧之前的一个已经接收的长期参考帧作为参考进行编码 / 解码显示,从而提升弱网场景下的视频流畅性。

根据长期参考帧的特点和目的,实现长期参考帧技术的应用需要有接收端侧反馈信息,编码器根据接收端反馈的帧信息选择参考帧编码,在有 P 帧丢失的场景下,接收端通过请求长期参考帧恢复将很快恢复画面。由于存在接收反馈,高 RTT 时反馈延时较大将会导致参考距离变大,所以长期参考帧比较适合低 RTT 场景。在多人会议场景中,下行人数太多也会制约长期参考帧的应用。

综合来看,长期参考帧更适合 1V1 的通信场景,适合低 RTT 伴随丢包或者拥塞的弱网场景,这样的场景下长期参考帧比传统的向前一帧参考有更好的实时性和流畅性。

LTR 效果

测试 LTR 以及 SCC Tools 在屏幕共享弱网下的效果。

流畅性效果

上图中左上部分是没有 LTR 的效果,几乎完全卡死,左下部分是使用了 LTR 的效果,可以看到屏幕有所滚动,比左上的更流畅。同时该场景我们还进一步测试了增加 Screen Content Coding Tools,右边的是同时使用了 LTR 和 SCC 的效果,可以看到明显是三者中最流畅的。

清晰度效果

下图中左边是原始 Codec 效果,中间是增加了 LTR 的效果,右边是同时增加了 LTR 和 SCC 的效果,可以看到三者的清晰度并没有明显差别。由于该例子我们共享的是实时的滚屏 Log,所以三者的内容不是完全一样的,但是总体差别不大。

Fast QP Rate Control

屏幕共享经常会有这样的场景:演讲者的桌面静止很长时间,然后翻页。对于编码器来说,画面静止一段时间会导致 QP 逐渐降低至最小 QP,然后翻页画面突变,编码器为了控制住码率,会增加 QP。常规的编码器码率控制为了使每帧的视频质量平稳变化,会限制每帧的 QP 调整幅度,相邻两帧的 QP 变化不能太大,以得到平稳的视频观看质量体验,这样翻页时就会有一个码率的突然增加,至码率收敛到目标码率会有一个过程,在网络好的时候没有关系,可以容忍码率的波动,但是在弱网时,该码率突增就会造成卡顿,影响观看体验。

因此,我们增加了另一种编码器码率控制模式,即码率快速收敛模式 Fast QP,主要原理是其可以摆脱相邻帧 QP 不能变化太大的限制,使得实际码率可以快速收敛到目标码率,然后配合网络层的带宽估计技术,在检测到弱网的时候启用这种编码器码率控制模式,使得视频码率非常平稳,观看体验更加流畅,虽然这样可能牺牲了一些相邻帧质量变化的感受,但是此时卡顿率的体验更加明显和重要,这种平衡和取舍是值得的。

Fast QP 效果

下面展示弱网下的 Fast QP 效果。

流畅性效果

上图中一开始的那个画面(有 Twitch 单词紫色背景)是几乎静止的,只有很小范围的变化,持续了近 10 秒钟,编码器 QP 逐渐下降至很低,然后翻页到一个较复杂纹理的页面(各种分辨率卡条),此时可以看到右下的使用 Fast QP 的画面基本上可以跟得上上方本地预览画面的变化,而左下的没有开 Fast QP 的画面就卡住了,然后又翻了两页,Fast QP 版本均能跟得上变化,而没有开 Fast QP 版本直到最后一页才恢复。

清晰度效果

这里我们只展示了翻页前的清晰度,对于翻页的清晰度,由于原始版本卡住了,所以就没有展示。左边是原始的,右边是加了 Fast QP 的清晰度,由于两者都是 QP 值降到了很低,所以清晰度都很高,没有什么差异。

Content Adaptive Frame Rate

屏幕共享的时候如果是共享桌面文档,PPT 等内容进行演讲,一般翻页速度是相对较慢的,帧率不用很高 5-10 帧每秒即足够;而有时屏幕共享也会播放电影,动画等视频,这样要求的帧率就比较高了,最好能到 20-30 帧每秒才看起来比较舒服。如下面两图,一个是编辑 PPT 的视频,明显帧率可以比较低,另一个是广告视频,明显帧率应该高一些。

如果我们把帧率定死,如 FPS=5,则碰到播放电影的场景就显得卡顿了;而如果我们把帧率直接定成 FPS=30,那在一般共享文档,PPT 的场景又会造成码率的浪费。

视频编码器里的运动矢量 MV 信息可以很好的反应画面的运动状况,如果是共享的文档,PPT 等不怎么动的画面,则大多数 MV 都等于 0 的,而如果是播放电影,动画等运动较多的场景,则 MV 会有一定的数值,所以利用编码器的 MV 信息可以很好的判断当前共享视频的运动状况,选择合适的帧率。

由于编码器是本来就在那里的,所以不会增加额外的运动检测模块开销。本改进就是针对这种需求,根据屏幕共享的内容,利用编码器输出的 MV 信息,自适应的调整帧率。对于共享文档等不怎么动的画面,则放低帧率,对于共享电影动画等,则调高帧率,以达到既不浪费带宽,也可以有流畅的视频观看体验的目的。

「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。

阿里云 RTC QoS 屏幕共享弱网优化之若干编码器相关优化的更多相关文章

  1. 阿里云 RTC QoS 弱网对抗之变分辨率编码

    本文为 QoS 弱网优化系列的第二篇 作者|安基程.田伟峰 审校| 泰一 视频编码中的变分辨率问题及解决 变分辨率在弱网场景的实际应用中非常常见,网络状况不好的时候降低分辨率可以降低码率,减少块效应, ...

  2. 阿里云 RTC QoS 弱网对抗之 LTR 及其硬件解码支持

    LTR 弱网对抗由于需要解码器的反馈,因此用硬件解码器实现时需要做一些特殊处理.另外,一些硬件解码器对 LTR 的实现不是特别完善,会导致出现解码错误.本文为 QoS 弱网优化系列的第三篇,将为您详解 ...

  3. 利用阿里云搭建frp实现外网远程桌面链接内网电脑

    主要应用场景:针对学生放假回家使用外网无法远程操作学校的服务器或者电脑,这里通过阿里云的云服务器搭建一个frp服务,实现内网穿透,从而可以直接通过远程桌面或者其他工具实现对校园网内的服务器或者电脑进行 ...

  4. 阿里云服务器公网Ip外网无法访问

    拥有了自己的服务器后,发现需要各种配置,之前应用公司的服务器的时候,一般通过内网访问,或者外网访问时,很多配置其他人员都已经配置好了,但是现在在自己的服务器上发布自己的网站的时候,才发现事情并没有自己 ...

  5. 阿里云CentOS 7无外网IP的ECS访问外网(配置网关服务器)

    说明: 1.必须要有一台机器具有外网IP的ECS. 2.如果不想配置具有外网IP的ECS时,可以购买NAT网关,但需要钱,贵.下面会说明NAT网关的配置. 3.最后吐槽一下阿里云VPC网关导致不能按照 ...

  6. 阿里云安装elastcsearch后外网访问配置

    内存 elastcsearch需要的内存是2G,可以修改/etc/elasticsearch/jvm.options,Xms和Xmx,建议分配更多的内存 外网访问 修改 /etc/elasticsea ...

  7. (二)阿里云ECS Linux服务器外网无法连接MySQL解决方法(报错2003- Can't connect MySQL Server on 'x.x.x.x'(10038))(自己亲身遇到的问题是防火墙的问题已经解决)

    我的服务器买的是阿里云ECS linux系统.为了更好的操作数据库,我希望可以用navicat for mysql管理我的数据库. 当我按照正常的模式去链接mysql的时候, 报错提示: - Can' ...

  8. 阿里云卸载自带的JDK,安装JDK完成相关配置

    0.预备工作 笔者的云服务器购买的是阿里云的轻量应用服务器,相比于云服务器ECS,轻量应用服务器是固定流量但是网络带宽较高,对于服务器来说,网络带宽是非常昂贵的,而带宽也决定了你的应用访问的流畅度,带 ...

  9. 阿里云ESC入网和出网指的什么

    什么是入网带宽和出网带宽 云服务器 ECS 的入网带宽和出网带宽皆以服务器角度出发.下表给出了入网带宽和出网带宽的具体内容: 带宽类别 (Mbit/s) 描述 入网带宽 流入云服务器 ECS 的带宽从 ...

随机推荐

  1. jenkins+ant+jmeter实现自动化集成(详解)

    jenkins+ant+jmeter实现自动化集成 for window 一.jmeter 1.jmeter安装 二.ant 1.ant安装 三.ant运行 jmeter脚本 1.配置 四.jenki ...

  2. 精尽Spring MVC源码分析 - HandlerAdapter 组件(四)之 HandlerMethodReturnValueHandler

    该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...

  3. MySQL优化索引

    1.  MySQL如何使用索引 索引用于快速查找具有特定列值的行.如果没有索引,MySQL必须从第一行开始,然后遍历整个表以找到相关的行.表越大,花费越多.如果表中有相关列的索引,MySQL可以快速确 ...

  4. linux操作系统及常用命令

    GUN:GUN is Not UnixGPL:General Public License.通用公共许可证,版权 Copyright,Copyleft 开源协议LGPL:lesserGPLv2GPLv ...

  5. 报错 ncclCommInitRank failed.

    环境 4 GeForce GTX 1080 GPUS docker image nnabla/nnabla-ext-cuda-multi-gpu:py36-cuda102-mpi3.1.6-v1.14 ...

  6. ES6语法:class类,从了解到使用

    前期提要:  JavaScript 语言中,在使用类之前,生成实例对象的传统方法是通过使用构造函数. 一.构造函数: 定义:通过  new 函数名  来实例化对象的函数叫构造函数.   主要功能:为初 ...

  7. flowable 实现多实例-会签-动态配置人员 参考demo

    会签 即多人执行当前任务 设置判断数 通过 例如:设置了是半数通过即可通过当前节点 如果当前是4人那就是2人即通过 如果是6人那就是三人即通过 如果是5人 即三人通过 看各位的判断值是如何书写 这个值 ...

  8. [leetcode]39combinationsum回溯法找几个数的和为目标值

    import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Given a set of can ...

  9. Idea创建Maven项目时出现Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:3.0.1错误

    如果Maven中用的jre用的是idea中自带的,但是环境变量JAVA_HOME配置的是自己的jdk,那么就会出现 解决方法是到settiing中把jre改成自己的jdk中的jre 经过尝试,问题解决

  10. react项目中登陆注册验证码的倒计时,页面刷新不会重置

    目前很多的网站和app在做登陆注册时都会用到手机验证码,为了防止验证码轰炸,也就是随意的点击验证码,一般我们需要对获取验证码进行一些限制,最常用到的是在规定时间内不得重复发送. 实现倒计时很简单,可以 ...