開發與維運

5G時代|淘寶直播高畫質低延時技術探索

滾動.gif

前言

目前5G新基建正在邁入起航階段,5G相比目前廣泛使用的4G,它具有更高的速率,更大的容量,同時延遲更低,可靠性更高。在5G時代,視頻得益於網絡帶寬的提升,未來將成為主流的傳播媒介。越來越多的業務和應用將視頻化,直播化。大量互動的內容將通過5G以低延時的方式以視頻的形式傳輸。

5G將對視頻分辨率和清晰度提出越來越高的要求。淘寶作為一個數億級用戶的短視頻與直播平臺,業務多樣,兩端用戶分佈廣,設備和網絡情況複雜,給多媒體內容存儲和分發帶來巨大挑戰。在內容生產過程中把控好質量和成本,在內容分發和消費過程中確保用戶體驗,是當前面臨的主要問題。為了解決這個問題,我們有兩個優化目標,一是在畫質不變的前提下降碼率,二是在碼率不變的前提下提升畫面質量。

image.png

淘寶直播高清低延時系統架構

在降碼率上,我們自研高效編碼器,升級播放架構,添加智能ROI,場景編碼,智能碼控等工具,有效地降低了視頻碼率帶寬。在這些技術中,高效的編碼器能夠在質量不變的前提下顯著降低碼率;場景編碼能夠根據不同的畫面內容配置合適的編碼參數;ROI挑出畫面中人眼比較關注的區域交給編碼器重點編碼;智能碼控根據人眼主觀特性,消除因為超過人眼閾值而浪費的碼字。

在畫質上,我們使用前處理增強,去噪,超分高動態範圍等算法提高生產內容的觀感質量;在體驗優化上,通過低延時編碼技術,在降低了編碼延遲的同時損失很小的碼率,增加觀眾和主播的體驗。

圍繞著提高問題發現、問題處理效率的出發點,具備數據採集、存儲、異常事件收集、智能告警、告警數據運營、可編碼診斷平臺、故障自動化處理、變更聯動等能力。我們搭建了一套基於淘寶直播的全鏈路監控體系,從音頻,視頻,網絡這三個方面入手去解決目前淘寶直播全鏈路的現有問題以及將來可能出現的問題。不斷去優化整套高畫質低延時系統。

與此同時,我們建立了客觀質量和主觀質量評價體系,採用vmaf,psnr,ssim這一系列的指標作為客觀質量評價。針對海量無源場景,我們還基於cnn建立了無源評價模型,保證無源場景下質量評價的準確性。以這些有效的評價手段來確保“畫質不變”,並監控線上視頻質量。

端上窄帶高清

▐ S265編碼器

帶寬成本是視頻服務中非常重的基礎設施成本,如何在保證視頻質量的前提下降低成本是整個鏈路中至關重要的一環。相機採集到的視頻數字信號,數據帶寬通常都非常高,以720p 25fps為例,帶寬高達263.67Mbps,很難存儲和發送。好在視頻圖像內部,幀與幀之間存在非常高的相關性,採用壓縮技術去除相關性後,可以將帶寬降低到原來的100-400倍。視頻壓縮標準主要由ISO(國際標準組織)制定的MPEG系列和ITU(國際電信聯盟)主導的H.26X系列,每隔十年時間,視頻壓縮標準升級帶來的壓縮率會提升一倍。

h265作為比h264更新一代的視頻壓縮標準,提供了更靈活的編碼結構和劃分方式,並在在運動補償、運動矢量預測、幀內預測、變換、去塊濾波、熵編碼等方面進行了大量改進與優化,得益於這些新的編碼工具和特色技術,相同畫質下最高可以比H.264節省一半碼率,為了在不犧牲畫質的前提下節省碼率,h265成為我們首選的編碼標準。

Ali265是淘寶自研的高性能H.265編碼器,對比業界開源的X265可實現BDrate20%以上的增益,對比X264則有40%以上的增益。目前已在淘寶直播,優酷視頻,阿里郎會議,VMate,UC雲盤等業務中上線使用。

