search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

視頻直播CDN系統架構簡析及應用場景概述

作者|闕寒編輯|江柳

通常我們所說的視頻,是指連續的圖象變化每秒超過 24 幀(Frame)畫面以上時,根據視覺暫留原理,人眼無法辨別單幅的靜態畫面,看上去是平滑連續的視覺效果,這樣連續的畫面叫做視頻。

而媒體轉碼是指將一段多媒體包括音頻、視頻或者其他的內容從一種編碼格式轉換成為另外一種編碼格式。

其中內容分發網路就是大家常說的 CDN,這裡主要包含流媒體伺服器,負載均衡,路由重定向,視頻轉碼,視頻錄製存儲,防盜鏈,性能等相關技術內容。

本文主要從直播概述、直播架構、業務功能和場景來介紹下阿里雲 CDN 直播系統。

一、視頻相關辭彙介紹

在講解直播 CDN 技術之前,我們先來了解一些直播視頻的相關辭彙。

碼率:數據傳輸時單位時間傳送的數據位數,一般用的單位是 kbps 即千位每秒。通俗一點的理解就是取樣率,單位時間內取樣率越大,精度就越高,處理出來的文件就越接近原始文件,但是文件體積與取樣率是成正比的,所以幾乎所有的編碼格式重視的都是如何用最低的碼率達到最少的失真。但是因為編碼演算法不一樣,所以也不能用碼率來統一衡量音質或者畫質。

幀:是一段數據的組合,數據傳輸的基本單位。就是影像動畫中最小單位的單幅影像畫面,相當於電影膠片上的每一格鏡頭。一幀就是一副靜止的畫面,連續的幀就形成動畫,如電視圖像等。

幀率:每秒顯示幀數,幀率表示圖形處理器處理場時每秒鐘能夠更新的次數。高的幀率可以得到更流暢、更逼真的動畫。一般來說 30fps 就是可以接受的,但是將性能提升至 60fps 則可以明顯提升交互感和逼真感,但是一般來說超過 75fps 一般就不容易察覺到有明顯的流暢度提升了。如果幀率超過屏幕刷新率只會浪費圖形處理的能力,因為監視器不能以這麼快的速度更新,這樣超過新率的幀率就浪費掉了。

音頻幀一般可以獨立解碼,直播播放。而視頻分為視頻關鍵幀和非關鍵幀,關鍵幀可以獨立解碼渲染,播放器拿到后可以直接看到畫面,一般 10K 以上甚至幾十 K;其他非關鍵幀解碼依賴於前面的一些視頻幀,播放器會根據前面的幀和這一幀來解碼產生畫面,非關鍵幀一般大小是幾 K 甚至不到 1K。對於播放器來說,伺服器一般會從視頻關鍵幀開始發送,這樣才不會產生花屏。

對於節點上直播伺服器存儲的內容,如果是文件加速,節點上存儲的內容很明確,就是文件數據, URL 不變的話文件數據內容也不變。但是對於直播來講,傳輸的就是幀數據,緩存的也是不斷變化的幀序列數據。

下圖可以看到,當前的伺服器緩存了 V1-V3 五幀數據,當 V4 這個關鍵幀出現了,伺服器把之前的丟掉,開始緩存 V4 開始的音視頻數據,以這個策略保證過來的播放端都是當前最新的數據。一般直播伺服器都是用這個策略來進行伺服器緩存的。

常見的 CDN 加速包括文件加速、點播、直播三種業務。最開始阿里雲 CDN 是從文件加速開始,針對的主要是內部客戶,如淘寶,它的圖片非常多,支持的都是小文件加速。隨著各 BU 的端產品衍生,逐漸會支持大的文件下載業務。等阿里雲 CDN 正式作為產品上線商業化時候,開始支持點播業務。2015 年下半年,開始支持直播業務。

二、直播概述

通常,視頻直播常見兩種形式是手機直播和遊戲直播,手淘、陌陌、映客的典型的手機直播平台,遊戲直播就是像鬥魚、全民 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,也就是距離用戶最近的節點,從順利的推送給用戶。

