1. 程式人生 > >基於QoE的實時視訊編碼優化:低功耗,低延時,高質量

基於QoE的實時視訊編碼優化:低功耗,低延時,高質量

640?wx_fmt=jpeg


在實時通訊領域,只有當Codec的優化適應了當前的網路狀況,裝置平臺及應用場景,使用者才能得到最佳的體驗。在LiveVideoStackCon2018大會中聲網Agora視訊工程師吳曉然詳細介紹瞭如何設計與實現基於QoE的實時視訊編碼優化。本文由LiveVideoStack整理而成。


文 / 吳曉然

整理 / LiveVideoStack


大家好,我是吳曉然。本次將為大家介紹基於QoE的實時視訊編碼優化探索。實時音視訊的傳輸框架大同小異,雖然不同廠商在一些技術細節的打磨上略有差異,但都有一個共同的目標那就是QoE——使用者體驗質量。那麼其根本原因何在?


首先,網際網路時代本身主要面向使用者,使用者體驗是是衡量產品價值的重要維度,從使用者的角度出發進行優化無可厚非;其次,基於使用者體驗的優化是當下最好的選擇,目前我們的學術積累相對於歐美髮達國家仍有一定差距,單純地依靠學術創新推動技術改革的道路不但效率較低,也會影響到我們追趕時代潮流的步伐,故而我們可以從優化使用者體驗的角度出發,實踐一些有用的創新舉措從而推進技術的改革;最後,中國擁有全世界最大的網際網路消費群體,我們的網際網路日活躍量都是以億為單位計量,龐大的使用者基數下蘊含著寶貴的資料財富,這些資料對任何一家網際網路企業而言都是一種無形的鉅額資產。資料是21世紀的石油,誰能夠充分發掘資料背後的價值誰就能成為市場的主導者,為使用者提供更優質的服務,打造更優秀的產品。


本次分享內容將主要圍繞以下幾個方面:


640?wx_fmt=png


1. 實時視訊通訊的QoE


640?wx_fmt=png


理想條件下,採集端獲取到的原視訊資料會經過前處理、編碼後通過網路傳輸至解碼端,解碼端接收資料處理後再進行後處理與渲染,最後得到輸出的視訊產品。如果輸出視訊產品清晰度不佳那麼我們可通過提高解析度、減小QP、增加演算法複雜度等方法提高清晰度;而如果流暢度不佳那麼則可通過提高fps的方法優化流暢度。


640?wx_fmt=png


但在現實條件下,不穩定的網路使得在網路傳輸流程中易出現頻寬變化、延時抖動、網路丟包等不良狀況:即使我們有頻寬預測的演算法,但頻寬變化的不可預知性仍然是困擾我們的一大難題;延時抖動更是任何一個網路中或多或少都會發生的狀況;而隨機丟包對實時傳輸造成的影響最大,當網路狀況很差時高丟包率會導致視訊播放相當卡頓並且無計可施。面對這些問題時,單純地提高解析度、減小QP、增加演算法複雜度或提高fps只會加劇頻寬的佔用並增加處理時間與功耗,其結果就會導致網路擁塞、使得實時性無法達到要求,尤其移動端的使用者體驗會被大打折扣,繼而出現手機發熱、待機時間下降等諸多不良狀況。


640?wx_fmt=png


根據理論與實踐我們總結得出基於QoE的實時視訊編碼優化目標為:終端顯示高質量、接受端低延時、傳送端低功耗。


2. Agora的探索與實踐


640?wx_fmt=png


明確了實時視訊編碼優化目標之後,與大家分享一下我們在此方面進行的探索與實踐。我們的優化策略可以大致分為三個部分:前處理、編解碼、後處理。


640?wx_fmt=png


2.1 前處理


1)基於機器學習的頻寬估計


640?wx_fmt=png


在之前的內容當中有提到頻寬估計的難以預測性。這表示即使我們獲取了十分全面的引數,也難以準確藉助一種經典模型或演算法準確預測頻寬量。但是在神經網路與機器學習的幫助下我們可以較為準確地估計頻寬的動態變化。通過上億幀針對頻寬、延時、jitter、丟包率、接收端的buffer size、解析度、FPS等一系列引數設計的強化學習訓練神經網路從而使其具備預測下一時段頻寬量的能力,這是一種區別於傳統經典模式的全新解決思路。當然此方法並不適用於所有網路模型,如在一些網路狀況較好抖動延時並不嚴重的情況下使用經典模型優化也可獲得良好效果;而當處於隨變性很強的網路環境中時,機器學習也許會讓問題迎刃而解。


