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

摘要: 這一次的世界盃,與以往世界盃最大的區別在於,有不少互聯網用戶觀看直播,而不是在電視上。在互聯網觀看直播,互聯網的網絡條件不同,觀衆會看不一樣碼率的視頻。因此主要分享下阿里雲在直播中怎麼作碼率控制。

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

clipboard.png

這一次的世界盃,與以往世界盃最大的區別在於,有不少互聯網用戶觀看直播,而不是在電視上。在互聯網觀看直播,互聯網的網絡條件不同,觀衆會看不一樣碼率的視頻。因此主要分享下阿里雲在直播中怎麼作碼率控制。網絡

分享分三個部分,首先討論一下爲何要關注碼率控制、其次是宏觀上怎麼作碼率控制,最後是介紹下微觀上怎麼作碼率控制。併發

爲何咱們要關注碼率控制

咱們先看一下個直播的一個簡單的過程。優化

clipboard.png

世界盃一般會拿到一個很是高清的直播源,它的碼率很是大,不太適合在互聯網上直接傳輸。因此整條鏈路中會有一個視頻內容的再生產的過程,這個再生產的過程最重要的就是視頻的轉碼,將這個轉成不一樣分辨率的幾個檔位。好比說咱們看視頻有流暢的、標清、高清、超清的視頻,這些都是爲了讓不一樣網絡的用戶能夠流暢的觀看視頻。在進行轉碼之後,視頻流會通過CDN放大,不少用戶會進行觀看。阿里雲

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

碼率控制有什麼影響

clipboard.png

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

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

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

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

宏觀碼率控制

下圖是一個在世界盃期間直播的例子,左邊是另一個直播平臺作的一個視頻直播,右邊是優酷上面的。能夠清楚的看到左邊的視頻在搶角球的場景是很模糊的,而右邊的視頻是看起來比較光滑和細膩的,這兩個視頻是相同的碼率,左邊是1080P的2.5M,右邊是720P的2.5M,可是爲何會出現這樣的場景?

clipboard.png

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

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

clipboard.png

咱們再來看720P轉碼,通過1080P的視頻解碼,下采樣到720P,720P編碼,傳輸,解碼,最後在播放器端進行上採樣,從新編成1080P以及渲染的過程。這個過程當中有兩次的視頻清晰度的損失,第一次是發生在上採樣以及下采樣的過程當中,這個信息其實是一個固定的損失,它和咱們的採樣算法有關係;第二是在720P的圖像編碼成3M的視頻中發生的。爲何1080P不如720P清晰,是由於在720P編碼中,咱們能夠把720P的每個象素都描述得很是清晰,這部分的信息損失加上採樣的信息損失只和小於1080P編碼時的信息損失。

因此總結一下咱們須要控制碼率。碼率控制的目的就是在必定的帶寬條件下,須要使每個比特都可以發揮它的做用,把它分配到最須要他的地方,從而提高用戶的觀看體驗。

說到把每個比特分配到最須要它的地方,一般會有不少方式,在整個編碼過程當中什麼地方有信息的損失,就能夠在哪裏作。好比:

第一是在分辨率作文章,對給定的碼率,能夠選擇不一樣的分辨率進行調整。

第二是在幀率作文章,對給定的碼率,能夠選擇不一樣的幀率。

第三是在視頻中碼率在不一樣的幀間進行碼率分配,對於複雜的場景,分配更多碼率,對於簡單的場景,分配較少的碼率。

第四是在幀內進行碼率分配,在一幀以內,根據圖像的複雜程度和人眼敏感程度進行碼率分配。

在世界盃實現的場景中,要考慮到播放器的兼容性,使用的是分辨率、幀間碼率,幀內碼率的優化手段。

宏觀碼率控制——分辨率

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

clipboard.png

這是一個對世界盃的視頻作的試驗,採用不一樣的分辨率來進行編碼,相同的碼率進行編碼。上圖能夠看到信息的損失量,咱們能夠在相同的碼率下,隨着咱們的分辨率的增高,實際上視頻的清晰度逐漸升高。到了一個最高點之後,反而會因爲視頻的分辨率的增長,它的清晰度會下降。這也驗證了以前咱們看到例子。

因此根據這樣一條曲線能夠獲得分辨率和碼率的模型,對於任何一個分辨率能夠找到一個最佳的碼率。在實際上世界盃的這個場景中,咱們把視頻分紅了不少碼率,在給定的任意一個碼率上咱們都能找到相應的分辨率。

若是關注過阿里雲的直播,會看到轉碼的建議上會給出不少不常見的分辨率,好比說432P、648P這樣的分辨率,這些分辨率一般能在相應檔位的碼率上獲得很好的清晰度。

微觀碼率控制——幀間碼率

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

clipboard.png

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

VBR的煩惱

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

clipboard.png

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

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

幀內碼率分配

clipboard.png

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

本文做者:樰籬

閱讀原文

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

相關文章
相關標籤/搜索