隨著直播行業大火,遊戲、樂秀、教育、釋出會等直播類產品層出不窮,能夠滿足各方人員的需求。在直播中,總能在其中找到適合自己的產品內容。喜歡玩遊戲的可以看遊戲直播,想學點工作技能的,也可以觀看大牛現場授課,甚至你能通過直播跟各大主播實時互動。看了這麼多直播,你好像發現了一個小祕密,不同型別的直播延時有所不同,像與主播實時互動的一般延遲比較短,而相對的,線上教育這一類就比較長了。這就是我今天想給大家講解的一些東西,除了網路環境以外,對延時影響較大的就是直播架構中選擇的直播協議。接下來,我就給大家簡單介紹下常見的直播協議吧。
常見的直播協議
國內常見的直播協議有幾個:RTMP、HLS、HTTP-FLV,下面我們來一一介紹。
RTMP,全稱 Real Time Messaging Protocol,即實時訊息傳送協議。Adobe 公司為 Flash 播放器和伺服器之間音視訊資料傳輸開發的私有協議。工作在 TCP 之上的明文協議,預設使用埠 1935。協議中的基本資料單元成為訊息(Message),傳輸的過程中訊息會被拆分為更小的訊息塊(Chunk)單元。最後將分割後的訊息塊通過 TCP 協議傳輸,接收端再反解接收的訊息塊恢復成流媒體資料。
RTMP 主要有以下幾個優點:RTMP 是專為流媒體開發的協議,對底層的優化比其它協議更加優秀,同時它 Adobe Flash 支援好,基本上所有的編碼器(攝像頭之類)都支援 RTMP 輸出。現在 PC 市場巨大,PC 主要是 Windows,Windows 的瀏覽器基本上都支援 Flash。另外RTMP適合長時間播放,曾經有過測試,聯絡 100 萬秒,即 10 天多連續播放沒有出現問題。最後 RTMP 的延遲相對較低,一般延時在 1-3s 之間,一般的視訊會議,互動式直播,完全是夠用的。
當然 RTMP 並沒有盡善盡美,它也有不足的地方。一方面是它是基於 TCP 傳輸,非公共埠,可能會被防火牆阻攔;另一方面,也是比較坑的一方面是 RTMP 為 Adobe 私有協議,很多裝置無法播放,特別是在 iOS 端,需要使用第三方解碼器才能播放。
FLV (Flash Video) 是 Adobe 公司推出的另一種視訊格式,是一種在網路上傳輸的流媒體資料儲存容器格式。其格式相對簡單輕量,不需要很大的媒體頭部資訊。整個 FLV 由 The FLV Header, The FLV Body 以及其它 Tag 組成。因此載入速度極快。採用 FLV 格式封裝的檔案字尾為 .flv。
而我們所說的 HTTP-FLV 即將流媒體資料封裝成 FLV 格式,然後通過 HTTP 協議傳輸給客戶端。
HTTP-FLV 依靠 MIME 的特性,根據協議中的 Content-Type 來選擇相應的程式去處理相應的內容,使得流媒體可以通過 HTTP 傳輸。相較於 RTMP 協議,HTTP-FLV 能夠好的穿透防火牆,它是基於 HTTP/80 傳輸,有效避免被防火牆攔截。除此之外,它可以通過 HTTP 302 跳轉靈活排程/負載均衡,支援使用 HTTPS 加密傳輸,也能夠相容支援 Android,iOS 的移動端。
說了這麼多優點,也來順便說下 HTTP-FLV 的缺點,由於它的傳輸特性,會讓流媒體資源快取在本地客戶端,在保密性方面不夠好。因為網路流量較大,它也不適合做拉流協議。
上述兩個協議都是有Adobe公司推出的,而下面要講的 HLS (HTTP Live Streaming) 則是蘋果公司基於 HTTP 的流媒體傳輸協議。主要應用於 iOS 裝置,包含(iPhone, iPad, iPod touch) 以及 Mac OSX 提供音視訊直播服務和錄製內容(點播)等服務。
相對於常見的流媒體協議,HLS 最大的不同在於它並不是一下請求完整的資料流。它會在伺服器端將流媒體資料切割成連續的時長較短的 ts 小檔案,並通過 M3U8 索引檔案按序訪問 ts 檔案。客戶端只要不停的按序播放從伺服器獲取到的檔案,從而實現播放音視訊。
相較 RTMP 而言,使用 HLS 在 HTML5 頁面上實現播放非常簡單:
直接:
或者:
HLS 的優勢:
- Apple 的全系列產品支援:由於 HLS 是蘋果提出的,所以在 Apple 的全系列產品包括 iPhone、 iPad、safari 都不需要安裝任何外掛就可以原生支援播放 HLS, 現在 Android 也加入了對 HLS 的支援。
- 穿透防火牆。基於 HTTP/80 傳輸,有效避免防火牆攔截
- 效能高。通過 HTTP 傳輸, 支援網路分發,CDN 支援良好,且自帶多位元速率自適應,Apple 在提出 HLS 時,就已經考慮了碼流自適應的問題。
HLS 的劣勢:
- 實時性差,延遲高。HLS 的延遲基本在 10s+ 以上
- 檔案碎片。特性的雙刃劍,ts 切片較小,會造成海量小檔案,對儲存和快取都有一定的挑戰
流媒體協議 RTMP, HTTP-FLV, HLS 簡單對比
RTMP 協議為流媒體而設計,在推流中用的比較多,同時大多 CDN 廠商支援RTMP 協議。
HTTP-FLV 使用類似 RTMP流式的 HTTP 長連線,需由特定流媒體伺服器分發的,兼顧兩者的優點。以及可以複用現有 HTTP 分發資源的流式協議。它的實時性和 RTMP 相等,與 RTMP 相比又省去了部分協議互動時間,首屏時間更短,可擴充的功能也更多。
HLS 作為蘋果提出的直播協議,在 iOS 端佔據了不可撼動的地位,Android 端也同時提供相應的支援。
又拍雲一站式直播解決方案基於又拍雲 CDN,支援 RTMP、HTTP-FLV 和 HLS 三大直播協議,並且通過智慧排程、鏈路保障、追幀處理、丟幀處理以及業界首創的 HLS+ 技術,將 RTMP、HTTP-FLV 直播延遲控制在1秒內,將 HLS 直播延時控制在 4 秒左右。
推薦閱讀:
戰旗石碩:直播的使用者體驗體系與質量監控方案