五分鐘技術(shù)趣談 | 云電腦視頻流幀率協(xié)商機(jī)制
如圖所示,云電腦對(duì)網(wǎng)絡(luò)強(qiáng)依賴,沒(méi)有網(wǎng)絡(luò),云電腦無(wú)法使用,所以網(wǎng)絡(luò)環(huán)境的穩(wěn)定至關(guān)重要,網(wǎng)絡(luò)之上傳輸?shù)闹饕且曨l媒體流數(shù)據(jù),云電腦其實(shí)就是將云端操作系統(tǒng)的桌面圖像復(fù)制一份傳輸?shù)浇K端本地再顯示出來(lái),讓用戶感覺像是在操作本地電腦一樣,那么整個(gè)圖像數(shù)據(jù)的傳輸過(guò)程(傳多少幀、幀率怎么調(diào)節(jié)、端側(cè)解碼性能)是影響用戶體驗(yàn)的核心關(guān)鍵點(diǎn)。
Part 01
假如沒(méi)有幀率協(xié)商機(jī)制
如果說(shuō)端云之間沒(méi)有傳輸幀率的協(xié)商機(jī)制,就會(huì)出現(xiàn)音畫不同步,最終無(wú)法使用;整個(gè)過(guò)程大致如下:
用戶點(diǎn)擊連接,發(fā)起云電腦的遠(yuǎn)程連接,此時(shí)云端已經(jīng)響應(yīng)連接后開始進(jìn)行桌面的圖像采集傳輸,云端根據(jù)桌面系統(tǒng)的使用場(chǎng)景按需采集和傳輸,如播放了一部60FPS的視頻,那么此時(shí)云端傳輸?shù)拿襟w流幀率就是60,此時(shí)若終端解碼性能只能滿足30FPS,那就會(huì)出現(xiàn)終端幀數(shù)據(jù)積壓,隨著積壓的數(shù)據(jù)越來(lái)越多,音畫不同步就會(huì)越來(lái)越明顯,體驗(yàn)越來(lái)越差。
Part 02
幀率協(xié)商怎么做?
幀率協(xié)商其中最關(guān)鍵的一點(diǎn)是如何識(shí)別終端的性能,需要在終端本身硬件性能和體驗(yàn)之間找到一個(gè)平衡點(diǎn),因?yàn)樵贫速Y源較為豐富,資源擴(kuò)展的空間較大,本身是不太會(huì)嚴(yán)格限制編碼及媒體流數(shù)據(jù)幀率的,所以應(yīng)該讓端側(cè)盡可能的貼近云端實(shí)際的幀率數(shù)據(jù),降低在端側(cè)的損耗。
首先,參考一些芯片廠家的經(jīng)驗(yàn),終端硬件芯片的解碼耗時(shí)可以直觀的反映出終端本身的性能;
其次,幀率協(xié)商的觸發(fā)點(diǎn)應(yīng)該在端側(cè)而不是云側(cè),所以端側(cè)得有降幀和升幀的觸發(fā)機(jī)制;
最后,即使在性能很差的終端設(shè)備商,要求依然能夠滿足云電腦的基本使用,優(yōu)先音畫同步,而不是頻繁的丟幀跳幀帶給用戶持續(xù)卡頓的使用體驗(yàn),所以終端得有丟幀策略。
Part 03
幀率協(xié)商機(jī)制
- 幀率計(jì)算
圖片
如圖所示,當(dāng)端側(cè)收到云端云桌面視頻流連接成功的信號(hào)后就啟動(dòng)端側(cè)本地的幀率計(jì)算流程,終端采用時(shí)間滑動(dòng)窗口的方式進(jìn)行計(jì)算,窗口大小為n秒,從收到首幀數(shù)據(jù)開始計(jì)時(shí),在窗口時(shí)間內(nèi)得到所有幀數(shù)據(jù)的解碼耗時(shí)T,平均解碼耗時(shí)t=T/n,最終計(jì)算得出能反饋端側(cè)性能的解碼幀率數(shù)據(jù)FPS(T)=1/t,后續(xù)按照窗口滑動(dòng)計(jì)算,該數(shù)據(jù)持續(xù)更新。
- 降幀策略
圖片
如圖所示,端側(cè)會(huì)維護(hù)本地解碼隊(duì)列的積壓幀數(shù)量(通過(guò)本地維護(hù)的解碼隊(duì)列,獲取隊(duì)列元素?cái)?shù)量即可),端側(cè)滑動(dòng)窗口計(jì)算的解碼幀率數(shù)據(jù)(第一階段幀率計(jì)算得出),云端實(shí)時(shí)推流的幀率數(shù)據(jù)(云端信令控制協(xié)議)三個(gè)參數(shù);有且僅當(dāng)解碼隊(duì)列積壓>F1、端側(cè)解碼幀率>F2、端側(cè)解碼幀率<云端幀率時(shí),才啟動(dòng)降幀策略,通過(guò)信令控制協(xié)議請(qǐng)求云端降低幀率,幀率數(shù)據(jù)為端側(cè)當(dāng)前實(shí)時(shí)計(jì)算得出的幀率,云端接收到該數(shù)據(jù)后,按照新的幀率要求進(jìn)行編碼傳輸,從而達(dá)到整體降幀的效果。
- 升幀策略
圖片
如圖所示,升幀策略是和降幀策略并行的兩個(gè)策略,為什么要有升幀策略?因?yàn)榻K端硬件本身的性能是一個(gè)動(dòng)態(tài)變化的過(guò)程,硬件CPU的資源消耗也是隨著端側(cè)應(yīng)用運(yùn)行的過(guò)程中在變化的,故當(dāng)資源消耗較低時(shí),仍然按照之前的降低策略持續(xù)運(yùn)行,就會(huì)導(dǎo)致端側(cè)性能的過(guò)度浪費(fèi),而且用戶的體驗(yàn)也沒(méi)有得到提升,所以幀率的動(dòng)態(tài)計(jì)算過(guò)程中必須配合升幀策略來(lái)應(yīng)對(duì)資源使用率的降低,以此來(lái)提升用戶體驗(yàn)。
- 丟幀策略
正如前文所述,面對(duì)硬件性能較差的終端設(shè)備,音畫不同步的問(wèn)題相比卡頓、跳幀現(xiàn)象給用戶帶來(lái)的體驗(yàn)問(wèn)題更加嚴(yán)重,所以在面對(duì)長(zhǎng)時(shí)間解碼隊(duì)列積壓幀數(shù)據(jù)無(wú)法釋放的場(chǎng)景,必須啟動(dòng)丟幀策略,否則當(dāng)終端資源提升時(shí),短時(shí)間觸發(fā)大量積壓的視頻幀數(shù)據(jù)解碼,會(huì)導(dǎo)致音頻視頻數(shù)據(jù)不同步,那最終上屏后的呈現(xiàn)效果就是聲音和畫面不同步,影響使用體驗(yàn);
丟幀策略主要關(guān)注兩個(gè)參數(shù),解碼隊(duì)列的積壓長(zhǎng)度L,隊(duì)列中隊(duì)頭、隊(duì)尾視頻幀的時(shí)間差T,當(dāng)L>30且T>5秒則啟動(dòng)丟幀策略,將當(dāng)前積壓隊(duì)列中的幀數(shù)據(jù)清空,下一幀上屏畫面即為云端新推送的圖像數(shù)據(jù),會(huì)出現(xiàn)跳幀現(xiàn)象,但基本保證了音畫同步的效果。
Part 04
總結(jié)
云電腦場(chǎng)景下,幀率的調(diào)節(jié)機(jī)制是影響用戶畫面體驗(yàn)的關(guān)鍵因素,當(dāng)然除了幀率調(diào)節(jié),還有像碼率控制、顏色編碼、分辨率控制等多因素都對(duì)云桌面的整體傳輸體驗(yàn)有較大影響,所以云電腦體驗(yàn)優(yōu)化是一個(gè)長(zhǎng)期不斷迭代的過(guò)程,需要在各種影響因子的條件下不斷調(diào)節(jié)控制,尋找經(jīng)驗(yàn)值,持續(xù)提升。