RTCPeerConnection
は、 RTCPeerConnection
の中央インターフェースです。これは、ローカルピアとリモートピア間の接続を表し、接続を確立するために必要なすべての機能とイベントを提供します。
ピア接続の確立
WebRTC機能を実装するアプリケーションは、通常、 RTCPeerConnection
インターフェイスに大きく依存します。呼び出し側(つまり、接続を開始するピア)からは、接続を確立するプロセスは通常、次のようになります。
- 適切なICE構成で新しい
RTCPeerConnection
インスタンスを作成します。 -
RTCPeerConnection.createOffer()
を使用してローカルSDP記述を作成します。 -
RTCPeerConnection.setLocalDescription()
を使用してローカルSDPの説明を設定します。 - ローカルSDP記述をリモートピアに転送します(シグナリングサービスを使用)。
- リスナー登録
icecandidate
のイベントRTCPeerConnection
。 -
icecandidate
イベントごとに、(シグナリングサービスを使用して)リモートピアに転送します。 - シグナリングサービスからの着信リモートSDP記述を待ち、
RTCPeerConnection.setRemoteDescription()
を使用して設定します。 - シグナリングサービスからのリモートICE候補の着信を待ち、
RTCPeerConnection.addIceCandidate()
を使用してそれらを追加します。
呼び出し先側では、プロセスが少し異なります。
- 適切なICE構成で新しい
RTCPeerConnection
インスタンスを作成します。 - シグナリングサービスからの着信リモートSDP記述を待ち、
RTCPeerConnection.setRemoteDescription()
を使用して設定します。 -
RTCPeerConnection.createAnswer()
呼び出して、リモートSDP記述の回答を作成します。 - (シグナリングサービスを使用して)応答をリモートピアに転送します。
- リスナー登録
icecandidate
のイベントRTCPeerConnection
。 -
icecandidate
イベントごとに、(シグナリングサービスを使用して)リモートピアに転送します。 - シグナリングサービスからのリモート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
});
});
}
async
とawait
を使用して上記のコードを記述すると、次のようになります。
async function createAndSendOffer(peerConnection, signallingService) {
const offer = await peerConnection.createOffer();
signallingService.send({
type: 'offer',
data: offer
});
}