淘寶直播技術(shù)干貨:高清、低延時(shí)的實(shí)時(shí)視頻直播技術(shù)解密
Posted on 2020-11-26 15:41 Jack Jiang 閱讀(292) 評論(0) 編輯 收藏本文由淘寶直播音視頻算法團(tuán)隊(duì)原創(chuàng)分享,原題“5G時(shí)代|淘寶直播高畫質(zhì)低延時(shí)技術(shù)探索”,收錄時(shí)有改動(dòng)。
1、引言
目前,5G技術(shù)應(yīng)用正在逐步推進(jìn),相比目前廣泛使用的4G, 它具有更高的速率,更大的容量,同時(shí)延遲更低, 可靠性更高。
在5G時(shí)代,得益于網(wǎng)絡(luò)帶寬的提升,視頻未來將成為主流的傳播媒介。越來越多的業(yè)務(wù)和應(yīng)用將視頻化、直播化。 大量互動(dòng)的內(nèi)容將通過5G以低延時(shí)的方式以視頻的形式傳輸。5G將對視頻分辨率和清晰度提出越來越高的要求。
淘寶作為一個(gè)數(shù)億級用戶的短視頻與直播平臺,業(yè)務(wù)多樣,兩端用戶分布廣,設(shè)備和網(wǎng)絡(luò)情況復(fù)雜,給多媒體內(nèi)容存儲和分發(fā)帶來巨大挑戰(zhàn)。
本文由淘寶直播音視頻算法團(tuán)隊(duì)分享,對實(shí)現(xiàn)高清、低延時(shí)實(shí)時(shí)視頻直播技術(shù)進(jìn)行了較深入的總結(jié),希望分享給大家。
(本文同步發(fā)布于:http://www.52im.net/thread-3220-1-1.html)
2、入門文章
如果你對視頻直播技術(shù)沒什么了解,可以先讀以下入門文章:
《移動(dòng)端實(shí)時(shí)音視頻直播技術(shù)詳解(一):開篇》
《移動(dòng)端實(shí)時(shí)音視頻直播技術(shù)詳解(二):采集》
《移動(dòng)端實(shí)時(shí)音視頻直播技術(shù)詳解(三):處理》
《移動(dòng)端實(shí)時(shí)音視頻直播技術(shù)詳解(四):編碼和封裝》
3、正文概述
面對實(shí)時(shí)視頻直播技術(shù)的的高需求,當(dāng)前面臨的主要問題有:
- 1)需要在內(nèi)容生產(chǎn)過程中把控好質(zhì)量和成本;
- 2)需要在內(nèi)容分發(fā)和消費(fèi)過程中確保用戶體驗(yàn)。