四、業務功能及場景

對於直播來講,轉碼業務功能非常重要。轉碼後會在原始流名上加後綴,下圖是轉碼前後的畫質、碼率的區別。和轉碼相關的有水印、動態模板、延遲轉碼等功能。

截圖也是比較重要的業務,比如說直播平台頁面分類下有很多張圖片,刷新後圖片會變化,都是靠周期性截圖來完成。除此之外,阿里雲也開放對直播進行動態配置、錄製、開播斷流回調、推流播放鑒權、斷流、黑名單、禁播、各種介面 API、轉推其他廠商、觸髮式拉流、連麥、播放純音頻 / 視頻等。

另外比較重要的是直播數據的監控,對客戶和我們來說,能時刻關注直播情況,掌握直播數據,對於防範問題來說是十分必要的。視頻監控是用來記錄一路流重要信息,比如常見的視頻碼率、播放流量和在線人數、視頻幀率監控。視頻的特性是每秒鐘幀率比較固定,視頻幀大概是 20~30 幀 / 秒, 造成卡頓的主要原因一般是網路鏈路的抖動,有了全鏈路秒級幀率監控圖之後, 排查問題變得非常的方便, 針對一路流卡頓以及客戶提出的各種問題可以很快的就明確原因。

正常的監控圖應該是一條直線,上圖的幀率出現的突刺,就是因為公網網路連接抖動后統計出來的數據降低。對於一路流多個播放端來講,伺服器會不斷把幀數據寫給播放端,一旦網路抖動,遇到寫不出去的情況會將這一幀放到連接的等待隊列里,超出了幀隊列的長度限制,伺服器會選擇丟幀。一般這種情況產生是因為網路抖動的比較嚴重,我們也會以此為依據來確定網路全鏈路的質量,用紅綠顏色來標註區分正常和非正常的鏈路質量。

那以上的架構和業務功能都可以應用於哪些場景呢?我們也對阿里雲視頻直播 CDN 服務的客戶場景進行了歸類匯總,主要有以下五個方向:

  • 1、UGC 互動直播:不僅提供推流到播放的全套直播解決方案,而且集成成熟的互動解決方案,包括 IM,連麥等功能。例如:一直播、映客等直播互動平台。

  • 2、電商直播:為電商直播提供全套直播解決方案,支持動態擴展的直播技術架構,無需擔心直播促銷湧入的峰值流量擔憂。例如:手淘等電商直播平台。

  • 3、體育賽事/大型綜藝節目直播:為熱門的賽事和綜藝直播提供動態擴展的直播服務,通過 CDN 和 PCDN 的分發,用戶無需為突然湧入的流量擔憂。例如:CCTV5,等電視直播平台。

  • 4、遊戲直播:對遊戲直播提供各種採集設備的接入,以及直播的錄製功能,便於遊戲直播平台提供點播服務。例如:全民,熊貓,等遊戲直播平台。

  • 5、在線教育/財經直播:提供直播鑒權、直播防盜鏈、URL 加密等功能,為教育、財經類的直播提供安全保障。例如:第一財經等財經平台和知圖教育等教育類直播平台。

以上就是阿里雲直播 CDN 相關的內容,目前,超過一半的視頻直播、點播平台都在使用阿里雲的直播服務,阿里雲會通過不斷豐富和升級視頻服務能力,打造圍繞視頻領域的技術生態。

百度技術沙龍免費招募倒計時!本次百度將為開發者全面解析Apollo代碼開放框架、數據平台使用方法以及基於深度學習的End to End自動駕駛方案,想要了解百度Apollo平台的開放全內容嗎?快來掃描下方圖片二維碼或者點擊【閱讀原文】報名免費聽課吧!

細說雲計算

「細說雲計算」是InfoQ旗下關注云計算技術的垂直社群,投稿請發郵件到[email protected],註明「細說雲計算投稿」即可。



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