直播中的推流

之前,連“推流”這個詞都沒有聽過。第一次聽到這個詞的時候,東查查西查查,整理了一下,現在把它貼出來。

1 什麼是推流

“推流”其實就是將現場的視頻信號傳到網絡的過程。“推流”對網絡要求比較高,如果網絡不穩定,直播效果就會很差,觀衆觀看直播時就會發生卡頓等現象,觀看體驗很是糟糕。

2 推流過程

 採集是整個視頻推流過程中的第一個環節,它從系統的採集設備中獲取原始視頻數據,將其輸出到下一個環節。視頻本質上講是一系列圖片連續快速的播放,在加上聲音。所以採集視頻數據主要包括2個方面,音頻採集和圖像採集,它們分別對應兩種完全不同的輸入源和數據格式。採集完成之後,需要對數據進行處理。音頻數據處理主要是去噪音、去迴音、混音;圖像數據處理則是視頻 加水印、美顏等。經過處理,將數據編碼封裝,編碼核心思想就是去除冗餘信息。編碼性能、編碼速度和編碼壓縮比會直接影響整個流媒體傳輸的用戶體驗和傳輸成本。接下來就是推流了。具體流程如下。

1) 經過輸出設備(AVCaptureVideoDataOutput)得到原始的採樣數據–視頻數據(YUV)和音頻數據(AAC);
2)使用硬編碼(對應系統的API)或軟編碼(FFMpeg)來編碼壓縮音視頻數據;
3)分別得到已編碼的H.264視頻數據和AAC音頻數據;
4)根據不同的封裝格式(如FLV、TS、MPEG-TS);
5)使用HLS協議的時候加上這一步(HLS分段生成策略及m3u8索引文件);
6) 通過流上傳到服務器;
7) 服務器進行相關協議的分發。
優化一:適當的Qos(Quality of Service,服務質量)策略。
推流端會根據當前上行網絡情況控制音視頻數據發包和編碼,在網絡較差的情況下,音視頻數據發送不出去,造成數據滯留在本地,這時,會停掉編碼器防止發送數據進一步滯留,同時會根據網絡情況選擇合適的策略控制音視頻發送。
比如網絡很差的情況下,推流端會優先發送音頻數據,保證用戶能聽到聲音,並在一定間隔內發關鍵幀數據,保證用戶在一定時間間隔之後能看到一些畫面的變化。
優化二:合理的關鍵幀配置。
合理控制關鍵幀發送間隔(建議2秒或1秒一個),這樣可以減少後端處理過程,爲後端的緩衝區設置更小創造條件。

3 軟硬編解選擇
關於選擇軟解還是硬解,但根本問題是,沒有一個通用方案能最優適配所有操作系統和機型。
推流編碼: 推薦Andorid4.3(API18)或以上使用硬編,以下版本使用軟編;iOS使用全硬編方案;

播放解碼:Andorid、iOS播放器都使用軟解碼方案,雖然犧牲了功耗,但是在部分細節方面表現會較優,且可控性強,兼容性也強,出錯情況少,使用較多。

軟編碼解碼(軟件方式進行編解碼):優點——兼容性強,對系統版本要求較低、出錯少;缺點——cpu消耗比較大。

硬編碼解碼(硬件方式直接編解碼):優點——顯然是功耗低,執行效率高;缺點——不同的芯片對編解碼的實現不同,不能保證編解碼效果與其他機型一直或者不會出錯,可控性比較差。

4 主流推流協議
RTMP【我司使用的推流協議】
直播中使用廣泛的“推流協議”一般是RTMP(Real Time Messaging Protocol——實時消息傳輸協議)。
該協議是一個基於TCP的協議族,是一種設計用來進行實時數據通信的網絡協議,主要用來在Flash/AIR平臺和支持RTMP協議的流媒體/交互服務器之間進行音視頻和數據通信。支持該協議的軟件包括Adobe Media Server/Ultrant Media Server/red5等。
RTMP是Real Time Messaging Protocol(實時消息傳輸協議)的縮寫,是Adobe公司爲Flash/AIR平臺和服務器之間音、視頻及數據傳輸開發的實時消息傳送協議。RTMP協議基於TCP,包括RTMP基本協議及RTMPT/RTMPS/RTMPE等多種變種。
RTMP協議中,視頻必須是H264編碼,音頻必須是AAC或MP3編碼,且多以flv格式封包。RTMP是目前最主流的流媒體傳輸協議,對CDN支持良好,實現難度較低,是大多數的直播平臺的選擇。
不過RTMP有着一個最大的不足——不支持瀏覽器,且Adobe已不再更新。因此直播服務要支持瀏覽器的話,需要另外的推送協議支持。

HLS
Http Live Streaming是由Apple公司定義的基於HTTP的流媒體實時傳輸協議。它的原理是將整個流分爲多個小的文件來下載,每次只下載若干個。服務器端會將最新的直播數據生成新的小文件,客戶端只要不停的按順序播放從服務器獲取到的文件,就實現了直播。基本上,HLS是以點播的技術實現了直播的體驗。因爲每個小文件的時長很短,客戶端可以很快地切換碼率,以適應不同帶寬條件下的播放。
分段推送的技術特點,決定了HLS的延遲一般會高於普通的流媒體直播協議。
傳輸內容包括兩部分:一是M3U8描述文件,二是TS媒體文件。TS媒體文件中的視頻必須是H264編碼,音頻必須是AAC或MP3編碼。
由於數據通過HTTP協議傳輸,所以完全不用考慮防火牆或者代理的問題,而且分段文件的時長很短,不過HLS的

WebRTC
WebRTC(Web Real-Time Communication),即“源自網頁即時通信”。WebRTC是一個支持瀏覽器進行實時語音、視頻對話的開源協議。WebRTC的支持者甚多,Google、Mozilla、Opera推動其成爲W3C推薦標準。
WebRTC支持目前的主流瀏覽器,並且基於SRTP和UDP,即便在網絡信號一般的情況下也具備較好的穩定性。
此外,WebRTC可以實現點對點通信,通信雙方延時低,是實現“連麥”功能比較好的選擇。

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