為了解決這個(gè)問題, 我們有兩個(gè)優(yōu)化目標(biāo):
- 1)一是在畫質(zhì)不變的前提下降碼率;
- 2)二是在碼率不變的前提下提升畫面質(zhì)量。
在降碼率上,我們通過以下手段有效地降低了視頻碼率帶寬:
- 1)自研高效編碼器;
- 2)升級播放架構(gòu);
- 3)添加智能ROI;
- 4)場景編碼;
- 5)智能碼控等工具。
在這些技術(shù)中:
- 1)高效的編碼器能夠在質(zhì)量不變的前提下顯著降低碼率;
- 2)場景編碼能夠根據(jù)不同的畫面內(nèi)容配置合適的編碼參數(shù);
- 3)ROI挑出畫面中人眼比較關(guān)注的區(qū)域交給編碼器重點(diǎn)編碼;
- 4)智能碼控根據(jù)人眼主觀特性,消除因?yàn)槌^人眼閾值而浪費(fèi)的碼字。
在畫質(zhì)上,我們使用了以下算法提高生產(chǎn)內(nèi)容的觀感質(zhì)量:
- 1)前處理增強(qiáng);
- 2)去噪;
- 3)超分高動(dòng)態(tài)范圍等。
在體驗(yàn)優(yōu)化上:通過低延時(shí)編碼技術(shù),在降低了編碼延遲的同時(shí)損失很小的碼率,增加觀眾和主播的體驗(yàn)。
圍繞著提高問題發(fā)現(xiàn)、問題處理效率的出發(fā)點(diǎn),具備數(shù)據(jù)采集、存儲、異常事件收集、智能告警、告警數(shù)據(jù)運(yùn)營、可編碼診斷平臺、故障自動(dòng)化處理、變更聯(lián)動(dòng)等能力。我們搭建了一套基于淘寶直播的全鏈路監(jiān)控體系,從音頻,視頻,網(wǎng)絡(luò)這三個(gè)方面入手去解決目前淘寶直播全鏈路的現(xiàn)有問題以及將來可能出現(xiàn)的問題。不斷去優(yōu)化整套高畫質(zhì)低延時(shí)系統(tǒng)。
與此同時(shí),我們建立了客觀質(zhì)量和主觀質(zhì)量評價(jià)體系,采用vmaf、psnr、ssim這一系列的指標(biāo)作為客觀質(zhì)量評價(jià)。針對海量無源場景,我們還基于cnn建立了無源評價(jià)模型,保證無源場景下質(zhì)量評價(jià)的準(zhǔn)確性。以這些有效的評價(jià)手段來確保“畫質(zhì)不變”,并監(jiān)控線上視頻質(zhì)量。
下面的章節(jié)將針對上述的主要技術(shù)實(shí)踐,進(jìn)行深入的分享。
4、窄帶高清實(shí)踐
4.1 自研的S265編碼器
帶寬成本是視頻服務(wù)中非常重的基礎(chǔ)設(shè)施成本,如何在保證視頻質(zhì)量的前提下降低成本是整個(gè)鏈路中至關(guān)重要的一環(huán)。
相機(jī)采集到的視頻數(shù)字信號,數(shù)據(jù)帶寬通常都非常高:以720p 25fps為例,帶寬高達(dá)263.67Mbps,很難存儲和發(fā)送。
好在視頻圖像內(nèi)部,幀與幀之間存在非常高的相關(guān)性,采用視頻壓縮技術(shù)去除相關(guān)性后,可以將帶寬降低到原來的100-400倍。(有關(guān)視頻編碼技術(shù),這里有篇更通俗的:《零基礎(chǔ),史上最通俗視頻編碼技術(shù)入門》,建議入門必讀)
視頻壓縮標(biāo)準(zhǔn)主要由ISO(國際標(biāo)準(zhǔn)組織)制定的MPEG系列和ITU(國際電信聯(lián)盟)主導(dǎo)的H.26X系列, 每隔十年時(shí)間,視頻壓縮標(biāo)準(zhǔn)升級帶來的壓縮率會提升一倍。
h265作為比h264更新一代的視頻壓縮標(biāo)準(zhǔn),提供了更靈活的編碼結(jié)構(gòu)和劃分方式,并在在運(yùn)動(dòng)補(bǔ)償、運(yùn)動(dòng)矢量預(yù)測、幀內(nèi)預(yù)測、變換、去塊濾波、熵編碼等方面進(jìn)行了大量改進(jìn)與優(yōu)化, 得益于這些新的編碼工具和特色技術(shù),相同畫質(zhì)下最高可以比H.264節(jié)省一半碼率, 為了在不犧牲畫質(zhì)的前提下節(jié)省碼率,h265成為我們首選的編碼標(biāo)準(zhǔn)。
Ali265是淘寶自研的高性能H.265編碼器,對比業(yè)界開源的X265可實(shí)現(xiàn)BDrate20%以上的增益,對比X264則有40%以上的增益。目前已在淘寶直播,優(yōu)酷視頻,阿里郎會議、VMate、UC云盤等業(yè)務(wù)中上線使用。

