WebTransportでもまとめがしたい!

# お役立ちリンク集です
雑で古いものも多いですが、情報量が多いのでこっちに情報をまとめていきます。

WebTransportは現在ChromeとFirefoxで使用できます。
safariは実装するよ、という意思表示をしていますがいつになるかは不明です。
また、仕様は確定していないので変わる可能性もあります。

(もっと網羅されている時雨堂さんのリンク集は[こちら](https://zenn.dev/voluntas/scraps/b776c706a1811a#comment-e943fcaa49895c))

# WebTransportって何?
WebTransportってそもそも何?という方はまずはこの辺りが参考になるかと思います。

- [WebTransport Explainer](https://github.com/w3c/webtransport/blob/main/explainer.md)
- [WebSocketの次の技術！？WebTransportについての解説とチュートリアル](https://qiita.com/yuki_uchida/items/d9de148bb2ee418563cf)
- [WebTransportとWebCodecsを組み合わせてビデオチャットを実装してみる](https://qiita.com/yuki_uchida/items/b177ec07ac0379950e58)
- [WebCodecs と WebTransport でビデオチャット](https://blog.jxck.io/entries/2020-09-01/webcodecs-webtransport-chat.html)
- [WebTransport と WebCodecs そして Web はどこまで "ゲーム化" するか](https://blog.jxck.io/entries/2019-08-18/webtransport-and-webcodecs.html)

# ブラウザ対応状況。

ブラウザ|状況
---|---
Chrome|97でリリース
Firefox|114にて対応 (WebCodecsはまだですか?)
Safari|2023年4月に対応するよ、という意思表明はありました。
Edge|確認してないです

- [
Chrome 97: WebTransport、Array の新しい静的メソッドなど ](https://developers-jp.googleblog.com/2021/12/chrome-97-webtransportarray.html)
- [Chrome Platform Status](https://chromestatus.com/features/4854144902889472)
- [Firefox 114](https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/114)
- [Safari、というかWebkitが対応表明](https://github.com/WebKit/standards-positions/issues/18#issuecomment-1495890122)

# これまでの道のり

- 2017ごろ? : クラウドゲーミングにWebRTC使いづらいから新しいプロトコル作ろうよ、という話が出る
- 2020年末 : QuickTransportが触れるようになり、[WebTransportの紹介記事](https://qiita.com/yuki_uchida/items/d9de148bb2ee418563cf)が話題に。
- 2021年 : WebTrasnportベータ版
- 2021年11月 : Chrome97にてWebTransportがGAされる。
- 2022年初夏 : FacebookやTwitchがメディア配信向けのプロトタイプを公開(Warpなど)
- 2023年4月 : WebkitがWebTransport対応する[意思を表明](https://github.com/WebKit/standards-positions/issues/18#issuecomment-1495890122)
- 2023年6月 : [Firefox114](https://developer.mozilla.org/ja/docs/Mozilla/Firefox/Releases/114)にてWebTransport対応

# Youtube
ちょっと古いです

- [IETF113 WEBTRANS](https://www.youtube.com/watch?v=9ys7hwscwXM)
    - フローコントロールなどの細かい定義の確認が主
- [IETF113 MOQ](https://www.youtube.com/watch?v=qwL1tkM5D7A)
    - Rush, Warp, QuicR
- [Implementing WebTransport and WebCodecs in an Open Source Media Server](https://www.youtube.com/watch?v=C8ClVgqUKvk) : 2021/12/8 New!
- [New in Chrome 94](https://www.youtube.com/watch?v=c5XIDt90VgY) : WebCodecs周りの情報です。
- [Luke Curley - Low-Latency Video over QUIC](https://www.youtube.com/watch?v=hG0nmy3Otg4) : twichのwarpのお話

# WebTransport前夜
今までの経緯と現在の流れはこちら。

- [W3c クラウドゲーミングについて](https://www.youtube.com/watch?v=VD5GBLBiSxo) : クラウドゲーミングの要望が大きいようです。
- [Zoom on Web](https://www.youtube.com/watch?v=nhTxJBgTywc) : ZoomとWebRTC周りのお話
- [WebRTC Live #60: WebRTC developers need to know about WebCodecs](https://www.youtube.com/watch?v=JinXXOpqjhs) : WebCodecsのお話
- [mozilla.fm ep72](https://mozaic.fm/episodes/72/webtransport.html) : Chromeの中の人とWebTransportのお話
- [IETF 112 WEBTRANS](https://www.youtube.com/watch?v=7g-NTREHhfQ) : 2021/11/9 WebTransportのアップデートと今後について。あとUDP繋がらない時のフォールバックの議論もこちら


# RFC・ドラフト
仕様はここを読むべし。
WebTransport -> HTTP/3 -> QUIC という依存関係です。

- [QUIC RDC9000](https://datatracker.ietf.org/doc/html/rfc9000#ref-TLS13)
- [HTTP/3 IETF draft 34](https://datatracker.ietf.org/doc/draft-ietf-quic-http/)
- [Using Datagrams with HTTP 05](https://datatracker.ietf.org/doc/html/draft-ietf-masque-h3-datagram-05)
- [WebTransport IETF draft 02](https://datatracker.ietf.org/doc/draft-ietf-webtrans-http3/)
- [W3C WebTransport IDL](https://w3c.github.io/webtransport/#biblio-web-transport-http3)

## 参考記事

- [http3-note](https://asnokaze.hatenablog.com/entry/2020/06/01/005625) : WEB + DB PRESS 2021年6月号に記事を書かれていた方のHTTP/3とQUICについての解説がGithubから読めます。多分雑誌の方が最新です。


# WebTransport サンプル
WebTransportにはサーバーとクライアントが必要です。
ストリーム(単方向・双方向)とデータグラムという通信方式があります。

- [Chrome公式サンプル](https://github.com/googlechrome/samples/tree/gh-pages/webtransport) : Chrome97以上で普通に動きます。
- [W3Cのサンプル](https://w3c.github.io/webtransport/#example-complete)
- [Experimenting with WebTransport](https://web.dev/webtransport/) : web.devのサンプルです。わかりやすいです。
- [Goのサンプル](https://centrifugal.github.io/centrifugo/blog/quic_web_transport/) : 古いやつです。

# 対応サーバー
おそらくきちんと対応できているのは、公式サンプルでも使われているPythonのライブラリだけかと思います。
サーバーの処理を書く必要があるので色々な言語への対応が待たれるところです。

ライブラリ|言語|備考
---|---|---
[aioquic](https://github.com/aiortc/aioquic)|Python|公式サンプルでも利用されている
[neqo](https://github.com/mozilla/neqo) | Rust | mozilla製。streamだけ対応しており、datagramとネゴシエーション周りはプルリク中。色々いじればとりあえず動いた。
[quic-go](https://github.com/lucas-clemente/quic-go) | Go | quic-goを使いWebTransportを実装することが可能 [webtransport-go](https://github.com/adriancable/webtransport-go)を参照<br />2022年末の時点では輻輳制御アルゴリズムがrenoであるため、1Gbpsあたりで性能が出なくなる感じだった。
[QUIC Implementations](https://github.com/quicwg/base-drafts/wiki/Implementations) | QUIC実装一覧 | HTTP/3に対応しているライブラリの中にWebTransportに対応するものが出てくるはず。
[WTransport](https://github.com/BiagioFesta/wtransport)|Rust|quinnベースのもの、2023年12月現在メンテされている
[webtransport-rs](https://github.com/kixelated/webtransport-rs)|Rust|quinnベース、Twitchの中の人作成。Rustっぽくて好きだがデータグラム未対応

# その他

- twichの低遅延ライブ配信プロトコルWarp : https://www.ietf.org/archive/id/draft-lcurley-warp-00.html

# WebCodecs
動画をエンコードしたりデコードするために使います。
WebTransportと組み合わせて使うと思います。
Chromeは対応していて、Firefoxはポジティブで実装のチケットはある模様。safariもTPでは実験的に実装されている模様。

- - [WebCodecs Explainer](https://github.com/w3c/webcodecs/blob/main/explainer.md) : 概要
- [WebCodecs API](https://www.w3.org/TR/webcodecs/#videoframe) : W3Cの仕様書
- [WebCodecs Samples](https://github.com/w3c/webcodecs/tree/main/samples) : W3Cの公式サンプル
- [MediaStreamTrack](https://web.dev/mediastreamtrack-insertable-media-processing/) カメラとかのストリームからフレームを取り出すやつはWebCodecsとはまた別です。
- [web.dev](https://web.dev/webcodecs/) : web.devのチュートリアル的なやつです。わかりやすい!

#### 今まで書いた記事
所々勘違いしている気がしますので来年になったらまとめ直そうかと思います。

- RustでもWebTransportがしたい! (予定)
- WebTransportでもWarpがしたい(進行中)
- [GoでもWebTransportがしたい](https://qiita.com/alivelime/items/135f67d7fd56b0968785)
- [WebTransportでもビデオエコーがしたい!](https://qiita.com/alivelime/items/34cababe3105c2af8068)
- WebTransportでも参考リンクのまとめがしたい! -> この記事
- [WebTransportでも4K配信がしたい! 〜データグラムでレイテンシー250ms編〜](https://qiita.com/alivelime/items/e561ebf22bedcd543537)
- [WebTransportでも4K配信がしたい! 〜序章 : まずはストリーム編〜](https://qiita.com/alivelime/items/ebf6da9ce2b929ec2251)
- [WebTransportでもテキストチャットがしたい!(WebSocket比較あり)](https://qiita.com/alivelime/items/539383fd9fdf06169211)
- [WebTransportでもプロトコル理解がしたい!](https://qiita.com/alivelime/items/58154961d5c6b0ac150b)
- [[いよいよ年明けリリース!?]WebTransportでもechoがしたい!](https://qiita.com/alivelime/items/07c2dc838abd08e816ba)