M3U8有啥好處 。 轉自 http://blog.csdn.net/langeldep/article/details/8603045
網上搜尋了一下,大家眾說紛紜,個人理解主要是可以做多碼率的適配,根據網路頻寬,用戶端會選擇一個適合自己碼率的檔案進行播放,保證視頻流的流暢。
在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檔案。