Jack Jiang

          我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
          posts - 499, comments - 13, trackbacks - 0, articles - 1

          本文由淘寶直播音視頻算法團(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ù)詳解(四):編碼和封裝

          移動(dòng)端實(shí)時(shí)音視頻直播技術(shù)詳解(五):推流和傳輸

          移動(dòng)端實(shí)時(shí)音視頻直播技術(shù)詳解(六):延遲優(yōu)化

          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í)踐

          淘寶直播技術(shù)干貨:高清、低延時(shí)的實(shí)時(shí)視頻直播技術(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 找到我)。


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          Jack Jiang的 Mail: jb2011@163.com, 聯(lián)系QQ: 413980957, 微信: hellojackjiang
          主站蜘蛛池模板: 克东县| 泰兴市| 枞阳县| 哈巴河县| 山阳县| 贵溪市| 罗平县| 花莲县| 枣阳市| 澄江县| 赤峰市| 隆林| 务川| 涡阳县| 乌拉特中旗| 六盘水市| 华坪县| 师宗县| 四会市| 舞阳县| 威海市| 黄浦区| 新巴尔虎左旗| 南昌县| 松原市| 甘谷县| 台湾省| 方城县| 家居| 大足县| 昌黎县| 黔西县| 西乌珠穆沁旗| 阿克陶县| 靖西县| 钟祥市| 双牌县| 临湘市| 咸阳市| 福泉市| 旬阳县|