m3u8 檔案的組成格式
整體结构長什麼樣
先看一個压缩過的例子(点播场景):
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:5.92,
segment000.ts
#EXTINF:5.88,
segment001.ts
#EXTINF:5.90,
segment002.ts
#EXT-X-ENDLIST
從上往下看,大致可以分成三块:
- 標頭部:
#EXTM3U加上一些全局配置標簽; - 媒體段列表:不断重复的
#EXTINF + URL组合; - 结束標記:点播通常會有
#EXT-X-ENDLIST。
常見標頭部標簽
標頭部通常會出現這些標簽:
#EXTM3U:必须,表示這是一個扩展 M3U 播放列表。#EXT-X-VERSION:協定版本,不同版本支援的標簽略有差异。#EXT-X-TARGETDURATION:單個分片最長時長(秒),播放器可以据此预估缓冲。#EXT-X-MEDIA-SEQUENCE:第一個分片的序号,直播時很重要。
媒體段是怎麼描述的
每個分片前面都會有一行 #EXTINF 標簽,格式大致是:
#EXTINF:<duration>,<optional title>
<segment-url>
也就是說:
- 第一行告诉播放器“這一片大约有多少秒”;
- 第二行給出這一片的实际 URL,可以是相對路径也可以是完整的绝對位址。
点播和直播的區別
区分点播和直播,最直接的標志就是结尾有沒有 #EXT-X-ENDLIST:
- 有:說明列表已經完整寫好,是一個固定長度的点播;
- 沒有:通常代表直播或“還在錄制中的点播”,播放器需要不断刷新 m3u8。
理解這些结构後,你再用瀏覽器查看任意一個 m3u8,其实就能很快看懂它的大致含义,也便于後续做解析、下載或调试。