关于rtc:音视频开发进阶|第七讲分辨率与帧率下篇

2次阅读

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

在视频系列的上一篇推文中,咱们简略总结了色调、像素、图像和视频等根底概念之间的关系。并且次要关注了两个组合:像素和图像,图像和视频之间的形成逻辑。咱们先来简略回顾一下:

从像素到图像:肯定数量、记录了不同色调信息的像素组合,失去一帧残缺的图像;

从图像到视频:一帧帧图像按肯定频率间断播放,失去了视频。

基于上述演变关系,咱们也提出了一些疑难:何谓“肯定数量”和“肯定频率”,以及它们对视频图像有什么影响?其中,对于“肯定数量”的问题,咱们曾经通过学习“分辨率”的相干常识失去了解答,具体参阅【音视频开发进阶 - 分辨率与帧率·上篇】。

明天,咱们持续来探讨另外一个问题:何谓“肯定频率”?它对视频又有哪些具体的影响?

何谓按“肯定频率”播放

在视频系列的第一篇推文中,咱们简略探讨过“视频是如何产生的”,过后提到了一个大家熟知的货色:“翻页动画”,或者说“翻页连环画”,如下图:

翻页动画十分直观地展现了图像到视频的演变关系,咱们回顾一下过后的阐明:

翻页动画的每一页都是动态的图片,常态下平平无奇。但疾速地拨动翻页,让每一页图片疾速、间断地进行展现时,本来“动态”的图片在视觉上就变成了“动静”的。

“动态图片”之所以会转变为“动静画面”,是基于人眼的“视觉暂留”个性:

人眼看到物体时,物体首先成像于视网膜、并由视神经传入大脑,大脑才感知到物体的像。而当物体从眼帘中移去时,视神经对物体的印象不会立刻隐没,仍会连续几百毫秒。当旧图像隐没、新图像呈现呈现的频率足够快时,前后图像在视觉上就产生了“连贯”感,造成了“动静画面”。

 而这,也就是咱们所说的 “视频”

1 帧率的定义 

上述阐明,其实是对“一帧帧图像按肯定频率间断播放,失去了视频”的详细描述。如果取单位工夫为 1s,当每 1s 播放的图像数量为 N 时,咱们称图像帧播放的频率为 N 帧 /s。更业余的说法是:视频的帧率为 N fps(Frame Per Second,帧每秒)。

视频的帧率,即为对何为”肯定频率“的解答。

如果某个视频的帧率为 15 fps,意味着该视频的每一秒都蕴含 15 帧图像。当咱们从该视频中提取出时长 1s 的片段,再进行合成,就能够失去 15 张独立的图片。

如果合成失去的图片,如下所示(图片程序为:从左至右,从上至下):

仅从下面图片来看,你认为它形容了一个怎么的动静过程呢?

若仅作”推断“和”猜想“,或者不难。咱们齐全能够基于独立的图片内容,联合生存教训进行联想:以上形容的是一个点球射门的过程。然而,仅凭动态的图片,咱们的大脑很难整顿出动静的信息,更别说造成一个活泼晦涩的影像了。

只有当这些图片依照“帧率”的规定,如同“翻页动画”的页面被拨动起来,所有才会变得不一样。如上面的视频所示,咱们所截取的 1s 片段,就是运动员助跑、射门的一瞬间。

帧率的定义,答复了对于“肯定频率”的问题,但仅仅是解释了“数量”的定义,并没有形容“数量”的影响。帧率的高下变动,到底会给视频带来哪些扭转呢,咱们接着往下看。

2 帧率的影响 

沿用学习分辨率时的思路,咱们通过间接察看不同帧率下的视频,来体验帧率差别带来的区别。上面是和前文雷同的点球视频,在 1 fps、5 fps、10 fps、25 fps 等帧率下的体现。咱们一一作比照和探讨。

视频帧率为 1 fps 时,图像播放的频率为 1 秒 1 帧。9s 的射门过程,仅通过 9 帧图像来记录运动员的动作和足球的挪动轨迹。

此时,咱们 能够非常明显地感触到画面的进展。因为图像之间的连贯性太差,咱们不得不通过“脑补“的形式,来设想帧与帧之间短少的过程信息,帮忙了解视频的内容。与其说这是视频,不如说是一页页点击播放的 PPT 更为失当。

5 fps:

视频帧率为 5 fps 时,图像播放的频率为 1 秒 5 帧。相比 1 fps,视频的进展感失去了显著缓解,图像间的连贯性显著晋升,那些在 1 fps 下必须依附设想来了解的过程信息得以出现。然而,仔细观察运动员的腿部甩动、足球凌空后的挪动轨迹,仍有一卡一卡的、”不天然“的感觉。5 fps 仿佛逾越了图像到视频的”鸿沟“,晋升了视频晦涩度,但还不足以”骗过“咱们的大脑和眼睛。

