WebRTC とは
Web Real-Time-Communicationの略です。
HTML5から策定されたAPI規格で、リアルタイムにビデオ/オーディオ/データをやり取りを行うのが特徴です。
プラグイン無しでボイスチャットやビデオチャットをブラウザ上で実現可能になります。
通信方法は、P2P、MCUやSFUがあります。
P2P通信では、複数人つなぐと端末の通信量と負荷がかかってしまうためサーバーを経由する方法として、MCUやSFUがあります。
P2Pについて
P2P通信でデータをやり取りするには、以下のサーバーを使います。
- シグナリングサーバー
仲介サーバー。通信開始時に接続してWebSocket通信を開始する。 - STUNサーバー
NAT配下にあるPCが自身のIPアドレス/ポート番号を調べるためのサーバー。 - TURNサーバー
P2P通信が出来ない場合の代わりの中継サーバー。
以下のデータを作成して、シグナリングサーバー経由で相手に送信します。
- SDP (Session Description Protocol)
メディアのストリーミング情報のフォーマットを規定するプロトコル。
メディアタイプ、コーデック、帯域幅などの情報。
接続開始したブラウザからofferを開始しSDPを送信して、受け取ったブラウザでanswerを開始しSDPを送信することで互いのSDPを登録する。 - ICE (Interactive Connectivity Establishment)
自身が接続できる相手ブラウザまでの通信経路の情報。
STUNサーバーによりIPアドレス/ポート番号を把握してICEを作成し送信することで互いのICEを把握する。
詳しい流れは、WebRTCの技術解説 公開版 のp.47 - 93 が分かりやすいです。
MCU について
Multipoint Control Unitの略です。
複数クライアントからのメディアデータをサーバーで合成して他のクライアントに送ります。
送るときに、サーバーでデータの合成を行うためサーバーのCPU使用率が高くなり、画質の劣化が発生します。
SFUが出る前はMCUが主流だったようです。
SFU について
Selective Forwarding Unitの略です。
クライアントからのメディアデータを加工せずにそのままサーバー代理で他のクライアントに送ります。
MCUよりサーバーのCPU使用を抑えるメリットがあります。
詳しくは、SFUの話 が分かりやすいです。
Track とは
WebRTCのメディアの最小の単位であり、通信経路でやり取りするデータです。
アプリケーションはTrackで構成されたStreamの単位で扱います。
例えば、MediaStreamは、1つ以上のMediaTrackで構成されています。
StreamにはメディアソースごとにTrackが構成されています。
更にTrackは、同一ソースのメディアが束ねられています。
例えば、ビデオ会議のMediaTrackには、カメラとマイクで、VideoTrack、AudioTrackが存在します。
詳しくは、WebRTCにおけるメディアの取り扱い - Qiita が分かりやすいです。
参考文献
WebRTCコトハジメ - Qiita
WebRTCの基本とP2P通信が成立するまでを学ぶ - Qiita
WebRTC SFU コトハジメ
Getting started with remote streams | WebRTC