WebRTCと言えば時雨堂さん。
記事もたくさん書いていただいてて感謝しかない。
WebRTCについていちから知りたいという方への読み進め方のメモ、の転記。
注釈のついたものはその先のURLに詳細が書かれている。
まずはこのページを一読し、注釈1の「WebRTC コトハジメ」を読む。
次に概要を深堀りしたいなら、注釈から詳細のページへ。
最新動向を知りたいなら参考リンクの「WebRTC の未来」へ。
読み物やよりDeep Diveしたい場合は、参考リンクから各ページへ。
概要*1
WebRTC (Web Real-Time Communication)。
P2P、ブラウザ同士を前提とした技術で作られており、既存プロトコルなどの組み合わせで実現される。
P2Pを使わないことやブラウザ以外でのやりとりも不可能ではない。
映像、音声以外に、データの送受信もできる。
通信はデフォルトでDTLS(データグラム向けTLS)で暗号化されている。
NAT超えのためのプロトコルにSTUN/TURN、それらを組み合わせたICEと呼ばれる仕組みを採用。
WebRTCは具体的に定義されたプロトコルではなく、目的を達成するために数多くのプロトコルを利用して実現する抽象概念やその集合体。
マイクやカメラなどのデバイス管理やスクリーンキャプチャ、圧縮、P2Pや通信などもWebRTCの一部となる。
これらをブラウザから扱えるようにしたのがWebRTC API。
用意されたAPIを使う分には難しくないが、その範囲を逸脱するとハードルが突然上がる。
ブラウザへ標準搭載されるようになり利用の手軽さ、普及率がこれまでとは段違い。
Chromeで5年以上の実績があり安定している。
基本的な技術はすべて無料、オープンソース。
WebRTCはGoogleによってオープンソース化されていて、W3CとIETFで標準化が進められている。
リファレンス実装がフリーソフトウェアとして公開されているが、実現するための具体的な仕様がきめられていないため、様々な技術によって実装されていたりする。
チャネル
映像と音声のメディアチャネルと、なんでもOKなデータチャネルがある。
シグナリング*2
P2Pでセッションを確立するまでの事前準備をやり取りする仕組み、サーバーで、必ず必要。
STUNサーバー*3
NATを超えなければいけないかどうかを判断するプロトコル。
P2Pを前提とするならNAT越えで必要。
TURNサーバー*4
実際に NAT 越えを実現するプロトコル。
中身は複雑な動作をしている。
特定のネットワーク環境でつながらない場合に接続確率を上げる、それ以外では不要。
80 % は TURN が無くても繋がり、 10 % は TURN-UDP があれば繋がり、のこり 10 % は TURN-TCP と TURN-TLS があれば繋がるという話がある。
WebRTC スタック*5
WebRTCのプロトコル(概念)をブラウザ外で実現するプログラム、サービス、仕組み。
主にクライアントとサーバーに分類される。
マルチキャスト(3台以上での通信)。
サーバーで合成するためリソースが必要なMCU(Multipoint Control Unit)と、サーバーが中継役となるSFU(Selective Forwarding Unit)がある。*6*7
難しさ
まず最新ブラウザへの追従(各ブラウザ各バージョンとその組み合わせ)、
コネクションの担保(如何に繋いで、接続を維持するか)、
NAT超えなど環境に依存する部分やWebRTCの仕組み自体も今後更に複雑化していく。
これらを保守、運用していく必要がある。*8
参考リンク
WebRTC コトハジメ[*1] @更新中 WebRTCの概要、各種資料の紹介と勉強のすすめ方など
- WebRTC Conference Japan で話してきた - 2015-02
- WebRTCの裏側[*2] - 2015-02 WebRTC Conference Japan 登壇資料
- WebRTC スタックコトハジメ[*5] - 2015-03 ブラウザ間以外(クライアントやサーバー)の話
- WebRTC スタックを一から実装する場合読んでおくべき資料まとめ - 2018-11 パブリックなドキュメントのリンク集
- WebRTC の未来 @更新中 界隈の最新動向など
- WebRTC SFU コトハジメ[*6] - 2018-04
- WebRTC SFU をフルスクラッチで作ってみた[*7] - 2015-11
- リアルタイム動画配信コトハジメ - 2016-01
Edge と WebRTC について(「webrtc.shiguredo.jp (仮)」 に含む)Safari と WebRTC について(「webrtc.shiguredo.jp (仮)」 に含む)- 詳解 WebRTC - 2017-09 ブラウザが 通信している部分の仕組み、使われているプロトコルなどの複雑さ
- 仕事で WebRTC[*8] @更新中 仕事で利用する場合に何を選び、何をすればよいかのアドバイス
Twisted Mind/WebRTC (「WebRTC コトハジメ」に含まれないもの抜粋)
- WebRTC Simulcast コトハジメ · GitHub - 2019-04-26 Simulcast は配信側が複数の画質を配信するという仕組み
WebRTC SFU + Simulcast コトハジメ · GitHub(旧版)- WebRTC の優位性 · GitHub - 2018-09-21
- WebRTC 超低遅延配信ノススメ · GitHub - 2018-08-08
- ぼくのかんがえたさいきょうの超低遅延大規模配信 · GitHub - 2018-08-20
WebRTC の優位性 · GitHub(重複)- WebRTC オンライン専用コミュニティ · GitHub - 2019-09-28
WebRTC 資料まとめ · GitHub(「WebRTC コトハジメ」に含む)- WebRTC でご飯は食べられるのか? · GitHub - 2017-11-20
- WebRTC が利用している RTP 拡張の簡単な紹介 · GitHub - 9 Jan 2018
- WebRTC API コトハジメ · GitHub - 2018-06-25