视频 QoE 平衡知道

互联网发展迅猛,实时通信(Real Time Communication,简称 RTC)需求与日俱增。如何在各种复杂网络服务质量(Quality of Serverice,简称 QoS)下,以及参差不齐的硬件终端上取得最佳的视频体验质量 (Quality of Experience,简称 QoE ),是 RTC 技术的重要一环。

作者:戚继跃 网易云信资深引擎工程师

本文从视频质量控制系统(Video Quality Controller,简称 VQC)模块出发,介绍网易云信 NERTC 在提升视频 QoE 方面做的一些工作。

一、VQC 在视频 QoE 中的作用

视频的 QoE 主要包含视频的清晰度、视频流畅度、视频延时三个方面的指标,整体上由网络 QoS 、视频处理算法、VQC 共同决定。

  • 网络 QoS:提供尽可能充分的可使用带宽
  • 视频处理算法:在一定的码率下,输出尽可能好的视频质量
  • VQC:
  1. 对 QoS 负责,控制码率,保证流畅度和延时
  2. 对视频算法负责,保证性能,平衡清晰度和流畅度
video_qoe_top

Figure 1:视频 QoE 的决定因素

如图1所示,VQC 通过对视频 QoS 状态、视频算法状态的监控,输出控制信号,达到场景化的最佳 QoE 表现,包括平衡清晰度、流畅度、延时这几个指标。今天,我们主要分享网易云信 NERTC 上的 VQC 实现以及 QoE 调优的相关工作。

二、网易云信 VQC 实现

网易云信的 VQC 模块部分参考了 WebRTC 的模块设计,整体结构如图 2 所示,主要包含四个监控模块和一个策略模块。输入的参数通过监控模块后得到当前的各种状态结果,然后由 VQC 策略模块决定最终输出的控制信号,控制视频 pipeline 的工作。

video_vqc_high_1

Figure 2:VQC 整体结构

(一)QualityScaller

如图 3 所示,QualityScaller 模块的作用是监测当前的编码质量,主要对清晰度和编码器稳定性负责。

video_qualityscaller

Figure 3:QualityScaller

该模块输入根据编码器类型和编码算法类型而确定的 QP 阈值、当前输出编码帧的 QP 值、当前丢帧的统计数据,输出视频质量好坏的结果。

其中 QpSmoother 模块使用指数加权累加的方式来确定 QP 的统计值,公式如下所示。

qpsmoother

公式中:

  • sample 为当前帧的 QP
  • 输出 y 为 QP 统计值
  • alpha 是根据编码器 QP 变化特性总结的一组系数值,根据上限和下限使用不同的系数值。比如我们测试下来针对 OpenH264 编码器,QP 上限系数值可以使用 0.9995,QP 下限系数值可以使用 0.9999。通过这种差异性的上下限系数,达到视频质量变差时(QP 增加)反应迅速,视频质量变好时(QP 减小)反应稍微迟钝的效果。

最终统计的上下限 QP 统计值,与输入的 QP 阈值比较判断,决定当前画质的好坏。输入的 QP 阈值也是根据编码器不同而不同的,比如在 OpenH264 上我们测试下来使用阈值下限为 24,上限为 37;硬件 iOS 设备上硬件编码则使用其他值,Android 上硬件编码则又不同,这都需要根据设备的大量验证来获取。

MovingAverage 为一个滑动窗口函数,取这个窗口内的丢帧比例,超过一定阈值认为是质量变差。

最终内部周期性查询模块会收集 QpSmoother 和 MovingAverage 的统计结果,输出两个结果,特别说明的是,允许不输出的情况。

  • 视频质量好
  1. QpSmoother 的 QP 统计值下限小于等于 QP 下限阈值
  2. MovingAverage 统计的丢包率超过阈值
  • 视频质量差

QpSmoother 的 QP 统计值上限大于 QP 上限阈值

(二)OveruseFrameDetector

OveruseFrameDetector 模块主要作用是监测当前的性能能否支撑当下帧率的运行,对视频的流畅度负责。

video_overusedetector

Figure 4:OveruseFrameDetector

如图 4 所示,该模块输入当前的目标帧率、分辨率、CPU Usage 阈值,采集和发送视频帧时间,输出当前性能好或者坏的结果。