10 fps:

视频帧率为 10 fps 时,图像播放的频率为 1 秒 10 帧。帧率绝对于 5 fps 翻倍后,视频记录到运动员肢体动作、足球挪动轨迹的更多细节,晦涩度进一步晋升,“不天然感”加重。一般来说,10 fps 的视频已达到大脑和眼睛所认可的、根本的”晦涩“。

25 fps:

视频帧率为 25 fps 时,图像播放的频率为 1 秒 25 帧。此时,原先卡顿、不天然等问题根本隐没,视频观感“丝滑”,比拟合乎咱们对真实世界的静止场景的感触。当初,再回过头看看 5 fps 等低帧率的视频,堪称是“天差地别”。

从观感上有显著的进展、画面不连贯、动作不天然,到最终的观感顺畅、天然丝滑。晦涩度的晋升,这就是帧率由低到高时视频最直观的扭转。

一般来说,足够的帧率配置是视频晦涩的前提。但这里又引出一个问题:是否只有帧率足够,视频就肯定是晦涩的呢?

音视频解决门路上的帧率变动

如果有这样一个视频,它的帧率为 100 fps。绝对于后面 25 fps 的例子,帧率大小齐全足够,实践上应该是晦涩的。每秒播放 100 帧图像,失常状况下咱们冀望每 10ms 应播放一帧,但如果理论的播放状况如下:

每 1000ms,前 100ms 播放 99 帧,后 900ms 播放残余的 1 帧

此时,数值统计上视频的帧率仍可能是 100 fps,但因为视频帧的播放距离十分“不平均”。前 100ms 蕴含了本应耗时 990ms 才播放完的内容,看起来将是“快进减速”的成果,而后 900ms 因为只有一帧图像,将呈现画面的停滞。显然,这种状况下的观感依然是卡顿、不晦涩的,甚至可能比低帧率、但帧距离平均的视频体验更差。

因而,除了足够的帧率配置,视频要晦涩还要求帧距离是平均的。任意一个条件没有满足,就可能呈现卡顿问题。

那么,哪些状况会导致帧率产生扭转、无奈达到预期,或者帧距离变得不平均呢?要解答这个疑难,咱们得持续钻研:音视频解决门路上的帧率变动。

通过上一篇推文,咱们晓得,分辨率在音视频数据处理门路上可能会产生扭转,而作为视频的根底属性之一,帧率也免不了如此。细化到每个解决阶段来看,会波及 采集、渲染显示、前后解决、编解码、网络传输等环节,咱们能够将各阶段输入的帧率进行辨别,以不便形容。

视频处理过程中的常见帧率问题

现实状况下,咱们心愿上述各个环节输入的视频帧率雷同,且帧距离平均稳固,以保障最终渲染进去的视频晦涩度与原始采集的统一,但理论利用中却难以尽如人愿。

常见的可能问题,比方:

1 采集阶段 

因为设施性能问题或设施故障,导致摄像头的采集速度达不到预期,采集帧率会受损;

如果摄像头采集帧率过高,每一帧图像的曝光工夫有余,可能导致图像偏暗。依据环境亮度变动,可能须要动静地调整采集帧率、改善曝光,以保障采集画面的亮堂度。

2 前、后处理阶段 

裁剪缩放、美颜滤镜等操作须要对每一帧图像做解决,解决逻辑越简单,则运算量越大、耗时越长,可能导致单位工夫内无奈实现预期帧数的解决。

3 编码阶段 

因为设施性能问题,导致编码模块的工作效率达不到预期,编码帧率会受损;

若上行带宽受限,为避免出现发送拥塞,可能须要动静调整编码帧率,以管制每秒发送的数据量,适应以后带宽。

4 网络传输阶段

传输链路不稳固,视频帧数据的流转呈现提早、拥塞、丢包,导致数据失落或者传输不平均(接收端长时间收不到数据,或者短时间内收到过多数据)。

5 解码、渲染阶段 

上述的帧率变动,有一些是客观因素引入的被动损失,有一些是为了应答客观因素而执行的被动调整。而所提到的客观因素,次要受简单的网络环境和各异的终端设备影响,这恰好是 RTC 利用场景下的常态。

在这里,咱们无奈穷举所有可能导致帧率异样的起因,大家只有晓得,帧率从定义上是基于“工夫”维度来计量的“数量”,无论是被动的问题,还是被动的调整,任何会影响“解决耗时”、“帧数量”、“帧距离”的操作,最终都可能影响到帧率。而各阶段的帧率影响一环扣一环,最终体现到渲染显示上,就会呈现”卡顿“的问题。

