視頻雲直播:場景、技術及優化

隨着互聯網視頻化的發展,各類網絡直播產品層出不窮,涌現出了秀場直播、遊戲直播、教育直播、演唱會直播和監控直播等多個直播生態圈。這些生態圈形成的背後,是視頻直播相關技術的不斷髮展,例如互聯網帶寬的日益增加,視頻壓縮標準的日漸完善,視頻雲技術的出現等。特別是視頻雲技術的出現,它降低了開發者的准入門檻,解決了視頻企業的“三高”之痛,即技術門檻高、成本高、卡頓延時率高,爲未來幾年視頻直播的大爆發奠定了堅實的技術基礎。


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碼流轉換爲不同終端能夠播放的信號數據。


結語

本文,只是簡要介紹了視頻雲直播的基本內容。隨着互聯網的發展,視頻雲直播技術將會不斷演化完善,成爲雲大潮中必要的一環。


http://mp.weixin.qq.com/s?__biz=MzI0MjEwNTUyOA==&mid=401472465&idx=1&sn=0961d8c81beb70dee924df416e321bc7&scene=23&srcid=03236P1eR6oJuQxlFoGRGqaa#rd

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章