ProcessingUsage 模块通过输入的视频帧采集和发送的时间,统计整个视频发送链路即视频采集到发送的时长,用这个时长做一些平滑运算后得到一个统计值,用这个统计值和当前帧率下帧间隔的理论时长做比较,统计时长是否超过理论值,并记录次数。然后周期性的收集次数,超过一定次数则输出性能差 CPU bad 的结果,低于一定次数则输出性能好 CPU good 的结果。

在该模块中,需要防止一些假的 CPU good 或者 bad 结果,比如:

  • 样本数量少时(比如帧率低),周期性收集数据的时间没有变,这就容易导致结果误差。
  • 新的帧率分辨率刚开始工作时,各个环节的处理时间还没有问题,也需要特殊处理。

(三)RateAllocator

RateAllocator 模块负责决定当前码率的使用,在大小流场景下充当大小流使用的策略模块。

该模块有几个关键性作用:

  • 远端有多个用户,其中有用户订阅了小流也有用户订阅了大流,该模块会决定有限的码率按照什么比例分配比较合适。
  • 同样的场景,在码率十分不足的情况下,该模块会决策大小流合并成一条流使用,提升画质。
  • 在下行的带宽受限情况下,该模块会决策发送端有没有必要降低带宽发送。

(四)MediaOptimization

MediaOptimization 模块主要负责监测和修正实时的码率和帧率,防止码率超发导致网络拥堵,因为拥堵后网络会进一步恶化,导致画质、流畅度、延时全面的降低。

该模块控制实时码率主要通过内部的 FrameDropper 模块,其使用漏斗算法决策当前是否码率超发,是否需要丢帧来稳定码率。

frame_drop

Figure 5:FrameDropper

如图 5 所示在每一帧编码之前,将该帧的目标码率作为输入放入漏斗中,编码之后将当前帧的实际码率作为漏斗的输出,然后去查看漏斗是否满了,如果满了就丢弃下一个编码帧来控制码率。漏斗的容量大小和可以容忍的延时相关,需要进行场景化定义。

丢帧与否的结果也会输出给 QpScaller 模块,作为评价编码质量的依据的一方面。

(五)VQC 决策模块

VQC 决策模块根据 VQC 内部前述所有模块的结果,结合用户的场景设置,决策当下的视频策略。

video_vqc

Figure 6:VQC 决策模块

如图 6 所示,VQC 决策模块内部包含两个状态机以及一个决策模块。

两个状态机相互独立,互不影响:

  • 视频质量状态机
  • 性能情况状态机
  • 一个决策模块,我们具体说明其中的一些重要功能:
  • 根据用户设置的场景以及期望视频参数,设置各种内部调整的阈值
  • 根据状态机的结果,决策提高或者降低视频的参数(分辨率、帧率),以及提高或者降低的策略
  • 根据其他信息,决策当前帧编码的其他参数,比如 simulcast 双流场景下大流或者小流是否编码
  • 根据其他信息,决定算法是否需要调整,比如编码算法,后处理算法等

三、通过 VQC 进行视频 QoE 调优

VQC 通过对视频质量的全链路监控和调节来保证良好的视频 QoE,下面介绍下云信 RTC 这边在通过 VQC 调优 QoE 方面的一些工作。

(一)正确判断编码质量

表征编码质量的参数有很多:PSNR、SSIM、QP、VMAF 等,因为硬件编码器的特殊性以及参数获取计算成本的考虑,选用了 QP 作为评判标准。

如果选择使用 QP 作为正确反应编码质量的指标,需要考虑如下几点:

  • 常规的 Slice QP 在 H264/265 编码中,一般编码器中只能反应前面几个编码宏块的质量。在软件编码上可以使用更优的 average QP 来作为视频帧的 QP,这样判断软件编码质量效果更优。
  • 不同编码算法的 QP 阈值是不同的,比如我们在 OpenH264 上可以使用(24,37)作为 QP 好坏判断的上下限,但是在不同的编码器和不同的编码算法上就需要调整,比如我们的 NE264、NE265、NEVC 编码算法都需要做对应的适配调整。
  • 不同硬件加速平台上编码器的 QP 的阈值是不同的,比如 iOS 系统、Android 系统,甚至 Android 不同的芯片平台也需要做对应的适配。
  • 不同编码算法,不同硬件平台,QP 质量变化的曲线不同,为了提取特征,需要调节统计方法的统计系数。

(二)正确判断性能问题

为了防止性能问题导致的视频 QoE 降低,我们需要能准确的甄别出性能问题并作出正确有效的调整。当前我们的 VQC 中,使用视频帧处理时间来表征性能状态,想要正确甄别性能状态,需要考虑以下几个方面:

  • 能判断编码和前处理的整个流程的性能
  • 一些硬件有 pipeline 延时需要考虑
  • 如果帧间隔不均匀,会导致误判定性能问题,需要识别出这种特征
  • 为了进行有效的调整,我们主要需要考虑以下几个方面内容:
  • 根据测试中性能消耗的优先级来调整,比如我们测试下来部分模块的优先级是:前处理 > 编码算法 > 帧率调整 > 分辨率调整
  • 如果做了相应的调整,统计的性能状态还是没有变化,我们需要有相应的处理手段,反馈调整内容和结果给状态机,让状态机报告给决策模块进行下一步决策
  • 如果性能状态变化过大,需要拉大调整步长

(三)最优化调整

有效的调整就是是调整后视频 QoE 提升明显,我们主要可以通过以下几个方面进行调整:

  • 分辨率调整
  • 帧率调整
  • Simulcast 流的调整
  • 前处理的一些算法开关
  • Codec 调整 
  • VQC 是如何进行最优化调整的呢,如下:
  1. 支持用户可配置多种场景和策略
  2. 通信模式,直播模式
  3. 用户高可定制化:特殊场景模式,分辨率不变模式,帧率不变模式,最小帧率最小码率等设置。
  4. 内部自适应调整,根据大量测试试验确定某个具体场景下的参数组合,调整步长以及最佳路径,图 7 展示了视频分辨率和帧率调整步长和路径。
vqc_调整路径

Figure 7:VQC profile 路径调整举例

四、结语

本文主要介绍了网易云信 RTC 中视频质量控制系统 VQC 的设计,以及在 QoE 调优方面的一些工作。没有一种策略是完美无缺的,鱼和熊掌不可兼得。我们在 QoE 调优中做的工作就是在一定的条件下,通过一些列手段平衡清晰度、流畅度、延时这些指标,趋利避害。通过互相配合的策略以及大量的数据测试验证,寻找出最优的策略。

作者介绍

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

关于网易云信

网易云信:网易智企旗下融合通信云服务专家、通信与视频 PaaS 平台。集网易 24 年 IM 以及音视频技术打造的融合通信云服务专家,稳定易用的通信与视频 PaaS 平台。提供融合通信与视频的核心能力与组件,包含 IM 即时通讯、5G 消息平台、一键登录、信令、短信与号码隐私保护等通信服务,音视频通话、直播、点播、互动直播与互动白板等音视频服务,视频会议等组件服务,并联合网易易盾推出一站式安全通信方案「安全通」。目前,网易云信已经成功发送 1.6 万亿条消息,覆盖智能终端 SDK 数累计超过 186 亿,我们期待每个智能终端都有云信的融合通信能力。

文章标题:视频 QoE 平衡知道,发布者:网易智企,转载请注明出处:https://worktile.com/kb/p/5836

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年3月16日 下午10:47
下一篇 2022年3月16日 下午11:04

