一、HLS是什么
HTTP Live Streaming(縮寫是HLS)是一個由蘋果公司提出的基于HTTP的流媒體網(wǎng)絡(luò)傳輸協(xié)議急波。?是蘋果公司QuickTime X和iPhone軟件系統(tǒng)的一部分。 它的工作原理是把整個流分成一個個小的基于HTTP的文件來下載,每次只下載一些鸿竖。當(dāng)媒體流正在播放時,客戶端可以選擇從許多不同的備用源中以不同的速率下載同樣的資源泪漂,允許流媒體會話適應(yīng)不同的數(shù)據(jù)速率卸伞。
在開始一個流媒體會話時,客戶端會下載一個包含元數(shù)據(jù)的extended M3U (m3u8)playlist文件娘香,用于尋找可用的媒體流苍狰。HLS只請求基本的HTTP報文,與實時傳輸協(xié)議(RTP)不同烘绽,HLS可以穿過任何允許HTTP數(shù)據(jù)通過的防火墻或者代理服務(wù)器淋昭。?它也很容易使用內(nèi)容分發(fā)網(wǎng)絡(luò)來傳輸媒體流。
RTMP指Adobe的RTMP(Realtime Message Protocol)安接,廣泛應(yīng)用于低延時直播翔忽,也是編碼器和服務(wù)器對接的實際標(biāo)準(zhǔn)協(xié)議,在PC(Flash)上有最佳觀看體驗和最佳穩(wěn)定性盏檐。
HLS指Apple的HLS(Http Live Streaming)呀打,本身就是Live(直播)的,不過Vod(點播)也能支持糯笙。HLS是Apple平臺的標(biāo)準(zhǔn)流媒體協(xié)議贬丛,和RTMP在PC上一樣支持得天衣無縫。
二给涕、HLS主要的應(yīng)用場景
跨平臺:PC主要的直播方案是RTMP豺憔,也有一些庫能播放HLS额获,譬如jwplayer,基于osmf的hls插件也一大堆恭应。所以實際上如果選一種協(xié)議能跨 PC/Android/IOS抄邀,那就是HLS。
IOS上苛刻的穩(wěn)定性要求:IOS上最穩(wěn)定的當(dāng)然是HLS昼榛,穩(wěn)定性不差于RTMP在PC-flash上的表現(xiàn)境肾。
友好的CDN分發(fā)方式:目前CDN對于RTMP也是基本協(xié)議,但是HLS分發(fā)的基礎(chǔ)是HTTP胆屿,所以CDN的接入和分發(fā)會比RTMP更加完善奥喻。能在各種CDN之間切換,RTMP也能非迹,只是可能需要對接測試环鲤。
簡單:HLS作為流媒體協(xié)議非常簡單,apple支持得也很完善憎兽。Android對HLS的支持也會越來越完善冷离。至于DASH/HDS,好像沒有什么特別的理由纯命,就像linux已經(jīng)大行其道而且開放西剥,其他的系統(tǒng)很難再廣泛應(yīng)用。
總之亿汞,SRS支持HLS主要是作為輸出的分發(fā)協(xié)議瞭空,直播以RTMP+HLS分發(fā),滿總各種應(yīng)用場景留夜。點播以HLS為主。
三图甜、HLS協(xié)議詳解
HLS是提供一個m3u8地址碍粥,Apple的Safari瀏覽器直接就能打開m3u8地址,譬如:
http://demo.srs.com/live/livestream.m3u8
1
Android不能直接打開黑毅,需要使用html5的video標(biāo)簽嚼摩,然后在瀏覽器中打開這個頁面即可,譬如:
<video width="640" height="360"
autoplay controls autobuffer
src="http://demo.srs.com/live/livestream.m3u8"
type="application/vnd.apple.mpegurl">
</video>
1
2
3
4
5
6
HLS協(xié)議規(guī)定
視頻的封裝格式是TS矿瘦。
視頻的編碼格式為H264,音頻編碼格式為MP3枕面、AAC或者AC-3。
除了TS視頻文件本身缚去,還定義了用來控制播放的m3u8文件(文本文件)潮秘。
HLS協(xié)議說明
HLS的m3u8,是一個ts的列表易结,也就是告訴瀏覽器可以播放這些ts文件枕荞,譬如:
EXTM3U
EXT-X-VERSION:3
EXT-X-ALLOW-CACHE:YES
EXT-X-TARGETDURATION:13
EXT-X-MEDIA-SEQUENCE:430
EXT-X-PLAYLIST-TYPE:VOD
EXTINF:11.800
news-430.ts
EXTINF:10.120
news-431.ts
EXT-X-DISCONTINUITY
EXTINF:11.952
news-430.ts
EXTINF:12.640
news-431.ts
EXTINF:11.160
news-432.ts
EXT-X-DISCONTINUITY
EXTINF:11.751
news-430.ts
EXTINF:2.040
news-431.ts
EXT-X-ENDLIST
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
EXTM3U
每個M3U文件第一行必須是這個tag柜候,提供標(biāo)示作用
EXT-X-VERSION
用以標(biāo)示協(xié)議版本。這里是3躏精, 那么這里用的就是HLS協(xié)議第三個版本渣刷,此標(biāo)簽只能有0或1個,不寫代表使用版本1
EXT-X-TARGETDURATION
所有切片的最大時長矗烛,有些Apple設(shè)備這個參數(shù)不正確會無法播放辅柴。
EXT-X-MEDIA-SEQUENCE
切片的開始序號。每一個切片都有唯一的序號瞭吃,相鄰之間序號+1碌嘀。這個編號會繼續(xù)增長,保證流的連續(xù)性虱而。
EXTINF
ts 切片的實際時長筏餐。duration : 媒體持續(xù)時間
EXTINF <duration>,<title>
1
EXT-X-PLAYLIST-TYPE
類型,vod 表示點播牡拇。
EXT-X-ENDLIST
文件結(jié)束符號魁瞪。表示不再向播放列表文件添加媒體文件。