Ali265 JCTVC class B~F sequence

屏幕快照 2020-11-05 下午5.27.28.png

淘寶直播技術團隊聯合阿里雲團隊開發了s265編碼器,對比業界常用的開源軟件X265,1pass單遍編碼在相同psnr指標下:

  • veryslow速度檔次有28%碼率節省。
  • medium速度檔次有36%碼率節省。
  • crf模式與abr模式節約的碼率接近。

S265編碼從碼率控制,編碼工具兩個方向優化編碼質量,並從快速算法,工程算法兩方面引入速度優化算法。

碼率控制

為了進一步提高壓縮質量,在編碼器框架標準一定的情況下,編碼器算法優化主要的方向是找到策略選擇出最優的編碼方法和編碼參數,從而獲得更好的碼率節約。合理分配碼率是編碼器的一個重要工作,碼率控制的目標是把碼字分配到更有價值的地方,從而在目標碼率下使得編碼失真降到最低,或者在失真固定的前提下使碼率降到最低。碼控需要解決兩個經典問題,一是幀級碼控和塊級碼控根據目標碼率來分配每個GOP、幀、編碼塊的碼字數量,二是塊內編碼時以最合理的方式把這些碼字分配到每個編碼塊中。

在幀級別碼控中,傳統方法統計所有已編碼幀的長期複雜度,根據長期複雜度及當前碼率之間的比例計算出QP,這樣一來,QP對幀複雜度越來越不敏感,導致編碼質量下降或碼率過剩。特別是在計算首幀qp時,以往算法採用了一個只和當前碼率有關的經驗值。我們基於cutree理論準確估計預分析長度中ipb幀的碼率佔比和預期編碼大小,從而在編碼前獲得更準確的量化係數。

塊級碼控分配則受時域cutree和空域AQ影響。在時域上IBP幀的重要性是明顯不同的,被後續幀參考的塊,不僅影響自已本身的質量,還會影響到後續幀的質量,因此被參考更多的塊需要進行高質量編碼。cutree算法根據幀內預測代價和幀間預測代價計算信息的傳遞比例,算出當前塊對後續序列的影響程度,進而調整qp偏移。但考慮到在不同的噪聲能量,運動強度,紋理邊緣強度,以及編碼參數下,不同參考塊的調節為後續幀的節約比例是不一樣的, 所以s265通過參數訓練的方法,獲得多個因素對傳遞效率的影響,得到一個更準確的信息傳遞比遞,從而更合理地在時域上分配碼率。

image.png

cutree傳遞過程

另一方面,空域上各塊之間的重要程度也是不一樣的。人眼是視頻的最終觀察者,從人類視覺系統出發,不同的塊在人眼中的視覺冗餘不相同,比如人眼存在視覺掩蔽效果,它對顯著紋理和強邊緣附近的噪聲不敏感,將碼率更多分配向人眼敏感的平坦區域,可以得到更好的主觀質量。在編碼器中,我們通過計算塊的方差能量及邊緣能量作為塊的代價,研究不同塊能量和人眼感知程度之間的關係,估計出塊間碼率配分對人眼注意力的影響,合理分配碼率到更重要的紋理塊,提高視頻感知編碼效率。

image.png

編碼工具

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

比如在參考幀模塊,有較多的工具可以提高參考效率。首先長期參考幀和廣義B幀等幀類型可以提高預測質量,長期參考幀針對背景很少發生變化的直播場景,它有效減少信息經過多幀傳遞帶來的損失,引用長期參考幀可將平均EV提高大概0.25dB。而傳統P幀改為廣義b幀,採用雙向預測取代單向預測從而降低噪聲,光照變化,採樣誤差等預測殘差源。

image.png
image.png

