M3U8とHLSの関係とは?ストリーミングプロトコルをわかりやすく解説

正直なところ、私が最初にm3u8というものに出会ったとき、まったく意味がわかりませんでした。

というのも、あるサイトの動画をダウンロードしようとして、パケットを調べていたら、動画のURLが一般的な.mp4ではなく、.m3u8で終わるリンクだったのです。「これは何だ?」と思ってクリックして開いてみると、中にはコードではないのにコードのように見えるテキストがびっしりと並んでいて、いくら探しても完全な動画ファイルは見つかりませんでした。

あとでわかったのですが、これはHLSプロトコルの仕業でした。

HLS(HTTP Live Streaming)は、中国語では「HTTP直播流」と訳される、HTTP上で動画をライブ配信するためのプロトコルです。Appleが策定したもので、もともとはiPhoneやiPadで動画を再生するために作られました。しかし、あまりに便利だったため、AndroidやWebでも採用されるようになり、やがて動画のライブ配信やオンデマンド配信の主流になりました。

では、M3U8とは何でしょうか?HLSとどういう関係にあるのでしょうか?

簡単に言うと、HLSはルール、つまり映像伝送のための全体的な仕組みです。一方、M3U8はその仕組みの中で使われる「プレイリストファイル」であり、いわばメニュー表のようなものです。

HLSの核となる考え方は、動画全体を一度に送るのではなく、まず数秒分の小さなセグメントに分割するというものです。例えば10分の動画なら、100個ほどの小さなファイル(通常は.ts拡張子)に分割されます。再生時には、プレイヤーがその小さな断片をダウンロードしながら再生し、1つが終わると次の断片を途切れることなく再生していきます。

では、プレイヤーはどの断片を先にダウンロードし、どれを後でダウンロードすればよいのでしょうか?そこで登場するのがM3U8です。M3U8の中身はリンクとアドレスの羅列で、この動画が全部で何個のセグメントに分かれているか、それぞれのURLは何か、どの順番で再生すべきかが明確に書かれています。

要するに、M3U8はHLSのナビゲーションマップなのです。この地図がないと、プレイヤーはバラバラの順番で並んだ.tsファイルを見ても、どう処理すればいいのか見当もつきません。

M3U8という名前にも由来があります。M3Uは古くからある音声プレイリストのフォーマットで、MP3プレイヤーが大流行した時代にプレイリスト管理のために使われていました。その後、HLSがこのフォーマットを採用しましたが、UTF-8エンコーディングに対応する必要があったため、M3Uに「8」を加えてM3U8になりました。つまり、M3U8はより高度なプレイリストファイルなのです。

普段ネットでライブ配信を見たり、動画プラットフォームで非会員向けのコンテンツを見たりするとき、その背後にはおそらくHLSが使われています。アドレスバーに.mp4と表示されていても、実際にはプレイヤー内部で変換され、HLS + M3U8の仕組みで配信されている可能性が高いです。

以前、私はIPTVのソースに夢中になって、テレビライブ配信用のプレイヤーをいろいろ試していたことがあります。フォーラムで共有されているライブソースは、たいていm3u8のリンクだけで、プレイヤーに放り込めばすぐに視聴できました。不安定なソースもあって、しばらく見ていると止まってしまったりして、さんざん試行錯誤したあげく、結局WebプレイヤーのM3U8Player(https://m3u8player.link/)を使うことにしました。手間が省けるからです。このプレイヤーはライブストリームやローカルファイルの解析にも対応していて、こないだ母のために地元のテレビ局のソースを探したときも、これで解決しました。リンクを貼り付けるだけで再生でき、ソフトをいちいちダウンロードする必要もありません。

正直なところ、HLSプロトコルがうまく機能する理由は、複雑なものを細かく分割している点にあります。巨大な動画ファイルを直接配信しようとすると、ネットワークが少しでも不安定になった瞬間に全体が止まってしまう可能性があります。しかし、細かく分割されていれば、仮に1つの断片のダウンロードに失敗しても、もう一度リクエストし直すだけで済み、全体の再生にはほとんど影響しません。さらに、HLSはビットレートの自動適応もサポートしているため、回線状況が悪いときは自動的に低画質のセグメントに切り替わり、最後まで止まらずに視聴できます(ずっとローディングのぐるぐる表示になることもありません)。

もちろん、HLSに欠点がないわけではありません。もともと遅延が発生しやすく、ライブ配信では従来のRTMPに比べて数秒から十数秒遅れることがあります。ただし、動画視聴やドラマの一気見、リプレイ、リアルタイム性を求めないライブ配信など、ほとんどのシーンではこの遅延は十分許容範囲です。

ですから、今度もし動画のURLが.m3u8で終わっているのを見かけたら、その動画はサーバー上で無数の小さな断片に分割されて保存されており、M3U8こそがその「宝の地図」なのだ、とわかるはずです。HLS対応のプレイヤーにこの地図を渡せば、自動的にその地図に従って断片を取得・結合し、最終的に途切れのない完全な映像を表示してくれます。