Media over QUIC(MoQ)
低遅延ライブ配信で、WebRTCの複雑さとHTTP配信の遅延の両方を避けたい。QUIC上のpub/subでどう中間を突くのかを原理から理解できます。
- MoQ は QUIC/WebTransport 上に Track・Group・Object の3層で配信データを表現し、publish/subscribe と relay 中継でライブメディアを運ぶIETF標準群。
- 映像を Object 単位で扱い優先度を付けるため、輻輳時に relay が古いGroupや低優先Objectを選択的に落として遅延を守れる。
- 遅延はWebRTC(数十〜数百ms)とHTTP適応配信(数秒)の中間を狙い、CDN的なrelayツリーで配信と取り込みを単一スタックに統一する。
なぜ「もう一つの配信方式」が要るのか
ライブメディア配信には長らく二つの極がありました。片方はWebRTCで、数十〜数百ミリ秒の超低遅延を実現しますが、/network/webrtc-ice-stun-turn/で見たようにICE/STUN/TURNによる接続確立やSFUの運用が重く、CDNのような単純なファンアウトで大規模化しにくい弱点があります。もう片方はLL-HLSやLL-DASHといったHTTP適応配信で、/network/cdn/のキャッシュ階層に乗せて数百万視聴者まで容易にスケールしますが、セグメント/チャンク単位の構造ゆえ遅延は良くても数秒に留まります。
横にスクロール
Media over QUIC(MoQ)は、この二極の間を埋めるためにIETFのmoq Working Groupが標準化を進めるライブメディア配信の枠組みです。狙いは、WebRTC並みとまではいかないが1秒を切る低遅延を、CDN的なrelay階層でHTTP配信並みにスケールさせながら、取り込み(ingest)と配信(distribution)を単一のスタックで扱うことにあります。
土台:QUIC と WebTransport
MoQの中核仕様はMedia over QUIC Transport(MOQT)で、これは生のQUIC接続、またはWebTransport(HTTP/3の上でQUICのストリーム/データグラムをアプリに開放する層)のどちらの上でも動きます。ブラウザからはWebTransport経由、サーバー間やネイティブアプリからは生QUIC、という使い分けが想定されています。
QUICを土台に選ぶ必然性は配信の性質から来ます。QUICはストリームごとに独立した順序保証を持ち、あるパケット損失が他ストリームを止めない(HoLブロッキング回避)。この内部構造は/network/quic-internals/で詳述したとおりで、独立に到着してよい映像フレーム群を別々のストリームに載せる設計と噛み合います。順序保証や再送が不要な部分はQUICデータグラムに載せることもでき、TCP上のHTTP配信では選べなかった粒度の制御が可能になります。
Track・Group・Object の三層モデル
MoQの表現力の核心はデータモデルにあります。配信内容を三つの入れ子で表します。
- Object: 最小の配信・キャッシュ単位。1つの映像フレームや音声フレーム、あるいはその断片に相当する不透明なバイト列で、Group内での連番(Object ID)を持つ。
- Group: Objectの集合で、単独で復号を開始できる境界として使う。映像ならGoP(IDRフレームで始まる一区切り)に対応させるのが典型で、Group単位で連番(Group ID)を持つ。
- Track: Groupの時系列。1本の映像や1本の音声といった「購読の単位」で、Track NamespaceとTrack Nameの組で識別する。
この階層が効くのは輻輳時です。relayやエンドは「どのObjectを、どの順で、どこまで送るか」をGroup境界とObject単位で判断できます。たとえば新しいGroupが来たら古いGroupの未送Objectを捨てて追いつく、といった遅延を守るための選択的破棄が、アプリ側のコーデック知識をrelayに持ち込まずに実現できます。
MoQのrelayはObjectの中身(H.264かAV1か、といったコーデック詳細)を解釈しません。relayが知るのはTrack名・Group ID・Object ID・優先度といったメタ情報だけです。中身を不透明に保つことで、relayはメディア種別に依存しない汎用の中継・キャッシュノードになり、CDNのエッジと同じく「知らないまま速く運ぶ」役割に徹せます。コーデック固有の判断は端点のアプリに残ります。
publish/subscribe とデータの流れ
MoQはpub/subモデルです。配信者(publisher)は自分が持つTrack NamespaceをrelayにANNOUNCE(告知)し、視聴者(subscriber)は欲しいTrackをSUBSCRIBE(購読)します。relayは購読要求を上流へ伝播させ、届いたObjectを購読者へファンアウトします。制御メッセージ(SUBSCRIBE、ANNOUNCE等)とObjectの実データが、同じQUIC接続上を流れます。
Objectをどう運ぶかは実装・仕様の版で選択肢がありますが、基本の考え方は「独立に消費してよい単位を別ストリームに分ける」ことです。Group単位でストリームを分ければ、あるGroupの損失回復が次のGroupの配信を止めません。各Objectやサブグループには送信優先度を付与でき、relayは輻輳時にQUICのストリーム優先度制御を使って重要な映像(例えば基準レイヤやキーフレーム)を先に通し、余裕がなければ低優先のObjectを落とせます。
RTPはUDP上でフレームを運ぶ低遅延プロトコルですが、輻輳制御や再送を自前で足す必要があり、経路上の中継も専用機能を要します。HLS/DASHはHTTPオブジェクトとしてセグメントを運ぶためCDNに載る一方、セグメント長ぶんの遅延を抱えます。MoQは「HTTPほど粗くなく、RTPほど生でもない」Object粒度をQUICのストリーム/優先度の上に置くことで、両者の中間の遅延とスケールを一つのモデルで狙います。
relay によるファンアウトとスケール
大規模化の鍵はrelayツリーです。relayはObjectをキャッシュしつつ、同じTrackを購読する多数の下流へコピーを配ります。1つの上流Objectを受け取ってN個の下流へ複製する、という関係は/network/cdn/のエッジキャッシュと同型で、視聴者が増えても上流の負荷は購読の重複ぶんだけ増える構造にはなりません。
WebRTCのSFUと違い、relayはメディアをデコード・再エンコードしないため、CPUコストが軽く水平展開しやすいのが利点です。取り込み側も同じrelayに対してpublishするだけなので、配信と取り込みが同一の中継基盤・同一プロトコルに統一されます。これは、取り込みはRTMP、配信はHLS/CMAF、というように別プロトコルを繋ぎ合わせてきた従来のライブ配信パイプラインを一本化しうる点でインパクトがあります。
立ち位置:三方式の比較
| 観点 | WebRTC | MoQ | LL-HLS/LL-DASH |
|---|---|---|---|
| 典型遅延 | 数十〜数百ms | サブ秒〜1秒前後 | 1〜数秒 |
| トランスポート | UDP+RTP/SRTP | QUIC/WebTransport | HTTP/1.1〜3(TCP/QUIC) |
| スケール手段 | SFU/MCU(要デコード相当) | relayツリー(Object中継) | CDNキャッシュ階層 |
| 接続確立 | ICE/STUN/TURNで穴あけ | QUIC接続(クライアント→relay) | 通常のHTTPリクエスト |
| 取り込みと配信 | 別枠になりがち | 同一プロトコルで統一可能 | 取り込みは別(RTMP等) |
| 主な弱み | 大規模ファンアウトが重い | 標準化途上・実装が新しい | 遅延がセグメント長に律速 |
MoQはIETFで活発に議論が進む標準群で、Object配信の詳細やWebTransportマッピング、優先度の扱いはドラフトの版により変わり得ます。したがって現時点では「相互接続可能な確定仕様」ではなく、方向性と基本モデルが固まりつつある段階と捉えるべきです。実装間の互換性やブラウザ対応は今後の成熟を待つ必要があります。
まとめ
MoQは、QUIC/WebTransportというウェブ標準の土台に、Track・Group・Objectという配信専用のデータモデルとpub/subの制御を載せた枠組みです。映像をObject単位で扱い優先度を付けることで、relayはコーデックを知らないまま輻輳時に古いGroupや低優先Objectを選択的に落とし、遅延を守れます。relayツリーはCDNと同型にファンアウトしてスケールし、取り込みと配信を単一スタックへ統一します。狙う遅延はWebRTCとHTTP適応配信の中間で、両極の弱点を避けようとする設計思想が、この方式の存在理由そのものです。
ネットワークの記事ガイド
Media over QUIC(MoQ)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
MoQ
比較で見る軸
難易度: advanced / カテゴリ: ネットワーク / タグ数: 6
導入後に効く点
映像を Object 単位で扱い優先度を付けるため、輻輳時に relay が古いGroupや低優先Objectを選択的に落として遅延を守れる。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ネットワーク
- タグ数
- 6
判断チェックリスト
- 自社の用途が「MoQ / QUIC」に近いか確認する。
- 強みである「MoQ は QUIC/WebTransport 上に Track・Group・Object の3層で配信データを表現し、publish/subscribe と relay 中継でライブメディアを運ぶIETF標準群。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。