导读:RTC 场景视频的体验指标主要包括视频延迟、视频流畅度、视频清晰度。在一定条件下视频的最佳体验主要指延迟、流畅度、清晰度达到均衡,达到条件下的最佳主观体验。本文主要介绍,为了能够调节出一个最佳的体验效果,网易云信在工程架构和策略方面做的一些工作。

文|戚继跃

网易云信资深引擎工程师

RTC 的视频体验质量对外受用户网络环境、用户使用姿势、用户硬件平台影响;对内依赖我们的网络 QoS 模块、视频编解码模块、视频质量控制 VQC 模块、视频前后处理模块的密切配合。

单独调整或调优某一个模块,可以得到一定的收益,但是如果几个模块能够联动调节,那么可以极大的提升使用效果,得到 1 + 1 > 2 的效果。为此我们设计了自适应调节系统(Auto Adjust System, AAS),可以根据外部因素和内部各模块的工作状态,自适应调节各个模块工作参数,达到视频的最佳体验。

 网易云信自适应调节系统

网易云信的自适应系统 AAS 分为配置自适应和工作中的动态自适应两部分,两者相互配合。配置自适应是指根据当前的用户配置、设备、网络供应商等信息,综合决策实际的视频配置;动态自适应是指在运行过程中,根据各个模块的反馈,决定视频参数的调整。配置自适应和动态自适应没有固定优先级关系,由具体的配置和参数自行决定。

 配置自适应 

配置自适应是指能够根据当前的用户配置、设备名称、网络服务商、所属地区等客观现实条件,自适应地选择一套最适合当前条件的视频参数。为了达到配置自适应的目的,我们设计了一套多维度层次化配置系统,包括初始默认生效参数、静态白名单、频道前配置下发、用户设置、频道内配置下发、能力协商,这些配置从前到后优先级逐步升高,即后面的配置可以强制修改前面配置的结果。

初始默认值:是指我们内部配置的默认值,如果不做任何其他设置这个配置就会使用这个值。

静态白名单:代码里面维护的一套设备相关以设备 device id 为索引的表,表里面存储需要使用的配置值。

频道前配置下发:在加入频道前,会从服务器获取一次配置信息,配置的信息在服务端维护,下发可以根据机型、地区、网络类型等进行下发。

用户设置:用户通过接口指定一些配置。

频道内配置下发:和频道前配置下发类似,不同点是发生在加入频道之后。

能力协商:比如 codec 格式这种配置,需要根据整个房间内所有人支持的解码格式来确定,所以需要每个人在加入频道内时候上报自己的解码能力,然后对所有解码能力进行综合,得出的结果下发给所有人。

 动态自适应 

动态自适应是指在工作过程中,能够根据当前网络、设备性能、视频 profile 等变化的监测,动态调整相关模块的参数。为达到动态自适应的目的,我们设计了动态自适应模块,目前该模块监测的变量包括当前视频使用的 profile(宽高帧率)、当前 codec 类型、当前软硬件编解码选择、当前 QoS 反馈的码率、当前编码流程的性能这些参数。动态自适应的内容包括是否切换 codec 类型、前后处理算法开关、视频大小流策等。后续的开发的 feature 可以根据需要增加监测的指标,然后输出动态自适应结果。

应用举例

我们通过一个例子来展现云信的自适应调节系统的使用情况。在编码发送端,云信的编码器有软件的 ne264、ne265、vp8,同时有我们也做了硬件 264, 硬件 265 的适配。发送时选用哪个编码器,以及几个编码器之间如何相互切换,是个棘手的问题。

 编码器能力分析 

在使用自适应调节系统解决编码器选择问题之前,我们先来分析一下各个编码器的优劣:

  • ne264 输出标准的 264 码流,兼容性最好,码率最稳定,但是在高分辨率下性能是个问题,而且压缩率也不如 265。

  • ne265 输出标准的 265 码流,性能消耗最大,码率也不够稳定,很多设备性能不能支撑编码 265 码流,但是在高分辨率下压缩率有明显优势。

  • vp8 是 WebRTC 支持最好的格式,一些移动端的浏览器上只支持 vp8 解码,兼容性超过 264。

  • 硬件 264 支持设备很广,性能有优势,但是编码的码率波动可能会比 ne264 要大。

  • 硬件 265 在高分辨率下压缩率很有优势,支持设备一般,需要 case by case 的适配,码率波动很大,265 的解码性能也存在问题。

