什麼是 M3U8?
你可能在很多地方看過 .m3u8 這個副檔名——影片下載工具、播放器設定、瀏覽器開發者工具。但它其實不是影片檔,而是一份「清單」。搞懂這件事,很多疑惑就迎刃而解。
用一句話說:它是一份菜單
把 M3U8 想成餐廳的菜單:菜單本身不能吃,但它告訴你有哪些菜、在哪裡。M3U8 也一樣——它不包含影片,只是告訴播放器:
- 影片被切成了哪幾段
- 每一段放在哪個網址
- 每一段該播多久
實際打開一個 M3U8 檔,內容就是這樣:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXTINF:10.0,
segment-001.ts
#EXTINF:10.0,
segment-002.ts
#EXTINF:9.8,
segment-003.ts
#EXT-X-ENDLIST開頭的 #EXTM3U 是固定標記,#EXTINF 後面接的是這段的秒數,#EXT-X-ENDLIST 表示「影片到此結束」。
HLS 又是什麼?
HLS(HTTP Live Streaming)是 Apple 在 2009 年提出的串流協定,核心概念是「把影片切小塊,用一般 HTTP 傳送」。這帶來幾個關鍵好處:
| 特性 | 為什麼重要 |
|---|---|
| 動態切換畫質 | 網速變慢時自動降畫質,不會卡住 |
| 快速起播 | 不用等整個檔案下載完 |
| 容錯性高 | 單一片段失敗可重試,不影響整體 |
| 穿透性佳 | 走標準 HTTP,防火牆與 CDN 都支援 |
所以 HLS 是協定,M3U8 是它用的清單格式。在台灣常見的串流服務幾乎都採用 HLS。
兩種清單:Master 與 Media
實際使用時,你可能會遇到兩種 M3U8:
# Master 清單(有 #EXT-X-STREAM-INF)
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080
1080p/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720
720p/index.m3u8Master 清單只列出「有哪些畫質可選」,每個選項指向另一份清單。Media 清單才是真正列出 .ts 片段的那份。
實用技巧:想確認你手上的是哪一種,直接丟進本站的串流檢測工具,它會告訴你清單類型、片段數量與畫質資訊。
常見技術名詞對照
| 名詞 | 意思 |
|---|---|
#EXTM3U | M3U8 檔的開頭標記,表示這是擴充版 M3U 格式 |
#EXTINF | 下一段影片的長度(秒) |
#EXT-X-STREAM-INF | Master 清單中的畫質選項 |
#EXT-X-KEY | 表示片段加密,後面會給金鑰位置 |
#EXT-X-ENDLIST | 影片結束標記;沒有這行就是直播 |
#EXT-X-PLAYLIST-TYPE | 清單類型,VOD(隨選)或 EVENT(直播) |
| BANDWIDTH | 該畫質的頻寬需求,數字越大畫質越高 |
| TS | MPEG-TS,影片片段的容器格式 |
搞懂之後,你可以做什麼
常見問題
M3U8 是影片格式嗎?
不是。M3U8 是純文字檔,內容是一份「播放清單」,記錄影片片段的位置與播放順序。它本身不含任何影像資料,所以要下載 M3U8 時,實際上是去下載清單裡列出的那些片段檔。
M3U8 跟 HLS 有什麼關係?
HLS(HTTP Live Streaming)是 Apple 提出的串流協定,而 M3U8 是 HLS 使用的播放清單格式。簡單說:HLS 是「協定」,M3U8 是這個協定裡的「清單檔案」。兩者常被混用,但指的是不同層級的東西。
為什麼不直接給一個 MP4 就好?
因為切片段有三個好處:可依網速動態切換畫質、不必等下載完整個檔案就能開始播、單一片段損毀不影響整體。這也是 YouTube、Netflix 等平台都採用類似架構的原因。
M3U8 可以離線播放嗎?
M3U8 只是一份清單,離線後就抓不到片段了。要離線播放必須把片段下載並合併成單一檔案(如 MP4),詳見 M3U8 轉 MP4 的說明。