2)幀率及解析度自適應調整


640?wx_fmt=png


實時通訊包括很多不同場景,而視訊幀率與解析度的引數調整和視訊內容或場景緊密相關。例如我們可以對一些場景變化較輕微的畫面採取適當降低幀率的方式減輕頻寬與資料壓力,而對一些場景變化激烈的畫面如動作片打鬥等則不能採取降低幀率的方法,否則觀眾可輕易察覺到幀率降低造成的畫面模糊與卡頓。


我們應當根據不同的視訊內容場景匹配調整不同的引數,如對清晰度要求很高而流暢度要求較高的直播場景而言,可以通過調整其幀率實現對實時編碼前處理過程的優化;而對流暢度要求很高的通訊場景而言,則可以在保證清晰度的同時通過調整解析度來優化實時編碼的前處理過程。因為在一般情況下,採用視訊通訊交流的雙方彼此都比較熟悉,在可接受範圍之內降低解析度不會為二者交流帶來明顯障礙;而一旦出現卡頓或延時則會直接導致雙方交流溝通的不暢甚至失敗,使使用者體驗大打折扣。


教育場景對清晰度與流暢度的要求都非常高,其原因在於教育場景背後行業的巨大投資與學術嚴謹。家長對孩子的大筆投入,使得這些孩子值得通過更高質量的音視訊收穫嚴謹的知識。


對遊戲場景而言,雖然良好的清晰度與流暢度都至關重要,但流暢度是需要首先保證的引數。特別像是對一些實時戰略遊戲而言,有時遊戲就在幾秒甚至幾百毫秒間分出勝負。早年參加WCG大賽的選手為了避免液晶顯示器重新整理率低導致的拖影對遊戲比賽造成不良影響,會優先使用CRT顯示器上場比賽。


總而言之,根據視訊的不同內容場景自適應調整幀率與解析度,是一種有用的實時編碼前處理優化策略。


2.2 編解碼


1)區域檢測及ROI編碼


640?wx_fmt=png


區域檢測及ROI編碼屬於前處理且與Codec相結合。區域檢測可用於前景與背景檢測、畫質增強、美顏特效等;而落實到Codec層面則用於ROI編碼。ROI編碼可明顯增強特定場景中區域性畫面的畫質,如對流暢性與清晰度要求都很高的遊戲應用場景而言,如果位元速率無法達到流暢性與清晰度的要求,那麼我們可在編碼時通過ROI編碼將遊戲視訊畫面中區域性重點區域如中心戰鬥區域精細化從而優化視訊位元速率。雖然邊緣畫面可能會出現一定劣化,但只要使用者視覺重點範圍內的畫面保持清晰,對使用者體驗的影響非常之小。


2)位元速率控制演算法優化


640?wx_fmt=png


這一步的優化主要針對線上教育應用場景。其中最重要的元素之一是老師的板書,我們需要確保觀看視訊的學生可看清老師在黑板上書寫的內容。上課時學生的注意力會集中在老師書寫的文字區域,除了規範文字書寫之外我們也可通過一些可使文字更加清晰的前處理手段提升板書清晰度。從編碼角度而言就是將文字用更小的量化步長精細化編碼,從而大大提升老師學生使用線上教育產品的使用者體驗。


640?wx_fmt=png


我們一直在努力改進位元速率控制演算法的優化,針對位元速率控制演算法的優化有多種,包括機器學習在內的方法都可用於優化位元速率控制演算法。上圖列舉了一種較為經典的位元速率控制演算法,通過SATD與模糊複雜度計算qscale,而後經過qscale除以rate actor與qscale乘以overflow兩次計算,最終得出QP。這樣一套經典的位元速率控制演算法可從容處理諸多場景。因為對傳統視訊的優化是基於幀展開的,幀與幀之間的時間間隔均勻,故對於一般視訊會採取平均分配位元速率的策略;而在實時通訊應用場景中幀和幀之間的時間間隔並不均勻,在此情況下渲染畫面時為每幀都平均分配同樣的位元速率顯然是不合理的,因此實時通訊應用場景下的位元速率控制仍需進一步優化。我們曾探索通過調整複雜度、兩幀之間的間隔等並尋找更好的解決方案,後來我們發現調整分配位元速率可實現目標效果。通過多種方式探索不同分配位元速率的方式,關於這一點仍需繼續探索。


