关于rtc:RTC-场景下的屏幕共享优化实践

52次阅读

共计 7679 个字符,预计需要花费 20 分钟才能阅读完成。

背景介绍

需要背景

屏幕共享是视频会议场景应用最宽泛的性能之一,在共享一个 PPT 或者文档的状况下,人们对画面清晰度有着极高的要求,“看不清”是最容易被用户吐槽的事件;而在共享一个视频素材的状况下,大家又对晦涩度有着极高的要求,“卡顿”也是最容易被用户吐槽的点。

为了更好地同时满足用户对清晰度和晦涩度的要求,视频会议软件通常会设计两种模式:

  1. 清晰模式:主打清晰度,尽量放弃高分辨率(如:最高 4K 原画质),带宽或性能有余的时候,只升高帧率(如:从 30fps -> 5fps),不升高分辨率。
  2. 晦涩模式:主打晦涩度,尽量晋升帧率(如:最高 30fps),带宽或性能有余的时候,优先升高分辨率(如:从 4K -> 720p),最初才思考降帧率。通常状况下,默认抉择“清晰模式”,当用户要共享视频的时候,须要本人“手动”点击勾选上“晦涩度优先”按钮。

个别的做法是,让用户在共享屏幕时手动来勾选“清晰模式”还是“晦涩模式”。但在理论的产品场景中,用户对这两种模式的感知并不是很强烈,不太可能要求用户在共享屏幕的过程中手动来回切换以后的共享模式,对用户体验影响比拟大。

一种简略的计划是依据用户共享内容的文件后缀名来决定是“清晰度优先”还是“晦涩度优先”,比方共享 PPT 时主动切换为“清晰模式”,共享视频时主动切换为“晦涩模式”,然而这样设计会遇到一些问题:比方用户的 PPT 里嵌入了一段视频,在播放这段视频时理当谋求“晦涩度优先”;而如果用户视频其实是一段 PPT 的教学录屏,外面有大量的工夫在播放静止的文字和画面,这时候“晦涩模式”则会导致这些要害内容显得含糊。

RTC 要如何帮忙用户及时调整最佳的共享模式呢?

需要剖析

需要功能分析

痛点:

用户分享视频内容须要高帧率,而文字 /ppt 须要高清晰度,这两种场景的需要是互相矛盾的,如果须要用户手动勾选相应的共享模式,不仅操作繁琐,也容易漏选、错选。

如何解决:

须要研发一个算法自动识别共享内容,进而确定以后是须要高帧率还是须要高清晰度。这样,在用户想要清晰画面的时候,产品就提供清晰的画面,用户想要晦涩的视频体验时,产品就尽可能地保障屏幕画面的流畅性,用户在无感知的状况下就能取得以后场景的最佳体验。

屏幕共享场景定义

清晰度优先的场景

以文字为主,用户更须要看清楚画面的边缘特色,而较少关注其静止特色。

晦涩度优先的场景

以视频内容为主,用户更须要晦涩连贯的动静画面,而较少关注于单帧的清晰度。

技术实现

算法原理

学界相干成绩概述

目前咱们参考了以下两篇参考文献。第一篇是 Jing, Wang & Xuetao, Guan & Yang, Zhang. (2013). An Adaptive Encoding Application Sharing System Based on Remote Display. 266-269. 10.1109/ISDEA.2012.66.

该论文次要假设视频区域的均会以 24-30FPS 的频率发生变化,用 N*N 的 patch 的模式进行检测,从而发现视频区域。

第二篇参考文献是,侯文慧, 王俊峰. 面向云桌面协定的视频区域侦测算法[J]. 计算机利用, 2018, 038(005):1463-1469,1487.

这篇论文次要通过高变动区域侦测,并利用传统 sobel 算子 + 收缩算法的边缘检测发现可能的矩形区域,通过色彩直方图的色彩数量断定文本区域从而确定视频内容区域。

相干算法的介绍

  1. 光流