可以通过以下图片比较我们的几种编码器:

根据编码器的不同特性,可以设计编码器选择自适应如下:

配置自适应

根据我们对硬件设备适配的结果,在静态白名单上写上对应的硬件设备型号,是否支持硬件 264 编码,是否支持硬件 265 编码,是否支持 265 软件编码,是否支持 265 解码。

根据白名单的结果,按照硬件 265,ne265,硬件 264,ne264, vp8 从前到后的顺序选取当前设备支持的编码类型列表。比如某款 android 手机,通过查找白名单表我们得到 [硬件 265,硬件 264,ne264,vp8] 这样的支持列表,使用编码器时,按照优先级从前到后选择编码器,排在前面的优先使用。

在我们后续的测试中,我们发现这款 android 手机的硬件 264 不太稳定。于是我们更新白名单,去掉这款手机的硬件 264,并且在已经上线的 sdk 中,我们通过频道前配置下发中关闭硬件 264,得到新的支持列表 [硬件 265,ne264,vp8] ,用户设置打开了 265 优先,所以我保持 265 在列表内。

加入频道时,我们根据白名单中解码能力,上报了自己的解码能力集 [265,264,vp8],同时在频道内的另一端某个设备不足以解码 265,上报的解码能力集是 [264,vp8],服务端综合结果后给每个端下发的编码能力集是 [264,vp8],于是我们支持列表变成了 [ne264, vp8]。最终这个用户在这次通话中使用了 ne264 编码器。

这个用户在长时间使用后,我们后台数据分析发现,经常会有 android 设备的硬件 264 码率不够稳定,这些设备使用 ne264 性能也是没有问题的,于是我们在频道内配置下发中,将这些 android 设备的硬件 264 关闭了,只保留 ne264。

动态自适应

某次通话,某个设备的支持列表是 [硬件265,硬件 264,ne264,vp8],当前正使用硬件 265 编码发送。

动态自适应模块监测到由于性能问题,vqc 将视频 profile 由原来的 720p,30fps 调整为 360p,20fps。这个时候由于硬件 265 在这一档视频 profile 上收益已经不大了,所以我们切换硬件 265 到硬件264。

动态自适应模块监测到 QoS 的目标码率波动很厉害,超过了我们设定的阈值,这个时候我们判断是由于硬件 264 的码率不稳定,有可能在这种波动下造成超发从而引起延迟拉大,所以我们切换硬件 264 到软件 264,动态自适应模块监测到 QoS 目标码率变平稳后,再从软件 264 切回硬件 264。动态自适应模块监测到性能问题已经缓解,vqc 恢复了 720p,30fps 的视频 profile,这时候我们再由硬件 264 切换为硬件 265。

结语

本文主要介绍了网易云信 RTC 的重要组成部分——自适应调节系统。通过配置自适应和动态自适应,可以应对各种由于使用姿势、用户网络环境、用户设备等引入的不确定性,在一定条件下达到最佳视频体验。

作者介绍 

戚继跃,网易云信资深引擎工程师,长期从事音视频相关开发工作,对 WebRTC 引擎、音视频会议系统、视频编解码等有深入研究。目前主要负责网易云信 NERTC 引擎架构和视频体验。

 相关阅读推荐 

  • 技术干货 | 为高音质保驾护航 - 通信中的回声消除

  • 技术实践|网易云信 IM SDK 服务高可用技术方案

  • 技术实践 | Web 端实现 RTC 视频特效的解决方案