在擴充了幀類型後,我們基於參考強度做IBP幀幀類型決策。然後在minigop內部,我們使用金字塔結構的參考關係,得到比傳統結構獲得更短的參考距離。最後,在管理和選擇參考幀時,我們考慮到靜止塊和運動塊的區別,靜止塊傾向於參考質量高的幀,運動塊傾向於參考時間近的幀,所以針對場景篩選出這兩種類型的參考幀能得到更好的參考質量。

速度優化

HEVC編碼器帶來了編碼效率的提升,但很多新的編碼工具都存在計算複雜度過高的問題。因此,優化編碼器速度,在高端機上能打開更多的編碼工具,搜索更大的編碼模式空間。進一步提升編碼質量。在低端機上則能降低CPU發燙和編碼卡頓的現象。

HEVC可以將圖像塊從64x64劃分到4x4,同時塊的類型模式激增,備選的編碼模式數量是h264的數倍,塊劃分及模式決策因此成為一個重要的瓶頸。

image.png

所以在RDO中,減少CU劃分層級的搜索次數,篩選出一些必要的層級是減少計算量的重要手段。首先利用時間和空間相關性,可以從參考塊獲取到一些先驗信息,再結合本塊的運動信息和紋理信息,分析預判出當前塊CU層級的最大估計層級和最小估計層級。其次,在決策過程中的提前跳出策略也可以大幅降低計算量,我們根據圖像紋理的平坦程度,或者各種模式下的rdcost對比,提前跳出當前的模式遍歷。而在一些圖像非線性的場景,我們通過CNN深度學習模型輔助決策模式。

進入決策模塊的內部,同樣存在大量複雜的計算。幀內預測存在35種模式,我們可以通過貝葉斯理論,求出最簡單的幾種模式後,估計出最佳模式最可能出現的位置,從而為幀內模式篩選過程提升一倍速度並將損失控制在0.01db。另外,幀間預測的運動搜索是從參考幀尋找最佳匹配塊的過程,它的分像素搜索需要做7抽頭或者8抽頭的插值濾波,計算量很大。我們所以可以利用整像素的信息建立二元二次誤差平面方程,估算最佳分像素點的位置,避免了分像素的完整搜索過程。

在評價模式的優劣時通常採用rdcost作為模式的代價,它需要計算編碼比特數和編碼失真。這就需要將編碼係數進行熵編碼計算碼流長度,同時還要將編碼係數變換回時域求失真。為了降低rdcost的計算量,我們採用了失真和碼率的線性估計算法,包括兩個部分,其一是量化誤差能量在頻域計算,利用IDCT變換的能量不變性,計算量化餘數的平方和估計失真,其二是建立編碼係數特徵信息和碼流大小之間的線性關係,直接從係數特徵信息估計出熵編碼的大小。通過這個方法可以跳模式代價計算的熵編碼過程以及,反變換,反量化,重建,SSE等過程。節約了大量的計算。

image.png

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

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

s265經過快速算法與工程兩個層次上的優化,我們為HEVC編碼帶來了明顯的性能提升。從而在低端iphone上實現720P 30幀每秒的實時編碼。

▐ 智能碼控

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

image.png

image.png

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

▐ 場景編碼

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

image.png

在此需求下,我們提出了基於不同場景的編碼參數配置策略。首先,我們通過多個深度學習與機器學習模型對數萬條各種內容的直播視頻進行了數據訓練分類,包含兩個大的特徵維度,分別是語義特徵和信號特徵。語義特徵包含:主播分級,商品特徵,環境特徵,聲音特徵,時域空域RoI。信號特徵包含:運動特徵,紋理特徵,噪聲特徵,亮度特徵。通過對不同特徵種類的視頻集,我們單獨使用大規模服務器集進行最佳編碼參數搜索,自動化高效地搜索到適合當前視頻編碼的最佳編碼參數組合,在提升畫質的同時能儘可能地減少碼率消耗。並最終根據編碼參數集進行聚類分為多個參數配置項。