淘寶直播技術(shù)團(tuán)隊(duì)聯(lián)合阿里云團(tuán)開發(fā)了s265編碼器,對比業(yè)界常用的開源軟件X265,1pass單遍編碼在相同psnr指標(biāo)下:
- 1)veryslow速度檔次有28%碼率節(jié)省;
- 2)medium速度檔次有36%碼率節(jié)省;
- 3)crf模式與abr模式節(jié)約的碼率接近。
S265編碼從碼率控制、編碼工具兩個(gè)方向優(yōu)化編碼質(zhì)量,并從快速算法、工程算法兩方面引入速度優(yōu)化算法。下節(jié)將詳細(xì)分享。
4.2 S265編碼器的主要優(yōu)化方法
4.2.1)碼率控制:
為了進(jìn)一步提高壓縮質(zhì)量,在編碼器框架標(biāo)準(zhǔn)一定的情況下,編碼器算法優(yōu)化主要的方向是找到策略選擇出最優(yōu)的編碼方法和編碼參數(shù),從而獲得更好的碼率節(jié)約。
合理分配碼率是編碼器的一個(gè)重要工作, 碼率控制的目標(biāo)是把碼字分配到更有價(jià)值的地方,從而在目標(biāo)碼率下使得編碼失真降到最低,或者在失真固定的前提下使碼率降到最低。
碼控需要解決兩個(gè)經(jīng)典問題:
- 1)一是幀級碼控和塊級碼控根據(jù)目標(biāo)碼率來分配每個(gè)GOP、幀、編碼塊的碼字?jǐn)?shù)量;
- 2)二是塊內(nèi)編碼時(shí)以最合理的方式把這些碼字分配到每個(gè)編碼塊中。
在幀級別碼控中,傳統(tǒng)方法統(tǒng)計(jì)所有已編碼幀的長期復(fù)雜度, 根據(jù)長期復(fù)雜度及當(dāng)前碼率之間的比例計(jì)算出QP。
這樣一來,QP對幀復(fù)雜度越來越不敏感,導(dǎo)致編碼質(zhì)量下降或碼率過剩。 特別是在計(jì)算首幀qp時(shí),以往算法采用了一個(gè)只和當(dāng)前碼率有關(guān)的經(jīng)驗(yàn)值。 我們基于cutree理論準(zhǔn)確估計(jì)預(yù)分析長度中ipb幀的碼率占比和預(yù)期編碼大小,從而在編碼前獲得更準(zhǔn)確的量化系數(shù)。
塊級碼控分配則受時(shí)域cutree和空域AQ影響。在時(shí)域上IBP幀的重要性是明顯不同的,被后續(xù)幀參考的塊,不僅影響自已本身的質(zhì)量,還會影響到后續(xù)幀的質(zhì)量, 因此被參考更多的塊需要進(jìn)行高質(zhì)量編碼。
cutree算法根據(jù)幀內(nèi)預(yù)測代價(jià)和幀間預(yù)測代價(jià)計(jì)算信息的傳遞比例, 算出當(dāng)前塊對后續(xù)序列的影響程度,進(jìn)而調(diào)整qp偏移。 但考慮到在不同的噪聲能量,運(yùn)動(dòng)強(qiáng)度,紋理邊緣強(qiáng)度,以及編碼參數(shù)下,不同參考塊的調(diào)節(jié)為后續(xù)幀的節(jié)約比例是不一樣的, 所以s265通過參數(shù)訓(xùn)練的方法,獲得多個(gè)因素對傳遞效率的影響,得到一個(gè)更準(zhǔn)確的信息傳遞比遞,從而更合理地在時(shí)域上分配碼率。

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

4.2.2)編碼工具:
在編碼工具上,S265對傳統(tǒng)的場景切換檢測、幀類型決策、SAO、DEBLOCK、兩遍編碼、RDOQ等編碼工具算法做了改進(jìn),并實(shí)現(xiàn)一批編碼工具。
比如:在參考幀模塊, 有較多的工具可以提高參考效率。
首先:長期參考幀和廣義B幀等幀類型可以提高預(yù)測質(zhì)量,長期參考幀針對背景很少發(fā)生變化的直播場景,它有效減少信息經(jīng)過多幀傳遞帶來的損失,引用長期參考幀可將平均EV提高大概0.25dB。 而傳統(tǒng)P幀改為廣義b幀, 采用雙向預(yù)測取代單向預(yù)測從而降低噪聲,光照變化,采樣誤差等預(yù)測殘差源。


在擴(kuò)充了幀類型后,我們基于參考強(qiáng)度做IBP幀幀類型決策。
然后:在minigop內(nèi)部,我們使用金字塔結(jié)構(gòu)的參考關(guān)系, 得到比傳統(tǒng)結(jié)構(gòu)獲得更短的參考距離。
最后:在管理和選擇參考幀時(shí),我們考慮到靜止塊和運(yùn)動(dòng)塊的區(qū)別,靜止塊傾向于參考質(zhì)量高的幀,運(yùn)動(dòng)塊傾向于參考時(shí)間近的幀, 所以針對場景篩選出這兩種類型的參考幀能得到更好的參考質(zhì)量。
4.2.3)速度優(yōu)化:
HEVC編碼器帶來了編碼效率的提升,但很多新的編碼工具都存在計(jì)算復(fù)雜度過高的問題。
因此:優(yōu)化編碼器速度,在高端機(jī)上能打開更多的編碼工具,搜索更大的編碼模式空間。進(jìn)一步提升編碼質(zhì)量,在低端機(jī)上則能降低CPU發(fā)燙和編碼卡頓的現(xiàn)象。
HEVC可以將圖像塊從64x64劃分到4x4,同時(shí)塊的類型模式激增,備選的編碼模式數(shù)量是h264的數(shù)倍,塊劃分及模式?jīng)Q策因此成為一個(gè)重要的瓶頸。

