📹
WebRTCはどう動くのか?
ブラウザ間の直接映像/音声/データ転送
WebRTC(Web Real-Time Communication)はブラウザ間のP2P通信標準です。接続確立プロセスは複雑ですが、一度接続されればサーバーを経由せずに直接メディア/データを転送します。シグナリングサーバー(WebSocketなど)でSDP(セッション記述)とICE candidateを交換し、STUNサーバーでグローバルIPを確認し、直接接続が不可能な場合はTURNサーバーが中継します。
構造ダイアグラム
シグナリングフェーズ(接続準備)
💻
Peer A
SDP Offer生成
① Offer
→
📡
シグナリングサーバー
(WebSocket)
② 転送
→
💻
Peer B
SDP Answer生成
NAT探索 + P2P接続
💻
Peer A
自分のグローバルIPは?
③ STUNリクエスト
↔
STUN
グローバルIP返却
④ P2P直接接続!
ICE candidate交換 → 最適経路選択
💻
Peer B
直接接続できない場合?
→
TURNサーバー
がメディアを中継(relay)
接続完了後
💻
Peer A
映像
音声
データ
↔ サーバー経由なしで直接転送
💻
Peer B
動作フロー
1
Peer Aがシグナリングサーバーに接続(WebSocket)
2
Peer AがRTCPeerConnectionを生成、SDP Offerを生成しシグナリングで送信
3
Peer BがSDP Offerを受信、SDP Answerを生成しシグナリングで応答
4
双方がICE candidateを収集(STUNサーバーでグローバルIPを確認)
5
ICE candidate交換 → 最適経路選択 → P2P直接接続確立
6
直接接続不可時にTURNサーバーがメディアを中継(relay)
メリット
- ✓ サーバーコスト最小化(P2P直接転送)
- ✓ 低遅延通信
- ✓ ブラウザ内蔵API
- ✓ 別途プラグイン不要
デメリット
- ✗ シグナリングサーバーが別途必要
- ✗ NAT/ファイアウォール問題(STUN/TURNが必要)
- ✗ TURNサーバーコスト(中継時)
- ✗ ブラウザ互換性の問題
ユースケース
Google Meet / Zoom(Web版)
ブラウザビデオ通話
画面共有
P2Pファイル転送
リアルタイムゲーム(DataChannel)