標籤:
M3U8檔案簡介 (2014-07-28 12:02:14)
轉載▼
1. M3U8檔案概念
M3U8檔案是指UTF-8編碼格式的M3U檔案。M3U檔案是記錄了一個索引純文字檔案,開啟它時播放軟體並不是播放它,而是根據它的索引找到對應的音視頻檔案的網路地址進行線上播放。
2. M3U8檔案舉例
例如使用雲圖TV點播直播節目時,發送請求:
http://121.199.63.236:7613/m3u8/cckw1/szws.m3u8?from=bab&fun=yes&chk=y&chunk=xax&ppw=yuntutv&auth=yuntutvyuntutvyuntutv&auth=yuntutvyuntutvyuntutv&nwtime=1406515232&sign=033d5483609e6bc87987fc7d2f30a024
返回M3U8檔案,檔案內容如下:
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:140651513
#EXT-X-TARGETDURATION:10
#EXTINF:8,
http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651513[140651513].ts
#EXTINF:9,
http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651514[140651514].ts
#EXTINF:11,
http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651515[140651515].ts
#EXTINF:10,
http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651516[140651516].ts
#EXTINF:12,
http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651517[140651517].ts
#EXTINF:8,
http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651518[140651518].ts
#EXTINF:12,
http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651519[140651519].ts
#EXTINF:8,
http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651520[140651520].ts
#EXTINF:9,
http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651521[140651521].ts
#EXTINF:13,
http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651522[140651522].ts
然後根據索引的中連結請求下載音視頻並進行播放
3. M3U檔案標籤及屬性說明
M3U檔案中可以包含多個tag,每個tag的功能和屬性如下:
#EXTM3U
每個M3U檔案第一行必須是這個tag,請標示作用
#EXT-X-MEDIA-SEQUENCE:140651513
每一個media URI 在 PlayList中只有唯一的序號,相鄰之間序號+1, 一個media URI並不是必須要包含的,如果沒有,預設為0
#EXTINF:,
duration 指定每個媒體段(ts)的期間(秒),僅對其後面的URI有效,title是下載資源的url
#EXT-X-TARGETDURATION
指定最大的媒體段時間長(秒)。所以#EXTINF中指定的時間長度必須小於或是等於這個最大值。這個tag在整個PlayList檔案中只能出現一 次(在嵌套的情況下,一般有真正ts url的m3u8才會出現該tag)
#EXT-X-KEY
表示怎麼對media segments進行解碼。其作用範圍是下次該tag出現前的所有media URI,屬性為NONE 或者 AES-128。NONE表示 URI以及IV(Initialization Vector)屬性必須不存在, AES-128(Advanced EncryptionStandard)表示URI必須存在,IV可以不存在。
對於AES-128的情況,keytag和URI屬性共同表示了一個key檔案,通過URI可以獲得這個key,如果沒有IV(Initialization Vector),則使用序號作為IV進行編解碼,將序號的高位賦到16個位元組的buffer中,左邊補0;如果有IV,則將改值當成16個位元組的16進位數。
#EXT-X-PROGRAM-DATE-TIME
將一個絕對時間或是日期和一個媒體段中的第一個sample相關聯,只對下一個meida URI有效,格式如#EXT-X-PROGRAM-DATE-TIME:
For example: #EXT-X-PROGRAM-DATE-TIME:2010-02-19T14:54:23.031+08:00
#EXT-X-ALLOW-CACHE
是否允許做cache,這個可以在PlayList檔案中任意地方出現,並且最多出現一次,作用效果是所有的媒體段。格式如下:#EXT-X-ALLOW-CACHE:
#EXT-X-PLAYLIST-TYPE
提供關於PlayList的可變性的資訊, 這個對整個PlayList檔案有效,是可選的,格式如下:#EXT-X-PLAYLIST-TYPE::如果是VOD,則伺服器不能改變PlayList 檔案;如果是EVENT,則伺服器不能改變或是刪除PlayList檔案中的任何部分,但是可以向該檔案中增加新的一行內容。
#EXT-X-ENDLIST
表示PlayList的末尾了,它可以在PlayList中任意位置出現,但是只能出現一個,格式如下:#EXT-X-ENDLIST
#EXT-X-MEDIA
被用來在PlayList中表示相同內容的不用語種/譯文的版本,比如可以通過使用3個這種tag表示3中不用語音的音頻,或者用2個這個tag表示不同角度的video在PlayLists中。這個標籤是獨立存在的,屬性包含:
URI:如果沒有,則表示這個tag描述的可選擇版本在主PlayList的EXT-X-STREAM-INF中存在;
TYPE:AUDIO and VIDEO;
GROUP-ID:具有相同ID的MEDIAtag,組成一組樣式;
LANGUAGE:確定使用的主要語言
NAME:人類可讀的語言的翻譯
DEFAULT:YES或是NO,預設是No,如果是YES,則用戶端會以這種選項來播放,除非使用者自己進行選擇。
AUTOSELECT:YES或是NO,預設是No,如果是YES,則用戶端會根據當前播放環境來進行選擇(使用者沒有根據自己偏好進行選擇的前提下)。
#EXT-X-STREAM-INF
指定一個包含多媒體資訊的 media URI 作為PlayList,一般做M3U8的嵌套使用,它只對緊跟後面的URI有效,格式如下:#EXT-X-STREAM-INF:有以下屬性:
BANDWIDTH:頻寬,必須有。
PROGRAM-ID:該值是一個十進位整數,惟一地標識一個在PlayList檔案範圍內的特定的描述。一個PlayList 檔案中可能包含多個有相同ID的此tag。
CODECS:不是必須的。
RESOLUTION:解析度。
AUDIO:這個值必須和AUDIO類別的“EXT-X-MEDIA”標籤中“GROUP-ID”屬性值相匹配。
VIDEO:同上
參考文檔:
http://blog.csdn.net/jwzhangjie/article/details/9744027
http://www.xuebuyuan.com/1726264.html
M3U8檔案簡介