所以:在RDO中,減少CU劃分層級的搜索次數(shù),篩選出一些必要的層級是減少計(jì)算量的重要手段。
首先:利用時(shí)間和空間相關(guān)性,可以從參考塊獲取到一些先驗(yàn)信息, 再結(jié)合本塊的運(yùn)動(dòng)信息和紋理信息, 分析預(yù)判出當(dāng)前塊CU層級的最大估計(jì)層級和最小估計(jì)層級。
其次:在決策過程中的提前跳出策略也可以大幅降低計(jì)算量, 我們根據(jù)圖像紋理的平坦程度, 或者各種模式下的rdcost對比,提前跳出當(dāng)前的模式遍歷。而在一些圖像非線性的場景,我們通過CNN深度學(xué)習(xí)模型輔助決策模式。
進(jìn)入決策模塊的內(nèi)部:同樣存在大量復(fù)雜的計(jì)算。
幀內(nèi)預(yù)測存在35種模式,我們可以通過貝葉斯理論,求出最簡單的幾種模式后,估計(jì)出最佳模式最可能出現(xiàn)的位置,從而為幀內(nèi)模式篩選過程提升一倍速度并將損失控制在0.01db。
另外,幀間預(yù)測的運(yùn)動(dòng)搜索是從參考幀尋找最佳匹配塊的過程,它的分像素搜索需要做7抽頭或者8抽頭的插值濾波,計(jì)算量很大。我們所以可以利用整像素的信息建立二元二次誤差平面方程,估算最佳分像素點(diǎn)的位置,避免了分像素的完整搜索過程。
在評價(jià)模式的優(yōu)劣時(shí)通常采用rdcost作為模式的代價(jià),它需要計(jì)算編碼比特?cái)?shù)和編碼失真。
這就需要將編碼系數(shù)進(jìn)行熵編碼計(jì)算碼流長度,同時(shí)還要將編碼系數(shù)變換回時(shí)域求失真。
為了降低rdcost的計(jì)算量, 我們采用了失真和碼率的線性估計(jì)算法,包括兩個(gè)部分:
- 1)其一是量化誤差能量在頻域計(jì)算,利用IDCT變換的能量不變性,計(jì)算量化余數(shù)的平方和估計(jì)失真;
- 2)其二是建立編碼系數(shù)特征信息和碼流大小之間的線性關(guān)系,直接從系數(shù)特征信息估計(jì)出熵編碼的大小。
通過這個(gè)方法可以跳模式代價(jià)計(jì)算的熵編碼過程以及,反變換,反量化,重建,SSE等過程。 節(jié)約了大量的計(jì)算。

在rdo之外:我們還改進(jìn)了slicetype決策算法,動(dòng)態(tài)拉格朗日因子調(diào)整算法,快速deblock和sao決策等。
在工程優(yōu)化方面我們也添加了多項(xiàng)優(yōu)化:
- 1)C函數(shù)優(yōu)化,通過優(yōu)化流程邏輯、拆分特殊路徑、合并分支、查表、循環(huán)優(yōu)化等給rdoq模塊、系數(shù)解析、deblock等模塊帶來近一倍的提升;
- 2)針對密集計(jì)算的函數(shù)我們simd化并優(yōu)化匯編代碼的執(zhí)行速度。
s265經(jīng)過快速算法與工程兩個(gè)層次上的優(yōu)化,我們?yōu)镠EVC編碼帶來了明顯的性能提升。從而在低端iphone上實(shí)現(xiàn)720P 30幀每秒的實(shí)時(shí)編碼。
4.3 智能碼控
智能碼控是淘寶自研的碼率控制算法。
普通ABR或CBR碼率控制為了追求目標(biāo)碼率,在低復(fù)雜度場景浪費(fèi)了大量碼率,根據(jù)人眼主觀質(zhì)量模型,當(dāng)psnr高于一定閾值后再提高質(zhì)量人眼無法察覺只會消耗過多碼字。
我們使用機(jī)器學(xué)習(xí)方法,根據(jù)17種歷史編碼信息和待編碼幀的復(fù)雜度,預(yù)估出待編碼幀在質(zhì)量閾值以上的量化系數(shù),并限定在ABR目標(biāo)碼率以下,確保每個(gè)幀都能以最合適的碼率編碼。


經(jīng)過淘寶直播線上驗(yàn)證,可達(dá)到15%的省流,在釘釘直播中使用更是節(jié)省了52%的帶寬并降低了62%的推流側(cè)卡頓。
4.4 場景編碼
由于當(dāng)前淘寶直播種類的豐富性,各種場景下的紋理、光照、背景、運(yùn)動(dòng)程度都是不一樣的。
比如:
- 1)戶外主播經(jīng)常走動(dòng),畫面幀變化幅度頻率高;
- 2)美妝主播大多坐在室內(nèi),光照基本上比較偏亮;
- 3)珠寶類主播主要是拍攝物品,畫面多靜止不動(dòng)。
面對形形色色的直播場景,單一的編碼器配置并不能滿足當(dāng)前淘寶直播的需求,開啟或關(guān)閉某些編碼工具對視頻編碼效果影響不一致,如何針對內(nèi)容選擇最佳參數(shù)成為業(yè)界研究的方向。

