1. 程式人生 > >解析世界杯超大規模直播場景下的碼率控制

解析世界杯超大規模直播場景下的碼率控制

流程 http ces 在那 相同 復雜 常見 adb 一是

摘要: 這一次的世界杯,與以往世界杯最大的區別在於,有很多互聯網用戶觀看直播,而不是在電視上。在互聯網觀看直播,互聯網的網絡條件不一樣,觀眾會看不同碼率的視頻。所以主要分享下阿裏雲在直播中怎麽做碼率控制。

在本月的重慶雲棲大會飛天技術匯專場中,阿裏雲高級算法專家黃海宇分享了題為《超大規模直播碼率控制》的議題,從生產的鏈路角度來說世界杯怎麽讓觀眾看到更加清晰的視頻。

技術分享圖片

這一次的世界杯,與以往世界杯最大的區別在於,有很多互聯網用戶觀看直播,而不是在電視上。在互聯網觀看直播,互聯網的網絡條件不一樣,觀眾會看不同碼率的視頻。所以主要分享下阿裏雲在直播中怎麽做碼率控制。

分享分三個部分,首先討論一下為什麽要關註碼率控制、其次是宏觀上怎麽做碼率控制,最後是介紹下微觀上怎麽做碼率控制。

為什麽我們要關註碼率控制
我們先看一下個直播的一個簡單的過程。

技術分享圖片

世界杯通常會拿到一個非常高清的直播源,它的碼率非常大,不太適合在互聯網上直接傳輸。所以整條鏈路中會有一個視頻內容的再生產的過程,這個再生產的過程最重要的就是視頻的轉碼,將這個轉成不同分辨率的幾個檔位。比如說我們看視頻有流暢的、標清、高清、超清的視頻,這些都是為了讓不同網絡的用戶可以流暢的觀看視頻。在進行轉碼以後,視頻流會經過CDN放大,很多用戶會進行觀看。

其中,碼率控制是發生在轉碼這個環節,就是把高清視頻進行解碼再進行重新編碼,視頻的轉碼是一個有損的壓縮的過程,把原來的視頻進行處理,將裏面的細節進行忽略,這樣能夠以一個更低的帶寬去滿足用戶播放流暢的需求。

碼率控制有什麽影響

技術分享圖片

第一,碼率控制對清晰度有影響。我們通常的概念是清晰度越高碼率越高,要求用戶的下行的帶寬更高。

第二,碼率控制影響用戶流暢度的影響,用戶播放的網絡各不相同,當用戶的帶寬大於視頻碼率時,才夠流暢播放。

第三,碼率控制的影響是成本的影響,在整個世界杯直播的過程中,最大的費用在CDN帶寬上,CDN的總帶寬消耗為不同的碼率以及這種碼率並發在線人數的乘積之和。

所以我們的問題是用戶的網絡是有限的,我們如何在有限的網絡下最好的控制碼率,提供給用戶最清晰的視頻。

宏觀碼率控制
下圖是一個在世界杯期間直播的例子,左邊是另外一個直播平臺做的一個視頻直播,右邊是優酷上面的。可以清楚的看到左邊的視頻在搶角球的場景是很模糊的,而右邊的視頻是看起來比較光滑和細膩的,這兩個視頻是相同的碼率,左邊是1080P的2.5M,右邊是720P的2.5M,但是為什麽會出現這樣的場景?

技術分享圖片

我們先看一下整個視頻編碼的過程是怎麽樣的:

下圖上面這條線是一個1080P的視頻轉成1080P的視頻進行播放的一個流程,首先是解碼,這一步是不會有視頻清晰度的損失的;然後是視頻的編碼,比如說一個視頻25幀,需要把這25幀的圖像編碼成3M的1080P的圖像,在這個過程中,為了保證輸出碼率為3M,有大量的細節損失;第三步是這個視頻經過了CDN網絡的傳輸到達用戶的播放器,用戶會進行解碼播放,這一步是沒有信息的損失。最後一步是播放器的渲染,這一步也沒有信息損失。

技術分享圖片

我們再來看720P轉碼,經過1080P的視頻解碼,下采樣到720P,720P編碼,傳輸,解碼,最後在播放器端進行上采樣,重新編成1080P以及渲染的過程。這個過程中有兩次的視頻清晰度的損失,第一次是發生在上采樣以及下采樣的過程中,這個信息實際上是一個固定的損失,它和我們的采樣算法有關系;第二是在720P的圖像編碼成3M的視頻中發生的。為什麽1080P不如720P清晰,是因為在720P編碼中,我們可以把720P的每一個象素都描述得非常清晰,這部分的信息損失加上采樣的信息損失只和小於1080P編碼時的信息損失。

所以總結一下我們需要控制碼率。碼率控制的目的就是在一定的帶寬條件下,需要使每一個比特都能夠發揮它的作用,把它分配到最需要他的地方,從而提升用戶的觀看體驗。

