当前位置: 首页 > 科技观察

RTC场景共享屏幕优化实践_0

时间:2023-03-20 01:17:04 科技观察

背景介绍需求背景屏幕共享是视频会议场景中使用最广泛的功能之一。人们在分享PPT或文档时,对图片的清晰度有着极高的要求。“看不清”是用户最容易抱怨的事情;而在分享一段视频素材的情况下,大家对于流畅度的要求是极高的,“卡顿”也是最容易被用户吐槽的一点。为了更好地同时满足用户对清晰度和流畅度的要求,视频会议软件通常会设计两种模式:当性能不足时,只降低帧率(例如:从30fps->5fps),不降低分辨率。流畅模式:注重流畅度,尽量提高帧率(eg:upto30fps),当带宽或性能不足时,先降低分辨率(eg:从4K->720p),最后再考虑降低帧率.通常,默认选择“清除模式”。当用户想要分享视频时,需要“手动”点击“流畅度优先”按钮。一般做法是让用户在共享屏幕时手动勾选“清晰模式”或“流畅模式”。但在实际产品场景中,用户对这两种模式的感知并不是很强,不太可能需要用户在分享屏幕的过程中手动来回切换当前分享模式,这有一个对用户体验的影响比较大。一个简单的解决办法是根据用户分享内容的文件扩展名来决定是“清晰度优先”还是“流畅度优先”。比如分享PPT时会自动切换到“清晰模式”,分享视频时会自动切换到“流畅模式”。”,但这种设计会遇到一些问题:比如用户的PPT中嵌入了一段视频,播放这段视频时要追求“流畅度优先”;而如果用户的视频实际上是PPT教学录屏,则有很多时候都在播放静止的文字和图片,此时的“流畅模式”会导致这些关键内容出现模糊,RTC如何帮助用户及时调整最佳分享模式需求分析需求功能分析痛点:用户需要分享高帧率的视频内容,而text/ppt需要高清,这两种场景的需求是矛盾的,如果需要用户手动勾选对应的分享方式,不仅操作繁琐,而且很容易漏选和选错解决方法:需要开发一种算法自动识别分享的内容,然后判断当前需要高帧率还是高清.这样,当用户想要清晰的画面时,产品会提供清晰的画面,当用户想要流畅的视频体验时,产品会尽可能保证画面画面的流畅,用户可以得到当前视频无感知。最好的现场体验。屏幕共享场景定义清晰度优先的场景主要是文字,用户需要看清图片的边缘特征,较少关注其运动特征。优先考虑流畅度的场景主要是视频内容,用户需要更流畅连贯的动态画面,较少关注单帧的清晰度。技术实现算法原理学术界相关成果概览目前参考了以下两篇。第一个是Jing,Wang&Xuetao,Guan&Yang,Zhang。(2013)。一种基于远程显示的自适应编码应用共享系统。266-269。10.1109/ISDEA.2012.66。本文主要假设视频区域会以24-30FPS的频率均匀变化,以N*N块的形式检测找到视频区域。第二个参考是侯文辉,王俊峰。一种云桌面协议的视频区域检测算法[J].计算机应用,2018,038(005):1463-1469,1487.本文主要采用高变化区域检测,利用传统sobel算子的边缘检测+扩展算法寻找可能的矩形区域,通过颜色直方图的颜色编号确定文本区域,从而确定视频内容区域。相关算法介绍1.光流光流(Opticalflow或opticalflow)是空间运动物体在成像平面上像素运动的瞬时速度,是一种分析像素运动的方法。光流广泛应用于模式识别、计算机视觉等图像处理领域,可用于运动检测、图像分割、运动补偿编码、立体视差测量等领域。光流法实际上是一种通过检测图像像素随时间的变化来推断物体运动速度和方向的方法。假设移动很小,根据泰勒级数可以得到:因此,可以推导出最终的光流方程:这个方程有两个未知数,不能直接求解。这被称为光流算法的孔径问题。要求解光流方程,需要另一组方程,由附加约束给出。(以上内容引用自维基百科)光圈问题(光圈问题示意图,引用自:https://zhuanlan.zhihu.com/p/74460341)假设:相邻帧之间的亮度恒定;相邻视频帧的帧占用时间连续,或者说,相邻帧之间物体的移动比较“微小”;2.决策树决策树是一种逻辑简单的机器学习算法。它是一种树状结构,所以称为决策树。这是一种基于if-then-else规则的监督学习算法。决策树的这些规则是通过训练获得的,而不是人为制定的。决策树易于理解和解释,可以可视化和分析,易于提取规则;他们可以处理标称数据和数值数据;它们更适合处理缺失属性的样本;他们可以处理不相关的功能;测试数据集时,运行速度比较快;能够在相对较短的时间内在大数据源上产生可行且效果良好的结果。(引自维基百科)3.颜色直方图颜色直方图是一种颜色特征,广泛应用于许多图像检索系统中。它描述的是整个图像中不同颜色的比例,不关心每种颜色的空间位置,即不能描述图像中的物体或物体。(引用自wikipedia)4、方向统计(DirectionalStatistics)方向统计(也称为循环统计或球面统计)是统计学的一个分支,处理方向(R(n)中的单位向量)、轴(R中通过原点的线)(n))或R(n)中的旋转。更一般地说,方向统计处理对包括Stiefel流形在内的紧凑黎曼流形的观察。0度和360度是相同的角度,例如180度不是2度和358度的合理平均值,这一事实提供了一个例子,说明某些类型的数据分析需要特殊的统计方法(在这种情况下,角度数据)。其他可被视为方向性的数据示例包括涉及时间周期(例如一天中的时间、周、月、年等)、罗盘方向、分子中的二面角、方向、旋转等的统计数据。(引用自wikipedia)利用方向统计方法,能够准确地统计出方向平均的方向平均值,以以及方向的分散程度,也避免了传统统计方法在角度值统计计算中的误差。举一个简单的例子,如下图,7/4π和1/4π的统计均值用传统的方法计算为π,使用方向统计可以得到均值为0的结果。算法整体流程设计视频的定义是动图,但在屏幕分享中,动图不能被当成视频内容。在实际使用中,需要将一些动图识别为要求高清优先,流畅度次之的画面内容,以保证此时用户能够获得清晰的观看体验。1.探索性数据分析(EDA)在正式开发算法之前,进行了探索性数据分析,分析发现屏幕的运动特征具有很高的辨别力,从而大致判断出使用特征光流法完成任务提取是可能的。2.算法流程图检测算法分为三个模块和五个步骤。三个模块分别是:MotionRangeAnalysis:主要提取与运动范围相关的特征,可以统计运动画面的比例,去除一些噪声。运动角度分析:主要提取与运动角度相关的特征,可以统计屏幕的运动方向,以及运动方向的离散程度等。纹理特征分析:主要提取一些与纹理相关的特征,判断当前区域是否是一个文本区域。具体分为五个步骤:采样:光流算法计算前后需要两帧数据,视频流需要采样得到两帧数据光流计算:计算密集光流特征整幅图像的提取:提取运动和纹理特征状态转换:通过一系列模式和规则进行状态转换输出结果:根据内部状态信息输出检测结果算法参数优化和评估数据收集和标注由于数据集的稀缺性,我们需要高效地获取一批人工标注的数据,进行参数优化和算法测试。我们自己记录了一些数据,开发了一个小型标注软件,用于数据标注。算法评价指标(图片来源:https://en.wikipedia.org/wiki/Sensitivity_and_specificity)1.准确性(precision)Precision指的是预测结果,表示有多少样本被预测为正样本是真正的正样本。那么预测正类有两种可能,一种是将正类预测为正类(TP),另一种是将负类预测为正类(FP)2.召回率(recall)是根据在原始样本方面,表示样本中有多少正例被正确预测。还有两种可能,一种是将原来的正类预测为正类(TP),另一种是将原来的正类预测为负类(FN)。内容识别算法需要平衡准确率和召回率,根据业务场景调整检测结果偏好。算法实现及优化算法实现光流计算目前密集光流的计算有两种常见的算法,HS光流和DIS光流。在实现上,选择了DIS光流估计方法,两种方法在同一台机器上运行。如下表所示。算法分辨率计算时间DISopticalflow320x1807msHSopticalflow320x18013ms更具体的计算开销和算法精度数据可以参考下图(DIS光流计算精度和计算时间与其他算法对比,引自Kroeger,Till&Timofte,Radu&Dai,Dengxin&VanGool,Luc.(2016).FastOpticalFlowUsingDenseInverseSearch.LNCS.9908.471-488.10.1007/978-3-319-46493-0_29.)FeatureextractioninAftercalculatingtheoptical.flow,我们需要提取运动幅度,运动角度和纹理相关的特征,计算光流后,提取运动幅度,运动角度,和纹理相关的特征1.坐标系转换:笛卡尔系统->极坐标坐标系光流估计的结果是每个像素的(x,y)偏移量,所以需要将这个笛卡尔坐标系的值转换成极坐标系,使得获取光流的运动幅度和方向信息,即(x,y)->(ρ,θ)2.纹理计算参考了上述两篇文献的相关工作,统计了其中的Y通道4x4patchHistogram特征,将binsize设置为1,计算bin的数量作为强特征。(这样一来,本质上就变成了统计有多少个唯一值的问题),然后使用哈希表进行映射和统计。然后与运动信息进行加权求和,得到全局的运动相关纹理特征值。3、角度特征的提取角度特征的提取采用方向统计的方法,计算当前内容运动角度的平均值、加权平均值、离散度、加权离散度。这些特征可以描述当前屏幕内容的运动信息。状态转换使用决策树,经过一些剪枝处理,得到一些强特征的阈值,比如运动角度的均值,运动的角度散度等,这些阈值具有非常显着的可解释性。在状态迁移模块中,使用一个内置的概率值来记录状态,然后根据上述基于机器学习的规则调整概率值,将一些人工特征与业务相结合,最后将模块的状态根据到概率值的变化。计算开销优化虽然该算法能够以更快的速度处理视频帧,但在实际的屏幕共享中,对计算机资源的消耗有更严格的要求。那么就需要仔细优化检测策略,进一步降低CPU占用率和功耗。1.计算量和计算速度算法计算量的热点都在光流的计算上,光流的计算量与选择的算法、图像大小和算法的具体参数有关。算法分辨率运行时间DIS(MEDIUM)320x1807msDIS(FAST)320x1804msDIS(ULTRAFAST)320x1801ms算法应用Ultrafast模式后,检测精度和召回率均有明显下降,而Fast和Medium差异不显着.所以最终选择了Fast模式,在测试数据集上得到的结果也比较满意。AccuracyRecallPrecision0.95240.96080.97562,计算频率优化和静默模式计算量优化后,算法可以在150fps-200fps的速度下进行检测。在实际的屏幕共享场景中,输入帧率可以达到30fps。如果检测频率为30fps,仍然会造成CPU占用率较大,需要进一步降低检测频率。权衡响应时间和CPU使用率后,直接大幅降低检测频率,比如每5帧一次。在这种策略下,响应时间和CPU占用都处于比较好的状态。不过这种较低的检测速度还是会带来明显的CPU提升,能不能更极端一些呢?考虑到常见的办公场景,当用户共享屏幕时,内容类型长时间保持不变,因此检测结果也应该长时间保持不变。如果我们人类是这种情况,在做这种分类结果不变的任务时,我们能不能偷懒一点呢?答案是肯定的,那么计算机在这种情况下应该也可以“偷懒”了。这样就可以在算法中引入静默的概念。当检测结果基本不变时,检测算法模块开始进入静默状态。这时候检测频率降低到更低的频率,这样CPU占用率的增加基本检测不到。你如何确定何时需要进入沉默?该算法使用时域中的积分来获得分数。当分数达到一定阈值并满足其他一些约束时,可以认为检测是同一类型,可以降低检测频率。这样既保证了大部分情况下CPU开销极低,又尽可能保留了算法的快速响应特性。功能实现决策逻辑在共享模式的决策逻辑设计中,需要明确两点:保持分辨率和编码策略尽可能稳定,减少codec重启带来的开销,合适的切换速度1.帧率decisionandresolutionRatedecision由于视频流传输过程中带宽有限,往往需要匹配帧率和分辨率以获得合适的带宽消耗。因此,自动模式预设了几个与帧率和分辨率相匹配的档位。检测算法得到每一次检测结果后,增加或减少帧率,然后根据帧率匹配相应的分辨率。当帧率下降时,可根据内外条件的约束提高传输分辨率;相反,当帧速率升高时,可以通过适当的逻辑降低分辨率。2.编码方式决定当分享以文字场景为主要内容的屏幕内容时,编码策略会与流畅度优先的视频编码方式不同。这时候会使用专门的屏幕内容编码器,启用重复帧检测等策略。同时,代码控制策略将根据场景进行调整,让画面更好地满足用户的需求。3、防抖策略的切换一般需要响应时间。比如分辨率的切换,编码策略的切换,都会有一定的响应时间。如果切换频繁,会造成卡顿。为了在抖动的情况下也能保证良好的分享体验,需要引入一些抗抖动机制。抖动主要来自两方面误检导致抖动频繁切换真实分享内容导致抖动对于第一点,采用了两种机制来降低抖动的影响。在整个流水线的设计中,设计了负反馈调节机制。如上所述,当帧率较高时,光流估计更准确,而当帧率较低时,光流估计不准确容易将一般文档场景误检测为视频播放场景。当检测到内容变化时,如果是输入帧率低导致误检,此时及时提高帧率可以降低误检的概率,从而可以减少误检导致的分享模式切换避免,以及检测速度和稳态精度。通过控制判定频率来抑制抖动现象。对于第二点提到的抖动,最影响体验的场景是在决策点附近由于内容变化或其他原因帧率反复波动,导致分辨率反复切换。因此,在控制决策频率的基础上,增加了死区机制。在该机制下,分辨率切换的两个方向的决策点不相同,并留有一定的间隔,避免频繁的内容切换或其他原因导致的分辨率抖动。在这种机制下,分辨率不会随着帧率频繁切换,可以更好的保证用户体验。特色功能商业实践该功能在飞书屏幕分享的流畅度优先模式中率先启用,在商业中称为智能流畅模式,让用户在播放视频、分享文档/ppt内容时可以达到30fps的流畅度,同时保持高清晰度。该功能基本解决了用户错误选择流畅度优先导致的清晰度不符合要求的问题,同时保证了在用户真正需要流畅度体验的时候,能够获得高帧率的体验。大规模在线测试落地效果后,通过统计数据发现,在采用“屏幕自动分享模式”后,部分原本采用“平滑模式”的分享场景被算法模块修正为“清晰模式”,同时通过下图可以发现,用户的屏幕共享分辨率有了很大的提升,清晰度有了明显的提升。在线算法判断的准确性,通过用户反馈的统计,这个功能也有比较好的评价。同时,通过统计数据可以发现,由于采集和编码帧率的降低,CPU占用并没有增加,反而得到了一定程度的优化。如下图所示,开启自动模式功能后,CPU占用最多可降低20%。收入。与其他候选方案的对比在研发之初,我们也考察了一些候选方案。一种技术方案是利用像素差异和变化的比例作为切换依据。这种方式最大的问题在于,一些教学视频或者讲解内容中,当视频内容中显示ppt场景时,算法会误判,将肉眼感知的静态场景检测为视频场景,并且画面清晰度会下降,不符合用户的直觉;此外,针对应用类型的适配还有另外一种解决方案,比如根据进程名称和窗口大小进行策略调整,可以解决不同用户场景的需求,但对算法和策略的通用性提出了不小的挑战。本文采用的算法可以避免上述问题,让体验更加友好。未来演化与规划算法演化虽然由于数据集相对匮乏,在设计之初就排除了深度学习模型的应用。在研发过程中,将算法流程和模块拆分,将纹理分析等模块独立,从而可以通过人工数据集将深度学习模型应用到部分算法模块中,以获得更好的算法。表现。同时,考虑到目前的算法还是针对全局图片的分类,未来会引入视频区域的ROI检测,可以让下游应用更灵活,更适应业务。业务演进目前的屏幕内容检测算法支持分享模式的切换。此外,还可以利用屏幕内容检测算法,更智能地优化发送端和接收端的网络策略,以进一步减少文档和ppt场景的屏幕数量。共享延迟和卡顿让投屏和共享屏幕响应更高清、更流畅、延迟更低,为用户提供更好的沉浸式体验,带来更显着的生产力飞跃。