低延時(shí)音視頻技術(shù)在OPPO云渲染場景的應(yīng)用
一、云渲染場景的傳輸需求及挑戰(zhàn)
首先介紹一下云渲染業(yè)務(wù)對音視頻的一些傳輸要求,以及面臨的挑戰(zhàn)。
1、云渲染場景應(yīng)用
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,音視頻應(yīng)用經(jīng)歷了三個(gè)階段:
第一個(gè)階段主要為 2008~2013 年,也就是 3G 時(shí)代,以長視頻為主,以 PDN 點(diǎn)播、 VOD 點(diǎn)播為核心技術(shù)。
第二個(gè)階段從 2013~2019 年,進(jìn)入 4G 時(shí)代,誕生了很多音視頻的產(chǎn)品,比如播直播、短視頻,音視頻技術(shù)。
第三個(gè)階段從 2019~ 至今,進(jìn)入了 5G 時(shí)代,隨著 5G 和云基礎(chǔ)設(shè)施的發(fā)展,給音視頻技術(shù)帶來了更多施展空間,音視頻技術(shù)進(jìn)入繁榮時(shí)期,這一時(shí)期的應(yīng)用和技術(shù)主要有云會(huì)議、互動(dòng)直播、遠(yuǎn)程協(xié)作、XR、云游戲、自由視角等等。
什么是云渲染,簡而言之,云渲染是利用云端算力來解決終端算力瓶頸問題,進(jìn)而解放端側(cè)算力壓力,主要的場景有虛擬社交,虛擬演播廳、虛擬演唱會(huì)、云游戲、遠(yuǎn)程協(xié)作等。
云渲染平臺借助云端算力和音視頻技術(shù)將引領(lǐng)下一代多媒體互聯(lián)發(fā)展。
2、云渲染平臺架構(gòu)
云渲染平臺主要有兩大部分,第一部分是云端渲染平臺,第二部分是跨終端平臺,兩個(gè)部分中間通過串流技術(shù)依托網(wǎng)絡(luò)傳輸進(jìn)行鏈接?;驹硎前?3D 應(yīng)用渲染在云端運(yùn)行,通過接收終端的控制指令渲染相應(yīng)音視頻畫面,再通過流化技術(shù)由網(wǎng)絡(luò)推給終端用戶進(jìn)行體驗(yàn)。
串流是云渲染業(yè)務(wù)用戶體驗(yàn)的核心點(diǎn),云渲染將本地應(yīng)用的算力移到云端,但需要與本地應(yīng)用有相同的體驗(yàn),從體驗(yàn)角度來講,云渲染對流化傳輸有兩個(gè)需求:
① 如何實(shí)現(xiàn)沉浸式超高清體驗(yàn):相比以前的音視頻,比如云會(huì)議、在線課堂,云渲染需要實(shí)現(xiàn)高清體驗(yàn);以前 1080P、720P 分辨率,1~2M 的帶寬基本滿足,但現(xiàn)在的視頻畫面更高清,比如 4K、8K 畫質(zhì),音視頻傳輸負(fù)載變更大,從原來的 1M 級變成 10M 級,自由視角的場景甚至到 100M 級。
② 如何實(shí)現(xiàn)實(shí)時(shí)互動(dòng):零延時(shí)是相對概念,用戶無感知延時(shí)就叫零延時(shí),目前百毫秒延時(shí)能夠給用戶提供較好的體驗(yàn),百毫秒延時(shí)成為未來的趨勢。
二、RTC 和云渲染業(yè)務(wù)的結(jié)合
本章節(jié)將介紹 OPPO 在云渲染場景與 RTC 的結(jié)合,傳輸架構(gòu)所做的調(diào)整,并分享一些優(yōu)秀的實(shí)踐。
1、基于 CloudRTC 的云渲染平臺傳輸架構(gòu)
首先是產(chǎn)品架構(gòu),云渲染平臺傳輸架構(gòu)與傳統(tǒng) RTC 架構(gòu)類似,包括推流端、拉流端、云端轉(zhuǎn)發(fā)三大部分,不同點(diǎn)在于邊緣云與媒體轉(zhuǎn)發(fā)服務(wù)在同一個(gè)機(jī)房或同一個(gè)網(wǎng)源點(diǎn)上。
推流端主要部署云渲染應(yīng)用,邊緣計(jì)算集群、虛擬化后的 GPU 集群都在這部分。
云端服務(wù)包括三部分:
第一部分是信令加速服務(wù),負(fù)責(zé)用戶接入、流量調(diào)度、用戶管理、房間管理等。
第二部分是媒體轉(zhuǎn)發(fā)服務(wù),與傳統(tǒng) RTC 有一點(diǎn)區(qū)別,會(huì)根據(jù)云渲染應(yīng)用提供 SFU/PTP 架構(gòu),同時(shí)提供轉(zhuǎn)發(fā)和點(diǎn)對點(diǎn)直連。媒體轉(zhuǎn)發(fā)服務(wù)負(fù)責(zé)云渲染平臺的兩種數(shù)據(jù)流,第一種是媒體流,也就是音視頻流,第二種是控制流,即用戶對云渲染平臺反向的交互控制指令。
第三部分是拉流播放服務(wù)。拉流播放實(shí)現(xiàn)了更多端側(cè)設(shè)備適配,如 IOT 設(shè)備、頭顯設(shè)備、手表、鼠鍵盤、手柄及平板、手機(jī)、電腦等設(shè)備。
接下來對調(diào)整后的云渲染全鏈路串流方案傳輸架構(gòu)進(jìn)行整體介紹。如上圖所示,從架構(gòu)上分為三大模塊:
① 云化平臺:渲染應(yīng)用的核心模塊。
② 流化模塊:包括采集編碼、網(wǎng)絡(luò)傳輸、解碼、反向指令傳輸?shù)鹊取?/span>
③ 終端顯示:包括指令采集等等。
整體流程如上圖所示,過程中有個(gè)技術(shù)點(diǎn)需要重點(diǎn)介紹,在整個(gè)流程中我們將指令采集和音視頻流放在同一網(wǎng)源,即同一個(gè)傳輸協(xié)議,將指令采集通過信令方式傳輸,通過將指令發(fā)送與音視頻通過同一通道傳輸,可以對時(shí)延有較好的控制,方案已經(jīng)在新一代的 OPPO 云渲染平臺上線。
三、低延時(shí)串流技術(shù)探索
這一章節(jié)中將介紹對低延時(shí)技術(shù)的探索與實(shí)踐,特別是 RTC、串流等技術(shù)。
1、云渲染串流時(shí)延優(yōu)化
通過分解將整體時(shí)延優(yōu)化分為三個(gè)部分:
① 采集編碼優(yōu)化。
② 傳輸優(yōu)化。
③ 接收端優(yōu)化。
2、采集編碼優(yōu)化
采集編碼優(yōu)化主要有兩部分工作:
(1)GPU 編碼方案
GPU 編碼方案的調(diào)整包括渲染畫面顯示后,通過屏幕或窗口采集,送到編碼模塊進(jìn)行編碼;另外,引入 GPU 的優(yōu)勢,通過在 GPU 進(jìn)行渲染和編碼,引入零拷貝編碼方案。
零拷貝編碼方案:通過云渲染引擎設(shè)置鉤子函數(shù),當(dāng)渲染畫面出來之后通過鉤子函數(shù)將 frame buffer 里面的數(shù)據(jù)整理,將 frame buffer 里的數(shù)據(jù)拷貝到共享紋理 share texture 中,通過共享紋理圖像使用 GPU 進(jìn)行編碼,可以避免 GPU 和 CPU 之間原始數(shù)據(jù)拷貝,通過在 GPU 內(nèi)部完成視頻采集處理和編碼,大大縮短效率,降低 CPU 消耗,編碼模塊將數(shù)據(jù)送到云串流引擎上通過網(wǎng)絡(luò)發(fā)送,同時(shí)在時(shí)延上有一些收益。
(2)低延時(shí)編碼方案
① 自適應(yīng)編碼:結(jié)合傳輸和控制,根據(jù)網(wǎng)絡(luò)質(zhì)量和傳輸質(zhì)量進(jìn)行自適應(yīng)編碼及碼率調(diào)整。
② 前向糾錯(cuò)技術(shù):結(jié)合糾錯(cuò)技術(shù)對網(wǎng)絡(luò)丟包進(jìn)行動(dòng)態(tài)冗余編碼,進(jìn)行信源編碼交錯(cuò)。
③ ROI 編碼:通過 ROI 區(qū)域感興趣編碼,降低一些編碼碼率,增強(qiáng)畫質(zhì),從而實(shí)現(xiàn)低碼高清的。
④ 分層編碼:分層包含 SVC 編碼以及一些 Cmucas 的編碼來實(shí)現(xiàn)抗弱網(wǎng)以及在弱網(wǎng)情況下的重傳壓力。
⑤ LTR 編碼:通過 LTR 查詢參考幀的編碼引入,在編碼方案上會(huì)做低延時(shí)的更多選擇性。
3、傳輸優(yōu)化 -基于 GCC 的優(yōu)化方案
再來看一下傳輸層的優(yōu)化內(nèi)容。
(1)擁塞控制優(yōu)化方案:OPPO 的 RTC 基于 WebRTC 演進(jìn),控制算法是基于 GCC 的優(yōu)化方案,在低時(shí)延的預(yù)算情況下,媒體傳輸在發(fā)生網(wǎng)絡(luò)擁塞時(shí)降低一些碼率,避免發(fā)生更嚴(yán)重的網(wǎng)絡(luò)擁塞,減少丟包重傳及時(shí)延上升。
① 帶寬評估
1)調(diào)節(jié)基于延遲和丟包預(yù)測模型的加權(quán)參數(shù),提高網(wǎng)絡(luò)敏感環(huán)境抗性。
2)在探測過程中,采用快速收斂策略,優(yōu)化帶寬估計(jì)反饋周期 feedback。
② Pacing 流控發(fā)送
1)在網(wǎng)絡(luò)良好時(shí),調(diào)整流控超發(fā)參數(shù),提高單次數(shù)據(jù)發(fā)送量,降低單幀發(fā)送時(shí)延。
2)采用 Pace+Probe 方案,更加主動(dòng)的探測網(wǎng)絡(luò)帶寬,提高帶寬利用率。
4、傳輸優(yōu)化 -流暢性優(yōu)先的 QoS 策略
接下來介紹傳輸算法中重要的內(nèi)容——QoS 策略。
QoS 策略如圖所示,如何在編碼發(fā)送接收過程中,發(fā)現(xiàn)丟幀,恢復(fù),通過不同手段解決丟幀問題,對 QoS 進(jìn)行優(yōu)化,保證流暢性。QoS 流暢性優(yōu)先優(yōu)化策略包括:
(1)HARQ 動(dòng)態(tài)冗余策略
優(yōu)化重傳和 FEC 技術(shù),通過前置冗余的方案,在丟包之前配備一定冗余,以局部帶寬為代價(jià),降低重傳時(shí)延。
(2)不對等保護(hù)
依據(jù)不同信源做不同保護(hù)策略,在弱網(wǎng)場景,配合 SVC 分層編碼,采用主動(dòng)丟幀和減少 P 幀重傳策略,降低傳輸帶寬,緩解網(wǎng)絡(luò)擁塞。
通過流暢性優(yōu)先的 QoS 策略,可以在時(shí)延及帶寬上取得更好的平衡。
5、接收端優(yōu)化--零緩存播放
下面介紹接收端的優(yōu)化。在音視頻發(fā)送到客戶端播放之前經(jīng)歷三個(gè)階段:抗抖動(dòng)、解碼時(shí)延、渲染時(shí)延;最后到接收端時(shí)延。
接收端時(shí)延優(yōu)化策略有:
(1)調(diào)整 Jitterbuffer 算法
采取“來一幀,出一幀”思路,重構(gòu)低延時(shí) Jitter 評估方案,同時(shí)弱化幀間差異帶來的抖動(dòng),控制 buffer 緩存,更快更及時(shí)地輸出給解碼器解碼。
(2)低延時(shí)解碼
在硬件比較差的設(shè)備,采用軟硬結(jié)合的解碼方案,基于端側(cè)設(shè)備選擇解碼類型,以達(dá)到高效率低延遲的目標(biāo)。
6、時(shí)延測試數(shù)據(jù)及應(yīng)用效果
上圖中展示了優(yōu)化后的時(shí)延實(shí)驗(yàn)測試數(shù)據(jù)。
左邊圖片是基于 RTC 場景的測試數(shù)據(jù),時(shí)延在 180ms 左右,整體網(wǎng)絡(luò)模擬延時(shí)是50ms;優(yōu)化后的低時(shí)延測試數(shù)據(jù)在 100ms 左右,通過邊緣節(jié)點(diǎn)可以進(jìn)一步降低網(wǎng)絡(luò)時(shí)延。
右邊圖片是 OPPO 的 3D 虛擬數(shù)據(jù)中心,基于優(yōu)化后的 RTC 技術(shù),整體時(shí)延及體驗(yàn)得到了提升。
四、總結(jié)與展望
最后介紹一下對低時(shí)延應(yīng)用的展望。
現(xiàn)有串流技術(shù),達(dá)到了百毫秒級別,但仍需要進(jìn)一步優(yōu)化時(shí)延,實(shí)現(xiàn)更高標(biāo)準(zhǔn)的“延時(shí)自由”,未來展望主要有三點(diǎn):
(1)內(nèi)容生產(chǎn)端:通過生產(chǎn)的傳輸端優(yōu)化,比如,云端應(yīng)用與推流更緊密的聯(lián)合,實(shí)現(xiàn)“生產(chǎn)端+傳輸”更加閉環(huán)。
(2)云端:通過云端更低成本的基礎(chǔ)設(shè)施,結(jié)合邊緣節(jié)點(diǎn),實(shí)現(xiàn)全局一張網(wǎng),降低接入成本和時(shí)延。
(3)用戶端:用戶端的 SDK 除了實(shí)現(xiàn)播放,通過策略在部分端側(cè)進(jìn)行端側(cè)渲染,以及 RTC 和指令控制的結(jié)合,達(dá)到更佳的用戶體驗(yàn)。