技术干货 | 视频最佳体验之自适应调节系统相关推荐

  1. 技术干货 | 视频直播关键技术和趋势

    导读:移动互联网的兴起为人类信息传播带来了更便捷的通道.更立体的视角和更丰富的选择.视频直播等多媒体通信技术在新的时代背景下逐渐崭露头角并不断渗入到人们的日常生活中,以提高人们的信息传输效率.降低信息 ...

  2. (转)iOS Wow体验 - 第五章 - 利用iOS技术特性打造最佳体验

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第五章译文精选,其余章节将陆续放出.上一篇:Wow ...

  3. 思科虚拟化与视频技术打造协作新体验

    思科虚拟化与视频技术打造协作新体验 http://network.51cto.com  2010-12-15 17:44  思科  51CTO.com  我要评论(0) 思科近日宣布推出了全面的桌面虚 ...

  4. 淘宝直播技术干货:高清、低延时的实时视频直播技术解密

    本文由淘宝直播音视频算法团队原创分享,原题"5G时代|淘宝直播高画质低延时技术探索",收录时有改动. 1.引言 目前,5G技术应用正在逐步推进,相比目前广泛使用的4G, 它具有更高 ...

  5. 2018亚太CDN峰会开幕,阿里云王海华解读云+端+AI的短视频最佳实践

    摘要: 4月11-12日,2018亚太CDN峰会在北京隆重召开,在11日下午的短视频论坛中,阿里云高级技术专家王海华进行了<短视频最佳实践:云+端+AI>的主题演讲,分享了短视频的生命周期 ...

  6. Arm云游戏及虚拟化技术沙龙,Arm中国,NVIDIA,腾讯及百度等为你分享超强技术干货...

    申耀的科技观察 读懂科技,赢取未来! 2021年3月24日,由Arm中国.竞核联合主办的"芯潮澎湃 云启未来"Arm云游戏及虚拟化技术沙龙在上海圆满落幕. Arm中国市场及生态副总 ...

  7. 【8.23更新--技术干货全家桶】大数据计算技术共享计划 — MaxCompute技术公开课第二季...

    2018年5月-6月 MaxCompute 开启大数据计算技术共享计划技术公开课第一季,有超过1500名用户以及大数据爱好者参与到直播学习中来.7月,我们又开启第二季直播,5次大数据技术直播,有近60 ...

  8. Valve CEO:脑机接口技术可加强游戏体验远超“肉体外设“

    点击上面"脑机接口社区"关注我们 更多技术干货第一时间送达 Valve(V社) CEO Gabe Newell(G胖)在一次关于关于脑机接口(brain-computer inte ...

  9. java如何创造一个整数的类_【技术干货】Java 面试宝典:Java 基础部分(1)

    原标题:[技术干货]Java 面试宝典:Java 基础部分(1) Java基础部分: 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的 ...

最新文章

  1. apache服务出现Forbidden 403问题的解决方法总结
  2. 在线ocr文字识别_PandaOCR:最佳免费 OCR 文字识别工具
  3. 透过性别看世界_透过树林看森林
  4. 【TensorFlow】——不同shape的tensor在神经网络中的应用(scalar,vector,matrix)
  5. mysql8用户管理
  6. 汇编语言:实验10 根据材料编程—2.解决除法溢出的问题
  7. vs2010 “最近使用的项目”为空?解决办法!
  8. C语言第七次作业---要死了----
  9. Emmet的高级功能与使用技巧
  10. 微信下载录音文件(音轨分离 ffmpeg视频合成)
  11. C++ 字元陣列(C-style)、字元指標、String類別 使用方式整理
  12. varchar2和varchar的区别
  13. 2021年英语四级作文
  14. Synchronized关键字深度解析
  15. 网络时间同步(卫星时钟同步系统)技术原理介绍
  16. 推荐几款适合孩子玩的编程游戏
  17. 一位老兄看 深圳西安北京上海 大众收入与消费
  18. CESM简单应用:将HadiSST作为海温强迫场进行CESM控制实验 -compset F FC5 FCN
  19. java实现第四届蓝桥杯猜灯谜
  20. Centos7.2静默安装oracle11gR2

热门文章

  1. 【2017-02-18】C#基础 - 定义变量,输入输出(最基础的编程,以及灵活多变的编写思维)...
  2. 云计算学习(2-4)云计算的案例
  3. 验证视图状态MAC失败问题正确的解决办法
  4. shell换行合并多个文件_如何合并多个pdf文件?这里有合并PDF最简单的方法
  5. 手机pdf文件转语音_职场小白不懂PDF文件转Word文档?试试微软的这款APP吧
  6. zipfile不能解压分卷压缩的文件
  7. 计算机美术与设计方案,试述电脑美术及其在现代设计教学与创作中的作用2200字...
  8. VC中实现弹出CEdit的气泡提示框
  9. 数学之路(2)-数据分析-R基础(1)
  10. java 链接为分布式 hbase,hbase学习记录(一):hbase伪分布式安装