ピア接続

RTCPeerConnection は、WebRTC API の中心的なインターフェースです。これは、 ローカルピアとリモートピアの間の接続を表し、 接続を確立するために必要な関数とイベントが含まれます。

ピア接続を確立する

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

  1. 適切な ICE を含む新しい RTCPeerConnection インスタンスを作成する できます。
  2. RTCPeerConnection.createOffer() を使用してローカル SDP の説明を作成します。
  3. 次のコマンドを使用して、ローカル SDP の説明を設定します。 RTCPeerConnection.setLocalDescription()
  4. (シグナリング サービスを使用して)ローカル SDP の説明をリモート 使用します。
  5. RTCPeerConnectionicecandidate イベントのリスナーを登録します。
  6. icecandidate イベントごとに、(シグナリング サービスを使用して) 構成されます
  7. シグナリング サービスからリモート SDP の説明を受信するまで待機する。 RTCPeerConnection.setRemoteDescription() を使用して設定します。
  8. シグナリング サービスからのリモート ICE 候補の受信を待ち、 RTCPeerConnection.addIceCandidate() を使用する

呼び出し先側ではプロセスは若干異なります。

  1. 適切な ICE を含む新しい RTCPeerConnection インスタンスを作成する できます。
  2. シグナリング サービスからリモート SDP の説明を受信するまで待機する。 RTCPeerConnection.setRemoteDescription() を使用して設定します。
  3. 次の呼び出しを使用して、リモート SDP の説明に対する回答を作成します。 RTCPeerConnection.createAnswer()
  4. (シグナリング サービスを使用して)リモートピアに回答を転送します。
  5. RTCPeerConnectionicecandidate イベントのリスナーを登録します。
  6. icecandidate イベントごとに、(シグナリング サービスを使用して) 構成されます
  7. シグナリング サービスからのリモート ICE 候補の受信を待ち、 RTCPeerConnection.addIceCandidate() を使用する

この API の課題は、これらのオペレーションのほとんどが非同期であること、 そのため、WebRTC アプリケーションの実際の実装が複雑になることがよくあります。 多くの関数は Promise を返しますが、これは 次のステップに進むことができます。

この API を使用してアプリケーションを実装する場合は、 デベロッパーはリスナーを登録する代わりに asyncawait を使用する (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
    });
}