隨着直播業務的興起,愈來愈多的直播平臺開始涌現,這火熱的程度好像一個應用不帶上直播業務出來都很差意思跟人打招呼。想要作一個直播業務,主要包括三個部分:採集推流端、流媒體服務端、播放端。這裏很少說,就主要結合 iOS 平臺,從觀看端出發,介紹一下對直播協議的選擇。html
一般在 iOS 平臺作直播業務,會有兩種協議可供選擇:HLS 和 RMTP。緩存
上面是這兩種協議的簡介,那它們在實際應用中會有什麼差別呢?服務器
先說說 HLS。HLS 的基本原理就是當採集推流端將視頻流推送到流媒體服務器時,服務器將收到的流信息每緩存一段時間就封包成一個新的 ts 文件,同時服務器會創建一個 m3u8 的索引文件來維護最新幾個 ts 片斷的索引。當播放端獲取直播時,它是從 m3u8 索引文件獲取最新的 ts 視頻文件片斷來播放,從而保證用戶在任什麼時候候鏈接進來時都會看到較新的內容,實現近似直播的體驗。相對於常見的流媒體直播協議,例如 RTMP 協議、RTSP 協議等,HLS 最大的不一樣在於直播客戶端獲取到的並非一個完整的數據流,而是連續的、短時長的媒體文件,客戶端不斷的下載並播放這些小文件。這種方式的理論最小延時爲一個 ts 文件的時長,通常狀況爲 2-3 個 ts 文件的時長。HLS 的分段策略,基本上推薦是 10 秒一個分片,這就看出了 HLS 的缺點:網絡
不過 HLS 也有它的優勢:ide
相對於 HLS 來講,採用 RTMP 協議時,從採集推流端到流媒體服務器再到播放端是一條數據流,所以在服務器不會有落地文件。這樣 RTMP 相對來講就有這些優勢:設計
所以業界大部分直播業務都會選擇用 RTMP 做爲流媒體協議。一般會將數據流封裝成 FLV 經過 HTTP 提供出去。可是這樣也有一些問題須要解決:代理