M3U8 檔案完整學習指南
1. M3U8 到底是什麼
M3U8 不是傳統意義上的影片檔,而是一份 UTF-8 編碼的播放清單。它用文字描述媒體分片的位置、每段時長、碼率層級、加密資訊和直播序號,播放器會根據這份清單決定如何載入內容。
理解這一點很重要:當你把 m3u8 URL 貼到播放器裡,播放器首先讀到的是播放說明,而不是完整影片。真正的媒體資料分散在 TS 或 fMP4 分片中。
2. 主清單和媒體清單
HLS 常見兩種清單。主清單負責描述多個碼率版本,媒體清單負責描述某一路實際分片。
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360
360p/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720
720p/index.m3u8
播放器讀到主清單後,會依照網路品質、裝置能力和緩衝狀態選擇合適碼率。這也是 HLS 能自適應畫質的基礎。
3. 一份媒體清單包含哪些標籤
#EXTM3U:表示這是一份擴展 M3U 清單。#EXT-X-VERSION:標示 HLS 協定版本。#EXT-X-TARGETDURATION:宣告單個分片的最大時長。#EXT-X-MEDIA-SEQUENCE:直播或滑動視窗中第一個分片的序號。#EXTINF:描述下一個分片的時長。#EXT-X-ENDLIST:表示點播清單已結束。
調試時可以先確認這些標籤是否齊全,再觀察每個分片 URL 是否可解析。
4. 從推流到播放的鏈路
完整的 HLS 鏈路通常包含四個階段:
- 編碼器把音訊和視訊轉成目標碼率、解析度與編碼格式。
- 切片器把連續媒體拆成多個短分片,並更新 m3u8 清單。
- 源站或 CDN 將清單和分片提供給使用者所在網路。
- 播放器讀取清單、選擇碼率、緩衝分片並交給瀏覽器媒體能力播放。
當播放異常時,可以把問題對應到這四個環節:編碼是否支援、切片是否連續、CDN 是否快取正確、播放器是否能解析。
5. CORS 與瀏覽器安全策略
本地播放器能打開 HLS,不代表網頁播放器也能成功。瀏覽器會檢查跨域讀取權限,因此 HLS 源站需要為播放頁配置合適的 CORS 標頭。
- 清單、分片、字幕和金鑰請求都應保持一致的跨域策略。
- HTTPS 頁面不應載入 HTTP 媒體資源。
- 如果需要憑證,來源白名單不能簡單使用萬用字元。
6. 加密與授權
有些 HLS 清單會包含 #EXT-X-KEY。這代表分片受到加密保護,播放器需要合法授權才能取得對應金鑰。若缺少授權,正確做法是回到內容管理系統或授權服務排查,而不是嘗試破壞保護流程。
7. 開發者的學習路線
- 先閱讀基礎概念,理解 m3u8 只是播放清單。
- 觀察主清單與媒體清單的差異,熟悉常見標籤。
- 在首頁播放器測試官方公開流或自己的測試流。
- 用 Network 面板檢查 CORS、MIME、狀態碼和分片連續性。
- 必要時使用 FFmpeg / ffprobe 驗證自有素材的封裝和編碼資訊。
掌握這些知識後,你就可以把 HLS 問題拆成可觀察、可重現、可修正的工程問題,而不是靠猜測更換播放器。