在开发音视频利用时,个别会通过渲染帧率来量化最终的用户体验(针对视频晦涩度),如果遇到视频的”卡顿“问题,就须要沿着音视频的解决门路,排查是哪一个阶段呈现了帧率异样。这就要求咱们,在整个音视频数据处理链路、各个要害节点上做好帧率统计,这是个不小的工程。

当应用 ZEGO 音视频 SDK 开发音视频利用时,SDK 会通过品质回调接口,定期通知你统计周期内的、不同解决阶段的输入帧率,不便你进行视频晦涩度的观测以及用户体验的评估,并辅助进行问题定位。当然,除了帧率外,品质回调接口也提供其余重要的指标数据,你齐全能够基于此搭建本人的品质监控体系。

帧率的抉择

在理解帧率的定义和影响,以及它在音视频数据处理链路上可能的变动后,咱们最初再来聊聊,RTC 场景下咱们到底须要多少的帧率。

从前文对 1 fps ~ 25 fps 等帧率视频的比照,咱们能够确定的是,适当进步帧率会带来更晦涩的视频观感。但是否帧率就应该越高越好,仍值得商讨。基于后面的案例,咱们再补充一个 case,来看看 30 fps 配置下的体现。

如上,察看 30 fps 下的视频,再比照前文 1 fps ~ 25 fps 的视频,你的感触如何呢?

你是否发现,帧率从 1 fps 晋升到 15 fps 时,视频晦涩度确实在显著晋升,但在 15 fps 晋升至 25 fps 时,差别感开始削弱。而 25 fps 到 30 fps 的变动,曾经微不足道。这表明,在超出肯定范畴后,晋升帧率带来的体验优化收益升高。 而与此同时,和音频采样率、位深、视频分辨率一样,视频帧率进一步提高,必然导致数据量减少、解决难度减少,这将给设施存储、传输带宽、设施性能带来挑战。

所以,咱们必须“量力而为”。综合晦涩度、带宽、设施性能等维度的考量,RTC 场景罕用的帧率为 10 fps ~ 30 fps,ZEGO SDK 反对 5 fps ~ 60 fps 的采集、编码帧率(具体受限于采集设施的能力),并默认应用 15 fps 的配置。

看到这里,你可能会有疑难:15 fps 的默认帧率,是否太低了?尤其是比拟相熟电子游戏的小伙伴,必定有理解,30 fps 对于游戏(尤其是动作类型)来说,可能只是一个“勉强能承受”的最低晦涩配置,要保障规范的晦涩体验可能须要 60 fps 或 更高。而对于一些第一人称类的游戏,甚至要求 >100 fps 的配置来实现最佳体验。相比之下,15 fps ~ 30 fps 确实是相当“简陋”。

为什么会有这么大的差别呢?这次要 和不同应用领域的图像生成逻辑无关

1 RTC 场景

RTC 场景下,咱们个别应用摄像机作为视频的采集源,在摄像机快门关上到敞开的持续时间内(也称曝光工夫),被摄物体反射的光线得以进入镜头,并被感光元件记录,留下影像。此时,每帧图像所记录的,将是被摄物体在曝光的持续时间内,所有地位影像的残缺组合。咱们将其中的一帧独自拎进去,能够看到物体静止产生的“拖影”或“残影”。

参考下图中射门运动员右脚的地位(蓝框内),这是在该帧图像的曝光工夫内,鞋子在所有地位的影像的组合。

咱们把这种景象称为 “动静含糊”。“动静含糊”在生活中随处可见,当初就举起你的手,重复挥动,你立即就能察看到手掌静止的“拖影”。”动静含糊“合乎人眼所看到的真实世界的成果,会让咱们大脑认为该静止更“连贯天然”。

2 游戏场景

而游戏图像的生成逻辑不太一样。

游戏须要实时响应玩家操作来确定画面内容,每一帧图像都由显卡实时计算生成,会精确地示意刹时画面(能够了解为将摄相机的快门设置为有限快,每一帧的曝光工夫有限靠近于 0),帧与帧之间就像是“闪现”个别,也就不存在“动静含糊”的成果。如果没有足够多的帧图像用于“补救”缺失的过程信息,大脑就会认为其不连贯、不实在,晦涩度体验就会大打折扣。

咱们能够通过上面几张图片,来帮忙了解动静含糊。假如有两帧图像,记录了一个蓝色方块从画面左侧挪动到右侧的过程。

图 1:第一帧

图 2:第二帧 A(不蕴含动静含糊)

图 3:第二帧 B(蕴含动静含糊)

