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