HLS 低延遲最佳化:LL-HLS 與 CMAF 的技術原理與實務
傳統 HLS(HTTP Live Streaming)基於 TS 或 fMP4 片段,通常產生 6–10 秒的端到端延遲。隨著直播互動性要求的提升,蘋果推出了 Low-Latency HLS (LL-HLS) 並結合 CMAF (Common Media Application Format) 標準,將延遲壓縮至 2–3 秒,同時保持與現有 HLS 生態的相容性。本文將剖析這兩項技術的核心原理,並給出實務驗證建議。
CMAF:分塊編碼與容器統一
CMAF 定義了一種基於 fMP4 的媒體格式,讓同一份內容可以同時用於 HLS 和 MPEG-DASH。其低延遲模式的關鍵在於 分塊(Chunk):
- 分塊編碼:編碼器將每個完整片段(Segment)分割成多個更小的分塊(Chunk)。每個分塊包含數幀影片,可以獨立解碼和傳輸。
- 即時傳輸:伺服器不必等待整個片段產生完畢,而是每產生一個分塊就透過 HTTP 分塊傳輸(Chunked Transfer)發送給播放器。
- 相容性:CMAF 片段仍以
.m4s或.mp4結尾,播放器可以選擇接收完整片段或分塊串流。
#EXTM3U
#EXT-X-VERSION:7
#EXT-X-TARGETDURATION:6
#EXT-X-MAP:URI="init.mp4"
#EXTINF:6.000,
segment1.m4s
#EXTINF:6.000,
segment2.m4s
若採用分塊模式,清單還會包含分塊的元資訊。CMAF 本身不強制低延遲,但它為 LL-HLS 提供了容器基礎,使得片段內的部分資料可以提前被存取。
LL-HLS:蘋果的低延遲擴展
LL-HLS 在傳統 HLS 基礎上增加三個核心機制,使延遲降低到接近即時:
1. 分塊與預載入提示
播放器可以透過 #EXT-X-PART 標籤知道片段內部的可下載分塊,並透過 #EXT-X-PRELOAD-HINT 預載入下一個即將產生的分塊。這樣播放器能在片段完成之前就開始解碼顯示。
#EXTINF:6.000,
media1.m4s
#EXT-X-PART:DURATION=1.000,URI="media1.part1.m4s"
#EXT-X-PART:DURATION=1.000,URI="media1.part2.m4s"
#EXT-X-PART:DURATION=1.000,URI="media1.part3.m4s"
#EXT-X-PRELOAD-HINT:TYPE=PART,URI="media1.part4.m4s"
2. 增量更新(Delta Playlists)
為了進一步減少清單傳輸開銷,LL-HLS 允許播放器請求最近變更的片段列表,而非完整清單。透過 #EXT-X-SKIP 標籤,伺服器可以僅傳送新增的部分,降低首屏啟動延遲。
3. 阻塞式請求(Blocking Playlist Reload)
播放器發出清單請求後,伺服器若沒有新內容,會保持連線暫停,直到新片段可用再回應。這消除了輪詢帶來的冗餘延遲。
這些機制的實現需要編碼端產生符合 CMAF 分塊規範的輸出,同時伺服器支援 HTTP/1.1 分塊傳輸、HTTP/2 Push 以及 Server-Sent Events 等現代特性。
實務:測試與調試 LL-HLS 串流
要驗證 LL-HLS 的效果,最直接的方式是用支援該規範的播放器載入串流媒體網址。市面上許多線上 HLS 播放器已經整合了最新版的 hls.js —— 這正是 M3U8Player 的核心引擎。
你可以直接造訪 M3U8Player,將 LL-HLS 播放清單(範例:https://example.com/live/llhls.m3u8)貼上到輸入框。該播放器會自動解析 #EXT-X-PART、#EXT-X-PRELOAD-HINT 等標籤,以低延遲模式拉取串流。與普通 HLS 相比,畫面延遲會顯著降低——這是檢驗低延遲配置是否生效的最便捷方法之一。
若你使用 FFmpeg 進行測試編碼(實驗性 hls_ll 選項),-hls_playlist_type event -hls_list_size 0 -hls_time 2 -hls_segment_type fmp4 -hls_flags split_by_time 可以產生 LL-HLS 相容串流,再透過 M3U8Player 驗證不同分塊大小對延遲的影響。線上播放器省去了本地搭建環境的繁瑣,讓開發者能快速迭代參數。
總結
LL-HLS 與 CMAF 的組合是目前降低 HLS 延遲的最佳方案之一。CMAF 提供了容器粒度,LL-HLS 定義了傳輸協定上的加速手段,二者結合使得延遲可以從數秒降至即時感。對於開發者而言,使用 M3U8Player 這類支援最新規範的播放器,可以直觀比較不同配置下的延遲表現,是調試低延遲串流的實用工具。