原創 淘系音視訊技術 淘系技術 2020-12-08
帶寬是直播營運中最大的成本,根據前瞻網估算全行業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 | Same quality | |
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%以上。
為了提升低延時和零延時模式下的編碼效率,我們采取了以下手段來優化:
- Cu-tree的前向短距傳播技術:s265通過對緩存長度模組化,得到緩存長度-時域傳遞關系模型,可以實作很短的緩存,仍然保留長緩存帶來的品質優勢。測試結果lookahead4優化後比優化前可以節省13.5%的碼率,有效的降低了編碼延遲,結果示意圖如下。
成本更低、更優觀看體驗——自研S265編解碼器解析 - Cu-tree後向傳播技術:在零延時模式下,我們沒有前向參考幀可用,但可以借用後向幀來預測傳播代價,通過與短距傳播類似的技術來提升壓縮效率。
- GPB技術:在零延時模式下由于沒有後向參考幀,傳統B幀已不可用,此時可采用GPB來代替,提高壓縮效率
- 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除了服務淘寶直播之外,還覆寫阿裡視訊生态中直播、點播、會議各個業務,節省大量帶寬成本。
- 優酷長視訊點播,上線S265帶來了大量的碼率節省,目前S265生産的視訊每日播放vv超過1億次。S265還為優酷提供10bit HDR功能支援;
- 阿裡雲MTS轉碼,S265在速度和畫質不變的前提下,降低MTS短視訊轉碼碼率,并賦能RTC實時通信業務;
- 釘釘會議和群直播,S265對比open264 scc模式可以進一步降低一半碼率;
下一代壓縮标準VVC(H.266)已經公布,我們也已經如火如荼的投入到VVC編碼器的建設中。預期在下一年雙十一将有基于VVC的自研編碼器上線,再次降低40%的帶寬成本,屆時大家可以欣賞到更低碼率,更高品質的直播畫質。