Just Noticeable Difference


640?wx_fmt=png


Just Noticeable Difference是指最小可視差,就像人手無法準確區分兩個差距幾克的蘋果一樣,我們身體的感官如視覺系統對每種訊號的接受程度不一,刺激有效的閾值也不同,只有當訊號刺激達到一定閾值之後我們才能夠對其作出反應。如果將這個道理過渡到位元速率分配,我們可採取為視訊中那些有效刺激閾值較高人眼不易察覺的視覺元素分配較少位元速率,而為那些有效刺激閾值較低人眼可敏感察覺的視覺元素分配更多位元速率的策略調整位元速率分配,即可實現人眼無法察覺的有效位元速率控制演算法優化,提升使用者體驗。


軟編碼與硬編碼


640?wx_fmt=png


講到這裡,我想大家會有一些疑問:軟體編碼與硬體編碼究竟存在什麼區別?在編碼模組上,軟體編碼主要是在CPU上進行而硬體編碼則主要在GPU、VPU、DSP、FPGA等多種硬體編碼模組上進行;雖然硬體編碼的速度明顯快於軟體編碼,但軟體編碼的質量好於硬體編碼是業界公認的事實;除此之外,軟體編碼相對於硬體編碼硬體在功耗上更大,這主要體現在使用者使用手機長時間看視訊會感受到明顯手機發熱;頻寬要求是指一些編碼器會對頻寬下降進行要求,例如蘋果的編碼器會限制視訊質量的最低水平,一旦位元速率過低或質量過差編碼器則拒絕編碼輸出。但對於實時通訊而言,頻寬的未知變化使得我們無法準確判斷什麼時候位元速率會降低到無法編碼的低值,因此硬體編碼器在處理實時視訊方面存在一些限制;至於GOP結構,軟體編碼器的GOP結構相對更靈活而硬體編碼器的相關引數是固定不變的;引數調整響應方面,軟體編碼在引數調整下達之後會從下一幀開始迅速響應而硬體編碼則需要一定過程才能做出響應甚至需要重啟程序;最後在可移植性與可維護性方面,由於不同平臺的軟體編碼都是基於一套程式碼,無論是維護還是移植成本都較低,而硬體編碼由於牽扯到硬體適配的工作,無論是可移植性還是可維護性都遜於軟體編碼。


3)軟硬體編碼動態切換


640?wx_fmt=png


那麼應該選擇哪種編碼方案?在選擇軟體編碼還是硬體編碼方案上,我們應當參考以下幾個維度做出正確判斷:第一個是裝置平臺,也就是移動端、PC端等。如果是PC端,由於PC的CPU效能足夠強大,我們更傾向於選擇軟體編碼,而如果是移動端則需要綜合移動端裝置的處理器效能等硬體引數擇優選擇;第二個是CPU負荷,CPU除了需要處理編碼工作之外還需處理其他必要任務,如果CPU當中的採集、渲染、前處理等模組在工作時佔用了CPU的大量資源並且難以對其進行調配優化,那麼我們就需要考慮一下使用硬體編碼方案從而降低CPU的工作負荷;第三個維度是裝置剩餘電量,如果裝置剩餘電量十分充足那麼軟體編碼對手機續航造成的壓力並不大。而如果手機電量岌岌可危則選擇硬體編碼方案可適當減輕編碼過程對手機續航的影響。除此之外還有目標位元速率、幀率、解析度、丟包率等參考維度,我們需要綜合以上維度選擇適宜的動態編碼方案。


2.3 後處理——超解析度


640?wx_fmt=png


超解析度屬於後處理流程,其好處是可在不理想頻寬條件下發送解析度較低的視訊流,而後再借助超解析度技術提升其解析度從而在保證視訊觀看體驗的前提下避免網路擁塞與網路丟包。除此之外,超解析度技術也能夠在幫助節省頻寬的同時通過提升單位傳輸幀數提高視訊流暢程度,明顯提升實時通訊的使用者體驗。


