WebRTCとは

WebRTC(Web Real-Time Communication)は、Webブラウザ上でリアルタイムの音声・ビデオ通信やP2Pファイル共有を行うためのオープンソースのプロトコルです。
WebRTCを使用することで、Webアプリケーション開発者はブラウザ内でのビデオ通話、音声通話、チャット、ファイル転送などを実現できます。

WebRTCは、主に3つのAPI(Application Programming Interface)から構成されています。
1つ目ののAPIは、マイクやカメラなどのメディアストリームを取得するための「getUserMedia」です。
2つ目のAPIは、P2P接続を確立するための「RTCPeerConnection」で、接続後はデータの送受信が可能になります。
3つ目のAPIは、ストリームやメタデータを送信するための「RTCDataChannel」があります。

WebRTCは、GoogleやMozillaなどの主要なブラウザベンダーによって開発され、オープンソースコミュニティによって改良され続けています。
WebRTCは、ビデオ通話アプリやオンライン会議システム、ゲーム、IoTデバイスなどのWebベースのアプリケーションで利用されています。

シグナリング

シグナリングは、WebRTCやその他のリアルタイムコミュニケーションシステムにおいて、通信を確立するための情報交換プロセスを指します。

WebRTCにおいて、シグナリングは、通信を確立するための情報をやりとりするために使用されます。
これには、通信を確立するための相手の情報や、メディアストリームのタイプや品質などの情報が含まれます。
シグナリングにはSDP(Session Description Protocol)やICE(Interactive Connectivity Establishment)といったプロトコルが使用されます。

一般的に、WebRTCにおいてシグナリングは、WebsocketやHTTPなどのプロトコルを使用して、サーバー間で情報を交換することが多いです。
また、シグナリングサーバーと呼ばれる専用のサーバーを使用することもあります。

シグナリングは、WebRTCの重要な機能であり、WebRTCを実装する際に必要不可欠な部分です。

ICE

ICE(Interactive Connectivity Establishment)は、WebRTCにおいて、P2P通信を確立するために使用されるプロトコルです。
ICEは、ネットワークの障害に対してロバストな通信を確立することができます。

WebRTCでは、通信を確立するために、対向側のブラウザのIPアドレスやポート番号などの情報が必要です。
しかし、NATやファイアウォールなどのネットワーク要素が存在する場合、この情報が直接取得できないことがあります。
そこで、ICEは、各ブラウザが自分自身のIPアドレスとポート番号を通信相手に伝えることで、通信を確立することができます。

ICEは、複数のプロトコル(STUN、TURN、およびICEサーバー)を使用して、通信の確立を試みます。
STUN(Session Traversal Utilities for NAT)は、STUNサーバーを使用して、自分自身のIPアドレスとポート番号を取得し、対向側に伝えます。
TURN(Traversal Using Relays around NAT)は、TURNサーバーを使用して、ネットワークの障害を回避し、通信を確立するための中継役を行います。
ICEサーバーは、STUNとTURNサーバーの機能を併せ持ち、複数のルートを試みて通信を確立するためのサーバーです。

ICEは、WebRTCにおいて、通信の確立を効率的かつロバストに行うために不可欠な機能です。

WebRTC SFUとは

WebRTC SFU(Selective Forwarding Unit)は、WebRTCにおいて、P2P通信を行うのではなく、複数のユーザー間でメディアストリームを配信するためのシステムです。
SFUは、リアルタイムコミュニケーションアプリケーションにおいて、大規模なビデオ会議やWebキャストなどの実装に使用されます。

WebRTC SFUは、一般的に中央集権型のアーキテクチャを採用しており、参加者はSFUサーバーに接続し、SFUサーバーがメディアストリームを受信し、適切な参加者に転送することで、メディアストリームを配信します。
この方式により、参加者同士がP2P通信を行わずに、SFUサーバーを介して通信するため、通信品質や接続性を向上させることができます。

WebRTC SFUは、WebRTCの機能の一つであり、リアルタイムコミュニケーションアプリケーションの実装において、大規模な配信や会議などでの使用が一般的です。

WebRTC SFU

ReDoisはWebRTC SFUの機能を具備しています。

WebRTC、WebRTC SFUのメリット

WebRTC、WebRTC SFUを使うメリットを説明します。

