WebRTCを活用するには、ICE(Interactive Connectivity Establishment)の仕組みを正しく理解することが不可欠です。
本記事では、WebRTCプラットフォームを運営するSkyWayが、ICEの基本からSTUN/TURNサーバーの役割、接続フローまでを詳しく解説。WebRTCの実装に必要な知識をわかりやすく整理しているので、ぜひご活用ください。
代表的なビデオ通話プラットフォームとして、NTTコミュニケーションズが開発、運営する「SkyWay」があります。 「SkyWay」とは、ビデオ・音声通話をアプリケーションに簡単に実装できる国産SDKです。⇒概要資料をダウンロードする(無料)
WebRTCとは
WebRTC(Web Real-Time Communication)は、インターネットを介して音声・映像・データをリアルタイムにやり取りできる技術です。プラグイン不要で動作し、P2P接続によるスムーズで高品質な通信を可能にします。
詳しくは、以下の記事で紹介していますので、参考にしてみてください。
ICE(Interactive Connectivity Establishment)とは
ICE(Interactive Connectivity Establishment)は、WebRTCにおいて最適な通信経路を確立するための仕組みです。NAT(Network Address Translation)やファイアウォールの影響で直接通信できない場合、STUNサーバーを使って外部IPを取得し、可能な限りP2P接続を試みます。もし直接接続ができなければ、TURNサーバーを介して中継通信を行います。
ICEの関連技術
ICE(Interactive Connectivity Establishment)は、WebRTCにおいて最適な接続経路を確立するために、以下の主要な技術が関係しています。
- ICE候補(ICE candidates)
- STUN(Session Traversal Utilities for NAT)サーバー
- TURN(Traversal Using Relays around NAT)サーバー
それぞれ、詳細を説明します。
ICE候補(ICE candidates)に含まれる情報
ICE候補(ICE candidates)は、WebRTCの通信経路を確立するための接続オプションです。具体的には、以下の情報を含みます。
項目 | 説明 |
---|---|
IPアドレス | 通信を確立するためのネットワークアドレス(ローカル or グローバル) |
ポート番号 | データ通信を行うためのポート番号 |
プロトコル | 通信に使用するプロトコル(UDP または TCP) |
接続タイプ | 候補の種類(host, srflx, relay) |
優先度 | 各ICE候補の接続優先度(数値が高いほど優先される) |
ファウンデーション | 同じネットワークインターフェースやアドレスタイプを持つ ICE候補を識別するための一意の識別子。 |
ベース | ICE候補が生成された元のIPアドレスとポート (例:srflx候補なら対応するhost候補の情報)。 |
STUN/TURNとは
STUN/TURNの説明に入る前に、前提として、NATとNAT超えについての理解をする必要があります。
NATとNAT越えとは
NAT(Network Address Translation)は、プライベートIPアドレスをグローバルIPアドレスに変換する技術で、家庭や企業のネットワークで一般的に使われています。しかし、NAT環境では外部から直接通信を確立することが難しく、WebRTCのP2P接続を阻害する要因となります。
この問題を解決するのがNAT越え(NAT Traversal)です。STUNサーバーを使ってグローバルIPを取得したり、TURNサーバーを経由して通信を中継することで、異なるネットワーク間でも安定した接続を可能にします。
STUN(Session Traversal Utilities for NAT)とは
STUN(Session Traversal Utilities for NAT)は、WebRTCでNATを越えてP2P接続を確立するためのプロトコルです。NAT配下のデバイスは通常、グローバルIPアドレスを認識できませんが、STUNサーバーを利用することで自身のグローバルIPアドレスとポート番号を取得できます。これにより、ピア同士が直接通信するための候補(ICE candidates)を生成し、P2P接続の可能性を高めます。ただし、厳格なNAT環境ではSTUNのみでは接続できず、TURNサーバーが必要になる場合もあります。
TURN(Traversal Using Relays around NAT)とは
TURN(Traversal Using Relays around NAT)は、WebRTCにおいてP2P接続が確立できない場合に通信を中継するプロトコルです。NATやファイアウォールの制約が厳しい環境では、STUNを使った直接通信が不可能なことがあります。その際、TURNサーバーが中継役となり、通信データを双方に転送します。 TURNは確実に接続を保証しますが、サーバー負荷が高く、遅延が増えるため、最終手段として使われるのが一般的です。
ICEの接続フロー
ICEは、WebRTCのピア同士が最適な接続経路を確立するために、以下のステップで動作します。
- ICE Candidateの収集・交換
- 各ピア(Peer A, Peer B)は
RTCPeerConnection.onicecandidate
を使って、自身の通信経路情報(ICE Candidate)を収集。 - 収集したICE Candidateをシグナリングサーバーを通じて相手に送信。
- 各ピア(Peer A, Peer B)は
- ICE Candidateの適用
- 受け取ったICE Candidateを
RTCPeerConnection.addIceCandidate()
で適用。 - これにより、最適な通信経路(直接P2PまたはTURNサーバー経由)が確立される。
- 受け取ったICE Candidateを
- 接続の確立
- ICE Candidateの交換が完了し、最適な経路が確立されると
RTCPeerConnection.oniceconnectionstatechange
がconnected
またはcompleted
になる。 RTCPeerConnection.ontrack
によりメディアストリーム(音声・映像)の受信が可能に。
- ICE Candidateの交換が完了し、最適な経路が確立されると
- データ・メディア通信の開始
- P2P接続が確立し、音声・映像・データチャネルの通信が可能に。
STUN/TURNサーバーは、NAT越えを助けるために使用され、P2P接続が直接確立できない場合にはTURNサーバー経由で通信が行われます。
接続状況は oniceconnectionstatechange
で監視でき、disconnected
や failed
になった場合は再接続処理を行う必要があります。
また、ICEの接続フローの前に、Offer/AnswerモデルでSDPのやりとりが発生しますが、詳細については、以下の記事にて説明しているので、ご参考ください。
WebRTCを簡単に実装するには
WebRTCの実装には専門的な知識と多くの開発工数が必要ですが、SDK(Software Development Kit)を活用する方法があります。SDKを利用すれば、サーバーの構築や管理の手間を大幅に削減し、効率的な開発が可能になります。
WebRTC SDK「SkyWay」
WebRTCの代表的なSDKとして、NTTコミュニケーションズが開発、運営する「SkyWay」があります。
「SkyWay」とは、ビデオ・音声通話をアプリケーションに簡単に実装できる国産SDKです。
大きな特徴としては、以下が挙げられます。
- スピーディーな開発ができる:
開発資料が豊富かつ日本語でわかりやすい、国内エンジニアがサポートしてくれる - 信頼性・安全性が高い:
NTTコミュニケーションズが開発、運営する国産SDK。サービス歴は10年以上で、累計導入サービス数も21,000件以上 - 無料で開発スタート:
開発検証用として、Freeプランあり。テスト検証期間中は無料で利用可能。商用サービス提供後も基本利用料11万 + 従量課金制で安心。
WebRTCのSDKとして提供されているものは、海外製が多いため、開発ドキュメントも英語か和訳のもので開発しにくい傾向にあります。 「SkyWay」であれば、NTTグループが開発、運営する安心の国産SDKかつ、国内エンジニアがサポートしてくれるため、開発運用工数も大幅に削減でき、開発のしやすさからもおすすめです。
テスト検証用は無料のため、ぜひアカウント登録をしてみください。
まとめ
WebRTCのICEは、最適な通信経路を確立するための仕組みです。NATやファイアウォールの影響でP2P接続が困難な場合、STUNサーバーを利用してグローバルIPを取得し、直接通信を試みます。直接接続ができない場合はTURNサーバーを介して通信を中継します。ICEの接続フローでは、各ピアがICE候補を収集・交換し、最適な接続経路を決定。接続確立後、音声・映像・データのリアルタイム通信が可能になります。この記事では、WebRTCにおけるICEの役割や具体的な接続フローを紹介しました。
WebRTCの開発には専門的な知識と多くの工数が求められますが、「SkyWay」を導入することで、簡単かつ効率的に実装できます。