讓Chrome看不了WWDC直播的HLS技術詳解

Requirements: Live streaming uses Apple’s HTTP Live Streaming (HLS) technology. HLS requires an iPhone, iPad, or iPod touch with Safari on iOS 7.0 or later, a Mac with Safari 6.0.5 or later on OS X v10.8.5 or later, or a PC with Microsoft Edge on Windows 10. Streaming via Apple TV requires an Apple TV (2nd or 3rd generation) with software 6.2 or later or an Apple TV (4th generation).git

HLS (HTTP Live Streaming), 是由 Apple 公司實現的基於 HTTP 的媒體流傳輸協議。Apple 的全系列產品支持,因爲 HLS 是蘋果提出的, 因此在 Apple 的全系列產品包括 iphone、 ipad、safari 都不須要安裝任何插件就能夠原生支持播放 HLS, 如今Android 也加入了對 HLS 的支持。但PC端目前除了Microsoft Edge外,Chrome、Firefox等瀏覽器均不支持該協議的播放。github

HLS跟 DASH 協議的原理很是相似,經過將整條流切割成一個小的能夠經過 HTTP 下載的媒體文件,而後提供一個配套的媒體列表文件給客戶端,讓客戶端順序地拉取這些媒體文件播放, 來實現看上去是在播放一條流的效果。HLS 目前普遍地應用於點播和直播領域。
<video src="example.m3u8" controls></video>golang

在HTML5頁面上使用HLS瀏覽器

<video controls>
<source src=「example.m3u8」></source>
</video>

HLS 的優點

  • 客戶端支持簡單,只須要支持 HTTP 請求便可,HTTP 協議無狀態,只須要按順序下載媒體片斷便可。緩存

  • 使用 HTTP 協議網絡兼容性好, HTTP 數據包也能夠方便地經過防火牆或者代理服務器,CDN 支持良好。服務器

  • 自帶多碼率自適應,Apple 在提出 HLS 時,就已經考慮了碼流自適應的問題。網絡

HLS 的劣勢

  • 相比 RTMP 這類長鏈接協議,延時較高,難以用到互動直播場景。iphone

  • 對於點播服務來講,因爲 TS 切片一般較小,海量碎片在文件分發、一致性緩存、存儲等方面都有較大挑戰。ide

  • 雖然HLS存在明顯劣勢,又拍雲對此也有相應的解決方案。優化

HLS 協議詳解

上圖能夠看出,HLS總共有三個部分: Serve、CDN、Client。HLS 協議的主要內容是關於 M3U8 這個文本協議,其實生成與解析都很是簡單,示例以下:


△簡單的 Media Playlist


△包含多種比特率的 Master Playlist

HLS優化技術

因爲客戶端每次請求 TS 或 M3U8 有可能都是一個新的鏈接請求,因此,咱們沒法有效的標識客戶端,一旦出現問題,基本沒法有效的定位問題,所以通常工業級的服務器都會對傳統的 HLS 作一些改進。本文主要介紹又拍雲的 HLS+
HLS+ ,又稱爲流式 HLS 技術,是將標準的 HLS 進行流式處理,大幅度下降標準 HLS 延遲,H5 端直播兼容性更好,且具備回源量小、系統簡單、排錯容易、防盜鏈、避免 HLS 404 等優點。
一、Variant HLS
首先,下載一條又拍雲的 M3U8 文件:
wget http://uplive.bo.upaiyun.com/...
而後,打開下載獲得的 playlist 文件:

能夠看出又拍雲的 HLS+ 也支持這種 Variant HLS 方式來標識一條 HLS 鏈接,能夠看出,又拍雲使用 uuid 來表示一條 HLS 鏈接。

二、HTTP 302
首先,以 HTTP 302 方式來請求播放地址。

打開 playlist 內容:

在跳轉以後的地址存放真正的 playlist,同時也可以將 uuid 加入到了鏈接上。
總地來講,無論經過哪一種方式,最終咱們都能經過一個惟一的 id 來標識一條流,這樣在排查問題時就能夠根據這個 id 來定位播放過程當中的問題。

4、HLS 延時分析

爲了追求低延時效果,能夠將切片切的更小,取片間隔作的更小,播放器未取到 3 個片就啓動播放。可是這些優化方式都會增長 HLS 不穩定和出現錯誤的風險。
5、如何讓HLS能在Chrome等設備上播放

目前直播大多采用HTTP(HLS、HTTP-FLV)和RTMP協議進行推流。咱們能夠經過CDN服務進行轉協議播放,不管採用HTTP仍是RTMP協議推流,最終達到均支持 RTMP、HTTP-FLV 和 HLS 播放的效果。

Demo:

M3U8 golang library

https://godoc.org/github.com/osrtss/rtss/m3u8

HLS downloader: 讀取一個 m3u8 URL,下載爲 TS 文件。

https://github.com/osrtss/rtss/tree/master/m3u8/example/hlsdownloader

推薦閱讀:

WebSocket+MSE——HTML5 直播技術解析

IPv6啓動五年後,距離咱們究竟還有多遠?

相關文章
相關標籤/搜索