在此需求下,我們提出了基于不同場景的編碼參數(shù)配置策略。
首先:我們通過多個(gè)深度學(xué)習(xí)與機(jī)器學(xué)習(xí)模型對數(shù)萬條各種內(nèi)容的直播視頻進(jìn)行了數(shù)據(jù)訓(xùn)練分類。
包含兩個(gè)大的特征維度,分別是:
- 1)語義特征;
- 2)信號特征。
語義特征包含:
- 1)主播分級;
- 2)商品特征;
- 3)環(huán)境特征;
- 4)聲音特征;
- 5)時(shí)域空域RoI。
信號特征包含:
- 1)運(yùn)動(dòng)特征;
- 2)紋理特征;
- 3)噪聲特征;
- 4)亮度特征。
通過對不同特征種類的視頻集,我們單獨(dú)使用大規(guī)模服務(wù)器集進(jìn)行最佳編碼參數(shù)搜索,自動(dòng)化高效地搜索到適合當(dāng)前視頻編碼的最佳編碼參數(shù)組合,在提升畫質(zhì)的同時(shí)能盡可能地減少碼率消耗。并最終根據(jù)編碼參數(shù)集進(jìn)行聚類分為多個(gè)參數(shù)配置項(xiàng)。
在主播需要推流的時(shí)候,首先進(jìn)行標(biāo)準(zhǔn)的編碼參數(shù)配置進(jìn)行推流。收集一定的數(shù)據(jù)之后,我們將得到的視頻語義特征和信號特征送入自適應(yīng)決策引擎,通過里面的深度神經(jīng)網(wǎng)絡(luò)進(jìn)行視頻分類,決策出當(dāng)前視頻應(yīng)該下發(fā)的編碼參數(shù)配置,然后我們將新的參數(shù)配置重新送入編碼器進(jìn)行新的推流,以此優(yōu)化使主播獲得當(dāng)前情況下最優(yōu)質(zhì)的視頻編碼。
通過此方法,我們在淘寶直播里面獲得了7-10%的BDrate收益,在淘拍場景下獲得了40%的BDrate收益。
4.5 低延時(shí)編碼
在直播中,低時(shí)延意味著高效率和優(yōu)質(zhì)體驗(yàn)。
試想以下場景:
- 1)場景一:當(dāng)主播展示下一個(gè)商品后,10秒才收到上一個(gè)的商品的提問;
- 2)場景二:釘釘課堂直播中,老師提問后遲遲得不到學(xué)生的反饋,浪費(fèi)部分時(shí)間。
這些場景給用戶帶來糟糕的體驗(yàn),使得直播賣貨、直播課堂效率低下。
當(dāng)5G普及,會帶來更低的時(shí)延,帶來更好的體驗(yàn),但是當(dāng)下還是4G為主,降低時(shí)延有很有必要。
端到端延遲主要分布在:
- 1)采集;
- 2)編碼;
- 3)傳輸;
- 4)轉(zhuǎn)碼;
- 5)分發(fā);
- 6)播放。
這部分主要優(yōu)化編碼延遲。
編碼延遲又分為:
- 1)多線程導(dǎo)致的延遲;
- 2)緩存幀數(shù)延遲;
- 3)B幀數(shù)帶來的延遲等。
其中編碼延遲最大的一部分來源于編碼器緩存,通過分析編碼前的緩存圖像,可以大大的增加編碼效率。如果粗暴的降低編碼器緩存,可以實(shí)現(xiàn)較低的延遲,但是質(zhì)量損失比較高。
所有產(chǎn)生了一種想法,能不能用較少的緩存去模擬較長的緩存的效果?
通過分析cutree的原理,結(jié)合統(tǒng)計(jì)lookahead長度跟傳遞代價(jià)的關(guān)系,可以發(fā)現(xiàn)緩存長度跟傳遞代價(jià)很強(qiáng)的線性關(guān)系。
如下圖所示:

根據(jù)場景可以用不同的預(yù)測模型變種,最終實(shí)現(xiàn)用較短的lookahead模擬較長的lookahead的效果,測試在直播素材中l(wèi)ookahead4優(yōu)化后比優(yōu)化前可以節(jié)省13.5%的碼率,有效的降低了編碼延遲。
結(jié)果示意圖如下:

同時(shí),在之前的測試中發(fā)現(xiàn),該優(yōu)化對場景不敏感,運(yùn)動(dòng)簡單場景和運(yùn)動(dòng)復(fù)雜場景提升同樣有效。
過去一年,我們采用前述優(yōu)化,將265碼流在畫質(zhì)不變的前提下,將碼率從1.4M下降到800K。
4.6 畫質(zhì)增強(qiáng)
在淘寶直播的場景中,大主播有自己的專業(yè)設(shè)備與團(tuán)隊(duì),直播出來的視頻與音頻都是比較高質(zhì)量的。但是針對中小主播,用戶的行為不可控。
因此產(chǎn)生的結(jié)果就是很多中小主播產(chǎn)生的視頻質(zhì)量比較低,收獲的觀眾數(shù)量也比較少。
針對這種情況,我們選取了用戶習(xí)慣產(chǎn)生最嚴(yán)重的幾種情況,對這一類主播進(jìn)行了畫質(zhì)增加的,顯著提升了用戶的直播體驗(yàn)。

