成本更低、更優觀看體驗——自研S265編解碼器解析

帶寬是直播運營中最大的成本,根據前瞻網估算全行業2020年的CDN費用支出將超過300億元,在2025年接近1000億規模(https://bg.qianzhan.com/trends/detail/506/200715-ec767b9b.html),可以說降低帶寬是成本控制中至關重要的一環。

與此同時,降低帶寬不應以犧牲體驗爲代價,當我們在觀看直播時第一要求是畫面清晰沒有馬賽克,可清楚的看到主播和直播間的各種商品。怎樣確保畫質高清的同時成本又可控,這裏核心技術是視頻編解碼;

相機採集到的視頻數字信號通常是yuv格式,每個像素點需要1.5個Byte來表示,以720p 25fps爲例,帶寬有263.67Mbps,直播1小時總流量有124.4GB,如有100萬人同時觀看這場直播,CDN費用會超過1億元。好在視頻圖像內部幀與幀之間存在非常高的相關性,採用視頻壓縮技術去除相關性後,可以將帶寬降低到原來的1/100-1/400。

視頻壓縮標準主要由ISO(國際標準組織)制訂的MPEG系列和ITU(國際電信聯盟)制訂的H.26X系列,從1990年代開始,視頻壓縮行業經歷了三代主要標準,分別是H.262/MPEG-2、H.264/AVC、H.265/HEVC,每隔十年時間,視頻壓縮標準升級帶來的壓縮率會提升一倍。HEVC(H.265) 作爲比AVC(H.264)更新一代的視頻壓縮標準,提供了更靈活的編碼結構和劃分方式,並在運動補償、運動矢量預測、幀內預測、變換、去塊濾波、熵編碼等方面進行了大量改進與優化,得益於這些新的編碼工具和特色技術,相同畫質下最高可以比H.264節省一半碼率。

現有的hevc編碼器存在諸多問題,不能滿足需求。比如手機芯片的硬編碼畫質較差,開源的軟編碼器X265速度慢且壓縮性能也不理想,在業界聞名的MSU編碼器2019比賽中,X265相比X264的碼率節省23.4%,PSNR指標排名第一的編碼器(騰訊V265)相比X264可以節省52.3%的碼率。

S265是淘系技術團隊聯合阿里雲開發的高性能H.265編碼器,具有高壓縮,高效率,適應場景廣三大特點,以2019年比賽的100個1080p視頻10個碼率點爲測試基準,S265相比X264可以節省56%的碼率,領先騰訊V265 4個百分點。目前S265已在淘寶直播、優酷視頻、阿里雲MTS、VMate、釘釘會議等業務中上線使用,經過檔位調教的S265對比開源X265可實現BDrate 20%以上的增益且編碼速度提升100%-600%;淘寶直播相對於去年,在線規模增加超過一倍,年總成本幾乎未增加,S265也起到了至關重要的作用。

S265 JCTVC class B~F sequence


Ali265 VS   X265(RC=ABR)

Ali265 VS   X264(RC=ABR)

速度檔次

BitSaving@

Same quality

SpeedRatio@

same bitrate

BitSaving@

Same   quality

SpeedRatio@

same bitrate

Veryfast

-20.2%

210%

-40.7%

55%

Medium

-18%

396%

-42.3%

66%

veryslow

-21.5%

620%

-50.4%

62%

目前淘寶直播已全量支持S265,在800kbps下實現720p的高畫質壓縮。今年雙十一,在PC直播中還上線了1080p高清直播。爲了滿足實時流量調控和低延時直播需求,S265還支持秒級碼率調控和極低延時壓縮模式。在優酷點播中,S265實現了10bit HDR,並實現非實時極致壓縮能力,爲優酷雙十一節省大量帶寬成本;

S265的優化思路,從碼率控制、編碼工具兩個方向優化編碼質量,並從快速算法及工程算法兩個方向進行速度優化,分別在編碼質量、編碼速度和編碼延時3個方面得到大幅改善。

基於感知模型的編碼質量優化


碼率控制的目標是把碼字分配到更有價值的地方, 從而在目標碼率下使得編碼失真降到最低,或者在失真固定的前提下使碼率降到最低。

在幀級別碼控中,傳統方法統計所有已編碼幀的長期複雜度, 根據單一因素算出的QP不能及時響應畫面的變化。我們基於cutree理論準確估計預分析長度中IBP幀的碼率佔比和預期編碼大小,從而在編碼前獲得更準確的量化係數。

ABR是常用一種碼率控制方法。但HM中基於???? − ????模型的碼率控制方法沒有考慮圖像塊之間的參考強度關係,編碼質量比較差。X265,X264中採用的MB-tree方法幀的QP定製不合理,碼控的準確度比較差,平均只有89%。我們根據“每1個bit被分配到任何一個CU,產生的邊際價值都相同”這樣一個原則,對MB-tree方法進行了理論創新,使得編碼精度提升到了97%,且編碼質量提升了0.65db,對應17%的碼率節省。

第1個,I幀的QP推導,X265使用了一個經驗值,沒有考慮到視頻本身的特性,這樣做很不合理,我們用預分析中低分辨率圖像的複雜度和目標碼率,經過多次迭代搜索得到準確的QP;

第2個,隨着時間的推移,歷史幀的復權重越來越高,新產生的幀權重越來越低,導致其不能很快的響應複雜度的變化,我們根據新產生的幀的參考強度計算出一個Qlamda,跟原來的Q做加權得到真正的Q,可以及時的反應新產生幀及其後續幀的複雜度;

第3個,原算法採用基於Viterb的P幀決策算法,每個幀都需要跟歷史幀比較,複雜度很高,並在判決P幀時沒有考慮QP的影響,準確率也不高。我們的算法只需要計算相鄰幀的變化率,並引入QP來作爲判決閾值,大幅降低了計算複雜度並提高了準確度。

塊級碼控分配則受時域cutree和空域AQ影響,s265在時域上越統計噪聲能量,運動強度,紋理邊緣強度,以及編碼配置等參數與信息傳遞比例之間的關係;  在空域上,則從人眼視覺系統出發,計算不同塊在感知模型中的價值,將更多碼率分配給人眼更具注意力的區域。

我們有一篇CCFA類論文介紹碼率控制方面的優化:

An Exploration of Lookahead in Frame Bit Allocation and Slice Type Decision,

10.1109/TIP. 2018.2887200 , Zhenyu Liu, Member, IEEE, LiboWang, Xiaobo, Li, and Xiangyang Ji, Member, IEEE

在編碼工具上,S265對傳統的場景切換檢測,幀類型決策,SAO,DEBLOCK, 兩遍編碼,RDOQ等編碼工具算法做了改進,並實現了長期參考幀等一批編碼工具。

智能碼控是淘系自研的碼率控制算法,普通ABR或CBR碼率控制爲了追求目標碼率,在低複雜度場景浪費了大量碼率,根據人眼主觀質量模型,當psnr高於一定閾值後,再提高質量,人眼無法察覺,只會消耗過多碼字。我們使用機器學習方法,根據17種歷史編碼信息和待編碼幀的複雜度,預估出待編碼幀在質量閾值以上的量化係數,並限定在ABR目標碼率以下,確保每個幀都能以最合適的碼率編碼。

經過淘寶直播線上驗證,可達到15%的省流,在釘釘直播中使用更是節省了52%的帶寬並降低了62%的推流側卡頓。

由於當前淘寶直播種類的豐富性,各種場景下的紋理,光照,背景,運動程度都是不一樣的。戶外主播經常走動,畫面幀變化幅度頻率高。美妝主播大多坐在室內,光照基本上比較偏亮。珠寶類主播主要是拍攝物品,畫面多靜止不動。單一的編碼器配置並不能滿足當前淘寶直播的需求,如何針對內容選擇最佳參數成爲業界研究的方向。

在此需求下,我們提出了基於不同場景的編碼參數配置策略。首先,我們通過多個深度學習與機器學習模型對數萬條各種內容的直播視頻進行了數據訓練分類,使用大規模服務器集進行最佳編碼參數搜索,自動化高效地搜索到適合當前視頻編碼的最佳編碼參數組合,在提升畫質的同時能儘可能地減少碼率消耗。並最終根據編碼參數集進行聚類分爲多個參數配置項。通過此方法,我們在淘寶直播裏面獲得了7-10%的BDrate收益,在淘拍生產中獲得了大於10%的BDrate收益。

編碼速度優化,實現全量H265


在速度方面,s265添加了快速算法與工程兩個層次上的優化。

HEVC可以將圖像塊從64x64劃分到4x4,同時塊的類型模式激增,備選的編碼模式數量是h264的數倍,塊劃分及模式決策因此成爲一個重要的瓶頸。s265從參考塊及畫面紋理獲取先驗信息, 通過層級預判,提前跳出算法以及CNN模型輔助決策三步,減少了很大比例的計算量。

我們把CU劃分決策模塊分成兩個步驟,一是紋理強度決策,通過計算CU的紋理梯度來判別平坦塊和複雜塊,如果是平坦塊就直接退出,如果是複雜塊就繼續向下劃分。第一步可以解決大部分劃分決策問題,但是對於模棱兩可的塊,則需要依靠CNN模型來輔助劃分。

我們使用了一個5層網絡的小模型把決策的準確度從72%提升到了96%;

這個成果我們在 DCC會議上有相關介紹:

Enhance the HEVC Fast Intra CU Mode Decision Based on Convolutional Neural Network by Corner Power Estimation

Liangliang Chang†, Zhenyu Liu⋆, Libo Wang ‡, Xiaobo Li ‡ , 2018 Data Compression Conference

我們知道,RDO包含兩個變量,一個是失真,另一個是碼率;

失真的計算是對原圖和重建圖像求誤差的平方和,也就會SSE。這裏首先要得到重建圖像,這是一個相對漫長的計算過程,需要經過運動估計,變換,量化,反變換,反量化,重建等步驟,計算量相當大。

我們注意到DCT變換具有能量不變性,可以在變換後的頻域中直接計算失真。這樣就可以把後面的反變換,反量化,重建,SSE等過程Bypass掉,節省大量計算。通過此方法,可將整個失真估計模塊的速度提升1倍,而bd-psnr損失只有0.023db。

RDO的另一個部分是碼率。

H265在量化後會將殘差係數分成4x4的sub-block,每個子塊包含16個係數一起編碼,編碼內容包含兩個部分,一是係數分佈的描述,包括SCF,GTR1,GTR2,對這個部分,我們建立起統計信息的線性估計模型,根據係數特徵估算其大小;另一個部分是非零係數的哥倫布碼字,每個碼字的階數k是不一致的,這裏我們假設每個碼字都採用最佳k階編碼,再根據最大碼字的分佈,給予一個拖尾係數補償。

通過這項技術,可將碼率估計模塊加速35.6%,而bd-psnr損失只有0.057db。

AZB (All zero block)是全零塊的簡稱。

通過幀內幀間預測後,失真非常小的塊再經過量化殘差係數爲0,但事先並不知道量化後係數爲全0,還是會經過複雜的RDO計算;

有沒有辦法事先判決它是全零塊?答案是可以,根據率失真理論,失真與Q的平方成正比,可以在預測後用SATD估算失真,當其小於一定閾值後就可以判別爲全零塊。

運動搜索是從參考幀尋找最佳匹配塊的過程,包含整像素搜索和分像素搜索,分像素需要做7抽頭或8抽頭插值濾波,計算量大;整像素搜索已經有比較多的快速算法,但分像素搜索一直沒有什麼好的方法。在圖中矩形的整像素周圍,分佈着60個分像素點,我們建立二元二次誤差平面方程,用9個整像素點來的預測誤差來求解方程的5個係數,再對方程求偏導,可得到最佳分像素點的位置。只需計算1個1/4像素點,避免其餘59個分像素點的計算;

講完運動搜索我們來看一下幀內預測,幀內預測利用當前塊相鄰的上面一行和左邊一列來預測當前塊的像素值;

H265有35種幀內預測模式,其中有33種角度預測,如果對這33都做計算的話代價非常大。

我們採用採用基於貝葉斯模型的快速決策方法,先計算10,18,26三個方向的代價,通過這3個方向的代價分佈決策出最優角度是橫向還是豎向,這裏就直接把計算量減少一半,再用常規的快速算法5步法對剩下的17種方向進行計算,得到最佳預測角度。

通過這個方法,我們把33個角度計算減少到9次,提高了該模塊300%的計算速度。

 

在rdo之外,我們還改進了slicetype決策算法,動態拉格朗日因子調整算法,快速deblock和sao決策等。

在工程優化方面我們也添加了多項優化, 首先是C函數優化,我們通過優化流程邏輯,拆分特殊路徑,合併分支,查表,循環優化等方法給rdoq模塊,係數解析,deblock等模塊帶來了接近一倍的提升;其次針對密集計算的函數我們simd化並優化彙編代碼的執行速度。

在移動端設備上,我們還爲S265編寫了大量armv7和arm64 彙編代碼,相比C版本有至少1倍的提速,在低端手機iphone 6S上實現了720P 30幀每秒的實時編碼。


低時延編碼,畫質不降提升互動能力


在直播中,低時延意味着溝通高效率和高體驗,降延時意義重大。在直播端到端延遲中,編碼延遲佔了很大比重。但是編碼延時與與壓縮效率是一對矛盾體,延時越低壓縮效率也隨之下降,經過我們對X264,X265的測試,在低延時(300ms)模式下,編碼效率比不限定延時降低30%,在零延時模式下,編碼效率比不限定延時降低50%以上。

爲了提升低延時和零延時模式下的編碼效率,我們採取了以下手段來優化:

  1. Cu-tree的前向短距傳播技術:s265通過對緩存長度建模,得到緩存長度-時域傳遞關係模型,可以實現很短的緩存,仍然保留長緩存帶來的質量優勢。測試結果lookahead4優化後比優化前可以節省13.5%的碼率,有效的降低了編碼延遲,結果示意圖如下。

  2. Cu-tree後向傳播技術:在零延時模式下,我們沒有前向參考幀可用,但可以借用後向幀來預測傳播代價,通過與短距傳播類似的技術來提升壓縮效率。

  3. GPB技術:在零延時模式下由於沒有後向參考幀,傳統B幀已不可用,此時可採用GPB來代替,提高壓縮效率

  4. WPP並行:幀級並行可以極大提高並行效率但會增加延時,幀內並行的wpp技術,不僅可以充分利用多核cpu的優勢,而且可做到零延時。

經過以上多種方法結合,我們S265的低延時(300ms)模式對比不限定延時,壓縮效率僅降低4%,零延時模式下壓縮效率僅降低15%;

高性能解碼器,解決客戶端兼容性問題


解碼面臨的最大問題是兼容性和性能,要解決這裏兩個問題,首先需要做硬解碼適配,我們將android,ios硬解h265的支持率提高到了95%和75%,剩下的5%和25%怎麼辦?還有web端完全不支持硬解,怎麼辦?

這就依賴於我們高性能的解碼器;

我們開發了極致優化的h.265軟解碼器,手工編寫彙編代碼2.5萬行,將解碼速度提升到ffmpeg的240%,1Mbps 720p h265在小米5手機上解碼速度>240fps,CPU佔比控制在20%以下。

許多人覺得優化只是寫寫c和彙編這麼簡單,但實際上需要對計算機的體系結構非常瞭解。

舉一個例子,這是一個block的濾波計算,經過SIMD優化後提高了3倍的速度;

但是我們通過內存對齊加載,計算合併,CacheMiss優化,數據預取,多核並行,分支優化,寄存器優化,延遲槽優化,最終達到63倍的提速;


總結


淘寶直播全面使用S265,實現了畫質不降,碼率下降超過50%,直接帶來帶寬成本的下降,同時,卡頓率、秒開數據也因此優化,卡頓vv下降了25%,秒開率絕對值提升了1%。

帶寬壓縮是編碼器一貫追求,S265除了服務淘寶直播之外,還覆蓋阿里視頻生態中直播、點播、會議各個業務,節省大量帶寬成本。

  1. 優酷長視頻點播,上線S265帶來了大量的碼率節省,目前S265生產的視頻每日播放vv超過1億次。S265還爲優酷提供10bit HDR功能支持;

  2. 阿里雲MTS轉碼,S265在速度和畫質不變的前提下,降低MTS短視頻轉碼碼率,並賦能RTC實時通信業務;

  3. 釘釘會議和羣直播,S265對比open264 scc模式可以進一步降低一半碼率;

下一代壓縮標準VVC(H.266)已經公佈,我們也已經如火如荼的投入到VVC編碼器的建設中。預期在下一年雙十一將有基於VVC的自研編碼器上線,再次降低40%的帶寬成本,屆時大家可以欣賞到更低碼率,更高質量的直播畫質。

✿  拓展閱讀

作者|淘系音視頻技術團隊

編輯|橙子君

出品|阿里巴巴新零售淘系技術

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章