相关推荐

  • 敏捷看板有哪些好处

    敏捷看板的好处包括以下几点:1、看板卡可轻松检测低效率;2、看板卡有助于及时交付;3、看板卡⿎励团队之间的协作。在敏捷方法中,看板(Kanban)是一个动态的管理工具,可以显示项目中每项工作的流动性,并且可以识别瓶颈。 1.看板卡可轻松检测低效率 由于看板卡⾮常直观,因此只需看⼀看看板便可以很容易地…

    2022年11月16日
    8000
  • 工程项目管理系统的功能模块有哪些

    工程项目管理系统的功能模块有以下几点:1、项目管理体系;2、项目合同管理;3、项目计划进度管理;4、工程施工报表;5、工程质量安全管理;6、资金管理。工程项目管理系统按照业主委托,对工程项目的组织实施进行全过程或若干阶段的管理和服务。 1、项目管理体系 工程项目管理系统的项目管理体系包括整个集团的项…

    2022年11月14日
    4900
  • 进度跟踪是什么意思

    进度跟踪是指在项目计划的执行过程中,检查实际进度是否与计划进度相一致,保证项目按时完成。在项目实施过程中,由于外部环境和条件的变化,往往会造成实际进度与计划进度发生偏差,如不能及时发现这些偏差并加以纠正,项目目标的实现就一定会受到影响,所以需要跟踪进度。 什么是进度跟踪 进度跟踪是指在项目计划的执行…

    2022年11月16日
    4001
  • 搜狐快站金庸:有情有义,90后技术创业者的问剑之路

    文| babayage 编辑 |笑 笑 因户口入职搜狐 科创人:《科创人》采访前会尽量多地查阅采访对象资料,但您的资料确实难搜……向读者们做下自我介绍吧。 金庸:(笑)这个名字不加其他关键词是很难搜,我1991年出生在江西南昌,家里是做生意的,2007年考进北大,2014年北大计算机硕士专业毕业,毕…

    2022年3月20日
    9900
  • 什么是测试用例

    测试用例是为执行软件系统测试而设计和编写出的一组文档,主要由测试输入、执行条件、预期结果等内容组成。测试用例是执行测试的重要依据,具有有效、可重复、易组织、清晰简洁、可维护等特征。 1.测试用例的定义 测试用例是一组由测试输入、执行条件、预期结果等要素组成,以完成对某个特定需求或者目标测试的数据,体…

    2022年11月24日
    3900
  • 有哪些类型的开源软件许可

    开源软件许可类型有:1、公共域许可;2、宽松式许可;3、较宽松公共许可;4、Copyleft 许可。公共域许可表示任何人都可以不受限制地修改、使用软件或将软件用于商业用途。在大多数情况下,公共域开源软件创作者有意或自愿决定不对软件进行版权保护。 有哪些类型的开源软件许可? 尽管开源许可的限制比专有许…

    2022年11月8日
    2600
  • 数据挖掘可用于哪些方面

    数据挖掘可用于:1、预测风险;2、对用户进行分组;3、分析人的行为;比如预测风险方面分析数据以确定以前出现过哪些问题(例如,查找商品之后却并未购买的在线访问者的数量),可以帮助零售商针对未来的库存采购制定更好的决策。 数据挖掘可用于哪些方面? 数据挖掘有许多用途,具体取决于公司及其需求。可能的用途包…

    2022年11月7日
    1700
  • 快速原型模型的开发步骤是什么

    快速原型模型的开发步骤包括以下几点:1、快速分析;2、构造原型;3、运行原型;4、评价原型;5、修改。快速原型模型需要迅速建造一个可以运行的软件原型,使开发人员与用户达成共识,最终在确定的客户需求基础上开发客户满意的软件产品。 1、快速分析 在分析人员与用户密切配合下,迅速确定系统的基本需求,根据原…

    2022年11月30日
    1500
  • 销售易CTO张忠:做产品不是翻译需求,用户思维绝非满足一切

    文| babayage 编辑 |笑 笑 本次越洋连线之前,《科创人》对John的了解,仅限于一份由世界级企业大名串联成的华丽简历。信息匮乏、准备不足导致的紧张,却在第一分钟就被John化于无形,他拥有一种由风趣、谦逊、健谈、热爱分享构成的亲和力。 John其人 毕业于中国科学技术大学,专业并非计算机…

    2022年3月20日
    20100
  • 细说 Websocket 快速重连机制

    在一个完善的即时通讯应用中,websocket是极其关键的一环,它为web应用的客户端和服务端提供了一种全双工的通信机制,但由于它本身以及其底层依赖的TCP连接的不稳定性,开发者不得不为其设计一套完整的保活、验活、重连方案,才能在实际应用中保证应用的即时性和高可用性。‘ 作者/ 网易智慧企业web前…

    2022年3月17日
    29600

发表回复

登录后才能评论
联系我们
关注微信
关注微信
分享本页
返回顶部