高級篇之HLS 直播協議m3u8詳解
- 一、HLS是什么
- 二、HLS主要的應用場景
- 三、HLS協議詳解
- 四、ENC編碼器的HLS推流配置
一、HLS是什么
HTTP Live Streaming(縮寫是HLS)是一個由蘋果公司提出的基于HTTP的流媒體網路傳輸協議,?是蘋果公司QuickTime X和iPhone軟體系統的一部分, 它的作業原理是把整個流分成一個個小的基于HTTP的檔案來下載,每次只下載一些,當媒體流正在播放時,客戶端可以選擇從許多不同的備用源中以不同的速率下載同樣的資源,允許流媒體會話適應不同的資料速率,
在開始一個流媒體會話時,客戶端會下載一個包含元資料的extended M3U (m3u8)playlist檔案,用于尋找可用的媒體流,HLS只請求基本的HTTP報文,與實時傳輸協議(RTP)不同,HLS可以穿過任何允許HTTP資料通過的防火墻或者代理服務器,?它也很容易使用內容分發網路來傳輸媒體流,
RTMP指Adobe的RTMP(Realtime Message Protocol),廣泛應用于低延時直播,也是編碼器和服務器對接的實際標準協議,在PC(Flash)上有最佳觀看體驗和最佳穩定性,
HLS指Apple的HLS(Http Live Streaming),本身就是Live(直播)的,不過Vod(點播)也能支持,HLS是Apple平臺的標準流媒體協議,和RTMP在PC上一樣支持得天衣無縫,
這里寫圖片描述
二、HLS主要的應用場景
跨平臺:PC主要的直播方案是RTMP,也有一些庫能播放HLS,譬如jwplayer,基于osmf的hls插件也一大堆,所以實際上如果選一種協議能跨 PC/Android/IOS,那就是HLS,
IOS上苛刻的穩定性要求:IOS上最穩定的當然是HLS,穩定性不差于RTMP在PC-flash上的表現,
友好的CDN分發方式:目前CDN對于RTMP也是基本協議,但是HLS分發的基礎是HTTP,所以CDN的接入和分發會比RTMP更加完善,能在各種CDN之間切換,RTMP也能,只是可能需要對接測驗,
簡單:HLS作為流媒體協議非常簡單,apple支持得也很完善,Android對HLS的支持也會越來越完善,至于DASH/HDS,好像沒有什么特別的理由,就像linux已經大行其道而且開放,其他的系統很難再廣泛應用,
總之,SRS支持HLS主要是作為輸出的分發協議,直播以RTMP+HLS分發,滿總各種應用場景,點播以HLS為主,
三、HLS協議詳解
HLS是提供一個m3u8地址,Apple的Safari瀏覽器直接就能打開m3u8地址,譬如:
http://demo.srs.com/live/livestream.m3u8
Android不能直接打開,需要使用html5的video標簽,然后在瀏覽器中打開這個頁面即可,譬如:
<!-- livestream.html -->
<video width="640" height="360"
autoplay controls autobuffer
src="http://demo.srs.com/live/livestream.m3u8"
type="application/vnd.apple.mpegurl">
</video>
HLS協議規定
視頻的封裝格式是TS,
視頻的編碼格式為H264,音頻編碼格式為MP3、AAC或者AC-3,
除了TS視頻檔案本身,還定義了用來控制播放的m3u8檔案(文本檔案),
HLS協議說明
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
- EXTM3U
每個M3U檔案第一行必須是這個tag,提供標示作用
- EXT-X-VERSION
用以標示協議版本,這里是3, 那么這里用的就是HLS協議第三個版本,此標簽只能有0或1個,不寫代表使用版本1
- EXT-X-TARGETDURATION
所有切片的最大時長,有些Apple設備這個引數不正確會無法播放,
- EXT-X-MEDIA-SEQUENCE
切片的開始序號,每一個切片都有唯一的序號,相鄰之間序號+1,這個編號會繼續增長,保證流的連續性,
- EXTINF
ts 切片的實際時長,duration : 媒體持續時間
#EXTINF <duration>,<title>
- EXT-X-PLAYLIST-TYPE
型別,vod 表示點播,
- EXT-X-ENDLIST
檔案結束符號,表示不再向播放串列檔案添加媒體檔案,
四、ENC編碼器的HLS推流配置
本例中是用HDMI頻道轉HLS推流出去,如果你想用其他頻道(例如Net1)轉HLS只要在相應的頻道上打開HLS開關即可,
配置步驟如下:
第一步:打開輸出設定中對應頻道的HLS開關

第二步:單擊輸出設定中的播放地址TAB,并復制主流地址

第三步: 打開VLC填入地址測驗

點擊播放后的效果:

結束! 謝謝大家的支持,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/177522.html
標籤:其他
上一篇:電氣完整性
