WebRTCのP2P通信に興味はあるけれど、「仕組みが難しそう」「実装を実現する方法がわからない」といった悩みを抱えていませんか?
本記事では、WebRTCプラットフォームを運営するSkyWayが、P2P通信の基本から、必要な情報や通信を成立させるために必要なSTUN/TURNサーバーの役割、P2P通信を実現する手順、SFUとの違いまでを徹底解説します。
代表的なビデオ通話プラットフォームとして、NTTコミュニケーションズが開発、運営する「SkyWay」があります。 「SkyWay」とは、ビデオ・音声通話をアプリケーションに簡単に実装できる国産SDKです。⇒概要資料をダウンロードする(無料)
WebRTCとは
P2Pについての説明の前に、WebRTCについて理解する必要があります。
WebRTC(Web Real-Time Communication)は、プラグインを必要とせず、Webブラウザ間で、リアルタイムに音声、映像、データ通信を可能にする技術です。
通信の基盤はP2P(Peer to Peer)方式で、低遅延かつ安全な通信を実現します。
Teams、Google Meetなどのビデオ通話やオンラインゲームなど幅広い分野で活用されています。Chrome、Firefox、Safariなどの主要ブラウザで動作し、ライセンス料無料で利用可能です。
以下の記事にてWebRTCを詳しく解説しているので、ご参考ください。
WebRTC P2Pとは
WebRTCのP2P(Peer to Peer)通信は、端末同士が直接データを送受信する方式で、サーバーを介さないため低遅延かつ効率的なリアルタイム通信を実現します。これにより、データ転送が速く、サーバー負荷の集中による通信不安定が起こりにくい利点があります。
P2P通信を行うには、相手のIPアドレスや接続経路情報を交換する必要があります。後述で詳しく解説します。
P2P通信に必要な情報
WebRTCでP2P通信を実現するためには、以下の情報をブラウザ間で共有する必要があります。
SDP(Session Description Protocol)
SDPは、通信に必要なブラウザの情報を記述した文字列です。具体的には、使用するコーデック、ビットレート、メディア形式、IPアドレス、ポート番号、通信帯域などの情報です。
通信はOffer/Answerモデルで行われ、一方のPCがSDPを送信(Offer)し、相手PCがその回答(Answer)を返す形式を取ります。これを、Negotiation(交渉)と言います。
ICE(Interactive Connectivity Establishment)
ICEは、複数の通信経路候補(ICE Candidate)を収集し、最適な接続経路を確立します。
ただし、現実のネットワーク環境では、NATやFirewallといった障壁が存在するため、そのままではP2P通信が難しい場合があります。その際、STUNサーバーやTURNサーバーを使用してNATやファイアウォール越えを支援します。
STUN/TURNサーバー
STUNサーバーは、NAT配下にある端末が、自身のグローバルIPアドレスとポート番号を取得するために使用されるサーバーです。P2P通信では、相手に伝えるための正確なIPアドレスが必要ですが、NAT環境ではこれが難しいため、STUNサーバーを経由して外部から見たIPアドレスを取得します。
一方、TURNサーバーは、NATのセキュリティが高い場合やFirewall、プロキシサーバーが通信をブロックして直接通信が困難な場合にデータの中継を行います。このサーバーは、すべての通信パケットを代理で転送することでNAT越えを可能にし、端末間の通信をサポートします。
これらの仕組みにより、NATの背後にある端末同士でもWebRTC通信が実現可能となります。
P2P通信を実現する流れ
WebRTCでP2P通信を確立するまでの流れを解説します。
手順
1. シグナリングサーバーへ接続
まず、2つのブラウザ(通信相手)が通信を始めるための情報を交換します。この情報のやり取りを助けるのがシグナリングサーバーです。
- WebSocketを使って、ブラウザとシグナリングサーバー間で通信を行います。
- 交換する主な情報は、通信条件を記述したSDP(Session Description Protocol)です。
- この段階では、まだブラウザ同士は直接通信していません。
2. 経路情報の収集・交換
次に、ブラウザ同士がどの経路でデータを送受信するかを決めるための情報を集めて交換します。このプロセスにはICE(Interactive Connectivity Establishment)という仕組みを使います。
- STUNサーバーを利用して、自分の「外部IPアドレス」と「ポート番号」を確認します。
- NAT(ネットワークのアドレス変換)を通じて通信するために必要です。
- 必要に応じて、TURNサーバーを利用します。
- NATやファイアウォールが原因で直接通信できない場合に、中継役として動作します。
- 集めた経路情報(ICE候補)をSDPの一部として交換します。
3. 接続試行
ブラウザ同士が交換したSDPやICE候補を使い、実際にP2P通信を試みます。
- 交換した複数の経路候補の中から、最適な経路を選んで接続を試します。
- STUNサーバーやTURNサーバーを必要に応じて活用しながら、通信が確立するよう調整します。
4. P2P通信開始
接続が確立したら、ブラウザ同士で直接通信が始まります。
- 音声、動画、またはデータをリアルタイムでやり取りできる状態です。
- この段階ではシグナリングサーバーは役割を終え、ブラウザ間の直接通信(P2P)が行われます。
この流れにより、効率的かつ低遅延でのP2P通信が実現します。
複数人接続の場合、P2PよりSFUがおすすめ
WebRTCは、P2Pによる1対1通信だけでなく、複数人とのリアルタイム通信も可能です。ただし、多拠点接続を実現するには、P2Pではなく、SFUを採用することが一般的です。
SFUとは
SFU(Selective Forwarding Unit)とは、音声や映像データを効率的に中継するサーバーベースの仕組みで、リアルタイム通信を最適化します。この方式では、配信元の負荷を軽減しつつ、データを加工せずそのまま複数の視聴者へ転送するため、低遅延を維持できます。
以下の記事にてSFUについて詳しく解説しているので、ご参考ください。
P2PとSFUの違い
WebRTCにおけるP2PとSFUは通信方法が異なり、それぞれの用途や特徴に応じて使い分けられます。
P2P(Peer to Peer)
- 特徴: クライアント同士が直接通信。
- 利点: 低遅延。
- 欠点: 通信相手が増えると負荷が高くなり、不安定になる場合あり。
- 適用場面: 1対1の通話や少人数の通信。
SFU(Selective Forwarding Unit)
- 特徴: 中継サーバーを介して通信データを配信。
- 利点: 複数の接続でも負荷が分散され、安定した通信を実現。
- 欠点: サーバーを使用するため、若干の遅延が発生。
- 適用場面: 大規模な会議やライブ配信。
P2P/SFU 比較表
P2P通信 | SFU通信 | |
---|---|---|
接続方法 | 直接接続 | 中継サーバーを経由 |
遅延 | 低遅延 | わずかに遅延が発生 |
負荷分散 | 各クライアントが負担 | サーバーが負担 |
用途 | 少人数の通信向け | 多人数の会議や配信向け |
P2Pは効率的な直接通信に適し、SFUは多人数接続の安定性を確保するのに適しています。用途に応じて選択するのがベストです。
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の通信の基盤は、ブラウザ間でリアルタイム通信を可能にするP2P通信です。P2P通信ではサーバーを介さずに端末同士が直接データをやり取りし、低遅延かつ効率的な通信を実現します。NATやファイアウォール越えにはSTUN/TURNサーバーが用いられます。P2Pは少人数向け、SFUは多人数向けといった特性があり、用途に応じた使い分けが重要です。また、 WebRTCを実装するには専門知識と膨大な開発工数が必要ですが、「SkyWay」を利用すれば、開発の簡略化が可能です。 セキュリティも安全で、多様なシーンでの利用が拡大しているので、検討してみてはいかがでしょうか。