在主播需要推流的時候,首先進行標準的編碼參數配置進行推流。收集一定的數據之後,我們將得到的視頻語義特徵和信號特徵送入自適應決策引擎,通過裡面的深度神經網絡進行視頻分類,決策出當前視頻應該下發的編碼參數配置,然後我們將新的參數配置重新送入編碼器進行新的推流,以此優化使主播獲得當前情況下最優質的視頻編碼。通過此方法,我們在淘寶直播裡面獲得了7-10%的BDrate收益。在淘拍場景下獲得了40%的BDrate收益。

▐ 低延時編碼

在直播中,低時延意味著高效率和優質體驗。試想以下場景:

  • 場景一:當主播展示下一個商品後,10秒才收到上一個的商品的提問。
  • 場景二:釘釘課堂直播中,老師提問後遲遲得不到學生的反饋,浪費部分時間。

這些場景給用戶帶來糟糕的體驗,使得直播賣貨、直播課堂效率低下。當5G普及,會帶來更低的時延,帶來更好的體驗,但是當下還是4G為主,降低時延有很有必要。

端到端延遲主要分佈在採集、編碼、傳輸、轉碼、分發、播放等各個部分,這部分主要優化編碼延遲。編碼延遲又分為多線程導致的延遲、緩存幀數延遲、B幀數帶來的延遲等。其中編碼延遲最大的一部分來源於編碼器緩存,通過分析編碼前的緩存圖像,可以大大的增加編碼效率。如果粗暴的降低編碼器緩存,可以實現較低的延遲,但是質量損失比較高。所有產生了一種想法,能不能用較少的緩存去模擬較長的緩存的效果?通過分析cutree的原理,結合統計lookahead長度跟傳遞代價的關係,可以發現緩存長度跟傳遞代價很強的線性關係,如下圖所示:

image.png

根據場景可以用不同的預測模型變種,最終實現用較短的lookahead模擬較長的lookahead的效果,測試在直播素材中lookahead4優化後比優化前可以節省13.5%的碼率,有效的降低了編碼延遲,結果示意圖如下。

image.png

同時,在之前的測試中發現,該優化對場景不敏感,運動簡單場景和運動複雜場景提升同樣有效。

過去一年,我們採用前述優化,將265碼流在畫質不變的前提下,將碼率從1.4M下降到800K。

▐ 畫質增強

在淘寶直播的場景中,大主播有自己的專業設備與團隊,直播出來的視頻與音頻都是比較高質量的。但是針對中小主播,用戶的行為不可控。因此產生的結果就是很多中小主播產生的視頻質量比較低,收穫的觀眾數量也比較少。針對這種情況,我們選取了用戶習慣產生最嚴重的幾種情況,對這一類主播進行了畫質增加的,顯著提升了用戶的直播體驗。

image.png

下面介紹一些已經有的應用效果。

去抖:

現代編碼器能夠較好的處理平坦紋理和平移運動,前者通過幀內預測來消除空間相關性,後者通過運動搜索來消除幀與幀之間的時間相關性。但是在視頻採集過程中,由於攝像機抖動產生的視頻幀抖動,編碼器不能夠很好的處理;由於抖動劇烈的一般是中小主播,且攜帶的設備比較老舊,我們考慮從採集源來改善視頻幀,最終在這裡我們採用相機路徑平滑算法來去除視頻幀中的抖動。

去噪:

視頻直播在燈光不太理想的情況下,攝像頭採集的畫面會產生明顯的飛蚊噪聲和高斯白噪聲,嚴重影響用戶對視頻內容的感受,這種情況下,有必要對視頻進行降噪。

現有的很多優秀的雲端去噪算法,其實對於移動端來說採用深度學習的方法就不合適。雖然現在有很多移動端深度學習框架,但是畢竟還沒有跟機器是配得非常好,針對很多中低端的手機其實跑不動這種生成模型的。基於此,我們在移動端主要是考慮效率,那麼我們就採了基於維納濾波的時域降噪算法方式來實現,進行訓練和優化。

image.png

超分:

