視頻雲直播:場景、技術及優化
隨著互聯網視頻化的發展,各類網路直播產品層出不窮,湧現出了秀場直播、遊戲直播、教育直播、演唱會直播和監控直播等多個直播生態圈。這些生態圈形成的背後,是視頻直播相關技術的不斷發展,例如互聯網帶寬的日益增加,視頻壓縮標準的日漸完善,視頻雲技術的出現等。特別是視頻雲技術的出現,它降低了開發者的准入門檻,解決了視頻企業的「三高」之痛,即技術門檻高、成本高、卡頓延時率高,為未來幾年視頻直播的大爆發奠定了堅實的技術基礎。
1.簡介
所謂視頻雲直播技術,就是用雲端模式,提供視頻直播解決方案的技術,它涉及視頻直播的各個環節,例如直播視頻採樣、編碼、推流、轉碼、分發、拉流、解碼和播放等。使用Iaas、Paas和Saas三種形式,視頻雲直播能為各種場景的直播應用提供介面級服務、平台級服務和產品級服務。依託視頻雲,直播開發者不在關心視頻和網路的細節,他們只要把精力集中於產品應用層面即可。未來,網路直播產品將會表現為如下一種形態:上層多樣化的直播模式 + 下層組件化的視頻雲模式。
深入視頻雲直播內部,會發現其具有複雜化、多樣化和組件化的特點。所謂複雜化,是指音視頻技術複雜和互聯網環境複雜;所謂多樣化,是指直播應用場景具有多樣性;所謂組件化,是指直播技術各個環節的模塊化和獨立性。在視頻雲直播中,技術主線永遠是音視頻流的輸入、傳輸和輸出。但針對每一類直播場景,使用的具體技術和實現手段都不一樣。隨著直播量級的變化,必須對視頻雲各個環節進行優化,以化解流量暴增帶來的壓力。因此,視頻雲直播的構建是一項艱巨的任務。接下來,本文將從場景、技術和優化三個角度,詳細闡述視頻雲直播。
2. 一對多直播場景
考慮如下一種場景:一個主播者坐在電腦前,通過前置攝像頭和麥克風,把自己的音視頻信息輸出到網路上,多人在各地通過互聯網實時觀看主播者的表演。這就是經典的秀場直播。這裡存在幾個關鍵點:一、 音視頻傳輸;二、 實時;三、一對多。
首先講音視頻傳輸,它又細分為三點:源端的音視頻輸出、網路端的流傳輸和播放端的音視頻獲取。第一點音視頻輸出,首先必須收集主播的聲音和圖像,就是所謂的音視頻採集;採集後的聲音和圖像,需要轉換成位元組碼、混合併壓縮,最後封裝成某種音視頻格式,就是所謂的音視頻編碼;編碼後的音視頻格式,還不能在網路傳輸,需要轉換成某種碼流,如RTMP,然後推送到網上,即上傳碼流到伺服器,就是所謂的推流。上述「採樣-編碼-推流」,構成了視頻雲直播端的核心功能。第二點音視頻碼流的網路傳輸,把主播者的音視頻流分發傳輸給所有觀看者;對於無法適配源端碼流的觀看者,在網路端轉換碼流,使其也能正常觀看。上述「分發-轉碼」,構成了視頻雲服務端VDN(Video Delivery Network 視頻分發網路)的核心功能。第三點播放端的音視頻獲取,首先從網路獲取合適的音視頻碼流,就是所謂的拉流;然後對流進行解析,其中的音視頻格式進行解封,就是所謂的解碼;最後提取出單獨的音頻和視頻,進行播放。上述「拉流-解碼-播放」,構成了視頻雲播放端的核心功能。因此,如下圖所示,僅秀場直播場景的音視頻傳輸,就涵蓋了視頻雲三個核心點: 直播端、播放端和視頻分發網路,實現技術門檻很高。
接著講實時這一點,在直播場景中,延時性要求很高,基本不超過10秒。因此,傳統的文件上傳/下載模式,對於直播不可行。傳統的內容分發網路(CDN)也不適用直播。視頻雲必須開發獨特的流分發網路,應對直播場景實時性。同時,經典秀場直播無實時交互需求,延時性不要求1秒之內。因此流媒體傳輸,一般選用基於TCP的RTMP協議,無需選擇實現難度更大但延時更低的RTP類協議。
最後講一對多模式,就是一人講,多人聽。這是一種視頻雲直播最擅長解決的模式。在互聯網現實應用中,還有很多種其他模式,例如多對多模式,就是多人互動直播,即視頻會議;二對多模式,就是兩人互動,然後多人聽,即連麥;一對一模式,就是兩人視頻互動,即實時視頻聊天。各種模式,由於實時性要求不同,參與人數不同,實現難度各不相同。本文圍繞的場景是一對多模式,該模式最常用。
3. 直播關鍵技術
如下圖,視頻雲直播總體框架分為三層:上層是直播SDK、中間為API介面層、下面為雲端服務層。各層都有一些關鍵技術點,例如直播SDK層主要包含直播端推流和播放端拉流兩項關鍵技術;API介面層涉及安全控制這一關鍵技術;雲端服務層涉及VDN流分發這一關鍵技術。接下來,我們詳細描述這些技術點。
3.1 直播端/播放端
直播端和播放端是視頻雲直播SDK的核心。直播端是直播應用的起點,負責採樣、編碼和推流。播放端是直播應用的終點,負責拉流、解碼和同步播放。如下圖所示,播放端的處理基本上是直播端的一個逆過程。
採樣
直播SDK從設備驅動獲取音頻採樣數據和視頻採樣數據。其中,音頻採樣數據一般採用PCM格式、視頻採樣數據一般採用RGB或YUV格式。音視頻採樣數據體積非常大,因此需要經過壓縮處理,來降低數據量。編碼
編碼包含音頻編碼和視頻編碼。其中,音頻編碼負責壓縮音頻採樣;視頻編碼負責壓縮視頻採樣。常用的音頻壓縮編碼演算法有AAC、MP3、WMA等,其中AAC最常用。常用的視頻壓縮編碼演算法有H.264,H.265和VP8,其中H.264最常用。封裝
獨立的音頻壓縮數據和視頻壓縮數據,需要經過封裝處理,放到一個統一格式的文件中。常用的分裝格式有:MP4、TS、FLV、RMVB、AVI等,視頻雲中,常用的有MP4、TS和FLV。
推流
分裝後的音視頻數據,還需要再次進行傳輸協議封裝,變成流數據,用於網路傳輸。常用的流傳輸協議有RTSP、RTMP、HLS等。生成的音視頻流數據,也稱碼流,首先放到流緩衝隊列中,然後按照一定的Qos演算法發送到網路端。關於Qos,我們將在下文中描述。自此,整個直播端的流程已描述完畢。接下來,講述播放端。拉流
拉流是推流的逆過程。首先,從網路端獲取碼流,並把數據放到緩存隊列。然後,按照一定的速率,從緩存獲取碼流,解傳輸協議,獲取其中分裝數據。解封
解封裝過程,從封裝格式中提取音頻壓縮數據和視頻壓縮數據。為封裝過程的逆過程。解碼
解碼過程,各種從音頻壓縮數據和視頻壓縮數據中,提取原始數據。由於編碼演算法一般為有損壓縮演算法,提取後的原始數據,並非原始採樣數據,存在一定的信息丟失。同步播放
各種獲取的音視頻數據,必須經過同步處理,才能播放。
上述,就是直播音視頻在客戶端的整個流程,其技術基本分為兩塊:一塊為傳統音視頻處理技術;第二塊是碼流處理技術。傳統音視頻處理已經很成熟,作為視頻雲直播一般會選用通用框架實現這部分功能,例如ffmpeg、vlc、gstreamer等。音視頻處理中,唯一需要重點考慮的是視頻編碼選擇。在音視頻流中,視頻大小佔據90%以上空間,視頻編解碼演算法的好壞,直接決定直播碼流大小,因此是視頻雲直播的一個性能瓶頸點。當前,業界一般會選擇H.264作為視頻編解碼演算法。
接著講碼流處理。碼流處理就是音視頻碼流在客戶端的處理和控制技術,主要包括碼流演算法實現和Qos服務。常用的碼流演算法有RTSP和RTMP,其中RTSP基於UDP或TCP,在視頻會議領域廣泛採用;RTMP基於TCP,在直播中廣泛採用。這些碼流演算法協議公開,存在各種版本的lib庫,因此在客戶端實現難度較小。Qos服務是用來解決網路延遲和擁塞等問題的技術,通俗的講就是用來解決網路不穩定的一項安全機制。在直播場景中,Qos需要保證網路不穩定情況下,觀看者仍能觀看直播內容,基本無卡頓。這需要客戶端提供一系列的功能保證Qos,其中最主要的功能如下:一. 直播/播放兩端設置緩存,使碼流處理勻速,以避免播放抖動;二. 在播放端根據場景或網路情況,動態選擇碼率、幀率等參數;三. 選擇一定的丟棄或重傳演算法,以應對網路極差情況;四. 按照一定的延時性/流暢性要求,選擇緩存大小等。Qos服務無固定演算法,視頻雲根據特定的場景提供特定的Qos保證,需完全自主開發設計。
3.2 流分發
視頻雲直播服務端的核心是流分發,由流分發網路VDN負責實現。整個VDN的框架如上圖所示,包含:流媒體服務集群、邊緣伺服器集群、轉碼伺服器集群和智能負載均衡系統。與靜態文件分發網路CDN類似,VDN系統分為中心和邊緣兩層,邊緣層直接跟用戶連接,中心層負責伺服器間的內容轉發。邊緣層的核心是邊緣伺服器,它部署於全國各地及橫跨各大運營商,例如北上廣、移動聯通電信等。負載均衡系統,根據用戶的地理位置信息,就近選擇邊緣伺服器,為用戶提供推/拉流服務。中心層的核心是流媒體服務集群,該集群接收來自邊緣伺服器的碼流數據,並轉發給需要該碼流的其他邊緣伺服器。同時,中心層也負責轉碼服務,例如把RTMP協議的碼流轉換為HLS/TS碼流等。負載均衡系統負責中心層和邊緣層的路由。整個VDN的設計非常複雜,本文不具體展開,接下來只是簡單介紹一下上/下行加速、低延時設置等機制。有興趣的朋友可以查閱SRS(Simple Rtmp Server)開源文檔,了解VDN詳情。
上行加速
上行推流加速,又稱上行邊緣加速。客戶端根據VDN智能路由系統,選擇最近的邊緣伺服器。然後,客戶端推流到該伺服器,邊緣伺服器把流轉發給中心伺服器。由於上行推流和下行拉流可能在同一台伺服器,因此上行邊緣伺服器只會做簡單的代理轉發,把流轉發給中心伺服器或上層。下行加速
下行拉流加速,又稱下行邊緣加速。客戶端首先向邊緣伺服器取流,邊緣伺服器存在流,則直接給用戶;如果不存在流,就執行回源模式,向相應的中心伺服器取流。對於非原始格式流,則進行轉碼操作。轉碼可在中心層,或邊緣層執行。低延時機制
對於直播場景,特別是交互直播場景,需要低延時,一般為1-3秒。對於RTMP流分發,可以通過如下幾個機制來降低延時:一. 降低讀/寫合併時間;二. 降低GOP;三. 減少累計延時隊列。跟磁碟flush策略一樣,VDN也通過一次性讀/寫幾毫秒流數據,來提高吞吐量,但增加了延時性。通過關閉讀/寫合併,或者降低讀寫合/並時間,可以降低延時性。GOP是音視頻術語,指兩個I幀之間的時間距離。I幀就是關鍵幀。GOP的大小,決定了延時性。GOP設置越小,延時性越低,但壓縮率也越低。VDN提供累計延時隊列,避免流數據丟失。如果減少隊列長度,會增加數據丟失概率,但降低了延時性。3.3 安全機制
視頻雲直播在API層提供了一整套的安全機制,避免非法訪問,盜鏈等安全問題。如下圖所示,視頻雲安全機制的原理比較簡單,利用一對公私鑰,對訪問請求進行簽名加密,生成簽名令牌TOKEN。在雲端通過相同的演算法,驗證TOKEN的有效性,從而達到安全保護的目的。
在視頻雲場景中,請求認證來自於兩端:用戶伺服器端和用戶客戶端。這兩端的安全認證邏輯略有不同。對於用戶伺服器端,本身保存有公私鑰對,根據簽名演算法,能自動產生TOKEN。對於用戶客戶端,因為無法獲取公私鑰對,TOKEN必須由用戶伺服器產生,並下發給客戶端。因而,每次客戶端訪問視頻雲,必須首先向伺服器獲取TOKEN。這是最為安全的做法。該安全策略,客戶端一次訪問雲服務,需要兩次交互,較為繁瑣。有些視頻雲實現,降低安全性,為每個客戶端下發一個帶時效性的TOKEN,甚至是一個永久有效的TOKEN。這樣交互流程更加便捷,但極大的降低了安全性。
直播推拉流也採用了TOKEN簽名演算法機制,以實現防盜鏈。根據應用的需要,我們可以設置推拉流加防盜鏈。考慮如下一種場景,演唱會直播,觀看者必須買電子門票,這種應用拉流必須加防盜鏈。再考慮一種情況,秀場,希望觀看者越多越好,這樣應用拉流無須加防盜鏈。
視頻雲直播中,安全認證演算法一般採用SHA1或者MD5這樣的數字簽名演算法,第一這些數字簽名演算法很難被逆向破解攻擊;第二相比非對稱加密演算法,數字簽名演算法執行效率更高。對於一些安全性要求特別高的應用場景,視頻雲還可提供頻道粒度的流加密,用對稱加密演算法,例如RC4之類的,把整個流進行加密,從而達到了絕對的安全。
4. 技術優化
前一節描述的視頻雲直播技術,能滿足基本的一對多直播場景需求。但隨著人們對音視頻需求的不斷提升,以及直播場景的不斷豐富,單純基於RTMP的直播方案已不能滿足所有需求。因此需要在技術上提出一些變革性的優化,以適應場景變更。本節提出了五個優化點:一. 視頻壓縮技術優化;二. WEBRTC技術普及化;三. 基於UDP的VDN構建;四. 多碼流合併優化;五. 終端多樣化;。可以說,這五點也是視頻雲技術未來的發展方向。
視頻壓縮技術優化
視頻壓縮技術一直是音視頻領域的核心,視頻直播也不例外。一個好的視頻壓縮演算法,能極大的降低視頻內容大小,從而減少音視頻流碼率。當前,視頻雲廠商基本使用H.264(AVC) 視頻壓縮演算法。但該演算法對高清晰度和高幀率場景,以越來越力不從心。一些行業聯盟提出了一些替代方案,例如H.265(HEVC)和谷歌正在研發的VP10。特別是H.265,以得到了眾多廠商的支持,其壓縮率比H.264高40%左右。使用x265編解碼庫替換現有的x264庫,以支持H.265,成為了視頻雲發展的一個重要方向。WEBRTC技術普及化
WEBRTC是谷歌公司提出的純WEB端實時交互框架。視頻雲直播集成WEBRTC,能解決實時交互問題,例如網路視頻會議交互和二對多連麥交互等。同時,WEBRTC和HTML5天然集成,是純WEB視頻場景的最佳候選項。但視頻雲集成WEBRTC必須解決一系列難題:一. WEBRTC流媒體伺服器搭建;二.多路碼流合併;三. RTMP流傳輸協議和基於RTP的WEBRTC流傳輸協議互轉等。解決難題一,能夠構建出多人網路視頻會議;解決難題二,能夠降低帶寬流量消耗,對於交互場景節省成本;解決難題三,能夠實現視頻會議直播化,或者互動場景直播化。基於UDP的VDN構建
現有的VDN採用RTMP流傳輸協議,延時超過1秒,無法應對低延時交互場景,例如視頻會議。而基於UDP的RTP流傳輸協議,能夠解決低延時問題。要構建UDP-VDN,首先要改造已有VDN網路,使源流媒體伺服器和邊緣流媒體伺服器都支持UDP模式;其次必須支持通用的傳輸控制協議和信令協議,例如支持RTSP或者符合WEBRTC的SRTP+DSP;最後,對於交互場景,UDP-VDN也必須使用硬體MCU或者軟體MCU, 支持多路碼流合併。
多碼流合併優化
多路碼流合併,一般涉及MCU。MCU是多路控制單元的簡稱,在傳統視頻會議領域廣泛應用,它能把多路碼流進行合併轉換,是視頻會議解決方案的核心。傳統的視頻會議廠商,如思科、英特爾擅長於做硬體級的MCU,但是隨著CPU性能的提升以及多核的廣泛應用,軟體級MCU開始出現併流行。如果在視頻雲集成MCU,特別是軟體級MCU,能幫用戶節省帶寬。例如,秀場連麥場景,原來兩路拉流,現在只需要拉一路,能降低一半成本。終端多樣化
現有的視頻雲直播,只支持PC端和移動手機端。但是在現實生活中,有更多的端需要接入直播服務,例如智能攝像頭、VR設備、電視終端等。如果能把這些端接入視頻雲直播中,將會極大的豐富直播的應用場景。例如接入智能攝像頭,就能使是視頻會議直播化;接入VR設備,就能實現虛擬現實直播;接入電視終端,能夠通過電視看網路直播。要實現多終端接入,需要視頻雲直播實現終端適配層,該適配層能把不同信號源轉成視頻雲能夠識別的RTMP碼流,同時也能把RTMP碼流轉換為不同終端能夠播放的信號數據。結語
本文,只是簡要介紹了視頻雲直播的基本內容。隨著互聯網的發展,視頻雲直播技術將會不斷演化完善,成為雲大潮中必要的一環。
推薦閱讀:
※熊貓tv的主播有哪些好看的?
※如何看待羅永浩將開設「羅永浩 · 創業的乾貨日記」課程?
※各平台主播玩《絕地求生:大逃殺》時發生過哪些有趣、搞笑的事?
※瘋狂的直播(四)人物篇:瘋狂的主播和瘋狂的土豪
※為什麼CCTV不直播紅場閱兵?