·您當前的位置:主頁 > 技術教程 > Html5技術 >

[HLS直播]HTTP Live Streaming

時間:2018-01-16 10:31酷播
HTTP Live Streaming(簡稱 HLS)是一個基于 HTTP 的視頻流協議,由 Apple 公司實現,Mac OS 上的 QuickTime、Safari 以及 iOS 上的 Safari 都能很好的支持 HLS

HTTP Live Streaming

HTTP Live Streaming(簡稱 HLS)是一個基于 HTTP 的視頻流協議,由 Apple 公司實現,Mac OS 上的 QuickTime、Safari 以及 iOS 上的 Safari 都能很好的支持 HLS,高版本 Android 也增加了對 HLS 的支持。一些常見的客戶端如:MPlayerX、VLC 也都支持 HLS 協議。

HLS 協議基于 HTTP,非常簡單。一個提供 HLS 的服務器需要做兩件事:

  • 編碼:以 H.263 格式對圖像進行編碼,以 MP3 或者 HE-AAC 對聲音進行編碼,最終打包到 MPEG-2 TS(Transport Stream)容器之中;
  • 分割:把編碼好的 TS 文件等長切分成后綴為 ts 的小文件,并生成一個 .m3u8 的純文本索引文件;

瀏覽器使用的是 m3u8 文件。m3u8 跟音頻列表格式 m3u 很像,可以簡單的認為 m3u8 就是包含多個 ts 文件的播放列表。播放器按順序逐個播放,全部放完再請求一下 m3u8 文件,獲得包含最新 ts 文件的播放列表繼續播,周而復始。整個直播過程就是依靠一個不斷更新的 m3u8 和一堆小的 ts 文件組成,m3u8 必須動態更新,ts 可以走 CDN。一個典型的 m3u8 文件格式如下:

  1. #EXTM3U 
  2. #EXT-X-STREAM-INF:PROGRAM-ID=1BANDWIDTH=200000 
  3. gear1/prog_index.m3u8 
  4. #EXT-X-STREAM-INF:PROGRAM-ID=1BANDWIDTH=311111 
  5. gear2/prog_index.m3u8 
  6. #EXT-X-STREAM-INF:PROGRAM-ID=1BANDWIDTH=484444 
  7. gear3/prog_index.m3u8 
  8. #EXT-X-STREAM-INF:PROGRAM-ID=1BANDWIDTH=737777 
  9. gear4/prog_index.m3u8 

可以看到 HLS 協議本質還是一個個的 HTTP 請求 / 響應,所以適應性很好,不會受到防火墻影響。但它也有一個致命的弱點:延遲現象非常明顯。如果每個 ts 按照 5 秒來切分,一個 m3u8 放 6 個 ts 索引,那么至少就會帶來 30 秒的延遲。如果減少每個 ts 的長度,減少 m3u8 中的索引數,延時確實會減少,但會帶來更頻繁的緩沖,對服務端的請求壓力也會成倍增加。所以只能根據實際情況找到一個折中的點。

對于支持 HLS 的瀏覽器來說,直接這樣寫就能播放了:

  1. <video src="http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8"
     
    height="300" width="400"></video>  

熱門文章推薦

請稍候...
北京快乐八开奖结果