針對一些小微主播,錄播設備只能支持360p,最終觀眾端看到的視頻會通過插值等傳統方法進行放大為720p。這樣獲得的視頻幀難免產生模糊效果,影響直播觀感。得益於深度學習在移動端的優化,我們在部分高端機實現了移動端視頻幀的實時超分。

在眾多的網絡架構中,我們最終選擇了性能最佳的FSRCN方案,網絡的架構圖如下所示。在訓練過程中,我們精選了1W+淘寶個品類的高清大圖,結合業界的高清開源數據集,利用樣本增強技術,訓練了5000輪左右的模型達到收斂效果。此外,為了消除圖像分塊帶來的邊界效應,我們做了圖像重疊合並的操作,在增加部分計算時間的情況下帶來了更好的超分效果。

為了在手機端實時運行,避免佔用過多資源,我們優化反捲積計算,並針對人眼視覺特性,對強紋理和靜止區域部分像素進行超分,以此大幅提高移動端的效率。

image.png

▐ 4K實戰

淘寶直播與中國電信浙江公司合作了全國首場5G電商直播,利用5g直播下的超高清畫質和超低時延給消費者更好的線上購物體驗。消費者除了可以看到直播間的整體情況,還能夠遠程自主對局部進行放大,非常清晰地看到商品的細節信息。讓線上購物具有逼真的線下現場購物感受。

未來憑藉5G通信技術與極致的編碼優化和畫質優化的結合,能給直播帶貨體系帶來深層次的改變。4K,VR,AR等技術的成熟將會給直播場景帶來更多產品和更好的體驗,帶來更多新型的應用場景,沉浸式體驗和全畫幅體驗使用互動感和真實感更強。通過技術的賦能,淘寶直播間的可看性越來越強,淘寶直播所能覆蓋的場景、所能覆蓋的領域也會越來越廣。

低延遲傳輸

▐ 低延遲播放器

常規播放器的延遲分析。目前基於TCP的直播傳輸技術主要有 HLS和RTMP/HTTP-FLV兩個協議,其中HLS直播的延遲一般在10秒以上,HTTP-FLV直播的延遲一般在6到9秒,從推流、cdn分發到播放的整個直播鏈路看,延遲的大頭來自播放端。在播放器中,幾乎每個線程都有自己的緩衝區,這些緩衝區的作用是平滑整個播放鏈路的抖動,它們的大小決定了播放過程中的播放延遲和播放的流暢性。VideoBuffer和AudioBuffer用來存放待解碼的音視頻 packet,該緩衝區是為了平滑網絡的抖動,推流、CDN傳輸和播放下載的抖動都會堆積到播放端,這是常規播放器延遲最大的一個產生點,為提升直播的整體流暢度,緩衝區延遲一般在5秒以上。

image.png

基於TCP的媒體傳輸並不適用於低延遲直播場景,主要原因如下:

  • 重傳慢,TCP追求的是完全可靠性和順序性,丟包後會持續重傳直至該包被確認,否則後續包也不會被上層接收,且重傳超時時間一般200ms,會造成接收側幀抖動。
  • 上層無法針對優化,TCP擁塞控制和 Qos 策略在操作系統內核層實現。
  • 擁塞判斷不準確,基於丟包的擁塞控制跟實際網絡情況不符,丟包並不等於擁塞,也會造成發送鏈路 bufferbloat,鏈路RTT增大。

我們的低延遲傳輸SDK是基於WebRTC打造的,使用了WebRTC的幾個核心模塊,包括 RTP/RTCP、FEC、NACK、NetEQ、JitterBuffer、音視頻同步、擁塞控制等。NetEQ和JitterBuffer分別是音頻和視頻的網絡抖動緩存區,這是傳輸SDK延遲最大的一個產生點。RTP over UDP能夠更好地對抗公網的丟包,結合自適應緩存和Qos優化,確保直播整體流暢度的條件下,我們的JitterBuffer的緩衝區延遲能夠控制在700毫秒以下,直播觀看延遲在1秒左右。