說到把每一個比特分配到最需要它的地方,通常會有很多方式,在整個編碼過程中什麽地方有信息的損失,就可以在哪裏做。比如:
第一是在分辨率做文章,對給定的碼率,可以選擇不同的分辨率進行調整。
第二是在幀率做文章,對給定的碼率,可以選擇不同的幀率。
第三是在視頻中碼率在不同的幀間進行碼率分配,對於復雜的場景,分配更多碼率,對於簡單的場景,分配較少的碼率。
第四是在幀內進行碼率分配,在一幀之內,根據圖像的復雜程度和人眼敏感程度進行碼率分配。
在世界杯實現的場景中,要考慮到播放器的兼容性,使用的是分辨率、幀間碼率,幀內碼率的優化手段。

宏觀碼率控制——分辨率
首先看一下在宏觀的碼率選擇上,如何去根據碼率選擇一個最佳的分辨率。

技術分享圖片

這是一個對世界杯的視頻做的試驗,采用不同的分辨率來進行編碼,相同的碼率進行編碼。上圖可以看到信息的損失量,我們可以在相同的碼率下,隨著我們的分辨率的增高,實際上視頻的清晰度逐漸升高。到了一個最高點以後,反而會由於視頻的分辨率的增加,它的清晰度會降低。這也驗證了之前我們看到例子。

所以根據這樣一條曲線可以得到分辨率和碼率的模型,對於任何一個分辨率可以找到一個最佳的碼率。在實際上世界杯的這個場景中,我們把視頻分成了很多碼率,在給定的任意一個碼率上我們都能找到相應的分辨率。

如果關註過阿裏雲的直播,會看到轉碼的建議上會給出很多不常見的分辨率,比如說432P、648P這樣的分辨率,這些分辨率通常能在相應檔位的碼率上得到很好的清晰度。

微觀碼率控制——幀間碼率
說到微觀上的碼率控制的時候,第一件事情就是如何將碼率在很多幀間進行分配。

技術分享圖片

上圖給出了多種碼率分配的算法,第一個算法是傳統的CBR,就是說不管視頻的變化是怎麽樣,統一采用相同的碼率對視頻進行編碼,盡量做到每一秒的碼率是相同的。CBR是途中的紅線,我們可以看到實際上視頻清晰度的損失波動非常大,在紅線中可以看到高的時候可以非常高,低的時候非常低。在播放的時候肯定不希望能夠看到一個清晰度劇烈抖動的視頻,這對人眼的觀看是極其糟糕的,於是我們嘗試用一種叫CQP的方式進行視頻編碼,這實際是確定了視頻編碼的量化步長,這個情況下可以得到清晰度相對穩定的視頻。但是采用這種編碼不是沒有代價的,采用CBR時碼率比較穩定,但是采用CQP,在畫面比較復雜的地方,為了把這個清晰度提高,碼率就會非常高,可以看到,在右圖中,CQP(綠線)的碼率飆到了12mbps,這對普通用戶來說顯然是不可以接受的。所以最終采用了VBR+VBV的方式。當使用VBR+VBV的控制策略以後,藍線比紅線的碼率質量波動會稍微好一點,VBV模型也能保證用戶帶寬在達到VBV指定最大碼率時,視頻一定能夠流暢播放。

VBR的煩惱
VBR在大規模直播中也會帶來一些問題,這張圖是在世界杯的開幕式的時候一張CDN的帶寬的分布圖,橫坐標是時間,縱坐標是CDN的帶寬。

技術分享圖片

這個圖就可以看到兩個非常明顯的波動,第一個發生在中場休息,第二個發上在23:00,開幕式結束,比賽正式開始前。第一個波動很好解釋,因為中場休息時很多觀眾離開,中途的精彩進球會回來一部分觀眾,下半場開始又有很多觀眾繼續觀看。在前面的波谷就不太好解釋了,通過觀察了碼率的分布圖,我們發現當時碼率非常低,實際上,在這段時間正好是普京講話,這是一個相對靜止的畫面,由於采用了VBR,碼率發生了劇烈的波動,從而引起帶寬劇烈波動。

這種波動對通常的直播是沒有問題的,不同的用戶在看不同的直播,所以碼率的峰值疊加起來會趨向於碼率的平均值。但是世界杯的場景下,有70%的流量都觀看相同的直播內容, CDN的帶寬非常高,這使得CDN的帶寬隨著碼率的波動而波動。通常的CDN通常會使用當前的水位來評估一個新進用戶應該放在什麽CDN節點,或者說根據一些歷史的狀況估計CDN放在什麽節點。在世界杯中,這個問題通過CDN引入新型的調度策略來解決。

幀內碼率分配

技術分享圖片

幀內碼率分配考慮的是如何在一幀圖像內對碼率分配,以得到最好的視覺效果,我們會根據人眼的關註點來調整碼率分配。在上圖中,人眼關註的重點毫無疑問是梅西的頭像,人眼可能會對後面虛化的內容不關註。所以在做轉碼處理的時候,會優先考慮這個圖像的聚焦區在那裏,在這些地方提高它的碼率。另一方面,人眼對規則的紋理非常敏感,這部分也需要分配更多的碼率,而在脫焦區域,我們會適當的減少一些碼率。通過上述手段,整個視頻的碼率沒有上升,但人眼的主觀感覺會更清晰。

原文鏈接

本文為雲棲社區原創內容,未經允許不得轉載。

解析世界杯超大規模直播場景下的碼率控制