背景介绍
需求背景
屏幕共享是视频会议场景使用最广泛的功能之一,在共享一个 PPT 或者文档的情况下,人们对画面清晰度有着极高的要求,“看不清” 是最容易被用户吐槽的事情;而在共享一个视频素材的情况下,大家又对流畅度有着极高的要求,“卡顿” 也是最容易被用户吐槽的点。
为了更好地同时满足用户对清晰度和流畅度的要求,视频会议软件通常会设计两种模式:
- 清晰模式:主打清晰度,尽量保持高分辨率(如:最高 4K 原画质),带宽或性能不足的时候,只降低帧率(如:从 30fps -> 5fps),不降低分辨率。
- 流畅模式:主打流畅度,尽量提升帧率(如:最高 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 算子+膨胀算法的边缘检测发现可能的矩形区域,通过颜色直方图的颜色数量判定文本区域从而确定视频内容区域。
相关算法的介绍
- 光流
光流(Optical flow or optic flow)是空间运动物体在成像平面上的像素运动的瞬时速度,是分析像素运动的一种方法。光流法在模式识别、计算机视觉以及其他图像处理领域中用处广泛,可用于运动检测、图像分割、运动补偿编码和立体视差测量等领域。
光流法实际是通过检测图像像素点随时间的变化进而推断出物体移动速度及方向的方法。假设该移动很小,那么可以根据泰勒级数得出:
因此可以推出
最终可得出光流方程:
这个方程有两个未知数,不能直接进行求解,这被称为光流算法的孔径问题。为了求解光流方程,还需要另一组方程,这个方程由附加的约束给出。(以上内容引用自 wikipedia)
孔径问题
(孔径问题示意,引用自:https://zhuanlan.zhihu.com/p/74460341)
假设:
- 相邻帧之间的亮度恒定;
- 相邻视频帧的取帧时间连续,或者,相邻帧之间物体的运动比较“微小”;
- 决策树
决策树是一种逻辑简单的机器学习算法,它是一种树形结构,所以叫决策树。这是一种基于 if-then-else 规则的有监督学习算法,决策树的这些规则通过训练得到,而不是人工制定的。
- 决策树易于理解和解释,可以可视化分析,容易提取出规则;
- 可以同时处理标称型和数值型数据;
- 比较适合处理有缺失属性的样本;
- 能够处理不相关的特征;
- 测试数据集时,运行速度比较快;
- 在相对短的时间内能够对大型数据源做出可行且效果良好的结果。(引用自 wikipedia)
- 颜色直方图
颜色直方图是许多图像检索系统中被广泛采用的颜色特征。它所描述的是不同色彩在整幅图像中所占的比例,而并不关心每种色彩所处的空间位置,即无法描述图像中的对象或物体。(引用自 wikipedia)
- 方向统计(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 的结果。
算法总流程设计
视频的定义就是运动的画面,但在屏幕共享当中,并不能够将运动的画面都当作视频内容来处理。实际使用中,需要将部分运动的画面识别为需要高清优先、流畅度其次的屏幕内容,保证用户在此时获得清晰的观看体验。
- 探索性数据分析(EDA)
在正式进行算法开发之前,先进行了探索性数据分析,分析发现屏幕的运动特征具有较高的区分度,从而大致判定利用光流法来完成该任务的特征提取是可行的。
- 算法流程图
该检测算法分成三个模块,五个步骤。
三个模块分别是:
- 运动幅度分析:主要进行运动幅度相关特征的提取,能够统计运动画面比例,去除一些噪音。
- 运动角度分析:主要进行运动角度相关特征的提取,能够统计画面运动的方向,以及运动方向的分散程度等
- 纹理特征分析:主要提取一些纹理相关的特征,判定当前区域是否为文字区域。
具体分为五个步骤:
- 采样:光流算法需要前后两帧数据进行计算,需要对视频流进行采样,得到两帧数据
- 光流计算:计算出全图的稠密光流
- 特征提取:提取运动和纹理特征
- 状态转移:通过一系列模式和规则进行状态转移
- 输出结果:根据内部状态信息输出检测结果
-
视频会议
+关注
关注
4文章
158浏览量
30160 -
RTC
+关注
关注
2文章
528浏览量
66310
发布评论请先 登录
相关推荐
评论