3. 視訊質量評分系統


640?wx_fmt=png


視訊質量評分系統主要用於判斷畫面質量的優劣,其客觀標準主要為MSE、PSNR、SSIM;視訊質量評價基於單張圖片並依賴原始碼流完成,在主觀一致性上存在缺陷。


640?wx_fmt=png


傳統判斷視訊質量的方案是在一定幀率下選取多張影象並取其質量平均值,這樣的合理之處在於視訊本身是多張影象的合集,但不合理之處在於視訊不單單是多張影象的合集,還存在每幀影象時間長短等變數的影響,下圖展示的是傳統影象質量指標和主觀一致性方面的差異:


640?wx_fmt=png


第一張圖是原畫而後五張圖是加入了不同噪聲的效果。這種處理是基於均方差完成的,而傳統的視訊質量評價方案只會察覺到兩張圖之間的差距,如果我將均方差調成一致那麼雖然系統判斷畫面質量優良但使用者的主觀感受一定是非常糟糕的。檢驗結果與主觀一致性的差距,迫使我們需要對視訊質量評分系統作出進一步優化。


640?wx_fmt=png

 

而VMAF則可有效避免以上情況的發生,其優勢在於VMAF通過視覺資訊保證度、細節丟失指標、延時位元速率、運動量等多種維度更全面地評判視訊質量。其關鍵部分是加入了運動量計算,也就是計算兩幀之間均方差大小並將其作為影響視訊質量的因素之一,均方差越小則視訊質量越高;如果兩幀之間差值越大,運動量越大,那麼視訊質量就相應越低。


640?wx_fmt=png


上圖展示的是DMOS視訊質量測試演算法的擬合曲線,從這些客觀指標我們可以看出傳統視訊質量評價方案的主觀一致性較低而VMAF則表現得更好。在這裡需要強調的是,如果原畫本身進行了質量增強或者其它引數調整,那麼得出的視訊質量指標一定是不客觀,不準確的。因此我們不能將通過VMAF等視訊質量評價方案得出的結果作為判斷視訊質量的唯一標準。


640?wx_fmt=png


因此就需要建立一套視訊質量主觀標準。我們的主觀評判標準分為畫面清晰度、質量平穩度、視訊內容、觀測條件、視訊流暢度五個方面。其中,平衡畫面清晰度與視訊流暢度是我們努力實現平衡的兩項指標,而質量平穩度是指在變化的網路頻寬下保證視訊質量在一定可接受的範圍內波動,而非大幅度的質量突躍或陡降;觀測條件則是一項受多重因素影響的指標,如終端螢幕質量、效能等都會對其產生影響,也許在一塊1080p螢幕上播放720p視訊所帶來的使用者體驗會明顯優於在一塊720p螢幕上播放1080p視訊所帶來的使用者體驗;視訊內容同樣與使用者體驗息息相關,但很難為這一指標確立統一的標準,例如使用同樣的幀率與解析度展現一段連續的激烈打鬥戲和另一段穿插了感情戲的激烈打鬥戲,也許使用者會疲於觀看快速、模糊的打鬥場面抑或是更喜歡凌厲的影像風格,這給使用者帶來的感受一定是不同的。


4. 未來編碼器


640?wx_fmt=png


大家知道AV1已經成為現實,就現在看來雖然AV1在壓縮效率上十分出色,但其較高的複雜度限制了自身的應用場景。也許這種複雜程度對視訊點播等實時性要求並不高的應用場景而言尚可接受,但對實時通訊而言,高複雜度一定是需要儘可能避免的;而H.266(VCC)等還需時日,我們拭目以待。


640?wx_fmt=png


VVC相對於HEVC有50%的提升,大約在2021年可實現硬體級Codec,而First or Final Standard最早會在2019~2020年公開。我們並不需要熱衷於追趕潮流,我們需要做的是將Codec打磨好,使其能夠以良好效能用於實時通訊網路提升使用者體驗,畢竟良好的使用者體驗才是我們努力完善的終極目標。


精品文章推薦






技術乾貨:



人物專訪: