M3U8格式講解及實際應用分析

M3U8格式講解及實際應用分析 

M3U8有啥好處 ? 

網上搜索了一下,你們衆說紛紜,我的理解主要是能夠作多碼率的適配,根據網絡帶寬,客戶端會選擇一個適合本身碼率的文件進行播放,保證視頻流的流暢。


在IOS device和mac上能夠用http的方式進行分發,其中playlist標準爲由m3u擴展而來的m3u8文件,媒體文件爲MPEG2-TS或者AAC文件(audio only)。

m3u8文件有兩種應用場景:

多碼率適配流,

#EXTM3U

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

http://example.com/low.m3u8

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

http://example.com/mid.m3u8

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

http://example.com/hi.m3u8

#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=65000,CODECS="mp4a.40.5"

http://example.com/audio-only.m3u8

單碼率適配流 
#EXTM3U

#EXT-X-TARGETDURATION:5220

#EXTINF:5220,

http://media.example.com/entire.ts

#EXT-X-ENDLIST




國際標準組織對此的定義 rfc doc:
http://tools.ietf.org/html/draft-pantos-http-live-streaming-06
m3u8 文件是m3u文件的擴展。在該rfc中定義了擴展的關鍵字:
其中:

#EXT-X-TARGETDURATION
定義每一個TS的最大的duration。
#EXT-X-MEDIA-SEQUENCE
定義當前m3u8文件中第一個文件的序列號,每一個ts文件在m3u8文件中都有固定惟一的序列號,該序列號用於在MBR時切換碼率進行對齊。
#EXT-X-KEY

定義加密方式和key文件的url,用於取得16bytes的key文件解碼ts文件。

屬性:
METHOD
URL
#EXT-X-PROGRAM-DATE-TIME
第一個文件的絕對時間

#EXT-X-ALLOW-CACHE

是否容許cache。
#EXT-X-ENDLIST
代表m3u8文件的結束。live m3u8沒有該tag。
#EXT-X-STREAM-INF
屬性:
BANDWIDTH              指定碼率

PROGRAM-ID            惟一ID

CODECS                    指定流的編碼類型#EXT-X-DISCONTINUITY
當遇到該tag的時候說明如下屬性發生了變化:
file format 
number and type of tracks
encoding parameters
encoding sequence
timestamp sequence

#EXT-X-VERSION             該屬性用不用均可以,能夠沒有











M3U8分頂級M3U8和二級M3U8, 頂級M3U8主要是作多碼率適配的, 二級M3U8纔是真正的切片文件,

客戶端默認會首先選擇碼率最高的請求,若是發現碼率達不到,會請求郊低碼率的流




一個實際使用中的頂級M3U8文件以下 :


#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=201273221265,BANDWIDTH=358400
11.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=201273221265,BANDWIDTH=972800
22.m3u8




上面頂級M3U8文件中又定義了 11.m3u8 和 22.m3u8 兩個二級文件,客戶端會選擇其中一個獲取其內容。

二級M3U8文件內容以下:




#EXTM3U
#EXT-X-VERSION:1
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:3,
1-4.ts
#EXTINF:8,
1-6.ts
#EXTINF:8,
1-8.ts
#EXTINF:8,
1-10.ts
#EXTINF:8,
1-12.ts
#EXTINF:8,
1-14.ts
#EXTINF:8,
1-16.ts
#EXTINF:9,
1-18.ts
#EXTINF:6,
1-20.ts
#EXTINF:8,
1-22.ts
#EXTINF:9,
1-24.ts
#EXTINF:3,
1-26.ts
#EXT-X-ENDLIST




客戶端拿到上面的二級M3U8文件後,會繼續請求裏面的文件,這時就可進行播放了。

上面講解的是點播的狀況,直播的狀況,M3U8文件裏面會有屬性告訴是直播,客戶端會定時來請求新的M3U8文件。html

相關文章
相關標籤/搜索