摘要: 網路直播平臺現下已經十分火熱,很多常見的直播平臺都採用了阿裡雲直播CDN來搭建自身商務。今天,我們邀請阿裡雲CDN團隊技術專家闕寒,來介紹下視訊的一些基礎知識和視訊直播的架構。
在進入正題之前,我們先來瞭解視訊直播相關的名詞含義是什麼?
一起掃個盲
通常我們所說的視訊,是指連續的圖像變化每秒超過24幀(Frame)畫面以上時,根據視覺暫留原理,人眼無法辨別單幅的靜態畫面,看上去是轉化連續的視覺效果,這樣連續的畫面叫做視訊。
而媒體轉碼是指將一段多媒體包括音訊、視訊或者其他的內容從一種編碼格式轉換成為另外一種編碼格式。
其中內容分發網路就是大家常說的CDN,這裡主要包含流媒體服務器,負載平衡,路由重新導向,視訊轉碼,視訊錄製隱藏,防竊鏈,效能等相關技術內容。
下面這幾個詞我們也經常遇到:
碼率是資料轉送時單位時間傳送的資料位元數,一般我們用的單位是kbps即千位每秒。通俗一點的理解就是取樣率,單位時間內取樣率越大,精度就越高,處理出來的檔案就越接近原始檔案,但是檔案體積與取樣率是成正比的,所以幾乎所有的編碼格式重視的都是如何用最低的碼率達到最少的失真。但是因為編碼演算法不一樣,所以也不能用碼率來統一衡量音質或者畫質。
另一個常見的詞是幀,它是一段資料的群組,它是資料轉送的基本單位。就是辨識動畫中最小單位的單幅辨識畫面,相當於電影膠片上的每一格鏡頭。一幀就是一副靜止的畫面,連續的幀就形成動畫,如電視影像等。
與之相對應的幀率,即每秒顯示幀數,幀率表示圖形處理器處理場時每秒鐘能夠更新的次數。高的幀率可以得到更流暢、更逼真的動畫。一般來說30fps就是可以接受的,但是將效能升階至60fps則可以明顯升階互動感和逼真感,但是一般來說超過75fps一般就不容易察覺到有明顯的流暢度升階了。如果幀率超過螢幕排清率只會浪費圖形處理的能力,因為監視器不能以這麼快的速度更新,這樣超過新率的幀率就浪費掉了。
這裡闕寒想帶我們再展開聊一下視訊框架
音訊框架一般可以硬地解碼,可以直播播放。
而視訊分為視訊主要畫面格和非主要畫面格,主要畫面格可以硬地解碼渲染,播放機拿到後可以直接看到畫面,一般10K以上甚至幾十K;其他非主要畫面格解碼依賴於前面的一些視訊框架,播放機會根據前面的幀和這一幀來解碼產生畫面,非主要畫面格一般大小是幾K甚至不到1K。對於播放機來說,伺服器一般會從視訊主要畫面格開始傳送,這樣才不會產生花屏。
對於節點上直播伺服器隱藏的內容,如果是檔案加速,節點上隱藏的內容很明確,就是檔案資料,URL不變的話檔案資料內容也不變。但是對於直播來講,傳輸的就是幀資料,快取的也是不斷變化的幀序列資料。
下面的圖裡我們可以看到,本期的伺服器快取了V1-V3五幀資料,當V4這個主要畫面格出現了,伺服器把之前的丟掉,開始快取V4開始的音視訊資料,以這個原則許諾過來的播放端都是本期最新的資料。一般直播伺服器都是用這個原則來進行伺服器快取的。
下面進入正題,常見的CDN加速包括檔案加速、點播、直播三種商務。最開始阿裡雲CDN是從檔案加速開始,針對的主要是內部客戶,像淘寶,它的圖片非常多,那時候支援的都是小檔案加速。後來隨著各BU的端產品衍生,逐漸會支援大的檔案下載商務;等阿裡雲CDN正式作為產品上線商業化時候,開始支援點播商務。2015年下半年,開始支援直播商務。今天闕寒主要從直播概觀、直播架構、商務功能和場景來介紹下阿裡雲CDN直播系統。
一、直播概觀
通常,視訊直播常見兩種形式是手機直播和遊戲直播,手淘、陌陌、映客的典型的手機直播平臺,遊戲直播就是像鬥魚、全民TV等平臺。其實對於播放端來講,直播和點播都是向伺服器追蹤視訊資料,播放端對聲音和畫面進行播放的程序。從這個角度來講,直播和點播區別並不大。
那直播和點播究竟區別在哪裡?
對於視訊點播,你在看的時候,你可以隨時選擇快進和回復。直播卻不能。
對於視訊網站上的視訊檔案來講,點播可以選擇今天看或明天看,但是直播卻不能選擇時間,像每週末的聯賽只在固定的時間播放。一些機上盒提供回看的功能,也是點播。
所以迴歸正題,簡而言之,直播就是每一幀資料打上時序標籤後進行串流的程序。傳送端源源不斷的採集音視訊資料,經過編碼、封包、推流、再經過分發網路進行擴散傳播,播放端再源源不斷地下載資料並按時序進行解碼播放。如此就產生了邊生產、邊傳輸、邊消費的直播程序。
我們將視訊直播整個流程主要分為幾個關鍵階段:視訊採集、前處理、編碼、推流、轉碼、分發、播放,下圖為簡化版直播系統的基本架構,後面我們再詳細展開。
1.採集,是視訊直播開始的第一個環節,使用者可以通過不同的終端採集視訊,也就是主播直播的程序。iOS端適配性較好,採集起來比較簡單。Android端因為一直以來市面機型多組建複雜種種情況,加大了一個庫適配所有硬體的難度,採集起來相對比較困難。PC端則和網路攝影機驅動連線緊密,目前市面上最好的PC端源免費軟體是OBS。
2.前處理,業內有一種說法,80%的主播沒有美顏根本沒法看。所以美顏已經是對視訊源進行前處理的標配功能,除此之外還有浮水印、柔邊特效等,針對不同的手機系統提供不同的處理庫。
3.編碼,編碼時候我們需要處理的硬體相容性問題和尋求碼率和畫質之前的平衡是最大的兩個問題。iOS系統硬體相容性比較好,可以採用硬編,Android系統則還是因為硬體機型問題,大多採用軟編。
4.推流與轉碼,在資料轉送的整個程序中從主播端到伺服器端,再到邊緣節點,以及從邊緣節點到播放端。為了讓採集端的流適配各個平臺端不同合約,一般都會在服務端進行轉碼處理,將視訊檔案轉成不同格式,支援RTMP、HLS和FLV等不同的合約。
5.分發,隨著移動直播興起和遊戲直播的持續火熱,網路直播平臺支援億高並行是理論上應該做到的,為了優化終端觀看直播的體驗,一般都會採用CDN進行內容分發加速,實現高並行等能力。
6.用戶端播放,也就是解碼和渲染,目前iOS 端的播放相容性較好,Android的硬體解碼和編碼一樣也存在相容性問題。通常秒開、低延時等問題是需要在播放端來克服的。
二、直播架構
這是一張阿裡雲直播全景解決方案的圖,這裡包括詳細的推流端推流,直播中心的流隱藏,轉碼剪取錄製等視訊處理,CDN智慧調度與分發,最後到播放端播放整個程序。
- 對於推流端推流,目前主要使用的是RTMP合約,播放可以使用RTMP、HTTP FLV和HLS合約,常用的推流端是OBS、手機APP、FFmpeg;播放端包括Flash、VLC、HTML5、手機APP等形式;
- 視訊直播中心擁有穩定的推流上行鏈路,支援連麥、IM、直播間管理等分豐富的直播服務端實現流能力;
- CDN直播分發提供流暢的播放下行鏈路,700多個國內節點和300多個海外節點,還有豐富的小電訊廠商節點。
- 對於播放端,我們做了首屏秒開優化和弱網跳幀播放,確保使用者體驗。
對於視訊直播伺服器的一個流程上來講,我們可以認為一個推流端和多個播放端是一種非常典型的發佈和訂閱的關聯。
從下圖可以看到,主播完成發佈動作,這條直播內容也就是這一路流推動到伺服器,三個觀眾也就是訂閱者,從伺服器拉流,也就是用播放動作來完成推流。這種內含式部、節點之間的發佈、訂閱關聯是一種級聯的關聯,CDN的直播分發就是依靠這種圖樣構建。
那下面我們從CDN分發的角度來基礎架構是怎樣的。內容通過隱藏集群到達發佈集群,再通過骨幹中轉環境的L2,利用CDN智慧調度到達L1,也就是距離用戶最近的節點,從順利的發送給用戶。
三、商務功能及場景
說完了架構,闕寒帶我們來瞭解商務功能和阿裡雲CDN的套用場景。對於直播來講,轉碼這個商務功能很重要。轉碼後會在原始流名上加尾碼,下圖是轉碼前後的畫質、碼率的區別。和轉碼相關的有浮水印、動態範本、延遲轉碼等功能。
剪取也是比較重要的商務,比如說直播平臺網頁分類下有很多張圖片,排清後圖片會變化,都是靠週期性剪取來完成。除此之外,阿裡雲也開放對直播進行動態設定、錄製、開播斷流回檔、推流播放鑒權、斷流、黑名單、禁播、各種介面API、轉推其他廠商、觸發式拉流、連麥、播放純音訊/視訊等。
另外比較重要的是直播資料的監控,對客戶和我們來說,能時刻追隨直播情況,掌握直播資料,對於防範問題來說是十分必要的。視訊監控是用來記錄一路流重要訊息,比如常見的視訊碼率、播放流量和線上人數、視訊框架率監控。視訊的屬性是每秒鐘幀率比較固定,視訊框架大概是20~30幀/秒, 造成卡頓的主要原因一般是網路鏈路的遞色,有了全鏈路秒級幀率監控圖之後,排查問題變得非常的方便,針對一路流卡頓以及客戶提出的各種問題可以很快的就明確原因。
正常的監控圖應該是一條直線,上圖的幀率出現的突刺,就是因為公網網路連接遞色後統計出來的資料降低。對於一路流多個播放端來講,伺服器會不斷把幀資料寫給播放端,一旦網路遞色,遇到寫不出去的情況會將這一幀放到已連結等待佇列裡,超出了幀佇列的長度節流,伺服器會選擇丟幀。一般這種情況產生是因為網路遞色的比較嚴重,我們也會以此為依據來確定網路全鏈路的品質,用紅綠顏色來標注區分正常和非正常的鏈路品質。
那以上的架構和商務功能都可以套用於哪些場景呢?我們也對阿裡雲視訊直播CDN服務的客戶場景進行了歸類積存,主要有以下五個方向:
1.UGC互動直播:不僅提供推流到播放的全套直播解決方案,而且整合成熟的互動解決方案,包括IM,連麥等功能。例如:一直播、映客等直播互動平臺。
2.電商直播:為電商直播提供全套直播解決方案,支援動態擴充的直播技術架構,無需擔心直播促銷湧入的峰值流量擔憂。例如:手淘等電商直播平臺。
3.運動賽事/大型綜藝節目直播:為熱門的賽事和綜藝直播提供動態擴充的直播服務,通過CDN和PCDN的分發,用戶無需為突然湧入的流量擔憂。例如:CCTV5,等電視直播平臺。
4.遊戲直播:對遊戲直播提供各種採集裝置的接入,以及直播的錄製功能,便於遊戲直播平臺提供點播服務。例如:全民,熊貓,等遊戲直播平臺。
5.線上教育/財經直播:提供直播鑒權、直播防竊鏈、URL加密等功能,為教育、財經類的直播提供安全保障。例如:第一財經等財經平臺和知圖教育等教育類直播平臺。
以上就是阿裡雲直播CDN相關的內容,目前,超過一半的視訊直播、點播平臺都在使用阿裡雲的直播服務,我們會通過不斷豐富和升級視訊服務能力,打造圍繞視訊領域的技術生態。
相關產品:
- CDN
- 視訊直播
- 媒體轉碼