HLS 播放器:線上播放 HLS 與 m3u8 串流

HLS 是當今網路直播與隨選影片的主流技術,YouTube、Netflix、各大電視台直播都採用它。這頁除了提供可直接使用的線上播放器,也會說明 HLS 的原理、為什麼不同瀏覽器行為不一致,以及實務上常見的限制。

操作步驟

  1. 取得 HLS 播放清單網址

    HLS 串流的入口網址通常以 .m3u8 結尾。若你是開發者,這個網址就是你的 Master Playlist 位置。

  2. 貼進播放器

    把網址貼入上方輸入框並送出。播放器會解析播放清單,判斷是直播或隨選、單一畫質或多畫質。

  3. 依需求調整

    多畫質來源可手動切換解析度;直播可觀察緩衝狀況;若需背景播放,可開啟子母畫面。

HLS 的運作原理

HLS 的核心概念是「把大檔案切成小片段,用一般的 HTTP 傳輸」。這樣做的好處是不需要特殊的串流伺服器,一般的網頁伺服器或 CDN 就能勝任。

完整的播放流程是這樣:

  1. 取得播放清單:播放器先下載 .m3u8 檔,得知有哪些畫質、每個片段的位置與長度。
  2. 抓取片段:依清單順序下載 .ts(或 fMP4)片段,並放入緩衝區。
  3. 解碼播放:把片段解碼後連續播放,使用者看到的就是完整影片。
  4. 動態調整:播放器持續監測網速,在下一段切換到更適合的位元率,這就是「自適應位元率」。

因為片段是獨立的,即使某一小段下載失敗,也只會影響那幾秒,不會讓整個播放中斷 —— 這是 HLS 在網路不穩定時仍能運作的關鍵。

自適應位元率(ABR)如何選擇畫質

你可能注意到:看影片時畫質會自己變好或變差。這不是錯覺,而是 ABR 演算法在運作。

判斷依據行為
下載速度最近幾個片段的實際下載速度,是最主要的判斷依據。
緩衝區水位緩衝的影片秒數。水位低時會主動降畫質,避免播放中斷。
裝置效能部分播放器會考慮解碼能力,老舊裝置即使網速夠也可能維持較低畫質。

實務上的取捨是:寧可畫質降一點,也不要卡頓。如果你希望固定畫質(例如要錄影存證),可以在播放器中手動鎖定解析度。

瀏覽器與裝置相容性

這是 HLS 最容易被誤解的地方:同一個網址,在 iPhone 可以播,在電腦 Chrome 卻不行。原因如下表。

環境HLS 支援方式
Safari / iOS原生支援,直接交給 HTML5 video 播放,效率最好。
Chrome / Edge / Firefox原生不支援,需透過 hls.js 等程式庫轉換後播放。
Android Chrome同樣走 hls.js 路線;部分機型對長時間播放記憶體較敏感。
Smart TV / 機上盒多數支援 HLS,因為它已是業界通用標準。

本頁的播放器會自動偵測瀏覽器能力:Safari 直接播,其他瀏覽器自動載入解析程式庫。你不必手動切換。

直播與隨選影片的差異

HLS 同時支援直播與隨選,但兩者在播放清單上有明確差異,理解後有助於排查問題。

類型特徵
隨選(VOD)播放清單結尾有 #EXT-X-ENDLIST 標記,代表影片已完整,可任意跳轉時間軸。
直播(Live)沒有 ENDLIST 標記,清單會持續更新。通常無法往前跳轉超過緩衝範圍。

如果你發現「時間軸不能拖動」,很可能就是直播來源 —— 這是正常現象,不是播放器故障。

常見問題

HLS 跟 M3U8 是同一個東西嗎?
不完全相同。HLS(HTTP Live Streaming)是一套「串流協定」,規範影片如何切割、傳輸與播放;M3U8 則是 HLS 使用的「播放清單檔案格式」。打個比方:HLS 是交通規則,M3U8 是路線圖。你播放時需要的是 M3U8 網址,而背後運作遵循的是 HLS 協定。
為什麼 Safari 能播、Chrome 卻不行?
HLS 是 Apple 提出的協定,因此 Safari 與 iOS 原生支援,不需額外程式庫。Chrome、Edge、Firefox 則需要透過 JavaScript 程式庫(如 hls.js)把 HLS 轉成瀏覽器看得懂的格式再播放。本頁的播放器已自動處理這個差異,你在 Chrome 上也能正常播放。
HLS 播放器可以播直播嗎?
可以。直播與隨選影片在 HLS 上的差異在於:直播的播放清單會不斷更新(沒有 #EXT-X-ENDLIST 結尾標記),播放器需持續抓取新片段;隨選影片則有明確結尾。本播放器兩種都支援。若直播延遲偏高,通常與來源設定的片段長度有關。
HLS 跟 DASH 有什麼不同?
兩者都是自適應位元率(ABR)串流技術,原理相似,主要差在生態系:HLS 由 Apple 主導,使用 .ts 或 fMP4 片段與 m3u8 清單,在 Apple 裝置與多數平台上通用;DASH 是開放標準(MPEG-DASH),使用 .mpd 清單,在 Android 與部分瀏覽器上較常見。實務上多數服務會同時提供兩種,依裝置選擇。
HLS 的延遲為什麼比一般直播高?
HLS 本身就是「以延遲換穩定」的設計。它把影片切成數秒的片段,播放器需要先下載幾個片段才能建立緩衝,因此天生有數秒到數十秒的延遲。若要降低延遲,可改用低延遲 HLS(LL-HLS)縮短片段長度,或改用 WebRTC 等技術。
播放 HLS 會消耗很多流量嗎?
取決於畫質。HLS 會依你的網速自動選擇位元率,一般 1080p 約每小時 3-7 GB,4K 可能超過 15 GB。若使用行動網路,建議手動選擇較低畫質,或改用 Wi-Fi。播放器本身不會額外增加流量,它只是把你選擇的畫質抓下來播放。