视频 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_较好

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

相关推荐

  • 学校项目如何开展管理

    项目管理在学校项目中至关重要,主要包括:明确项目目标、制定详细计划、分配资源、监控进度、团队协作、风险管理。在实施过程中,应侧重于明确项目目标,因为这是确保项目成功的首要步骤。项目目标需要具体、明确,与学校的整体发展目标相一致,并且能够量化,以便在项目执行的各个阶段都能够持续评估其进度和成效。 一、…

    2024年4月10日
    4900
  • web前端需掌握哪些技能

    web前端需掌握哪些技能:1、前端基础技术;2、前端库/框架;3、计算机基础技术;4、环境基础。前端基础技术主要是指HTML、CSS以及JavaScript,HTML用来构建网页,主要掌握标签的运用。 一、前端基础技术 主要是指HTML、CSS以及JavaScript,HTML用来构建网页,主要掌握…

    2023年5月12日
    31500
  • 头条和头条极速版的区别

    头条和头条极速版的区别主要在于:1、应用定位不同;2、内容推荐机制不同;3、操作界面不同;4、功能区别;5、运行速度和占用资源不同。整体而言,头条极速版相比头条版更轻量,更追求流畅与速度,满足用户快速获取信息的需求。 1、应用定位不同 头条是一款基于用户阅读行为的新闻阅读应用,内容丰富多元,涵盖新闻…

    2023年5月19日
    8.0K00
  • devops任务什么意思

    开篇便明确认知,DevOps任务指的是集成开发(Development)与运维(Operations)的一系列活动,旨在促进软件交付的速度与质量提升。1、加速软件发布流程 2、提升跨职能团队的协作效率 3、持续改进产品反馈循环。这之中,提升跨职能团队的协作效率显著促进了沟通渠道的通透性,确保了不同角…

    2024年3月26日
    6600
  • dython是什么

    dython 是一个 Python 库,它提供了一些用于数据分析和机器学习的实用工具。这些工具包括数据预处理、特征选择、模型评估、数据可视化等。dython 的主要特性包括支持各种数据类型,提供多种数据预处理和特征选择方法,提供多种模型评估指标,以及提供多种数据可视化工具。 一、定义 dython …

    2023年7月28日
    35500
  • oa协同是什么意思

    OA协同指的是办公自动化(Office Automation)系统中的协同工作功能。OA协同系统的目标有4个:1、提高工作效率,2、简化流程管理,3、优化资源分配,4、加强内部沟通。 其中,提高工作效率是OA协同功能的核心,通过电子文档管理、工作流程自动化、信息共享等功能,实现快速的信息传递,减少重…

    2024年1月11日
    34700
  • 协同办公中的文件共享和存储有哪些最佳实践

    协同办公中的文件共享与存储需要采用高效且安全的最佳实践以提高团队的协作效率。主体实践包括选择合适的存储解决方案、建立明确的文件管理制度、确保数据安全和隐私、采用版本控制和优化访问权限管理。选择解决方案时,考虑因素包括易用性与整合性。文件管理制度要规定文件命名规则、存储结构和清晰的归档流程。数据安全和…

    2023年11月20日
    38500
  • 过oa是什么意思

    过OA是对某个线上评估或办公自动化(Office Automation)系统的测试或审查通过的简称。1、指某人在应聘流程中通过了公司的在线评估。这类评估可能包括逻辑、编程、数学等不同领域的题目。2、在职场中,过OA可能指成功地通过了某种办公自动化系统的使用考核,例如掌握了某个管理软件或数据库的操作技…

    2024年1月11日
    30100
  • 敏捷是什么

    敏捷是一个术语,描述软件开发方法,强调增量交付、团队协作、持续规划和持续学习。敏捷软件开发是基于敏捷宣言定义的价值观和原则的一系列方法和实践的总称。自组织、跨职能团队运用适合他们自身环境的实践进行演进得出解决方案。 一、什么是敏捷 敏捷是一种通过创造变化和响应变化在不确定和混乱的环境中取得成功的能力…

    2023年1月31日
    52900
  • 什么是分布式文件存储、分布式块存储、对象存储和软件自定义存储

    分布式文件存储是指将文件分散存储在多个计算机节点上的一种存储方式;分布式块存储将数据分割成固定大小的块,然后将这些块存储在不同的节点上;对象存储是将数据存储为对象(或文件)而不是块。软件自定义存储是可以根据特定的应用程序需求进行定制。 分布式文件存储 分布式文件存储是指将文件分散存储在多个计算机节点…

    2023年6月19日
    1.3K00

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部