五分钟技术趣谈 | 云电脑视频流帧率协商机制
如图所示,云电脑对网络强依赖,没有网络,云电脑无法使用,所以网络环境的稳定至关重要,网络之上传输的主要是视频媒体流数据,云电脑其实就是将云端操作系统的桌面图像复制一份传输到终端本地再显示出来,让用户感觉像是在操作本地电脑一样,那么整个图像数据的传输过程(传多少帧、帧率怎么调节、端侧解码性能)是影响用户体验的核心关键点。
【资料图】
Part 01假如没有帧率协商机制如果说端云之间没有传输帧率的协商机制,就会出现音画不同步,最终无法使用;整个过程大致如下:
用户点击连接,发起云电脑的远程连接,此时云端已经响应连接后开始进行桌面的图像采集传输,云端根据桌面系统的使用场景按需采集和传输,如播放了一部60FPS的视频,那么此时云端传输的媒体流帧率就是60,此时若终端解码性能只能满足30FPS,那就会出现终端帧数据积压,随着积压的数据越来越多,音画不同步就会越来越明显,体验越来越差。
Part 02帧率协商怎么做?帧率协商其中最关键的一点是如何识别终端的性能,需要在终端本身硬件性能和体验之间找到一个平衡点,因为云端资源较为丰富,资源扩展的空间较大,本身是不太会严格限制编码及媒体流数据帧率的,所以应该让端侧尽可能的贴近云端实际的帧率数据,降低在端侧的损耗。
首先,参考一些芯片厂家的经验,终端硬件芯片的解码耗时可以直观的反映出终端本身的性能;
其次,帧率协商的触发点应该在端侧而不是云侧,所以端侧得有降帧和升帧的触发机制;
最后,即使在性能很差的终端设备商,要求依然能够满足云电脑的基本使用,优先音画同步,而不是频繁的丢帧跳帧带给用户持续卡顿的使用体验,所以终端得有丢帧策略。
Part 03帧率协商机制-帧率计算
图片
如图所示,当端侧收到云端云桌面视频流连接成功的信号后就启动端侧本地的帧率计算流程,终端采用时间滑动窗口的方式进行计算,窗口大小为n秒,从收到首帧数据开始计时,在窗口时间内得到所有帧数据的解码耗时T,平均解码耗时t=T/n,最终计算得出能反馈端侧性能的解码帧率数据FPS(T)=1/t,后续按照窗口滑动计算,该数据持续更新。
- 降帧策略
图片
如图所示,端侧会维护本地解码队列的积压帧数量(通过本地维护的解码队列,获取队列元素数量即可),端侧滑动窗口计算的解码帧率数据(第一阶段帧率计算得出),云端实时推流的帧率数据(云端信令控制协议)三个参数;有且仅当解码队列积压>F1、端侧解码帧率>F2、端侧解码帧率<云端帧率时,才启动降帧策略,通过信令控制协议请求云端降低帧率,帧率数据为端侧当前实时计算得出的帧率,云端接收到该数据后,按照新的帧率要求进行编码传输,从而达到整体降帧的效果。
- 升帧策略
图片
如图所示,升帧策略是和降帧策略并行的两个策略,为什么要有升帧策略?因为终端硬件本身的性能是一个动态变化的过程,硬件CPU的资源消耗也是随着端侧应用运行的过程中在变化的,故当资源消耗较低时,仍然按照之前的降低策略持续运行,就会导致端侧性能的过度浪费,而且用户的体验也没有得到提升,所以帧率的动态计算过程中必须配合升帧策略来应对资源使用率的降低,以此来提升用户体验。
- 丢帧策略
正如前文所述,面对硬件性能较差的终端设备,音画不同步的问题相比卡顿、跳帧现象给用户带来的体验问题更加严重,所以在面对长时间解码队列积压帧数据无法释放的场景,必须启动丢帧策略,否则当终端资源提升时,短时间触发大量积压的视频帧数据解码,会导致音频视频数据不同步,那最终上屏后的呈现效果就是声音和画面不同步,影响使用体验;
丢帧策略主要关注两个参数,解码队列的积压长度L,队列中队头、队尾视频帧的时间差T,当L>30且T>5秒则启动丢帧策略,将当前积压队列中的帧数据清空,下一帧上屏画面即为云端新推送的图像数据,会出现跳帧现象,但基本保证了音画同步的效果。
Part 04总结云电脑场景下,帧率的调节机制是影响用户画面体验的关键因素,当然除了帧率调节,还有像码率控制、颜色编码、分辨率控制等多因素都对云桌面的整体传输体验有较大影响,所以云电脑体验优化是一个长期不断迭代的过程,需要在各种影响因子的条件下不断调节控制,寻找经验值,持续提升。