下面介紹一些已經(jīng)有的應(yīng)用效果。
4.6.1)去抖:

▲ 去抖動(dòng)效果(原始視頻鏈接點(diǎn)此查看)
現(xiàn)代編碼器能夠較好的處理平坦紋理和平移運(yùn)動(dòng),前者通過幀內(nèi)預(yù)測來消除空間相關(guān)性,后者通過運(yùn)動(dòng)搜索來消除幀與幀之間的時(shí)間相關(guān)性。
但是在視頻采集過程中,由于攝像機(jī)抖動(dòng)產(chǎn)生的視頻幀抖動(dòng),編碼器不能夠很好的處理。
由于抖動(dòng)劇烈的一般是中小主播,且攜帶的設(shè)備比較老舊,我們考慮從采集源來改善視頻幀,最終在這里我們采用相機(jī)路徑平滑算法來去除視頻幀中的抖動(dòng)。
4.6.2)去噪:
視頻直播在燈光不太理想的情況下,攝像頭采集的畫面會產(chǎn)生明顯的飛蚊噪聲和高斯白噪聲,嚴(yán)重影響用戶對視頻內(nèi)容的感受,這種情況下,有必要對視頻進(jìn)行降噪。
現(xiàn)有的很多優(yōu)秀的云端去噪算法,其實(shí)對于移動(dòng)端來說采用深度學(xué)習(xí)的方法就不合適。
雖然現(xiàn)在有很多移動(dòng)端深度學(xué)習(xí)框架,但是畢竟還沒有跟機(jī)器是配得非常好,針對很多中低端的手機(jī)其實(shí)跑不動(dòng)這種生成模型的。
基于此,我們在移動(dòng)端主要是考慮效率,那么我們就采了基于維納濾波的時(shí)域降噪算法方式來實(shí)現(xiàn),進(jìn)行訓(xùn)練和優(yōu)化。

4.6.3)超分:
針對一些小微主播,錄播設(shè)備只能支持360p,最終觀眾端看到的視頻會通過插值等傳統(tǒng)方法進(jìn)行放大為720p。這樣獲得的視頻幀難免產(chǎn)生模糊效果,影響直播觀感。
得益于深度學(xué)習(xí)在移動(dòng)端的優(yōu)化,我們在部分高端機(jī)實(shí)現(xiàn)了移動(dòng)端視頻幀的實(shí)時(shí)超分。
在眾多的網(wǎng)絡(luò)架構(gòu)中,我們最終選擇了性能最佳的FSRCN方案,網(wǎng)絡(luò)的架構(gòu)圖如下所示。

在訓(xùn)練過程中:我們精選了1W+淘寶個(gè)品類的高清大圖,結(jié)合業(yè)界的高清開源數(shù)據(jù)集,利用樣本增強(qiáng)技術(shù),訓(xùn)練了5000輪左右的模型達(dá)到收斂效果。
此外:為了消除圖像分塊帶來的邊界效應(yīng),我們做了圖像重疊合并的操作,在增加部分計(jì)算時(shí)間的情況下帶來了更好的超分效果。
為了在手機(jī)端實(shí)時(shí)運(yùn)行:避免占用過多資源,我們優(yōu)化反卷積計(jì)算,并針對人眼視覺特性,對強(qiáng)紋理和靜止區(qū)域部分像素進(jìn)行超分,以此大幅提高移動(dòng)端的效率。
5、低延遲傳輸實(shí)踐
5.1 低延遲播放器
5.1.1)常規(guī)播放器的延遲分析:
目前基于TCP的直播傳輸技術(shù)主要有 HLS和RTMP/HTTP-FLV兩個(gè)協(xié)議。
其中HLS直播的延遲一般在10秒以上,HTTP-FLV直播的延遲一般在6到9秒,從推流、cdn分發(fā)到播放的整個(gè)直播鏈路看,延遲的大頭來自播放端。
在播放器中,幾乎每個(gè)線程都有自己的緩沖區(qū),這些緩沖區(qū)的作用是平滑整個(gè)播放鏈路的抖動(dòng),它們的大小決定了播放過程中的播放延遲和播放的流暢性。
VideoBuffer和AudioBuffer用來存放待解碼的音視頻 packet,該緩沖區(qū)是為了平滑網(wǎng)絡(luò)的抖動(dòng),推流、CDN傳輸和播放下載的抖動(dòng)都會堆積到播放端,這是常規(guī)播放器延遲最大的一個(gè)產(chǎn)生點(diǎn),為提升直播的整體流暢度,緩沖區(qū)延遲一般在5秒以上。

