M3U8 / HLS
蘋果發明了它,每台蘋果裝置都會播放它,但沒有一個會保存它。
.m3u8 檔案是一個播放列表,而不是影片:數千位元組的文本,列出了要按順序獲取的數千個小片段。這種設計就是 HLS 在每台 Apple 裝置上完美運作以及「儲存此檔案」產生文字檔案的原因。下載一個意味著獲取每個段落並重建一個從未存在過的檔案。
2026年7月30日
系統原生即可開啟
HLS 是 Apple 自己的規範,在所有地方都有一流的支援 — Safari、AVPlayer、AirPlay。系統中沒有任何地方支援將即時串流轉換為磁碟上的檔案。播放和保存是完全不同的問題。
基本資訊
| 全名 | HTTP 直播;播放清單是 UTF-8 格式的 M3U |
|---|---|
| 種類 | 串流協議,以文字播放清單形式提供 |
| 擴展 | .m3u8(播放清單)、.ts 或 .m4s(它指向的段落) |
| 已發布 | 2009,蘋果;2017 年 標準化為 RFC 8216 |
| 典型段長度 | 每個 2 到 10 秒 — 一小時的影片相當於數百到數千個檔案 |
| 大師 vs 媒體播放列表 | 大師列出品質等級;每個點都指向實際片段的媒體播放列表 |
| 片段內的影片 | H.264 或 HEVC,偶為 AV1 |
| 直播 | 播放清單每隔幾秒鐘重新獲取一次,並隨著廣播的繼續而增長 |
目錄,而非書
用文字編輯器開啟 .m3u8,您會發現幾十行:一個標頭、一些參數,以及一長串位址。這就是檔案的全部內容。該影片位於別處,被切成每段幾秒鐘的片段,作為數千個獨立的小檔案存放在伺服器上。
播放器讀取列表,取得前幾個片段,開始播放,並持續提前取得。當您的連線速度變慢時,它會切換到主播放清單中列出的較低品質變體(一組不同的片段,位元率不同),並在片段之間切換,讓您看到的是畫質變化而不是暫停。這種自適應切換正是該格式勝出的原因。
這也解釋了一件令人驚訝的事:根本沒有單一的檔案存在。您正在觀看的電影不曾以物件的形式存在於任何地方。它是一千個片段和一套取得它們的指令。
為什麼要儲存它會給你一個文字檔案
因為那是你儲存的。瀏覽器詢問您提供的位址,接收 4 KB 的播放列表,並將它們寫入磁碟。您實際觀看的所有內容都是透過一千個單獨的請求到達的,而保存作業對此一無所知。
正確下載HLS意味著執行播放器所做的事情,但下載到磁碟:讀取播放列表,選擇品質變體,按順序獲取每個片段,然後將它們拼接到一個容器中。最後一步稱為 重新混合 - 視訊和音訊不會重新編碼,只會重寫為具有適當索引的單一 MP4,以便可以擦除結果。
有兩件事讓這件事比聽起來更困難。段位址通常是相對的,並且每個會話都會發生變化,因此一小時前獲取的清單可能已失效。並且串流經常使用播放清單中引用的密鑰進行加密、單獨傳送並在播放期間輪換。
如何把它存到裝置上
僅適用於您有權保留的串流 - 您自己的錄音、您自己的 IPTV 訂閱、提供下載的廣播公司。接下來是該機制的工作原理,而不是允許將其指向任何地方。
- 讓下載引擎處理這些段
取得一千個檔案並重新混合它們正是 FoxDL 的下載器對 HLS 來源所做的工作:它遍歷播放列表,並行拉取片段,然後寫入一個像普通檔案一樣進行清理的 MP4。到達的是一個檔案,而不是一個檔案夾。
- 有直接檔案可用時就選它
許多網站同時提供 HLS 和普通漸進式 MP4。 MP4 是一種請求,一種檔案,無需重建 — 在提供時始終是更好的選擇。
- 接受有些不能保留的事實
受 DRM 保護的串流(FairPlay、Widevine)經過端對端加密,設計上不可下載。沒有任何工具可以改變這一點,而聲稱可以改變這一點的人卻在撒謊。
HLS下載出錯的地方
在不重新混合的情況下連線的片段會產生一個沒有索引的可播放檔案。它從頭開始播放並且不會跳躍。重新混合會寫入修復它的索引。
現場播放清單沒有盡頭——它不斷增長。下載一個就是錄音,停止就停止,而不是檔案結束就停止。
播放清單位址通常是經過簽署且有時間限制的。今天早上保存的 .m3u8 經常到下午就找不到任何內容。
關於此格式的常見問題
這些資訊的參考來源
- RFC 8216 — HTTP Live Streaming IETF
- HTTP Live Streaming Apple Developer