五分鐘技術趣談 | 云電腦視頻流幀率協商機制
如圖所示,云電腦對網絡強依賴,沒有網絡,云電腦無法使用,所以網絡環境的穩定至關重要,網絡之上傳輸的主要是視頻媒體流數據,云電腦其實就是將云端操作系統的桌面圖像復制一份傳輸到終端本地再顯示出來,讓用戶感覺像是在操作本地電腦一樣,那么整個圖像數據的傳輸過程(傳多少幀、幀率怎么調節、端側解碼性能)是影響用戶體驗的核心關鍵點。
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
總結
云電腦場景下,幀率的調節機制是影響用戶畫面體驗的關鍵因素,當然除了幀率調節,還有像碼率控制、顏色編碼、分辨率控制等多因素都對云桌面的整體傳輸體驗有較大影響,所以云電腦體驗優化是一個長期不斷迭代的過程,需要在各種影響因子的條件下不斷調節控制,尋找經驗值,持續提升。