以上,图 2 第二帧 A 为游戏显示的逻辑,图 3 第二帧 B 即为摄像视频的逻辑。蓝色的拖影能够视为动静含糊的成果,它记录了方块挪动过程的”轨迹“,让咱们大脑在解决前后两帧图像时,更容易产生连贯感。

另外,摄像头采集个别能够保障采集帧的距离平均,使视频得以稳固在某个帧率。而游戏图像通过实时演算失去,如果画面复杂度变动激烈(比方呈现频繁的动作局面、简单环境纹理、多变的光线成果等),每帧计算耗时骤升,可能会导致大幅掉帧,掉帧前后的帧距离差别会进一步加剧卡顿感。

动静含糊和帧率稳固,使摄像机采集的视频在更低帧率上就实现了比拟晦涩的成果(实际上,24 fps 曾经成为电影电视作品罕用的帧率规范)。而电子游戏等动画的渲染,则须要用更高的帧率来实现雷同的晦涩度。值得一提的是,当初很多游戏也反对动静含糊的性能,能够在渲染每一帧画面时退出动静含糊的模仿,再配合帧率锁定的机制防止其忽高忽低,也能在无限帧率下实现更晦涩、实在的游戏体验。

理解到下面的差别,咱们再回过头来看看 RTC 场景下罕用的帧率配置:10 fps ~ 30 fps,是否就悦目很多了呢?

3 理论场景利用

接下来,咱们再进一步将帧率的抉择,落地到理论场景中。

大部分状况下,若视频直播场景的复杂度不高,比方常见的 秀场单主播 ,直播画面大部分是绝对动态的内容,15 fps 的晦涩度可满足需要。如果直播过程中须要有简单的静止局面,比方 健身操、舞蹈等等,或者是户外纪录式直播 ,能够思考更高的帧率配置,比方 25 fps ~ 30fps。如果是 屏幕共享的直播场景,共享内容又是电子游戏等高帧率内容,那么 30 fps 以上可能更适宜。

当然,咱们也不总是谋求高帧率,也存在须要指定低帧率的时候。

比方 教育场景,学生、老师的头像小窗口对画面动作细节的要求不高,能够应用 10 fps 甚至更低的帧率,优先保障带宽和升高设施性能耗费,以应答参差不齐的直播环境,保障连麦品质。同样是屏幕共享场景,如果共享内容是 PPT 等动态内容,对画面的清晰度将远高于晦涩度,也能够思考低帧率、高分辨率的配置。

咱们通过表格简略总结如下:

以上提供的配置比拟粗略,只是作为最根底的参考。毕竟理论场景千万、需要偏重各异,具体问题仍需具体分析,正确的做法是在产品设计、研发阶段,就进行充沛地测试、和比照,抉择一个满足理论体验需要的计划,或者在产品上提供可动静批改配置的入口,不便前期的个性化定制。

总结

好了,对于何谓“肯定频率”的问题,咱们就探讨至此。心愿大家通过本篇推文,可能进一步了解图像与视频之间的关系,也对“帧率”这个影响视频晦涩度的要害指标有肯定的理解,帮忙大家抉择适宜本人产品的帧率配置。

最初,咱们通过一个思维导图,总结一下本文的次要内容:

思维导图:

本期思考题

如果摄像头采集帧率过高,每一帧图像的曝光工夫有余,可能导致图像偏暗。依据环境亮度变动,可能须要动静地调整采集帧率、改善曝光,以保障采集画面的亮堂度”文中的这一段形容,该如何了解?

(🤫下期揭秘)

上期思考题揭秘 ⬇️

对于文中的举例,图像分辨率为 1280 x 720(宽 x 高,16:9),显示分辨率为 1080×1920(宽 x 高,9:16),有什么方法,能够实现全屏显示、不拉伸且不裁剪图像画面吗?

能够将图像旋转 90 度或 180 度后,再进行渲染。

个别在 Android 挪动端的屏幕共享场景,可能会遇到相似状况:当分享端(推流侧)分享的画面,在竖屏利用和横屏利用之间切换时,零碎提供的采集图像的分辨率也将在(高 > 宽)或(宽 > 高)之间变动,为了防止画面被裁剪,咱们须要被动批改编码分辨率至相应比例。此时,拉流端须要依据解码分辨率的宽高状况,对应抉择竖屏 UI、或者横屏 UI 进行渲染,以实现全屏显示。

好了,对于何谓“肯定频率”的问题,咱们就探讨至此。心愿大家通过本篇推文,可能进一步了解图像与视频之间的关系,也对“帧率”这个影响视频晦涩度的要害指标有肯定的理解,帮忙大家抉择适宜本人产品的帧率配置。点击理解更多

正文完
 0