參考:
流媒體協議介紹(rtp/rtcp/rtsp/rtmp/mms/hls) https://blog.csdn.net/u013008311/article/details/80405241
五種常見流媒體協議 https://www.jianshu.com/p/d71ceef679de
HTTP Live Streaming 詳解 https://github.com/pro648/tips/wiki/HTTP-Live-Streaming-詳解
這一部分介紹 HLS 主要組件如何協同工作以傳遞流媒體。從概念上講,HTTP Live Streaming 包含三部分:服務器組件、分發組件和客戶端軟件。
在常見配置中,硬件編碼器接受輸入的音視頻,將其編碼為 HEVC 視頻、AC-3 音頻,輸出片段化(fragmented)MPEG-4 文件或 MPEG-2 傳輸流,分段器(segmenter)軟件將 stream 分割成系列短媒體文件,然后將短媒體文件放在 web 服務器上。segmenter 還會創建並維護一個包含媒體文件列表的索引文件(index file)。索引文件的 URL 在 web 服務器上發布,客戶端讀取索引文件,按順序讀取列出的媒體文件並播放,各片段間沒有任何暫停或間隔。
2.1 服務器組件
服務器組件負責獲取媒體輸入流並對其進行數字編碼,將其封裝成適合傳輸的格式,並為分發做准備。
對於直播,服務器需要媒體編碼器(可以是現有的硬件),以及一種將編碼的媒體分割成片段並保存為文件的方法,該方法可以是由 Apple 提供的 media stream segmented,也可以是第三方解決方案。
2.2 分發組件
分發系統是 web 服務器或 web 緩存系統,通過 HTTP 將媒體文件和索引文件傳輸到客戶端。HTTP Live Streaming 協議不需要對服務器模塊進行任何自定義即可用於傳輸內容,且 web 服務器只需要很少的配置。要實際使用 HTTP Live Streaming,需要將 HTML 頁面或 app 作為接收器,還需要使用 web 服務器,以及將實時流編碼為 HEVC 或 H.264視頻、 ACC 或 AC-3 音頻的分段 MPEG-4 媒體文件。
2.3 客戶端軟件
客戶端軟件負責確定所請求媒體資源類型、下載所需資源、重新組合資源,最后將媒體連續的呈現給用戶。目前,Windows 10、macOS 10.6+、iOS 3.0+、Android 4.1+ 等均原生支持 HLS,大部分瀏覽器也支持HLS。點擊這里可以查看各瀏覽器起始支持 HLS 版本。
客戶端軟件使用標志流媒體位置的 URL 獲取 index file,index file 指定可用媒體文件位置、解密密鑰和可選流。選定流后,客戶端按順序下載可用媒體文件,每個文件包含一段連續的 stream。當擁有足夠數據后,客戶端播放重組的 stream。
客戶端負責獲取解密密鑰、身份認證,根據需要解密媒體文件。
這些過程會一直持續,直到在 index file 遇到 EXT-X-ENDLIST tag。如果沒有 EXT-X-ENDLIST tag,則 index file 是直播的一部分。在直播期間,客戶端會定期拉去 index file 的新版本,並在新版本的 index file 中查找新的媒體文件和加密密鑰,並將這些 URL 添加到隊列。