HTTP Live Streaming(HLS)詳解
阿新 • • 發佈:2019-01-02
1,由來:
HLS是一個基於 HTTP 的視訊流協議,由 Apple 公司實現,Mac OS 上的 QuickTime、Safari 以及 iOS 上的 Safari 都能很好的支援 HLS,高版本 Android 也增加了對 HLS 的支援。一些常見的客戶端如:MPlayerX、VLC 也都支援 HLS 協議。
2,格式:
瀏覽器使用的是 m3u8 檔案,可以簡單的認為 m3u8 就是包含多個 ts 檔案的播放列表。播放器按順序逐個播放,全部放完再請求一下 m3u8 檔案,獲得包含最新 ts 檔案的播放列表繼續播,周而復始。整個直播過程就是依靠一個不斷更新的 m3u8 和一堆小的 ts 檔案組成,m3u8 必須動態更新,ts 可以走 CDN。一個典型的 m3u8 檔案格式如下:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=200000
gear1/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=311111
gear2/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=484444
gear3/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=737777
gear4/prog_index.m3u8
還有蘋果官網的hls介紹: Apple HLS
可以看到 HLS 協議本質還是一個個的 HTTP 請求 / 響應,所以適應性很好,不會受到防火牆影響。
3,播放:
對於支援 HLS 的瀏覽器來說,直接這樣寫就能播放了:
<video src="http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"
height="300" width="400" preload="auto" autoplay="autoplay" loop="loop" webkit-playsinline="true"></video>
注意:HLS 在 PC 端僅支援safari瀏覽器,類似chrome瀏覽器使用HTML5 video標籤無法播放 m3u8 格式,可直接採用網上一些比較成熟的方案,
如:
4,延時:
hls有一個致命的弱點:延遲現象非常明顯。如果每個 ts 按照 5 秒來切分,一個 m3u8 放 6 個 ts 索引,那麼至少就會帶來 30 秒的延遲。如果減少每個 ts 的長度,減少 m3u8 中的索引數,延時確實會減少,但會帶來更頻繁的緩衝,對服務端的請求壓力也會成倍增加。所以只能根據實際情況找到一個折中的點。