M3U8の仕組みを図解:HLSストリーミングを支えるプレイリストファイルの構造

目次

  1. 行の集まりでしかないファイル
  2. マスターとメディア、2種類のプレイリスト
  3. 出てくるタグの読み解き方
  4. 画質が自動で切り替わるカラクリ
  5. ライブとオンデマンドで何が違うか

行の集まりでしかないファイル

m3u8の正体は、メモ帳でも開けるただのテキストファイルです。拡張子の見た目は威圧的ですが、理解に必要な規則は実質ひとつだけで、「#で始まる行はタグ、それ以外の行はファイルの場所」と読めば済みます。

重要なのは、動画の実体がm3u8の中に含まれていない点です。書かれているのはTSセグメントと呼ばれる動画の断片への参照だけで、プレイヤーはそれを上から順に取得しては再生します。つまりm3u8は配信の「目次」兼「進行表」であり、テキストゆえにCDNで扱いやすく、配信側はリストを書き換えるだけで進行を制御できます。

マスターとメディア、2種類のプレイリスト

HLSではm3u8が二段階に分かれて登場します。1段目のマスタープレイリストは、用意された画質ごとに2段目への入り口を示す役割を持ちます。典型例がこちらです。

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=2149280,RESOLUTION=1280x720
720p/index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=965000,RESOLUTION=640x360
360p/index.m3u8

このファイルは動画を一切参照しておらず、「720p版は720p/index.m3u8に、360p版は360p/index.m3u8にある」と宣言しているだけです。2段目のメディアプレイリストになってようやく、EXTINFとTSセグメントの実体が列挙されます。単一画質の配信ではマスターが省略され、メディアプレイリストだけが直接渡されることも多いです。手元のm3u8がどちらのタイプかは、開いたときにEXT-X-STREAM-INFが見えるかどうかで判別できます。

出てくるタグの読み解き方

メディアプレイリスト側でよく目にするタグを、役割順に整理します。

画質が自動で切り替わるカラクリ

ABR(アダプティブビットレート)は特別な魔法ではなく、選び直しの繰り返しです。プレイヤーは直近のセグメントのダウンロード所要時間から実効帯域を推定し、マスターに並ぶ候補の中から「今の帯域でも間に合う最高の画質」を選びます。

ここで効いているのが、TSセグメントが断片単位で独立してデコードできる点です。そのため720pから360pへの切替は「次のセグメントから」滑らかに行えます。逆にセグメントが長いほど切替の反応は遅れます。近年はfMP4セグメントや低遅延HLSの普及もありますが、リストで進行を制御するという基本構造は変わりません。

ライブとオンデマンドで何が違うか

同じm3u8でも、挙動は両者でかなり異なります。オンデマンドでは全セグメントが最初から並び、末尾に#EXT-X-ENDLISTが付きます。一方ライブではリストに最新の数セグメントだけが載り、配信が進むにつれ古い断片から順に抜け落ちていきます。これがスライディングウィンドウと呼ばれる仕組みで、過去の部分が見られなくなるのはこのためです。

構造がわかれば、再生も検証もぐっと怖くなくなります。まずは手元のURLをオンラインプレーヤーで開いてみてください。ほかの切り口の解説はチュートリアル一覧にまとめています。