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,就能很快看懂它的大致含義,也便於後續做解析、播放或調試。
合規使用與排查重點
本文只討論 HLS/M3U8 的播放、解析與故障排查。請僅測試你自己發布、獲得授權、或本來就公開允許存取的串流;不要使用本站處理或再分發未獲授權的第三方內容。
- 確認授權邊界:先確認播放 URL 來自你的服務、測試環境、開源範例或內容所有者明確允許的來源。
- 檢查瀏覽器限制:若無法播放,優先查看 HTTPS、CORS、MIME 類型、混合內容與網路請求狀態。
- 區分直播與點播:直播清單需要持續更新,點播清單通常會有
#EXT-X-ENDLIST,兩者的排查方式不同。 - 記錄錯誤資訊:保留播放器錯誤碼、HTTP 狀態碼、回應標頭與瀏覽器控制台訊息,方便定位問題。
FAQ
這類測試是否涉及內容保護機制? 不涉及。本站只提供一般播放檢查思路,不提供未授權媒體處理、再分發或權限限制處理的方法。
為什麼同一個 m3u8 在某些瀏覽器可播、某些不可播? 常見原因包括瀏覽器原生 HLS 支援差異、伺服器 CORS 設定、HTTPS 憑證、分片 MIME 類型與直播清單更新頻率。