🐥

WebRTCとは

に公開

はじめに

ライブストリーミング配信アプリを作成しようと思い、WebRTCと言う概念が出てきたので、WebRTCについてこの際しっかりと勉強しようと思いました。ここに勉強したことをまとめます。

WebRTCとは

WebRTCとは「Web Real-Time-Communication」の略称で、Web上でリアルタイムに音声、映像、データ通信をするための仕組み・プロトコルです。

このWebRTCプロジェクトにはGoogleだけでなく、Apple、Mozilla、Opera、Microsoftなどといった大手ソフトウェア開発企業が多数携わっています。そのため、現在はGoogle Chrome、Microsoft Edge、Firebox、Opera、Safariなどといった人気ブラウザにも導入されており、私達が日常的に活用しているものの殆どに導入されています。

オープンソースな技術であるため、ライセンス料無料で利用可能で、Chrome、Firefox、Safariなどの主要ブラウザで動作します。

WebRTCにはさまざまなサーバーが基盤となって構築されており、どれも場面や状況によって活躍する重要な役割を果たします。

WebRTCの最大の特徴は、サーバーを介さずに クライアント同士(ブラウザやアプリ)で直接データをやり取りする、P2P(ピアツーピア)通信を実現できる点です。これにより、低遅延かつ高品質な通話や、ストリーミングが可能になります。

セキュリティ面では、WebRTCはすべての通信をDTLS(Datagram Transport Layer Security)とSRTP(Secure Real-time Transport Protocol)で暗号化する仕組みを採用しており、第三者にデータが盗み見られるリスクを抑え、安全な通信環境の確保できます。

WebRTCは、Teams、Google MeetなどのWeb会議ツールやライブ配信、オンラインゲーム、さらにはIoT機器の遠隔操作など、さまざまなシーンで活用されています。

WebRTC P2Pの仕組み

WebRTCは、サーバーを介さずに クライアント同士(ブラウザやアプリ)で直接データをやり取りする、P2P通信が基盤となっています。

WebRTCのP2P通信を実現するは、シグナリング、ICE(Interactive Connectivity Establishment)による接続経路の確保、P2P接続の確立、そしてメディアやデータの送受信という流れが必要です。

  1. シグナリング(シグナリングサーバー)
  2. 接続経路の確保(STUN/TURNサーバ-)
  3. P2P接続の確立
  4. データ送受信

シグナリング

WebRTC自体はブラウザ間で直接リアルタイムの音声やビデオをやりとりする技術ですが、その前に通信相手のIPアドレスや接続方法を知る必要があります。

シグナリングは、この接続情報(SDPやICE候補)を仲介し、双方のブラウザが互いを見つけて通信を始められるようにします。仲介するサーバーをシグナリングサーバーと呼びます。

WebRTCにはシグナリングの標準的な仕組みは含まれておらず、WebSocketやHTTPなどの外部の通信手段を利用して実装する必要があります。この段階では、SDP(Session Description Protocol)を用いて通信相手と接続条件を交換します。

シグナリングが完了した後、ICE(Interactive Connectivity Establishment)フレームワークを利用して最適な通信経路を探索します。

Session Description Protocol(SDP)

SDPは、音声や映像の通信セッションの詳細を記述するためのプロトコルです。具体的には、使用するコーデック、ビットレート、通信の方向性など、メディアの詳細情報を表現します。また、ICE Candidateと呼ばれるP2Pの通信経路に関する情報も含まれます。

WebRTCにおいて、通信を開始する前に、端末間でOfferのSDPとAnswerのSDPを交換する(Offer/Answerモデル)ことで、通信のパラメータを合わせることができます。これを、Negotiation(交渉)と言います。

Interactive Connectivity Establishment(ICE)

ICEは、NATやFirewallを越えてP2P通信を確立するためのフレームワークです。STUNやTURNといったプロトコルを使用して、端末間の最適な通信経路を見つけ出します。

接続経路確保のためのSTUN/TURNサーバー

WebRTCはP2P通信を実現します。しかし、現実のネットワーク環境では、NATやFirewallといった障壁が存在するため、そのままではP2P通信が難しい場合があります。

NATについて

NAT(Network Address Translation)は、プライベートネットワークとインターネットとの間でIPアドレスを変換する技術を指します。グローバルIPアドレスを節約することができるほか、外部ネットワークから内部ネットワークを直接参照することができなくなるため、外部からの不正アクセスを防ぐメリットがあります。

ただし、**NATを使用するネットワークでは、外部からの接続要求が直接内部のデバイスに届かないため、P2P通信が難しくなります。**特に、両方の端末がNATの背後にある場合、通信の確立が非常に難しくなります。 NATを越えてP2P通信を確立するためには、STUNやTURNといった技術が必要となります。

STUN/TURNサーバー

STUNサーバーは、NATの背後にある端末のグローバルIPアドレスとポート番号を取得するためのサーバーです。

一方、TURNサーバーは、NATのセキュリティレベルが高かったり、FirewallやプロキシサーバーがWebRTC通信をブロックし直接通信できない場合に、中継役として動作し、データの送受信をサポートします。

これにより、NATの背後にある端末同士でもWebRTCの通信が可能となります。

WebRTCの安全性

WebRTCは、SRTPというセキュアな通信規格を採用しており、安全にリアルタイム通信を行うことができます。また、暗号化に必要な鍵交換は、DTLS(Datagram Transport Layer Security)という仕組みを利用して安全に行われます。

SRTPとは

SRTP(Secure Real-time Transport Protocol)とは、リアルタイムに音声や映像などのデータを転送する基本的な通信規格、RTPのセキュア版です。SRTPはデータの暗号化を行い送受信されるため、第三者によるデータの傍受や改ざんが非常に困難です。

WebRTC SFUの仕組み

SFU(Selective Forwarding Unit)サーバーとは、P2P経由ではなくサーバー経由で音声や映像を再生、通信するWebRTC技術の1つです。

通信機器の性能やインターネット文化の進化に伴い、ユーザー数もかなり増えてきた現在では、ますますデータ通信による負担に耐えうるサーバーが必要となりました。

SFUサーバーの仕組みを活用することで、メディアの容量の大きさや配信時の視聴者の数による負担を大幅に減らすことが可能。そのため、より快適なリアルタイムコミュニケーション(音声、ビデオ通話、ファイルや画面共通、キャッシュ管理など)を取ることができます。

終わりに

なんかagoraっていう毎月10000分無料のツールがあるらしい。
P2P安定しないし、デモの時にやる程度で1週間に7日以上利用することはないだろうし、個人開発の時のP2Pシステムはagoraに切り替えようかな、、笑

Discussion