一文讀懂雲渲染「串流」全鏈路時延及優化策略

2022-10-25 12:00:11

這是一個讓雲遊戲完美起步的時代。

雲遊戲作為產業內近年來炙手可熱的話題,具有「雲端執行、超高清、零延時、即點即玩」等眾多特性。

隨著 5G 時代的到來,以及中心雲能力下沉至邊緣雲,高頻寬、低延遲、高效能這些特性與雲遊戲緊密結合,突破實時雲渲染的頻寬和延遲問題,也賦予了雲遊戲更大的想象力。

就在今年6月,央視推出了首個大型沉浸式數位互動空間《三星堆奇幻之旅》,讓觀眾擺脫本地硬體限制,僅通過一個H5頁面帶觀眾破屏穿越,「身臨其境」探索考古現場。

沉浸式體驗背後, 「雲渲染」和「串流」是繞不開的核心技術。

01 實現雲遊戲的關鍵技術:「串流」

「雲渲染」 將大型沉浸式體驗需要的3D渲染應用部署在雲端,使得觀眾看到和互動的畫面,都是雲端實時渲染計算出來的。

「串流」 是實現雲遊戲的關鍵方式,通過資料中心將遊戲渲染場景轉換成視訊流,再通過傳輸網路推播到使用者終端顯示。

同時,使用者在實時顯示的影象上,通過鍵盤滑鼠、觸控等方式傳輸指令到雲端,實時控制3D渲染應用做出相應的響應。

整個過程延遲通常小於100ms。

雲渲染「串流」技術通常應用在雲上考古、雲旅遊、虛擬數位人直播、智慧城市數位孿生應用和雲遊戲的場景

使用者不必部署昂貴的高配PC或手機,通過網頁存取或者掃描二維條碼的方式,即刻便可享受細膩、清晰、流暢的高清視訊體驗和實時的操控效果。

雲渲染串流主要採用啟動成功率、錯誤率、資源利用率、首幀時間、時延、位元速率、解析度、畫質、卡頓率、音畫同步差等指標來衡量業務的好壞。

本文對重點對「串流」全鏈路時延進行分析,並介紹主要的優化策略。

02「串流」的全鏈路時延

作為雲渲染串流技術體驗的基礎,超低延時的要求帶來了巨大的挑戰。

雲渲染串流的全鏈路時延主要可拆解為以下各個環節:傳輸時延、指令時延、編碼時延、封包時延、收包時延、解碼時延、幀間隔時延。

傳輸時延:媒體流與指令流傳輸的時延。使用者通過阿里雲廣泛部署的邊緣節點就近接入,一般狀態下rtt(往返時延)可穩定控制在10ms以內,即單向網路延遲5ms;在資源繁忙時,存在中心排程到較遠節點的情況,偶爾出現部分使用者rtt在30ms左右的情況,即單向網路延遲15ms。

指令時延:雲上的unity/ue渲染應用的響應使用者端的觸控事件的時延。指令可以通過程序間通訊的方式,打通串流應用層和渲染程式,避免作業系統互動,實現虛擬化操作,指令時延控制在1ms以內。

編碼時延:視訊編碼的處理時延。採用GPU硬體加速、採集編碼Zero Latency的策略,通過對渲染應用的direct API掛鉤的方式,實現GPU內部紋理視訊資料的採集和編碼閉環,避免了GPU和CPU之間原始巨量資料量的視訊拷貝,節約了功耗,控制整體編碼時延為2ms以內。

封包時延:視訊編碼資料封裝RTP到伺服器音視訊傳送的時延。採用更適合雲渲染的擁塞控制策略,實時精準調節網路緩衝區,可以降低封包在伺服器的快取時間為5ms以內。

收包時延:使用者接收端的RTP jitter buffer的時延。該時延保持在20~30ms,即快取1~2幀的狀態,以應對亂序、丟包、抖動等網路環境,在保證流暢度的前提下,最大限度降低網路時延。

解碼時延:視訊解碼處理時延。不同裝置的視訊解碼策略不同,在中端機型軟解高清視訊的平均解碼時延為7ms左右,這是統計時延結果,在H5端上改進空間較小。

幀間隔時延:編碼演演算法時延。在60fps影格率的情況下,每兩個視訊幀之間的時間間隔固定為16ms,也就是說指令響應到視訊編碼之間一定會存在0-16ms的時間延遲,這是由視訊編碼本身機制引起的,理論上不能減少。

總之,在1080P 60fps的場景下,雲渲染串流全鏈路時延 = 傳輸時延rtt(10-30ms)+ 指令時延(1ms)+編碼時延(0-2ms)+封包時延(0-5ms)+收包時延(20-30ms)+解碼時延(7ms)+幀間隔時延(0-16ms)= 38ms 到 90ms之間,可以實現100ms以內的體驗效果。

03 串流時延的精準「優化」策略

對於「串流」技術的全鏈路時延,優化策略主要包括:編碼優化、前處理優化、採集優化、指令優化、傳輸優化。

❖ 編碼優化

在視訊編碼策略方面,影響編碼延時的主要優化有:

1. 用 slicethread 代替 framethreads,提高編碼效率,降低計算處理時延。

2. 關閉lookahead執行緒,避免執行緒預測的幀快取。

3. 關閉B幀 (HEVC可以支援GPB,替代普通的B幀),以降低後向參考的演演算法時延。

❖ 前處理優化

前處理優化主要指的是「窄頻高清」處理,通過CPU+GPU聯合計算,進行視訊原始域的計算優化,在滿足位元速率降低35%,VMAF提高10%效果的同時,最小化計算處理時延,效果如下圖。

