01. なぜ MoQ なのか
🎯 この章のゴール
- 既存のライブ配信技術(RTMP / HLS・DASH / WebRTC)の得意・不得意を知る
- Media over QUIC(MoQ)が何を目指しているのかを説明できる
- IETF moq ワーキンググループのドラフト群の全体像を掴む
💡 ひとことで言うと
MoQ は「CDN で配れる WebRTC」を目指す新しい pub/sub プロトコルです。数百ミリ秒の遅延のまま、数百万人規模の視聴者に届けることを狙っています。
ライブ配信の 3 つの世界
今日のライブ配信は、用途ごとに別々の技術でできています。
| 用途 | 主な技術 | 遅延 | スケール | 弱点 |
|---|---|---|---|---|
| 取り込み(配信者 → サーバー) | RTMP / SRT | 1〜数秒 | 1 対 1 | 視聴側では使えない。TCP の HoL ブロッキング(RTMP) |
| 大規模配信 | HLS / DASH | 数秒〜数十秒 | ◎(HTTP CDN) | セグメント単位なので遅い |
| 双方向・会議 | WebRTC | 数百 ms 以下 | △ | 大規模配信に向かない。SFU の運用が大変 |
低遅延な技術は大規模配信に向かず、大規模に配れる技術は遅い、という状態です。区間ごとにプロトコルも違うので、途中で「RTMP を受けて HLS に変換する」ような再パッケージが必要になります。
MOQT の 4 つの設計目標
MOQT(Media over QUIC Transport)のドラフトは、冒頭で次の 4 つの動機を挙げています。
- Latency(遅延): 遅延は、ネットワークの帯域変動を吸収するためにバッファを持つことで生まれます。TCP ベースのプロトコルは輻輳の検知が遅く、HoL ブロッキングもあります。UDP を直接使えば待ちは減りますが、再送や輻輳制御を全部自前で作ることになります。MOQT は QUIC を使って両者の利点を取り、輻輳にすばやく反応することを目指します。
- Leveraging QUIC(QUIC の活用): 並列なストリームと柔軟な損失回復を活かします(次章)。
- Convergence(収束): 取り込みから配信までを 1 つのプロトコルで行い、再パッケージ用のオリジンを不要にします。
- Relays(リレー): 大規模配信には、パブリッシャともサブスクライバとも独立した第三者のネットワーク(CDN)が欠かせません。MOQT はリレーを第一級市民として扱い、配信に必要なメタデータはリレーに見せ、メディアの中身は不透明なまま秘匿できるようにします。
MOQT は「メディア専用」ではない
名前に反して、MOQT は content agnostic(中身を問わない)と明記されています。MOQT が知っているのは「名前の付いたトラックに、番号の付いたバイト列(Object)が流れる」ことだけです。
映像や音声をどう Object に詰めるか、どんなトラックがあるかをどう知らせるかは、別のストリーミングフォーマット仕様が決めます。チャット、ゲームの状態同期、センサーデータ、AI の音声応答なども MOQT に載せられます。
IETF moq WG のドラフト群
| ドラフト | 役割 | 本コース |
|---|---|---|
| draft-ietf-moq-transport | pub/sub の本体(MOQT) | 02〜11 章 |
| draft-ietf-moq-loc | 低オーバーヘッドなメディアコンテナ(LOC) | 12 章 |
| draft-ietf-moq-msf | ストリーミングフォーマットとカタログ(MSF) | 12 章 |
| draft-ietf-moq-cmsf | CMAF で詰める MSF の拡張(CMSF) | 12 章 |
これとは別に、moq.dev は MOQT のサブセット「moq-lite」と独自のメディアフォーマット「hang」を実装し、それを使った CDN(moq.pro)も提供しています(13 章)。
flowchart LR app["アプリ"] --> fmt["フォーマット<br/>MSF・LOC など"] --> moqt["MOQT<br/>pub/sub"] --> tr["QUIC /<br/>WebTransport"]
🧪 考えてみよう
スポーツのライブ中継で、隣の家の歓声が自分の画面より 10 秒早く聞こえることがあります。HLS でこの「ネタバレ問題」が起きやすいのはなぜでしょう? HLS は数秒のセグメントが完成してから配るので、「セグメント長 × 数個」分の遅延が積み上がります。MoQ はセグメントを待たず、フレームができた端から流します。
📝 まとめ
- 既存技術には「低遅延 ↔ スケール」のジレンマと、区間ごとのプロトコル分断がある
- MOQT は QUIC の上で動く汎用の pub/sub プロトコルで、リレー(CDN)を前提に設計されている
- メディアの詰め方は LOC / MSF / CMSF など別仕様のレイヤーが担当する
参考
✅ 理解度クイズ
WebRTC は低遅延だが大規模配信が難しく、HLS/DASH は CDN で大規模に配れるが数秒以上の遅延がある。MoQ はこの遅延とスケールのトレードオフを 1 つのプロトコルで解消しようとしています。
名前に Media とありますが、MOQT は content agnostic(中身を問わない)と明記されています。メディアをどう Object に詰めるかは MSF や LOC などのストリーミングフォーマット側で定義します。
今は RTMP で取り込んで HLS/DASH に変換して配る、のように区間ごとにプロトコルが違い、変換用のオリジンが必要です。MOQT はこれを 1 つのプロトコルにまとめることを狙っています。
Object のメタデータは常に暗号化されずリレーから見え、ペイロードはエンドツーエンド暗号化できます。リレーは中身を見ずにキャッシュ・転送・優先度制御ができます。