やあ、みなさん。今日はM3U8とMP4の話をしようと思います。タイトルにびっくりしないでくださいね。教科書みたいな堅苦しい話ではなくて、私が動画ストリーミングで実際に経験したリアルな感想みたいなものです。

実はこういうことなんです。少し前、友達が「再生できるリンク」をどうにかしてほしいと頼んできて、送られてきたのが.m3u8で終わるアドレスの山でした。思わず笑っちゃいましたよ。今やこれ、ストリーミング業界の「合言葉」みたいなものですからね。でも正直なところ、多くの人はこれが普段ダウンロードしているMP4とどう違うのか、どっちが使い勝手がいいのか、よくわかっていないんです。今日は、私がハマった落とし穴と、「これはいい!」と思った瞬間をお話しします。

まずはライブ配信のシチュエーションから。ライブ配信をするなら、基本M3U8が本命で、MP4はおまけみたいなものです。

なぜかというと、M3U8は生まれつき「セグメント(分割)方式」だからです。例えるなら、長いソーセージを一枚ずつ切って、プレイヤーがそれを取っては食べ、食べ終わったら次をリクエストする感じ。ライブ配信では、サーバーが1枚生成したらそれを視聴する形で、遅延をかなり抑えられます。以前私はMP4で「擬似ライブ配信」を試したことがあります。MP4ファイルをそのまま置いて、シークバーで見るようにさせたんですが、これがもう苦行で、キャッシュに時間がかかるし、ドラッグするとカクカクでコマ送りみたいになりました。MP4のメタデータ(moovってやつですね)は通常ファイルの先頭か末尾に置かれます。回線が少しでも遅いと、構造全体を解析し終えるまで再生が始まりません。一方M3U8は、最初のTSセグメントを取得すればすぐに再生できます。この「秒で開く」スムーズさは、一度体験すると戻れなくなります。

ただ、ライブ配信においてM3U8にも面倒な点はあります。新しいセグメントリストを常にリクエストするため、ネットワークが不安定だと、プレイヤーは「読み込み中」のくるくるマークが延々と回り続けます。また、セグメントの境目でごくわずかなカクつきが起きることがあり、しゃっくりみたいな感じです。さらにライブ配信のソースを見ると、数秒ごとの.tsファイルが何百個も並んでいます。自分で録画して保存したい場合は、専用ツールで結合しないといけません。MP4のように1ファイルで完結するわけではないんです。

しかし、オンデマンド(VOD)のシチュエーションとなると、話は逆転します。私は普段映画やドラマをよくダウンロードしますが、大半はMP4かMKVです。なぜか?オンデマンドは「完全な視聴体験」が重視されるからです。MP4は1つのファイルにすべての音声・映像トラックを詰め込めるので、早送り・巻き戻し・シークが非常にスムーズです。シークバーをどこにドラッグしても、その位置を解析してほぼ遅延を感じません。私のPCには1080pの『ショーシャンクの空に』がMP4形式で1.5GB保存してありますが、ローカルプレイヤーで再生しても全くカクつきません。しかし、もしM3U8のオンデマンドソースをもらったら、シークするたびにその時間帯のセグメントを取得するのを待たされ、時には2〜3秒バッファリングすることもあります。使えないわけではないんですが、この「もたつき感」は、私のように飛ばし見をする人間にとってはかなり辛いです。

もう1つ、MP4の互換性は本当に広いです。古ぼけたMP3プレーヤー(動画は再生できませんが)からテレビ、スマホ、ゲーム機まで、大概のデバイスなら再生できます。一方M3U8は、それ自体は単なるリストであり、中身のTS形式も古いんですが、あれこれ試行錯誤する場面では、特定の変なブラウザでまともに再生してくれないことがあります。以前M3U8アドレスをWeChatに送ったら、スマホのブラウザが再生ではなくダウンロードを開始してしまい、スマホを投げたくなるほど腹が立ちました。

ただ、M3U8もオンデマンドで何の取り柄もないわけではありません。大きな利点が1つあります。それは「セグメント単位で読み込むので通信量を節約できる」ことです。例えば超長尺の動画を視聴する場合、MP4は一部をローカルにダウンロードしないと再生が始まりませんが、M3U8は現在視聴している数セグメントだけを非常にケチに読み込みます。ネットワークが悪いと、MP4はファイル全体の読み込みに失敗することがありますが、M3U8は最悪でも現在のセグメントで止まるだけで、リロードすれば後ろから続けて再生できます。さらにM3U8はネイティブにマルチビットレート切り替えをサポートしています。同じリストに複数解像度のセグメントが書かれており、ネットワークが速ければ1080P、遅くなれば自動で480Pに落ちて、中断しません。MP4で同じことをやろうとするとDASHのような高度な仕組みが必要で、面倒です。

ここで白状しますが、私は普段誰かが共有している「テスト配信元」や妙なライブ配信リンクを見ると、今では真っ先にM3U8Player(https://m3u8player.link/ というオンラインプレイヤーです)で試しに開いてみる癖がついています。ある時、公式ライブ配信のm3u8アドレスを入手して、このページで開いたら、シークバーまで表示されて、画質切り替えもできました。オンラインツールでここまでできるとは、本当に手間いらずです。

最後に正直なところを言うと、この2つはどちらが勝っているというものではありません。ライブ配信や「見えたもの=得られる」系の動画ストリーミングをするなら、M3U8が王道です。弱いネットワーク環境でも一応映像が見えるので、何も映らないよりマシだからです。一方、じっくり動画を保存してオフラインで見るなら、MP4が常に頼れる兄貴分です。もしどうしてもPCでローカルのTSセグメントの詰め合わせを見たいというなら、楽しんでくださいとしか言えません。

まあ、こんなところです。すべて自分で試行錯誤して得た血と涙の経験です。みなさんはどんな形式でどんな変な問題に遭遇しましたか?コメントで教えてください!