WebRTCのメリット

  • ネイティブブラウザサポート
    WebRTCは、主要なブラウザでネイティブにサポートされているため、特別なプラグインやアプリケーションをインストールする必要がありません。
  • 高品質な通信
    WebRTCは、高品質でリアルタイムな音声やビデオ通信を可能にします。また、自動的にネットワークの帯域幅に応じて、ビデオ品質を調整する機能もあります。
  • セキュリティ
    WebRTCは、SRTP(Secure Real-Time Transport Protocol)やDTLS(Datagram Transport Layer Security)といったセキュリティプロトコルを使用して通信を暗号化します。
  • P2P通信
    WebRTCは、P2P通信をサポートしており、ユーザー同士が直接通信することができます。これにより、中継サーバーを介さずに、通信品質が向上し、通信の遅延が少なくなります。
  • オープンソース
    WebRTCは、オープンソースであるため、開発者が独自のアプリケーションを開発する際に、APIやコードを自由に使用することができます。

WebRTCは、Webブラウザ上でのリアルタイムコミュニケーションを可能にする技術であり、ビデオ会議やWebキャスト、音声通話など、さまざまなアプリケーションで使用されます。

WebRTC SFUのメリット

  • ネットワークの負荷軽減
    WebRTC SFUは、P2P(Peer-to-Peer)接続ではなく、クライアントとサーバーの間で中継するため、ネットワークの負荷を軽減することができます。
  • スケーラビリティの向上
    WebRTC SFUは、多数のクライアントと接続する場合でも、サーバーの負荷を分散することができます。また、SFUは、クライアント間の接続品質を維持しながら、参加者数を増やすことができます。
  • セキュリティ強化
    WebRTC SFUは、クライアント間の接続を中継するため、P2P接続の場合よりもセキュリティが向上します。また、SFUは、プライバシー保護を向上させるための機能も提供しています。
  • 柔軟性
    WebRTC SFUは、クライアントが接続する端末やネットワーク条件に関係なく、接続を確立することができます。また、SFUは、ビデオや音声のエンコード、デコード、およびストリーミングに関する柔軟性を提供します。
  • アプリケーション開発の容易化
    WebRTC SFUは、WebRTCプロトコルを使用しているため、Webアプリケーション開発者が独自のSFUを構築することが容易になります。また、SFUは、WebRTCアプリケーションで利用できる多数のAPIを提供しています。

WebRTC、WebRTC SFUのデメリット

WebRTC、WebRTC SFUを使うデメリットもあります。

WebRTCのデメリット

  • ブラウザの互換性
    WebRTCは、ブラウザによってサポートされている機能が異なります。そのため、アプリケーションを開発する際には、ブラウザ間の互換性に注意する必要があります。
  • NATトラバーサルの問題
    WebRTCは、NAT(Network Address Translation)の背後にあるデバイス間で直接通信を行うため、NATトラバーサルの問題が生じることがあります。これを解決するために、STUN(Session Traversal Utilities for NAT)やTURN(Traversal Using Relay NAT)などの技術が必要です。
  • セキュリティ
    WebRTCは、セキュリティが重要な問題であるため、実装に注意を払う必要があります。また、WebRTCは、セキュリティに関する規格がまだ完全ではないため、アプリケーション開発者がセキュリティ上の問題を自己解決する必要があります。
  • パフォーマンス
    WebRTCは、ビデオや音声のストリーミングに関する多数のプロトコルを使用しています。これらのプロトコルは、パフォーマンスに影響を与える可能性があります。また、ビデオや音声の品質が変化する可能性があるため、品質管理にも注意が必要です。
  • 信頼性
    WebRTCは、ネットワークの状況によっては、信頼性に問題が生じることがあります。たとえば、インターネット接続が不安定な場合や、ネットワークのトラフィックが過剰な場合に、ビデオや音声の品質が低下する可能性があります。

WebRTC SFUのデメリット

  • ネットワークの負荷
    WebRTC SFUを使用する場合、中央のサーバーが多数のクライアントからのストリームを受け取り、処理する必要があります。そのため、サーバーのハードウェアやネットワークの能力が必要となり、負荷が大きくなる可能性があります。
  • 遅延の問題
    WebRTC SFUでは、中央のサーバーがストリームを受信し、それを配信するため、配信に遅延が生じる可能性があります。また、サーバーが負荷に対応できない場合は、配信が中断されることがあります。(100ms~200ms程度遅延します。)
  • コストの問題
    WebRTC SFUを実装するためには、サーバーのハードウェアやネットワークの能力が必要となり、そのためには高いコストが必要となることがあります。
  • サーバーの信頼性
    WebRTC SFUを使用する場合、中央のサーバーがクライアントからのストリームを受け取り、処理するため、サーバーの信頼性が重要です。サーバーがダウンすると、配信が中断される可能性があるため、サーバーの冗長性を確保する必要があります。
  • NATトラバーサルの問題
    WebRTC SFUを使用する場合、クライアントとサーバー間でNATトラバーサルが必要となります。NATトラバーサルは複雑な処理であり、正しく実装されていない場合、通信が確立しないことがあります。