在雲渲染場景下的窄頻高清處理,可以實現Zero-latency編碼與畫質的平衡,使主客觀畫質都有顯著提升。同時窄高高清處理,可以降低視訊編碼位元速率,降低網路傳輸的頻寬壓力。

❖ 採集優化

在視訊採集方面,通過對使用者渲染程序遠端注入視訊採集hooker,對preset函數設定函數勾點,在函數勾點中將back buffer拷貝到共用紋理中,供硬體編碼器使用的方式,避免了GPU和CPU之間的yuv原始視訊資料的拷貝。在GPU內部完成視訊採集、視訊處理與視訊編碼,全過程紋理資料處理, 採用CUDA硬體視訊編碼,並行加速編碼過程,降低編碼時延。

藍色部分為使用者渲染引擎程序,完成GPU的紋理渲染;橙色部分為阿里云云渲染引擎程序,完成勾點注入、網路收發和業務邏輯;黃色部分為GPU運算,使用者程序和阿里雲程序兩者通過共用紋理進行資料通訊,並實現硬體編碼加速。

❖ 指令優化

在指令操作方面,我們根據不同使用者需求,提供「非侵入式」和「侵入式」兩種方案。

非侵入式方案通過hook到使用者渲染程序的方式,通過掛載GetKeyState、GetCursorPos等一系列win api鍵鼠狀態函數,用來傳遞使用者控制指令流,避免核心態與使用者態的資料互動。

非侵入式方案的優點在於應用適配性好,使用者不需要二次開發;缺點是需要依賴不同系統版本的api。

侵入式方案是指使用者渲染引擎可以選擇整合阿里雲注入.dll的方式,通過同主機程序間的socket通訊方式,實現自定義使用者整合訊息解析,降低指令解析時延。

侵入式方案應用能實現雲原生化,但其具有一定的技術門檻,需要開發整合阿里雲的方案。

❖ 傳輸優化

在傳輸優化策略中,主要包括指令流QoS保障、頻寬估計、擁塞控制、視訊快取精準估計、FEC糾錯演演算法改進、特殊包冗餘保護。

指令流QoS保障:針對移動事件需保證執行順序,在網路亂序場景下,允許丟包,但通過序列號確保執行最新事件;針對按鍵、點選事件,會啟用重傳策略,保證本地操控與最終顯示的最終一致性;對於組合事件訊息進行訊息合併,減少發包量,同時通過冗餘策略能保證丟包時候的到達率。

頻寬估計:採用BBR演演算法,在頻寬上探時,不會造成rtt的較大變化,避免傳輸延遲的增加。同時,優化BBR演演算法的頻寬下探策略,在探測最小rtt時,不停發資料,保障媒體資料穩定傳輸。在頻寬探測過程中,採用快速收斂策略,優化最大頻寬計算方法並縮短頻寬估計的反饋時間為100ms,快速探測頻寬。

擁塞控制:調整pacer sender的週期判定條件,在網路狀態良好時,提高單次資料傳送量,減少單幀傳送時間。

視訊快取精準估計:在視訊解碼端,採用卡爾曼濾波器動態估算幀間隔時間,精準設定jitter buffer大小,減少不必要的時延。

FEC糾錯演演算法改進:使用cm256 RSFEC演演算法,比傳統RSFEC演演算法cpu利用率降低95%,最大化提高分組數量。在雲渲染大位元速率的場景下,減少向前錯誤更正的計算時間。

特殊包冗餘保護:針對特殊包,例如NACK包及重傳包、I幀及重傳I幀、使用者自定義指令和操作指令等,分級傳輸,通過專用冗餘通道傳輸,以區域性頻寬提升為代價,以保障最小時延的整體傳輸到達率。

針對雲渲染串流場景,阿里雲開發了專門的延遲評測工具,通過雲渲染串流的通用指令API,可以完成上述全鏈路時延測量。該工具由伺服器端測試渲染應用、測試應用使用者端和統計處理工具組成。

伺服器端測試渲染應用:實時獲取使用者端上傳的毫秒時間,並通過雲渲染串流顯示上傳的計時時間。

測試應用使用者端:實時顯示毫秒計時,並通過雲渲染串流的API,例如滑鼠座標設定API,實時上傳毫秒時間到伺服器端。

統計處理工具:包括定時截圖程式、時間戳自動識別程式和延遲卡頓資料處理程式完成自動化測試和資料收集和統計,可以評測第三方雲渲染系統,並獲取延遲和卡頓的結果。

右側為工具執行效果,圖上範例中的時間延遲為706290(使用者端) - 706231(伺服器端) = 59 ms。通過OCR識別和長時間巨量資料量的測試,可獲取雲渲染串流時延的統計結果。

雖然目前雲渲染串流時延100ms可以滿足使用者的體驗需求,但是100ms僅僅是及格線而已。

在降低時延方面,大有空間可為。

比如:

在內容生產端,通過開發雲原生渲染應用,實現「內容生產+編碼傳輸」的閉環應用,會進一步提升指令反饋和影象顯示的實時效果。

在雲端,同一張網實現多業務混跑,降低使用者接入節點的成本,減少就近接入的距離,可以實現網路延遲的最小化。

在使用者端,雲渲染應用以h5接入為主,而在h5端,可以通過webcodec、webtransport、webrtc等技術的有機結合,實現靈活的串流策略,達到使用者的極致體驗。

唯有實現串流技術的「延時自由」,才能讓身臨其境的雲遊戲,完美起步。