基于TCP的媒體傳輸并不適用于低延遲直播場景,主要原因如下:
- 1)重傳慢:TCP追求的是完全可靠性和順序性,丟包后會持續(xù)重傳直至該包被確認(rèn),否則后續(xù)包也不會被上層接收,且重傳超時(shí)時(shí)間一般200ms,會造成接收側(cè)幀抖動(dòng);
- 2)上層無法針對優(yōu)化:TCP擁塞控制和 Qos 策略在操作系統(tǒng)內(nèi)核層實(shí)現(xiàn);
- 3)擁塞判斷不準(zhǔn)確:基于丟包的擁塞控制跟實(shí)際網(wǎng)絡(luò)情況不符,丟包并不等于擁塞,也會造成發(fā)送鏈路 bufferbloat,鏈路RTT增大。
我們的低延遲傳輸SDK是基于WebRTC打造的,使用了WebRTC的幾個(gè)核心模塊,包括 RTP/RTCP、FEC、NACK、NetEQ、JitterBuffer、音視頻同步、擁塞控制等。
NetEQ和JitterBuffer分別是音頻和視頻的網(wǎng)絡(luò)抖動(dòng)緩存區(qū),這是傳輸SDK延遲最大的一個(gè)產(chǎn)生點(diǎn)。
RTP over UDP能夠更好地對抗公網(wǎng)的丟包,結(jié)合自適應(yīng)緩存和Qos優(yōu)化,確保直播整體流暢度的條件下,我們的JitterBuffer的緩沖區(qū)延遲能夠控制在700毫秒以下,直播觀看延遲在1秒左右。
5.1.2)播放器對低延遲傳輸SDK的接入適配:
我們對低延遲傳輸模塊封裝了FFmpeg的擴(kuò)展demuxer,將支持低延時(shí)傳輸協(xié)議的demuxer注冊到FFmpeg,播放器通過FFmpeg打開網(wǎng)絡(luò)連接讀取數(shù)據(jù),這種接入方案基本不影響播放器原有邏輯,對播放器改動(dòng)較小。
主要改動(dòng)點(diǎn)如下:
1)緩沖區(qū)大小控制:
使用低延遲傳輸協(xié)議拉流時(shí),網(wǎng)絡(luò)的抖動(dòng)緩沖區(qū)是底層傳輸模塊的JitterBuffer,播放器層的JitterBuffer的緩存應(yīng)設(shè)置為0秒,否則會引入多余的延遲;
2)卡頓統(tǒng)計(jì)修改:
一般播放器根據(jù)緩沖區(qū)水位大小判斷卡頓事件,當(dāng)緩沖區(qū)為空或持續(xù)空一段時(shí)間,這會導(dǎo)播放畫面卡頓,同時(shí)觸發(fā)卡頓事件,播放器的JitterBuffer被低延遲傳輸SDK接管后,卡頓事件也應(yīng)該由低延遲傳輸SDK觸發(fā);
3)音頻解碼流程:
從NetEQ獲取的音頻已經(jīng)是PCM數(shù)據(jù)了,播放器讀取的音頻數(shù)據(jù)可直接渲染,如果音頻使用硬解,可能會出現(xiàn)解碼兼容問題,現(xiàn)象是聽不到聲音,使用FFmpeg軟解也是可以兼容的。
5.2 低延遲服務(wù)器
低延遲傳輸是一個(gè)綜合性的問題,要從整體入手,不僅要從設(shè)計(jì)上考慮,還需要客戶端,服務(wù)器,數(shù)據(jù)系統(tǒng)緊密配合。
從傳輸協(xié)議設(shè)計(jì)上采用rtp/rtcp方案。基于udp半可靠傳輸,技術(shù)成熟,更加適合音視頻場景。難點(diǎn)在于既要降卡頓,也要降延遲。
我們使用的整體算法策略如下:

