1. 程式人生 > 實用技巧 >HLS的M3U8檔案介紹

HLS的M3U8檔案介紹

HLS的M3U8檔案介紹

HLS (HTTP Live Streaming)是Apple的動態位元速率自適應技術。主要用於PC和Apple終端的音視訊服務。

相較於實時傳輸協議(RTP),HLS可以穿過任何允許HTTP資料通過的防火牆或者代理伺服器,它也很容易使用內容分發網路來傳輸媒體流,因而得到了廣泛的應用。

今天就讓我們瞭解一下HLS中的M3U8檔案吧!

一、HLS與M3U8的關係

HLS(全稱:HttpLiveStreaming)是由Apple公司定義的用於實時流傳輸的協議,HLS基於HTTP協議實現,傳輸內容包括兩部分,一是M3U8描述檔案,二是TS媒體檔案。

二、M3U8檔案概念

M3U8檔案是指UTF-8編碼格式的

M3U檔案。M3U檔案是記錄了一個索引純文字檔案,開啟它時播放軟體並不是播放它,而是根據它的索引找到對應的音視訊檔案的網路地址進行線上播放。

三、M3U8檔案詳解

如下圖所示,客戶端播放HLS視訊流的邏輯其實非常簡單,HLS中的index檔案就是m3u8的檔案,先下載一級Index file,它裡面記錄了二級索引檔案(Alternate-A、Alternate-B、Alternate-C)的地址,然後客戶端再去下載二級索引檔案,二級索引檔案中又記錄了TS檔案的下載地址,這樣客戶端就可以按順序下載TS視訊檔案並連續播放。

如下,HLS的M3U8檔案中bandwidth指定視訊流的位元率,PROGRAM-ID無用無需關注,每一個#EXT-X-STREAM-INF的下一行是二級index檔案的路徑,可以用相對路徑也可以用絕對路徑。例子中用的是相對路徑。這個檔案中記錄了不同位元率視訊流的二級index檔案路徑,客戶端可以自己判斷自己的現行網路頻寬,來決定播放哪一個視訊流。也可以在網路頻寬變化的時候平滑切換到和頻寬匹配的視訊流。

#EXTM3U

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1064000

1000kbps.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=564000

500kbps.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=282000

250kbps.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2128000

2000kbps.m3u8

如下M3U8檔案,二級檔案實際負責給出ts檔案的下載地址,這裡同樣使用了相對路徑。#EXTINF表示每個ts切片視訊檔案的時長。#EXT-X-TARGETDURATION指定當前視訊流中的切片檔案的最大時長,也就是說這些ts切片的時長不能大於#EXT-X-TARGETDURATION的值。#EXT-X-PLAYLIST-TYPE:VOD的意思是當前的視訊流並不是一個直播流,而是點播流,換句話說就是該視訊的全部的ts檔案已經被生成好了,#EXT-X-ENDLIST這個表示視訊結束,有這個標誌同時也說明當前的流是一個非直播流。

#EXTM3U

#EXT-X-PLAYLIST-TYPE:VOD

#EXT-X-TARGETDURATION:10

#EXTINF:10,

2000kbps-00001.ts

#EXTINF:10,

2000kbps-00002.ts

#EXTINF:10,

2000kbps-00003.ts

#EXTINF:10,

2000kbps-00004.ts

#EXTINF:10,

... ...

#EXTINF:10,

2000kbps-00096.ts

#EXTINF:10,

2000kbps-00097.ts

#EXTINF:10,

2000kbps-00098.ts

#EXTINF:10,

2000kbps-00099.ts

#EXTINF:10,

2000kbps-00100.ts

#ZEN-TOTAL-DURATION:999.66667

#ZEN-AVERAGE-BANDWIDTH:2190954

#ZEN-MAXIMUM-BANDWIDTH:3536205

#EXT-X-ENDLIST

四、播放模式區別與應用場景

    1. 點播VOD的特點是當前時間點可以獲取到所有index檔案和ts檔案,二級index檔案中記錄了所有ts檔案的地址。這種模式允許客戶端訪問全部內容。上面的m3u8檔案詳解例子就是一個點播模式下的m3u8的結構。
    2. Live 模式是實時生成M3u8和ts檔案。它的索引檔案一直處於動態變化的,播放的時候需要不斷下載二級index檔案,以獲得最新生成的ts檔案播放視訊。如果一個二級index檔案的末尾沒有#EXT-X-ENDLIST標誌,說明它是一個Live視訊流。

五、工作原理

    1. 點播M3U8工作原理

客戶端在播放VOD模式的視訊時其實只需要下載一次一級index檔案和二級index檔案就可以得到所有ts檔案的下載地址,除非客戶端進行位元率切換,否則無需再下載任何index檔案,只需順序下載ts檔案並播放就可以了。

    1. HLS直播M3U8工作原理

Live模式下略有不同,因為播放的同時,新ts檔案也在被生成中,所以客戶端實際上是下載一次二級index檔案,然後下載ts檔案,再下載二級index檔案(這個時候這個二級index檔案已經被重寫,記錄了新生成的ts檔案的下載地址),再下載新ts檔案,如此反覆進行播放。