Media over QUICをゲームで使うユースケースは沢山ありそう
お久しぶりです、インフラ部門でエンジニアをしている 後藤 です。
今回は、標準化及びクラウドベンダーの実装が進められている『Media over QUIC』について、ゲームでのユースケースについて試した事を書いていこうと思います。
Media over QUIC
『Media over QUIC』とは、大規模な配信を想定した、キャッシュフレンドリなー低遅延Pub/Subプロトコルです。特徴盛り盛りですが、仕様上にもそのように書かれてたりします。
下記の図のように、Publisherからリレーサーバ(CDNなど)にデータを送信し、Subscriberがリレーサーバからデータを受信 (subscribe)します。

その名が示す通り、通信はQUICまたはWebTransport上で行います。(WebTransportも標準化が進められている、QUIC上で動作する双方向通信フレームワークです)。
そのため、QUICが持つ利点 (IPアドレスが変わっても通信が切断しない)などの恩恵を受けられます。また、WebTransport上でも動作しますので、モダンなWebブラウザではそのままSubscribeして動画を視聴することも出来ます。さらに、WebTransport(QUIC)では、パケロス時に再送を必要としないDATAGRAM転送も出来ます。
逆に、名称上はMediaの名前を冠していますが、実は任意のデータをObjectというデータ形式で配信できます。
ゲームでのユースケース
大規模に、リアルタイムに任意のデータを配信できるということでゲーム/エンタメ系のプロダクトにおいてもユースケースがあるのではないかと思います。
- 動画/音声の配信
- コメント欄など
- ゲームの情報の配信
- ゲーム対戦のリアルタイム観戦 (映像データではなく、入力データのシミュレーション)
- アバターのモーションデータの配信
例として
CloudflareさんはすでにMedia over QUIC (Beta)が利用できます(Draft16版のサポートです。Documentを参照)。
ゲームでの一つの用例として、ゲームデータをPublishする簡単なデモを動かしてみました。
左側がPublisherで、右がSubscriberです。
簡単なモーションデータですが、Publisherはマウスの位置情報/クリック情報/キー入力を送信し、Subscriberがそのデータに基づいて描画する例です。Webブラウザから直接 CloudflareさんのリレーサーバにWebTransportで通信をしています。
通信の概要としてはこのような流れです。

コメント欄などの用途では、ブラウザから一旦APIサーバリクエストを送信して、APIサーバがPublisherになるようなイメージになります。
もちろん、実際のユースケースでは、利用用途に応じて認証や、プレイヤー側のバッファ時間など調整を施す必要があるとは思います。
構成上のメリット
今までは配信サーバから各ユーザ毎にコネクションを持ち、状態管理をしながら配信をしていました。サーバ側から何かを配信するとしても、1配信毎にPublisherとしてPublishするだけという構成になります。
Publisher側がダウンしても、途中から再開することも可能です。このとき、Subscriberはそのまま待ってれば再開されます。コネクション管理もリレー側で行われているメリットがあると思います。
最後に
注意点として、Media over QUICはまだ標準化段階であり、コア仕様もまだまだ変更が加えられている状況です(moq-liteという別draftも出てたり...)。実装もまだまだ変更が加えられている状況かと思います。
一方で、これから利用できるようになっていくおもしろいプロトコルだと思います。
実際に試してみるもよし、仕様の動向が気になる方は是非メーリングリストを覗いてみると、最先端の様子が伺える可と思います。