- a)擁塞控制:擁塞控制gcc&bbr算法針對直播場景深度優(yōu)化,同時(shí)兼顧秒開和延遲。
- b)分層丟幀:基于B幀的SVC算法和丟gop策略在網(wǎng)絡(luò)擁塞時(shí)保證快速降低碼率,解決擁塞。
- c)重傳控制:重傳控制既要抑制重傳風(fēng)暴,也要保障快速重傳。
- d)平滑發(fā)送優(yōu)化:平滑發(fā)送策略防止網(wǎng)絡(luò)突發(fā),平滑流量。同時(shí)針對秒開場景深度定制。重新設(shè)計(jì)發(fā)送機(jī)制和算法,發(fā)送 性能大大提高。
- e)秒開優(yōu)化:服務(wù)器和端配合的多種秒開策略,保證極速開播。淘寶直播大盤平均秒開率94%以上。
- f)信令優(yōu)化:從信令設(shè)計(jì)上采用rtcp app私有協(xié)議,和音視頻傳輸使用一個(gè)socket連接。建聯(lián)協(xié)議更加精簡,保障 1RTT快速給出媒體數(shù)據(jù)。
除此之外還進(jìn)行了大量策略到算法上的改進(jìn)和優(yōu)化,基于數(shù)據(jù)驅(qū)動(dòng),針對場景不斷迭代優(yōu)化。
5.3 端到端全鏈路分段統(tǒng)計(jì)
我們設(shè)計(jì)的端到端延遲分段統(tǒng)計(jì)系統(tǒng),既能統(tǒng)計(jì)單次播放的總體延遲,也能統(tǒng)計(jì)每個(gè)階段延遲。
不依賴ntp時(shí)間,適合超大規(guī)模網(wǎng)絡(luò)。
通過分析不同平臺推流端,服務(wù)器,播放器各個(gè)階段的延遲情況,大盤展示出來,可以針對專項(xiàng)做優(yōu)化。

6、展望未來
伴隨著5G網(wǎng)絡(luò)的提速,主播側(cè)到用戶側(cè)的延時(shí)將會越來越短。
移動(dòng)端本身的性能提升,各種畫質(zhì)增強(qiáng),圖像渲染技術(shù)也會慢慢硬件化。
移動(dòng)端的深度學(xué)習(xí)模型也逐漸變得輕量化,這使得學(xué)術(shù)界各種越來越先進(jìn)的創(chuàng)新也得以工程化。
附錄:更多音視頻技術(shù)學(xué)習(xí)資料
《淺談開發(fā)實(shí)時(shí)視頻直播平臺的技術(shù)要點(diǎn)》
《實(shí)現(xiàn)延遲低于500毫秒的1080P實(shí)時(shí)音視頻直播的實(shí)踐分享》
《移動(dòng)端實(shí)時(shí)視頻直播技術(shù)實(shí)踐:如何做到實(shí)時(shí)秒開、流暢不卡》
《淺談實(shí)時(shí)音視頻直播中直接影響用戶體驗(yàn)的幾項(xiàng)關(guān)鍵技術(shù)指標(biāo)》
《技術(shù)揭秘:支持百萬級粉絲互動(dòng)的Facebook實(shí)時(shí)視頻直播》
《理論聯(lián)系實(shí)際:實(shí)現(xiàn)一個(gè)簡單地基于HTML5的實(shí)時(shí)視頻直播》
《首次披露:快手是如何做到百萬觀眾同場看直播仍能秒開且不卡頓的?》
《Android直播入門實(shí)踐:動(dòng)手搭建一套簡單的直播系統(tǒng)》
《網(wǎng)易云信實(shí)時(shí)視頻直播在TCP數(shù)據(jù)傳輸層的一些優(yōu)化思路》
《P2P技術(shù)如何將實(shí)時(shí)視頻直播帶寬降低75%?》
《福利貼:最全實(shí)時(shí)音視頻開發(fā)要用到的開源工程匯總》
《七牛云技術(shù)分享:使用QUIC協(xié)議實(shí)現(xiàn)實(shí)時(shí)視頻直播0卡頓!》
《近期大熱的實(shí)時(shí)直播答題系統(tǒng)的實(shí)現(xiàn)思路與技術(shù)難點(diǎn)分享》
《實(shí)時(shí)視頻直播客戶端技術(shù)盤點(diǎn):Native、HTML5、WebRTC、微信小程序》
《實(shí)時(shí)音頻的混音在視頻直播應(yīng)用中的技術(shù)原理和實(shí)踐總結(jié)》
《新浪微博技術(shù)分享:微博實(shí)時(shí)直播答題的百萬高并發(fā)架構(gòu)實(shí)踐》
《技術(shù)干貨:實(shí)時(shí)視頻直播首屏耗時(shí)400ms內(nèi)的優(yōu)化實(shí)踐》
本文已同步發(fā)布于“即時(shí)通訊技術(shù)圈”公眾號:
▲ 本文在公眾號上的鏈接是:點(diǎn)此進(jìn)入,原文鏈接是:http://www.52im.net/thread-3220-1-1.html
作者:Jack Jiang (點(diǎn)擊作者姓名進(jìn)入Github)
出處:http://www.52im.net/space-uid-1.html
交流:歡迎加入即時(shí)通訊開發(fā)交流群 215891622
討論:http://www.52im.net/
Jack Jiang同時(shí)是【原創(chuàng)Java
Swing外觀工程BeautyEye】和【輕量級移動(dòng)端即時(shí)通訊框架MobileIMSDK】的作者,可前往下載交流。
本博文
歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明出處(也可前往 我的52im.net 找到我)。