什麼是 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.m3u8

Master 清單只列出「有哪些畫質可選」,每個選項指向另一份清單。Media 清單才是真正列出 .ts 片段的那份。

實用技巧:想確認你手上的是哪一種,直接丟進本站的串流檢測工具,它會告訴你清單類型、片段數量與畫質資訊。

常見技術名詞對照

名詞意思
#EXTM3UM3U8 檔的開頭標記,表示這是擴充版 M3U 格式
#EXTINF下一段影片的長度(秒)
#EXT-X-STREAM-INFMaster 清單中的畫質選項
#EXT-X-KEY表示片段加密,後面會給金鑰位置
#EXT-X-ENDLIST影片結束標記;沒有這行就是直播
#EXT-X-PLAYLIST-TYPE清單類型,VOD(隨選)或 EVENT(直播)
BANDWIDTH該畫質的頻寬需求,數字越大畫質越高
TSMPEG-TS,影片片段的容器格式

常見問題

M3U8 是影片格式嗎?
不是。M3U8 是純文字檔,內容是一份「播放清單」,記錄影片片段的位置與播放順序。它本身不含任何影像資料,所以要下載 M3U8 時,實際上是去下載清單裡列出的那些片段檔。
M3U8 跟 HLS 有什麼關係?
HLS(HTTP Live Streaming)是 Apple 提出的串流協定,而 M3U8 是 HLS 使用的播放清單格式。簡單說:HLS 是「協定」,M3U8 是這個協定裡的「清單檔案」。兩者常被混用,但指的是不同層級的東西。
為什麼不直接給一個 MP4 就好?
因為切片段有三個好處:可依網速動態切換畫質、不必等下載完整個檔案就能開始播、單一片段損毀不影響整體。這也是 YouTube、Netflix 等平台都採用類似架構的原因。
M3U8 可以離線播放嗎?
M3U8 只是一份清單,離線後就抓不到片段了。要離線播放必須把片段下載並合併成單一檔案(如 MP4),詳見 M3U8 轉 MP4 的說明。

直接試試看

貼上 M3U8 網址,馬上驗證你學到的觀念。

線上播放