新しいメディア転送プロトコル Media over QUIC Transport について

QUIC上でライブメディアなどを扱うプロトコルの標準化が、IETFのMoQ WGで進められています。

WarpやRUSHというプロトコル案が出ていましたが、プロトコルの設計が進み、コアプロトコルになる『Media over QUIC Transport (MOQT)』が登場しています。この仕様は、Twitch、Facebook(Meta)、Cisoco、Googleの方の共著となっています。

プロトコル スタック

MOQTは、QUICプロトコルもしくはWebTransport上に位置するプロトコルです。その上に、Warpのようなメディアフォーマット・ストリームフォーマットを定義する仕様が乗っかります。(WarpとMOQTの役割が分割された感じになります。)


(MoQ WG中間会議資料より)

Warp

WARP Streaming Format」は、MOQTのストリームフォーマットを定義する仕様であり、CMAF [CMAF] 準拠のメディア コンテンツを配信します。

登場人物

MOQTでは、通信の種類として下記の3つの利用を想定しています。

  • 動画のアップロード (ingestion)
  • 動画の視聴 (delivery)
  • CDNなどによる中継 (relay)

そのうえで、登場人物は次のようになります。

ここで、Client/Serverはプロトコルの通信をどちらか開始するかの観点の用語です。Clientには役割に応じて、メディアを送信するProducerと、メディアを受信するConsumerが居ます。その間に通信を中継するRelayサーバが存在し得ます。

また、上記の図では片方向的な送信でしたが、ビデオカンファレンスのようにRelayサーバを介した双方向メディア通信もありえます。その場合はClientはProducerとしてもConsumerとしても振る舞うことになります。

オブジェクトモデル

MOQTはメディアのデータを「Objects」「Groups」「Tracks」という単位で管理します。


  • Tracks: 例えばHD Videoトラック、SD Videoトラックといったもので、Consumerが視聴を要求する単位です
  • Groups: 複数のObjectのグループで、視聴を開始点できる単位です。例えば、Group Of Picture (一連のI, P, Bフレーム)のグループです。
  • Objects: メタデータペイロードからなるメディアデータ。リレーサーバによって変更や分割・結合は行われない。

TrackはConsumerにより視聴が要求されるため、そのためにFull Track Nameを持ちます。例をみるとわかりやすいかと思います。

Track Namespace = security-camera.example.com/camera1/
Track Name = hd-video
Full Track Name = security-camera.example.com/camera1/hd-video

なお、単一のObjectをQUICの単方向ストリームで送信することを想定しています。こうすることでHead of Line Blockingを狙いです。

プロトコル メッセージ

MOQTではプロトコルのメッセージとして以下のものが定義されています。QUICもしくはWebTransportのコネクションが確立するとストリーム上で送受信されます。

  • OBJECT: ObjectのPayload及び、配送に必要な情報を含みます。
  • SETUP: MOQTの通信の最初にやりとりされる。プロトコルバージョンなど、通信に必要な情報を交換する。
  • SUBSCRIBE REQUEST: トラックの受信(subsribe)を要求する
  • SUBSCRIBE OK: SUBSCRIBE REQUESTが成功したことを示す
  • SUBSCRIBE ERROR: SUBSCRIBE REQUESTが失敗したことを示す
  • ANNOUNCE: 受信者がSUBSCRIBEできるトラックを通知する
  • ANNOUNCE OK: ANNOUNCEが成功したことを示す
  • ANNOUNCE ERROR: ANNOUNCEが失敗したことを示す
  • GOAWAY: 通信を終了する
Consumerの通信例


(MoQ WG中間会議資料より)

Producerの通信例


(MoQ WG中間会議資料より)