WebRTCのしくみ
このドキュメントは、WebRTCの簡単で抽象的な紹介を提供します。WebRTCの詳細については、このドキュメントの最後にある「参考資料」セクションを参照してください。
WebRTC
WebRTC(Web Real-Time Communication)は、ブラウザー間のピアツーピア二重リアルタイム通信用に開発された一連のテクノロジーです。その名前が示すように、Webと互換性があり、W3Cの標準です。WebRTCの重要な機能の1つは、NATアドレスの背後でも機能することです。

WebRTCはいくつかのテクノロジーを使用して、ブラウザー間のリアルタイムのピアツーピア通信を提供します。これらのテクノロジーは
WebRTCを実行するためにSignalingServerが必要であるということがもう1つあります。ただし、シグナリングサーバーの実装には定義された標準はありません。各実装は独自のスタイルを作成します。このセクションの後半で、SignalingServerに関する詳細情報を提供します。
上記のテクノロジーについて簡単に説明しましょう。
SDP(セッション記述プロトコル)
SDPは単純なプロトコルであり、ブラウザでコーデックがサポートされている場合に使用されます。たとえば、WebRTCを介して接続される2つのピア(クライアントAとクライアントB )があるとします。クライアントAとクライアントBは、サポートするコーデックを定義するSDP文字列を作成します。たとえば、クライアントAは、ビデオ用のH264、VP8、およびVP9コーデック、オーディオ用のOpusおよびPCMコーデックをサポートする場合があります。クライアントBは、ビデオにはH264のみ、オーディオにはOpusコーデックのみをサポートできます。この場合、クライアントAとクライアントBの間で使用されるコーデックはH264とOpusです。ピア間に共通のコーデックがない場合、ピアツーピア通信を確立できません。
これらのSDP文字列が相互にどのように送信されるかについて質問があるかもしれません。ここでSignalingServerが実行されます。
ICE(双方向接続の確立)
ICEは、ピアがNATの背後にある場合でも、ピア間の接続を確立する魔法です。もう一度、クライアントAとクライアントBが接続され、ICEがそのためにどのように使用されるかを見てみましょう。
上の画像では、2つのサーバーがあります。1つはSTUNで、もう1つはTURNサーバーです。
STUNサーバーは、クライアントAにすべてのアドレスを学習させるために使用されます。この例を挙げましょう。私たちのコンピューターは通常、192.168.0.0ネットワークに1つのローカルアドレスを持ち、 www.whatismyip.comに接続したときに表示される2番目のアドレスがあります。このIPアドレスは、実際には私たちのパブリックIPアドレスです。インターネットゲートウェイ(モデム、ルーターなど)なので、STUNサーバーを定義しましょう。STUNサーバーは、ピアにパブリックIPアドレスとローカルIPアドレスを知らせます。ところで、Googleは無料のSTUNサーバー(stun.l.google.com:19302)を提供しています。
画像にはもう1つのサーバー、TURNServerがあります。TURN Serverは、ピア間でピアツーピア接続を確立できない場合に使用されます。TURNサーバーは、ピア間でデータを中継するだけです。
クライアントBも同じことを行い、STUNサーバーからローカルIPアドレスとパブリックIPアドレスを取得し、これらのアドレスをSignalingServerを介してクライアントAに送信します。
クライアントA はクライアントBのアドレスを受信し、クライアントBとの接続を作成するために、特別なpingを送信して各IPアドレスを試行します。クライアントAが任意のIPアドレスから応答を受信すると、そのアドレスを応答時間とその他のパフォーマンス資格情報とともにリストに追加します。最後に、クライアントAは、そのパフォーマンスに応じて最適なアドレスを選択します。
クライアントBは、クライアントAに接続するために同じことを行います
RTP(リアルタイムプロトコル)
RTPは、リアルタイムデータを送信するための成熟したプロトコルです。これはUDPに基づいています。オーディオとビデオは、WebRTCのRTPで送信されます。RTP通信でQoSを提供するRTCP(リアルタイム制御プロトコル)という名前のRTPの姉妹プロトコルがあります。RTPはRTSP(Real-time Streaming Protocol)でも使用されます
シグナリングサーバー
最後の部分は、WebRTCで定義されていないシグナリングサーバーです。上記のように、Signaling Serverは、クライアントAとクライアントBの間でSDP文字列とICE候補を送信するために使用されます。Signaling Serverは、どのピアが相互に接続されるかも決定します。WebSocketテクノロジーは、通常、通信用のシグナリングサーバーで使用されます。

互換性
過去1年間で、Safari、Edgeを含むすべてのブラウザーは、WebRTCをサポートする新しいバージョンをリリースしました。Chrome、Firefox、Operaはすでにしばらくの間WebRTCをサポートしています。ブラウザに共通のビデオコーデックはH264です。オーディオの場合、Opusはブラウザで一般的です。PCMはオーディオコーデックにも使用できますが、ライセンスの問題により、すべてのブラウザでAACがサポートされている場合でも、AACは使用されません。IPカメラは通常、ビデオコーデックにはH264を、オーディオコーデックにはPCMまたはAACをサポートします。
さらに読むと参考文献
ところで、私はスケーラブルな1対多のWebRTCとピアツーピアのWebRTC接続をサポートするAntMediaServerの開発者です