Closed1

Media over QUIC Transfork in Golang

だいちだいち

Media over QUIC Transforkとは

QUIC上にメディアを構築するための交信プロトコル

どの層のプロトコルなの?

MOQ -> WebTransport -> HTTP/3 -> QUIC -> UDP...というように依存関係がなっている。
WebTransport(QUIC)上に構築されるプロトコルなのでQUICストリームの特性を生かしたデータ送信が可能。

利用例

  • ライブ動画やライブ音声のリアルタイム通信
  • CDN

Media over QUIC Transport との違い

複数の制御ストリーム

Media over QUIC Transportではすべての制御メッセージをひとつのQUICストリームで送ることになっている。
一方、MOQTransforkでは制御メッセージは種類ごとに別々のQUICストリームで送信される。
制御ストリームにはSubscribe Stream、Announce Stream、Info Streamの3種類があり、ひとつひとつのQUICストリームはひとつのやりとり

廃止された制御メッセージ

以下のメッセージがMOQTransportから派生してから廃止されました。
主な理由は、あえてMOQで定義したメッセージを送るのではなく、QUICにすでに備わっているメッセージでやりとりすればいいということです。

制御 MOQTransport MOQTransfork
SUBSCRIBEの許可 SUBSCRIBE_OKを応答に送る INFOメッセージを応答に送る。
SUBSCRIBEの拒否 SUBSCRIBE_ERRORを応答として送る エラーコードと一緒にSubscribe ストリームを閉じる。
SUBSCRIBEの解約 UNSUBSCRIBEを送る Subscribe ストリームを閉じる。
ANNOUNCEの許可 ANNOUNCE_OKを応答として送る ANNOUNCEメッセージを送る。
ANNOUNCEの拒否 ANNOUNCE_ERRORを応答として送る。 エラーコードと一緒にANNOUNCEストリームを閉じる。

策定されてない制御

以下の制御はMOQTransportに策定されているものの、まだMOQTransforkの方に策定されていない。

  • 遷移制御
    セッションを閉じる旨を通知し、送信側は既存のトラックの送信を停止し、新しいリクエストを拒否する。
  • フェッチ制御

Frame vs Object

データの最小単位がMOQTransportではObject、MOQTransforkではFrameとなっている。
それぞれどちらも映像データにおける1フレームと対応する単位

実装

Media over QUIC Transforkの実装一覧です。

  • kixelated/moq-rs
    Media over QUIC Transforkの仕様を決めている方のRust実装です。
  • Kixelated/moq-js
    Media over QUIC Transforkの仕様を決めている方のTypeScript実装です。
  • OkutaniDaichi0106/gomoqt
    僕のGo言語実装です。

コミュニティ

Media over QUICの仕様は有志によって改善、策定されています。
もし気になることやさらに知りたいことなどがある人は是非Discordサーバーに参加してみてください。
Media over QUICまわりのこと(MOQTransfork, MOQTransport, WebTransport, QUIC...)について広く議論されています。

Discord

このスクラップは2ヶ月前にクローズされました