流媒體網絡協議之HLS(一)

一、HLS簡介

HTTP Live Streaming(HLS)是一個由蘋果公司提出的基於HTTP的流媒體傳輸協議。HLS的工作原理是把媒體文件或媒體流按照不同的碼率分成一個個小片段進行傳輸,客戶端可以根據自身的網絡帶寬選擇合適碼率的碼流進行下載播放。在傳輸會話開始時,客戶端首先需要下載描述媒體碼流數據的M3U8索引文件。

網絡協議 HTTP
封裝格式 MPEG-2 TS
編碼格式 Video:h265、h264,audio:mp3、AAC、AC-3
索引文件 video/mp4

二、HLS框架

HLS由四個模塊組成:音視頻輸入、服務器、分發系統(文件服務器)和客戶端。
圖1 HLS框架圖

HLS系統的輸入可以是實時採集的音視頻碼流或離線文件。服務器通過Media encoder將輸入流轉碼爲HLS支持的編碼格式(AAC、HEVC)和封裝格式(MP4),並根據用戶需求輸出多個碼率的MPEG-4流分別送到Stream segmenter;Stream segmenter將MPEG-4流分成大量的片段媒體文件,並將這些文件部署到文件服務器。同時Stream segmenter還創建並維護一個包含媒體文件列表的索引文件(M3U8)。客戶端軟件讀取索引文件,然後按順序請求列出的媒體文件並連續播放。
服務器負責媒體文件的獲取和編碼。Media encoder將媒體流封裝成便於傳輸的格式,並準備以封裝的媒體格式分發。分發系統就是文件服務器,可通過HTTP將媒體文件和索引文件傳遞給客戶端。實際部署HLS需要文件服務器以及將媒體文件封裝成fmp4文件。

File Extension MIME Type
.m3u8 vnd.apple.mpegURL
.ts video/MP2T
.mp4 video/mp4

客戶端負責請求下載合適的媒體流,然後重新組合它們,並連續地播放。客戶端首先根據特定的url獲取索引文件,索引文件可以指定媒體文件、解密祕鑰以及備用流的位置。客戶端會定期加載索引文件的新版本,一直持續到EXT-X-ENDLIST標籤爲止。客戶端在更新的索引文件中查找新的媒體文件和加密祕鑰,並將這些url添加到隊列中[客戶端軟件支持IOS3.0和Safair4.0以及更高版本]。

三、M3U8文件結構

M3U8文件是UTF-8編碼格式的M3U文件,用於存放待播放碼流的基本信息。客戶端根據網絡帶寬選擇合適碼率的碼流進行下載播放,實現碼率切換功能,比如不同的帶寬、不同的網速播放不同清晰度的視頻流。這種功能的實現在於索引文件的特殊結構。
圖2  M3U8文件結構

客戶端邏輯,首先根據m3u8文件url先下載一級Index file,它記錄了二級索引文件的url(Alternate-A、Alternate-B、Alternate-C),然後再去下載二級索引文件,二級索引文件記錄了TS文件的url,最後客戶端可以按順序下載TS視頻文件並連續播放。
○1 m3u8文件地址:http://demo.srs.com/live/livestream.m3u8;
○2一級索引文件:存放不同碼率的HLS源的url;
○3二級索引文件:存放統一碼率下TS切片文件的url。

EXTM3U 每個M3U文件第一行必須是這個tag,提供標示作用
EXT-X-VERSION 用以標示協議版本。這裏是3, 那麼這裏用的就是HLS協議第三個版本,此標籤只能有0或1個,不寫代表使用版本1
EXT-X-TARGETDURATION 所有切片的最大時長,有些Apple設備這個參數不正確會無法播放
EXT-X-MEDIA-SEQUENCE 切片的開始序號。每一個切片都有唯一的序號,相鄰之間序號+1。這個編號會繼續增長,保證流的連續性
EXTINF ts 切片的實際時長。duration : 媒體持續時間
EXT-X-PLAYLIST-TYPE 類型,vod 表示點播,live表示直播。
EXT-X-ENDLIST 文件結束符號 表示不再向播放列表文件添加媒體文件

四、 參考鏈接:

HLS官網:
HLS協議草案:
HLS草案第五版
M3U8文件

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