492 Views
July 24, 25
スライド概要
WebRTC Meetup Tokyo #30でLTした時の資料です。
https://webrtcmeetup.connpass.com/event/355580/
Media over QUICに期待するところ
I'm implementing Media over QUIC in Golang.
Media over QUIC について実装してみて思ったこと 奥谷 大地 (github: @OkutaniDaichi0106)
Media Over QUIC とは を利用することで低遅延の配信を実現するプロトコル。 QUIC 仕様 仕様は2つある。 MOQTransport https://www.ietf.org/archive/id/draft-ietf-moq-transport-13.html MOQ Lite (ex. MOQTransfork) https://www.ietf.org/archive/id/draft-lcurley-moq-lite-01.html
の特徴 MOQ を利用したPubSubモデルのプロトコル <-> HTTP/3 (ReqRespモデルのプロトコル) QUIC
実装 MOQ ntt/moq-wasm in Rust kixlated/moq in Rust & JS/TS (ex. kixlated/moq-rs, kixlated/moq-js) mengelbart/moqtransport in Go OkutaniDaichi0106/gomoqt in Go & JS/TS
gomoqt package main import ( "github.com/OkutaniDaichi0106/gomoqt/moqt" "net/http" ) moqt.HandleFunc("/jp/alice", func(w *moqt.TrackWriter) { //... }) server := moqt.Server{ // ... } http.HandleFunc("/moq", func(w http.ResponseWriter, r *http.Request) { sess, err := server.AcceptWebtransport(w, r, nil) // ... }) err := server.ListenAndServe() slog.Error("failed to server moq", err)
きっかけとモチベ ライブ配信サービスをつくりたい! リアルタイム通信の技術についてChatGPTについて聞いてみた。 ChatGPT: WebRTCとMedia over QUICがあるよ これから参入するならMedia over QUICを勉強しよう!
仕様の動向 (MOQTransport) ANNOUNCE, SUBSCRIBE +α 逃したデータを再取得するための仕組み。 PUBLISH: 配信側駆動でトラックをサブスクさせる仕組み。 REQUEST_BLOCK: トラックの配信を制限する仕組み。 TRACK_STATUS: トラックの状態を通知する仕組み。 FETCH:
仕様の動向 (MOQ Lite) ANNOUNCE, SUBSCRIBE MOQTransport との違い No FETCH No PUBLISH No REQUEST_BLOCK No TRACK_STATUS +α 会議アプリケーションを構築するためのプロトコル。 MOQをより汎用的にするために、会議というユースケースを切り離した形。 catalogのやりとり。会議アプリケーションでの利用を想定。 Hang:
他プロトコルとの付き合い方 HLS/DASH 巻き戻しなどの過去動画のFetch&再生で使う。 MOQにもFetch機能はあるが、HLS/DASHから移行するのかは不明。 WebRTC よくわかっていないけど…) 通信の超低遅延のために使う。 配信システムではなく、会議システムでの利用。 ( P2P
に期待するところ MOQ 低遅延配信 よりも 低コストの配信 WebRTCよりも スケーラビリティ WebRTCよりも HLS/DASH
に期待するところ MOQ 規模の経済 をみんなが使うシステムにすることで、リソースが共有できて、みんなでコスト を負担することができる。 そしてリアルタイム配信を低コストに。 MOQ
最後に 将来的にはMOQを使って配信サービスを開発する。(とりかかり中) Media over QUICを使った配信システムをGoで構築するのに興味がある方、 是非お声がけください!