摘要:?這一次的世界杯,與以往世界杯最大的區(qū)別在于,有很多互聯(lián)網(wǎng)用戶觀看直播,而不是在電視上。在互聯(lián)網(wǎng)觀看直播,互聯(lián)網(wǎng)的網(wǎng)絡(luò)條件不一樣,觀眾會看不同碼率的視頻。所以主要分享下阿里云在直播中怎么做碼率控制。
在本月的重慶云棲大會飛天技術(shù)匯專場中,阿里云高級算法專家黃海宇分享了題為《超大規(guī)模直播碼率控制》的議題,從生產(chǎn)的鏈路角度來說世界杯怎么讓觀眾看到更加清晰的視頻。
這一次的世界杯,與以往世界杯最大的區(qū)別在于,有很多互聯(lián)網(wǎng)用戶觀看直播,而不是在電視上。在互聯(lián)網(wǎng)觀看直播,互聯(lián)網(wǎng)的網(wǎng)絡(luò)條件不一樣,觀眾會看不同碼率的視頻。所以主要分享下阿里云在直播中怎么做碼率控制。
分享分三個部分,首先討論一下為什么要關(guān)注碼率控制、其次是宏觀上怎么做碼率控制,最后是介紹下微觀上怎么做碼率控制。
為什么我們要關(guān)注碼率控制
我們先看一下個直播的一個簡單的過程。
世界杯通常會拿到一個非常高清的直播源,它的碼率非常大,不太適合在互聯(lián)網(wǎng)上直接傳輸。所以整條鏈路中會有一個視頻內(nèi)容的再生產(chǎn)的過程,這個再生產(chǎn)的過程最重要的就是視頻的轉(zhuǎn)碼,將這個轉(zhuǎn)成不同分辨率的幾個檔位。比如說我們看視頻有流暢的、標(biāo)清、高清、超清的視頻,這些都是為了讓不同網(wǎng)絡(luò)的用戶可以流暢的觀看視頻。在進行轉(zhuǎn)碼以后,視頻流會經(jīng)過CDN放大,很多用戶會進行觀看。
其中,碼率控制是發(fā)生在轉(zhuǎn)碼這個環(huán)節(jié),就是把高清視頻進行解碼再進行重新編碼,視頻的轉(zhuǎn)碼是一個有損的壓縮的過程,把原來的視頻進行處理,將里面的細節(jié)進行忽略,這樣能夠以一個更低的帶寬去滿足用戶播放流暢的需求。
碼率控制有什么影響
第一,碼率控制對清晰度有影響。我們通常的概念是清晰度越高碼率越高,要求用戶的下行的帶寬更高。
第二,碼率控制影響用戶流暢度的影響,用戶播放的網(wǎng)絡(luò)各不相同,當(dāng)用戶的帶寬大于視頻碼率時,才夠流暢播放。
第三,碼率控制的影響是成本的影響,在整個世界杯直播的過程中,最大的費用在CDN帶寬上,CDN的總帶寬消耗為不同的碼率以及這種碼率并發(fā)在線人數(shù)的乘積之和。
所以我們的問題是用戶的網(wǎng)絡(luò)是有限的,我們?nèi)绾卧谟邢薜木W(wǎng)絡(luò)下最好的控制碼率,提供給用戶最清晰的視頻。
宏觀碼率控制
下圖是一個在世界杯期間直播的例子,左邊是另外一個直播平臺做的一個視頻直播,右邊是優(yōu)酷上面的??梢郧宄目吹阶筮叺囊曨l在搶角球的場景是很模糊的,而右邊的視頻是看起來比較光滑和細膩的,這兩個視頻是相同的碼率,左邊是1080P的2.5M,右邊是720P的2.5M,但是為什么會出現(xiàn)這樣的場景?
我們先看一下整個視頻編碼的過程是怎么樣的:
下圖上面這條線是一個1080P的視頻轉(zhuǎn)成1080P的視頻進行播放的一個流程,首先是解碼,這一步是不會有視頻清晰度的損失的;然后是視頻的編碼,比如說一個視頻25幀,需要把這25幀的圖像編碼成3M的1080P的圖像,在這個過程中,為了保證輸出碼率為3M,有大量的細節(jié)損失;第三步是這個視頻經(jīng)過了CDN網(wǎng)絡(luò)的傳輸?shù)竭_用戶的播放器,用戶會進行解碼播放,這一步是沒有信息的損失。最后一步是播放器的渲染,這一步也沒有信息損失。
我們再來看720P轉(zhuǎn)碼,經(jīng)過1080P的視頻解碼,下采樣到720P,720P編碼,傳輸,解碼,最后在播放器端進行上采樣,重新編成1080P以及渲染的過程。這個過程中有兩次的視頻清晰度的損失,第一次是發(fā)生在上采樣以及下采樣的過程中,這個信息實際上是一個固定的損失,它和我們的采樣算法有關(guān)系;第二是在720P的圖像編碼成3M的視頻中發(fā)生的。為什么1080P不如720P清晰,是因為在720P編碼中,我們可以把720P的每一個象素都描述得非常清晰,這部分的信息損失加上采樣的信息損失只和小于1080P編碼時的信息損失。
所以總結(jié)一下我們需要控制碼率。碼率控制的目的就是在一定的帶寬條件下,需要使每一個比特都能夠發(fā)揮它的作用,把它分配到最需要他的地方,從而提升用戶的觀看體驗。
說到把每一個比特分配到最需要它的地方,通常會有很多方式,在整個編碼過程中什么地方有信息的損失,就可以在哪里做。比如:
第一是在分辨率做文章,對給定的碼率,可以選擇不同的分辨率進行調(diào)整。
第二是在幀率做文章,對給定的碼率,可以選擇不同的幀率。
第三是在視頻中碼率在不同的幀間進行碼率分配,對于復(fù)雜的場景,分配更多碼率,對于簡單的場景,分配較少的碼率。
第四是在幀內(nèi)進行碼率分配,在一幀之內(nèi),根據(jù)圖像的復(fù)雜程度和人眼敏感程度進行碼率分配。
在世界杯實現(xiàn)的場景中,要考慮到播放器的兼容性,使用的是分辨率、幀間碼率,幀內(nèi)碼率的優(yōu)化手段。
宏觀碼率控制——分辨率
首先看一下在宏觀的碼率選擇上,如何去根據(jù)碼率選擇一個最佳的分辨率。
這是一個對世界杯的視頻做的試驗,采用不同的分辨率來進行編碼,相同的碼率進行編碼。上圖可以看到信息的損失量,我們可以在相同的碼率下,隨著我們的分辨率的增高,實際上視頻的清晰度逐漸升高。到了一個最高點以后,反而會由于視頻的分辨率的增加,它的清晰度會降低。這也驗證了之前我們看到例子。
所以根據(jù)這樣一條曲線可以得到分辨率和碼率的模型,對于任何一個分辨率可以找到一個最佳的碼率。在實際上世界杯的這個場景中,我們把視頻分成了很多碼率,在給定的任意一個碼率上我們都能找到相應(yīng)的分辨率。
如果關(guān)注過阿里云的直播,會看到轉(zhuǎn)碼的建議上會給出很多不常見的分辨率,比如說432P、648P這樣的分辨率,這些分辨率通常能在相應(yīng)檔位的碼率上得到很好的清晰度。
微觀碼率控制——幀間碼率
說到微觀上的碼率控制的時候,第一件事情就是如何將碼率在很多幀間進行分配。
上圖給出了多種碼率分配的算法,第一個算法是傳統(tǒng)的CBR,就是說不管視頻的變化是怎么樣,統(tǒng)一采用相同的碼率對視頻進行編碼,盡量做到每一秒的碼率是相同的。CBR是途中的紅線,我們可以看到實際上視頻清晰度的損失波動非常大,在紅線中可以看到高的時候可以非常高,低的時候非常低。在播放的時候肯定不希望能夠看到一個清晰度劇烈抖動的視頻,這對人眼的觀看是極其糟糕的,于是我們嘗試用一種叫CQP的方式進行視頻編碼,這實際是確定了視頻編碼的量化步長,這個情況下可以得到清晰度相對穩(wěn)定的視頻。但是采用這種編碼不是沒有代價的,采用CBR時碼率比較穩(wěn)定,但是采用CQP,在畫面比較復(fù)雜的地方,為了把這個清晰度提高,碼率就會非常高,可以看到,在右圖中,CQP(綠線)的碼率飆到了12mbps,這對普通用戶來說顯然是不可以接受的。所以最終采用了VBR+VBV的方式。當(dāng)使用VBR+VBV的控制策略以后,藍線比紅線的碼率質(zhì)量波動會稍微好一點,VBV模型也能保證用戶帶寬在達到VBV指定最大碼率時,視頻一定能夠流暢播放。
VBR的煩惱
VBR在大規(guī)模直播中也會帶來一些問題,這張圖是在世界杯的開幕式的時候一張CDN的帶寬的分布圖,橫坐標(biāo)是時間,縱坐標(biāo)是CDN的帶寬。
這個圖就可以看到兩個非常明顯的波動,第一個發(fā)生在中場休息,第二個發(fā)上在23:00,開幕式結(jié)束,比賽正式開始前。第一個波動很好解釋,因為中場休息時很多觀眾離開,中途的精彩進球會回來一部分觀眾,下半場開始又有很多觀眾繼續(xù)觀看。在前面的波谷就不太好解釋了,通過觀察了碼率的分布圖,我們發(fā)現(xiàn)當(dāng)時碼率非常低,實際上,在這段時間正好是普京講話,這是一個相對靜止的畫面,由于采用了VBR,碼率發(fā)生了劇烈的波動,從而引起帶寬劇烈波動。
這種波動對通常的直播是沒有問題的,不同的用戶在看不同的直播,所以碼率的峰值疊加起來會趨向于碼率的平均值。但是世界杯的場景下,有70%的流量都觀看相同的直播內(nèi)容, CDN的帶寬非常高,這使得CDN的帶寬隨著碼率的波動而波動。通常的CDN通常會使用當(dāng)前的水位來評估一個新進用戶應(yīng)該放在什么CDN節(jié)點,或者說根據(jù)一些歷史的狀況估計CDN放在什么節(jié)點。在世界杯中,這個問題通過CDN引入新型的調(diào)度策略來解決。
幀內(nèi)碼率分配
幀內(nèi)碼率分配考慮的是如何在一幀圖像內(nèi)對碼率分配,以得到最好的視覺效果,我們會根據(jù)人眼的關(guān)注點來調(diào)整碼率分配。在上圖中,人眼關(guān)注的重點毫無疑問是梅西的頭像,人眼可能會對后面虛化的內(nèi)容不關(guān)注。所以在做轉(zhuǎn)碼處理的時候,會優(yōu)先考慮這個圖像的聚焦區(qū)在那里,在這些地方提高它的碼率。另一方面,人眼對規(guī)則的紋理非常敏感,這部分也需要分配更多的碼率,而在脫焦區(qū)域,我們會適當(dāng)?shù)臏p少一些碼率。通過上述手段,整個視頻的碼率沒有上升,但人眼的主觀感覺會更清晰。
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
評論