播放器對低延遲傳輸SDK的接入適配。我們對低延遲傳輸模塊封裝了FFmpeg的擴展demuxer,將支持低延時傳輸協議的demuxer註冊到FFmpeg,播放器通過FFmpeg打開網絡連接讀取數據,這種接入方案基本不影響播放器原有邏輯,對播放器改動較小,主要改動點如下:

緩衝區大小控制。使用低延遲傳輸協議拉流時,網絡的抖動緩衝區是底層傳輸模塊的JitterBuffer,播放器層的JitterBuffer的緩存應設置為0秒,否則會引入多餘的延遲。

卡頓統計修改。一般播放器根據緩衝區水位大小判斷卡頓事件,當緩衝區為空或持續空一段時間,這會導播放畫面卡頓,同時觸發卡頓事件,播放器的JitterBuffer被低延遲傳輸SDK接管後,卡頓事件也應該由低延遲傳輸SDK觸發。

音頻解碼流程。從NetEQ獲取的音頻已經是PCM數據了,播放器讀取的音頻數據可直接渲染,如果音頻使用硬解,可能會出現解碼兼容問題,現象是聽不到聲音,使用FFmpeg軟解也是可以兼容的。

▐ 低延遲服務器

低延遲傳輸是一個綜合性的問題,要從整體入手,不僅要從設計上考慮,還需要客戶端,服務器,數據系統緊密配合。從傳輸協議設計上採用rtp/rtcp方案。基於udp半可靠傳輸,技術成熟,更加適合音視頻場景。難點在於既要降卡頓,也要降延遲。我們使用的整體算法策略如下:

image.png

  • 擁塞控制

擁塞控制gcc&bbr算法針對直播場景深度優化,同時兼顧秒開和延遲。

  • 分層丟幀

基於B幀的SVC算法和丟gop策略在網絡擁塞時保證快速降低碼率,解決擁塞。

  • 重傳控制

重傳控制既要抑制重傳風暴,也要保障快速重傳。

  • 平滑發送優化

平滑發送策略防止網絡突發,平滑流量。同時針對秒開場景深度定製。重新設計發送機制和算法,發送性能大大提高。

  • 秒開優化

服務器和端配合的多種秒開策略,保證極速開播。淘寶直播大盤平均秒開率94%以上。

  • 信令優化

從信令設計上採用rtcp app私有協議,和音視頻傳輸使用一個socket連接。建聯協議更加精簡,保障 1RTT 快速給出媒體數據。

除此之外還進行了大量策略到算法上的改進和優化。上面整體策略,基於數據驅動,針對場景不斷迭代優化。

▐ 端到端全鏈路分段統計

我們設計的端到端延遲分段統計系統,既能統計單次播放的延遲,也能統計每個階段延遲。不依賴ntp時間,適合超大規模網絡。通過分析不同平臺推流端,服務器,播放器各個階段的延遲情況,大盤展示出來,可以針對專項做優化。

image.png

面向未來

伴隨著5G網絡的提速,主播側到用戶側的延時將會越來越短;移動端本身的性能提升,各種畫質增強,圖像渲染技術也會慢慢硬件化。移動端的深度學習模型也逐漸變得輕量化。這使得學術界各種越來越先進的創新也得以工程化。近期淘寶直播推出的智能虛擬主播也圈起了一波粉。將來,越來越有趣的玩法也會逐漸推出,使淘寶直播不再僅僅只限於“賣貨“。更可能有更多有趣的玩法,例如:主播觀眾實時遊戲互動,虛擬主播完全代替真人直播,觀眾沉浸式地通過VR或者AR進行直播購物。這些都會慢慢變成現實。淘寶直播的技術將來會為用戶帶來越來越豐富的直播購物體驗。

關注「淘系技術」微信公眾號,一個有溫度有內容的技術社區~

image.png

Leave a Reply

Your email address will not be published. Required fields are marked *