光流 (Optical flow or optic flow) 是空间静止物体在成像立体上的像素静止的瞬时速度,是剖析像素静止的一种办法。光流法在模式识别、计算机视觉以及其余图像处理畛域中用途宽泛,可用于静止检测、图像宰割、静止弥补编码和平面视差测量等畛域。

(光流示意,援用自:https://medium.com/axinc-ai/r…)

光流法理论是通过检测图像像素点随工夫的变动进而推断出物体挪动速度及方向的办法。假如该挪动很小,那么能够依据泰勒级数得出:

因而能够推出

最终可得出光流方程:

这个方程有两个未知数,不能间接进行求解,这被称为光流算法的孔径问题。为了求解光流方程,还须要另一组方程,这个方程由附加的束缚给出。(以上内容援用自 wikipedia)

孔径问题

(孔径问题示意,援用自:https://zhuanlan.zhihu.com/p/…)

假如:

  • 相邻帧之间的亮度恒定;
  • 相邻视频帧的取帧工夫间断,或者,相邻帧之间物体的静止比拟“渺小”;
  1. 决策树

决策树是一种逻辑简略的机器学习算法,它是一种树形构造,所以叫决策树。这是一种基于 if-then-else 规定的有监督学习算法,决策树的这些规定通过训练失去,而不是人工制订的。

  • 决策树易于了解和解释,能够可视化剖析,容易提取出规定;
  • 能够同时解决标称型和数值型数据;
  • 比拟适宜解决有缺失属性的样本;
  • 可能解决不相干的特色;
  • 测试数据集时,运行速度比拟快;
  • 在绝对短的工夫内可能对大型数据源做出可行且成果良好的后果。(援用自 wikipedia)
  1. 色彩直方图

色彩直方图是许多图像检索系统中被宽泛采纳的色彩特色。它所形容的是不同色调在整幅图像中所占的比例,而并不关怀每种色调所处的空间地位,即无奈形容图像中的对象或物体。(援用自 wikipedia)

  1. 方向统计(Directional Statistics)

Directional statistics (also circular statistics or spherical statistics) is the subdiscipline of statistics that deals with directions (unit vectors in R(n)), axes (lines through the origin in R(n)) or rotations in R(n). More generally, directional statistics deals with observations on compact Riemannian manifolds including the Stiefel manifold. The fact that 0 degrees and 360 degrees are identical angles, so that for example 180 degrees is not a sensible mean of 2 degrees and 358 degrees, provides one illustration that special statistical methods are required for the analysis of some types of data (in this case, angular data). Other examples of data that may be regarded as directional include statistics involving temporal periods (e.g. time of day, week, month, year, etc.), compass directions, dihedral angles in molecules, orientations, rotations and so on.(援用自 wikipedia)

利用方向统计办法,可能精确地统计出向量样本的方向均值,以及方向的离散水平,也防止了传统统计办法在角度值统计计算上的误差。

举个简略的例子,如下图所示,7/4π 和 1/4π 统计均值,以传统办法计算为 π,而利用方向统计就能够失去出均值为 0 的后果。

算法总流程设计

视频的定义就是静止的画面,但在屏幕共享当中,并不可能将静止的画面都当作视频内容来解决。理论应用中,须要将局部静止的画面辨认为须要高清优先、晦涩度其次的屏幕内容,保障用户在此时取得清晰的观看体验。

  1. 探索性数据分析(EDA)

在正式进行算法开发之前,先进行了探索性数据分析,剖析发现屏幕的静止特色具备较高的区分度,从而大抵断定利用光流法来实现该工作的特征提取是可行的。

  1. 算法流程图

该检测算法分成三个模块,五个步骤。

三个模块别离是:

  • 静止幅度剖析:次要进行静止幅度相干特色的提取,可能统计静止画面比例,去除一些乐音。
  • 静止角度剖析:次要进行静止角度相干特色的提取,可能统计画面静止的方向,以及静止方向的扩散水平等
  • 纹理特征分析:次要提取一些纹理相干的特色,断定以后区域是否为文字区域。

具体分为五个步骤:

  • 采样:光流算法须要前后两帧数据进行计算,须要对视频流进行采样,失去两帧数据
  • 光流计算:计算出全图的浓密光流
  • 特征提取:提取静止和纹理特色
  • 状态转移:通过一系列模式和规定进行状态转移
  • 输入后果:依据外部状态信息输入检测后果

算法参数优化与评估

数据采集和标注

因为数据集十分匮乏,须要咱们本人高效地获取一批人工标注数据,进行参数的优化和算法的测试。咱们本人录了一些数据,并开发了一个小型的标注软件,进行了数据标注工作。

算法评估指标

(图片起源:https://en.wikipedia.org/wiki…)

  1. 准确率(precision)

准确率是针对预测后果而言的,它示意的是预测为正的样本中有多少是真正的正样本。那么预测为正就有两种可能,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP)

  1. 召回率(recall)

召回率是针对原来的样本而言的,它示意的是样本中的正例有多少被预测正确了。那也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN)。

内容辨认算法须要在准确率和召回率之间进行衡量,依据业务场景调整检测后果偏好。

算法实现与优化

算法实现

光流计算

浓密光流的计算目前有两种常见算法,HS 光流,DIS 光流 在实现上,选用了 DIS 光流预计的办法,两种办法在雷同机器上运行工夫如下表所示。

算法分辨率计算工夫
DIS 光流320×1807ms
HS 光流320×18013ms

更为具体的计算开销和算法精确水平的数据能够参考下图

(DIS 光流法计算准确度与运算时长相较其余算法比拟,援用自 Kroeger, Till & Timofte, Radu & Dai, Dengxin & Van Gool, Luc. (2016). Fast Optical Flow Using Dense Inverse Search. LNCS. 9908. 471-488. 10.1007/978-3-319-46493-0_29.)

特征提取

在计算光流之后,咱们须要提取静止幅度,静止角度以及纹理相干的特色。

在计算光流之后,提取静止幅度、静止角度以及纹理相干的特色。

  1. 坐标系转化:笛卡尔系 -> 极坐标系

光流预计失去的后果是每一个像素的(x,y)偏移,所以须要将这个笛卡尔坐标系的值转化为极坐标系,从而失去光流的静止幅度和方向信息,即(x,y) ->(ρ,θ)

  1. 纹理计算

参考了前文提到的两篇文献的相干工作,在 4×4 的 patch 内统计 Y 通道上的直方图特色,将 bin 的大小设为 1,统计 bin 的数量作为一个强特色。(这样本质就变成了统计有多少个 unique 值的问题),而后利用一个 hash 表进行映射与统计。随后与静止信息进行加权求和,能够取得一个全局的与静止相干的纹理特征值。

  1. 角度特色的提取

角度特色的提取应用了方向统计的办法,计算失去以后内容静止角度的均值、加权均值、离散水平、加权离散水平等特色,这些特色能够形容以后画面内容的静止信息。

状态转移

利用决策树,通过一些剪枝解决后,取得了一些强特色的阈值,比方静止的角度均值,静止的角度离散度等,这些阈值都具备十分显著的可解释性。在状态转移模块中,应用内置的一个概率值记录状态,而后根据上述基于机器学习的规定对概率值进行调整,再联合业务交融一些人工特色,最终依据概率值的变动转移模块的状态。

计算开销优化

尽管该算法可能以较快的速度对视频帧进行解决,但理论的屏幕共享中,对计算机资源的耗费也有更加严格的要求。那么就须要对检测的策略进行粗疏的优化,进一步升高 CPU 占用和耗电量。

  1. 计算量与运算速度

算法的运算量热点都在光流计算上,而光流的计算开销与选用的算法、图像大小以及算法具体参数无关。

算法分辨率运行工夫
DIS(MEDIUM)320×1807ms
DIS(FAST)320×1804ms
DIS(ULTRA FAST)320×1801 ms

在算法利用了 Ultra fast 模式后,检测的 precision 和 recall 均呈现了比较显著的下滑,而 Fast 和 Medium 差异不大。所以最终抉择了 Fast 模式,在测试数据集上失去的后果也令人满意。

AccuracyRecallPrecision
0.95240.96080.9756
  1. 计算频率优化与静默模式

在计算量优化之后,算法可能以 150fps-200fps 的速度进行检测。在理论的屏幕共享场景,输出的帧率能够达到 30fps,如果检测频率为 30fps 依然会带来显著的 CPU 占用,还须要进一步升高检测频率。

在衡量响应工夫和 CPU 占用后,间接大幅度降低检测频率,比方每隔 5 帧检测一次,在这种策略下,响应工夫和 CPU 占用都处于一种比拟好的状态。

然而,这种较低的检测速度依旧会带来可察觉的 CPU 增量,能不能再极致一点呢?

思考到常见的办公场景,用户在屏幕共享时,其内容类型在较长的工夫内是放弃不变的,所以检测的后果也应该是长时间放弃不变。如果是咱们人类在这种状况下,在做这样的分类后果始终不变的工作时,可不可以稍稍偷偷懒呢?答案是必定的,那么计算机应该也能够在这种状况下“偷一下懒”。这样就能够在算法中引入了静默的概念,当检测的后果根本不变时,检测算法模块开始进入静默状态,此时检测升高到更低的频率,这样 CPU 占用增长根本就觉察不到了。

如何确定何时须要进入静默呢?算法利用时域上的积分求得一个分数,当该分数达到肯定阈值的时候,并且满足一些其它的限度条件的时候,就能够认为检测到的为同一种类型了,就能够开始升高检测频率。这样就保障了大多数状况下 CPU 的极低开销,并且也尽可能保留了算法疾速响应的个性。

性能实现

决策逻辑

在共享模式的决策逻辑的设计上,须要明确两点:

  • 尽可能保持稳定的分辨率与编码策略,缩小编解码器重启带来的开销
  • 适当的切换速度

1. 帧率决策与分辨率决策 因为视频流传输的过程中,在无限的带宽下,往往须要将帧率和分辨率相匹配以取得适合的带宽耗费。

所以主动模式预设了若干个帧率和分辨率相匹配的档位,在每次取得检测算法的检测后果后对帧率进行增减,再依据帧率的大小匹配相应的分辨率。在帧率降落的时候,就能够依据内外部条件的限度升高传输分辨率;相同,在帧率回升的时候,就能够用适当的逻辑对分辨率进行降级操作。

2. 编码方式决策

在共享文字场景为主的屏幕内容时,编码策略也会与晦涩度优先的视频编码方式不同,这时会应用专门的针对屏幕内容的编码器,并开启反复帧检测等策略,同时也会对码控策略进行场景化的调整,从而使画面更合乎用户需要。

3. 抗抖动

策略的切换个别是须要须要响应工夫的,比方分辨率的切换和编码策略的切换都会有肯定的响应工夫,如果频繁的切换就会造成卡顿。

为了在产生抖动的状况下,仍旧可能保障良好的共享体验,须要引入一些抗抖动的机制。

  • 抖动次要来自于两个方面

    • 误检测造成抖动
    • 实在的共享内容频繁切换导致抖动

对于第一点,通过两种机制来缩小抖动影响。

  • 在整个 pipeline 的设计上,设计一种负反馈的调节机制。如前文所述,在帧率越高时,光流预计越精确,而帧率低时,不精确的光流预计容易将个别的文档场景误检测成视频播放的场景。当检测出一次内容变动时,如果是因为输出帧率低导致误检,这个时候及时进步帧率又可能升高误检概率,这样就能够防止因为误检导致的共享模式的切换,促成检测速度和准确度的稳态。
  • 通过管制决策频率来克制抖动的景象。

对于第二点所提到的抖动,最影响体验的场景是在内容变动或者其余起因,帧率重复在决策点左近高低稳定,导致分辨率重复切换。因而,在管制决策频率的根底上减少了 dead zone 机制,在该机制下,分辨率切换在晋升和降落两个变动方向的决策点并不一样,留有肯定的距离,防止了内容频繁切换或者其余起因造成的分辨率的抖动景象。

在这种机制下,分辨率就不会随着帧率进行频繁地切换,可能更好地保障用户体验。

性能特色

业务实际

在飞书屏幕共享的晦涩度优先模式中率先启用了该性能,在业务上称为智能晦涩模式,这样在用户就可能在播放视频时达到 30fps 的晦涩度,在共享文档 /ppt 内容时,又能放弃较高的清晰度。这个性能根本解决了用户错选晦涩度优先造成的清晰度不合乎需要的问题,同时又保障了在用户在真正须要晦涩度体验的时候,失去高帧率的体验。

落地成果

通过大范畴的线上测试之后,通过统计数据能够发现,采纳“屏幕共享主动模式”后,一些本来采纳“晦涩模式”的共享场景被算法模块纠正为了“清晰模式”,同时通过下图能够发现,用户的屏幕分享分辨率有了极大地晋升,失去了显著的清晰度晋升。在线上算法的断定的精确水平上,通过对用户反馈的统计,该性能也有着比拟好的评估。

同时通过统计数据能够发现,得益于采集和编码帧率的降落,CPU 占用不仅没有回升反而失去了肯定的优化,如下图所示,开启主动模式的性能之后,最高能够失去 CPU 占用升高 20% 的收益。

与其余候选计划的比拟

在研发之初,咱们也调研了一些候选计划,一种技术计划是应用像素差别与变动的占比作为切换根据,这样最大的问题是,在局部教学视频或阐明类内容中,在视频内容中展现 ppt 场景时,算法会呈现误判,将肉眼感知到的动态场景检测为视频场景,画面清晰度降落,不合乎用户应用的直觉;此外还有一种计划是针对利用类型进行适配,比方依据过程名称和窗口大小进行策略调整,这样尽管可能解决用户场景化的需要差别,然而对于算法与策略的通用性会有较大的挑战。本文应用的这套算法就可能避开了上述的问题,体验更加敌对。

将来的演进与布局

算法演进

尽管因为数据集的绝对不足,在设计之初排除了深度学习模型的利用。在研发过程中,对算法流程与模块进行拆分,其中独立出的纹理剖析等模块,这样就能够通过人工数据集的形式,在局部算法模块尝试利用深度学习模型,以期可能取得更好的算法体现。同时,思考到以后的算法还是针对全局画面的分类,将来会推出视频区域的 ROI 检测,这样可能让上游利用具备更强的灵活性和对业务的适应能力。

业务演进

以后屏幕内容检测算法反对了共享模式的切换,此外,利用屏幕内容检测算法,还能够对发送端和接收端的网络策略进行更智能的调优,以期在文档、ppt 场景下,进一步缩小屏幕共享的延时与卡顿,让投屏与屏幕共享响应更高清、更晦涩、延时更低,给用户提供更好的沉迷式体验,带来更显著的生产力的飞跃。

退出咱们

字节跳动 RTC 团队,作为寰球当先的音视频团队,咱们致力于提供寰球互联网范畴内高品质、低延时的实时音视频通信能力,目前曾经撑持了抖音、TikTok、清北网校、字节系游戏,视频会议等多个场景的利用,服务 10 亿用户,用户遍布寰球每一个角落。

咱们是 RTC Lab 部门, 负责 RTC 产品中音频、视频、网络等根底性能的研发,通过极致的工程和音视频算法,打磨顶级的实时音视频根底体验。

正文完
 0