RTCPeerConnection
は WebRTC API の中心的なインターフェースです。これは、ローカルピアとリモートピアの間の接続を表し、接続を確立するために必要なすべての機能とイベントを提供します。
ピア接続の確立
WebRTC 機能を実装するアプリは、通常、RTCPeerConnection
インターフェースに大きく依存します。呼び出し元(ピアであるピア)から接続確立までのプロセスは通常、次のとおりです。
- 適切な ICE 構成を持つ新しい
RTCPeerConnection
インスタンスを作成します。 RTCPeerConnection.createOffer()
を使用してローカル SDP の説明を作成します。RTCPeerConnection.setLocalDescription()
を使用してローカル SDP の説明を設定します。- ローカル SDP の説明をリモート ピアに転送します(シグナリング サービスを使用します)。
RTCPeerConnection
でicecandidate
イベントのリスナーを登録します。icecandidate
イベントごとに、(シグナリング サービスを使用して)リモートピアに転送します。- シグナリング サービスからリモート SDP の説明を受信するまで待機し、
RTCPeerConnection.setRemoteDescription()
を使用して設定します。 - シグナリング サービスからリモートの ICE 候補の受信を待機し、
RTCPeerConnection.addIceCandidate()
を使用して追加します。
呼び出し先では、プロセスが少し異なります。
- 適切な ICE 構成を持つ新しい
RTCPeerConnection
インスタンスを作成します。 - シグナリング サービスからリモート SDP の説明を受信するまで待機し、
RTCPeerConnection.setRemoteDescription()
を使用して設定します。 RTCPeerConnection.createAnswer()
を呼び出して、リモート SDP の説明に対する回答を作成します。- 応答をリモートピアに転送する(シグナリング サービスを使用)
RTCPeerConnection
でicecandidate
イベントのリスナーを登録します。icecandidate
イベントごとに、(シグナリング サービスを使用して)リモートピアに転送します。- シグナリング サービスからリモートの ICE 候補の受信を待機し、
RTCPeerConnection.addIceCandidate()
を使用して追加します。
この API の課題は、これらのオペレーションのほとんどが非同期であることです。多くの場合、WebRTC アプリケーションの実際の実装は複雑になります。多くの関数は、プロセスの次のステップに進む前に解決する必要のある Promise
を返します。
この API を使用してアプリを実装する場合は、リスナーを(Promise.then()
を使用して)登録するのではなく、async
と await
を使用することをおすすめします。これにより、コードが読みやすくなります。次に例を示します。
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
});
}