Google is committed to advancing racial equity for Black communities. See how.
このページは Cloud Translation API によって翻訳されました。
Switch to English

ピア接続

RTCPeerConnectionは、WebRTC APIの中心的なインターフェースです。ローカルピアとリモートピア間の接続を表し、接続の確立に必要なすべての機能とイベントを提供します。

ピア接続の確立

WebRTC機能を実装するアプリケーションは通常、 RTCPeerConnectionインターフェイスに大きく依存します。呼び出し側(つまり、接続を開始するピア)から、接続を確立するプロセスは通常次のとおりです。

  1. 適切なICE構成で新しいRTCPeerConnectionインスタンスを作成します。
  2. RTCPeerConnection.createOffer()を使用してローカルSDP記述を作成します。
  3. RTCPeerConnection.setLocalDescription()を使用してローカルSDPの説明を設定します。
  4. ローカルSDP記述を(シグナリングサービスを使用して)リモートピアに転送します。
  5. リスナー登録icecandidateのイベントRTCPeerConnection
  6. icecandidateイベントごとに、それを(シグナリングサービスを使用して)リモートピアに転送します。
  7. シグナリングサービスからの着信リモートSDP記述を待ち、 RTCPeerConnection.setRemoteDescription()を使用してそれを設定します。
  8. シグナリングサービスからの着信リモートICE候補を待ち、 RTCPeerConnection.addIceCandidate()を使用してそれらを追加します。

呼び出し先側では、プロセスが少し異なります。

  1. 適切なICE構成で新しいRTCPeerConnectionインスタンスを作成します。
  2. シグナリングサービスからの着信リモートSDP記述を待ち、 RTCPeerConnection.setRemoteDescription()を使用してそれを設定します。
  3. RTCPeerConnection.createAnswer()呼び出して、リモートSDP記述の回答を作成します。
  4. (シグナリングサービスを使用して)リモートピアに応答を転送します。
  5. リスナー登録icecandidateのイベントRTCPeerConnection
  6. icecandidateイベントごとに、それを(シグナリングサービスを使用して)リモートピアに転送します。
  7. シグナリングサービスからの着信リモートICE候補を待ち、 RTCPeerConnection.addIceCandidate()を使用してそれらを追加します。

このAPIの課題は、これらの操作のほとんどが非同期であるため、WebRTCアプリケーションの実際の実装が複雑になることが多いことです。関数の多くは、プロセスの次のステップを続行する前に解決する必要があるPromiseを返します。

このAPIを使用しての開発者のメーク使用するアプリケーションを実装するときにすることが推奨されasyncしてawait (使用してリスナーに登録するのではなく、 Promise.then()これは従って、あなたのコードをより簡単にして、)。次の例について考えてみます。

 function createAndSendOffer(peerConnection, signallingService) {
    peerConnection.createOffer()
                  .then(offer => {
                      signallingService.send({
                          type: 'offer',
                          data: offer
                      });
                  });
}
 

上記のコードをasyncawaitを使用して記述すると、次のようになります。

 async function createAndSendOffer(peerConnection, signallingService) {
    const offer = await peerConnection.createOffer();
    signallingService.send({
        type: 'offer',
        data: offer
    });
}