Die RTCPeerConnection
ist die zentrale Schnittstelle in der WebRTC API. Sie stellt die Verbindung zwischen dem lokalen und dem Remote-Peer dar und bietet alle Funktionen und Ereignisse, die zum Herstellen der Verbindung erforderlich sind.
Peer-Verbindung herstellen
Anwendungen, die WebRTC-Funktionen implementieren, sind in der Regel stark von der RTCPeerConnection
-Schnittstelle abhängig. Auf der Seite des Anrufers (d. h. des Peers, der eine Verbindung initiiert) erfolgt die Verbindungsherstellung in der Regel so:
- Erstelle eine neue
RTCPeerConnection
-Instanz mit der entsprechenden ICE-Konfiguration. - Erstellen Sie mit
RTCPeerConnection.createOffer()
eine lokale SDP-Beschreibung. - Lege die lokale SDP-Beschreibung mit
RTCPeerConnection.setLocalDescription()
fest. - Übertragen Sie die lokale SDP-Beschreibung (mithilfe eines Signalisierungsdienstes) an den Remote-Peer.
- Registrieren Sie einen Listener für
icecandidate
-Ereignisse auf derRTCPeerConnection
. - Übertragen Sie jedes
icecandidate
-Ereignis mithilfe eines Signalisierungsdienstes an den Remote-Peer. - Warten Sie auf eine eingehende Remote-SDP-Beschreibung vom Signalisierungsdienst und legen Sie sie mit
RTCPeerConnection.setRemoteDescription()
fest. - Warten Sie auf eingehende Remote-ICE-Kandidaten vom Signalisierungsdienst und fügen Sie sie mit
RTCPeerConnection.addIceCandidate()
hinzu.
Auf der Seite des aufgerufenen Objekts läuft der Prozess etwas anders ab.
- Erstelle eine neue
RTCPeerConnection
-Instanz mit der entsprechenden ICE-Konfiguration. - Warten Sie auf eine eingehende Remote-SDP-Beschreibung vom Signalisierungsdienst und legen Sie sie mit
RTCPeerConnection.setRemoteDescription()
fest. - Erstellen Sie eine Antwort für die Remote-SDP-Beschreibung, indem Sie
RTCPeerConnection.createAnswer()
aufrufen. - Übertragen Sie die Antwort mithilfe eines Signalisierungsdienstes an den Remote-Peer.
- Registrieren Sie einen Listener für
icecandidate
-Ereignisse auf derRTCPeerConnection
. - Übertragen Sie jedes
icecandidate
-Ereignis mithilfe eines Signalisierungsdienstes an den Remote-Peer. - Warten Sie auf eingehende Remote-ICE-Kandidaten vom Signalisierungsdienst und fügen Sie sie mit
RTCPeerConnection.addIceCandidate()
hinzu.
Die Herausforderung bei dieser API besteht darin, dass die meisten dieser Vorgänge asynchron sind, was die tatsächliche Implementierung einer WebRTC-Anwendung oft erschwert.
Viele der Funktionen geben eine Promise
zurück, die behoben werden muss, bevor der nächste Schritt im Prozess fortgesetzt werden kann.
Bei der Implementierung einer Anwendung mit dieser API wird empfohlen, async
und await
zu verwenden, anstatt Listener (mit Promise.then()
) zu registrieren, da der Code so leichter nachvollziehbar ist. Betrachten Sie hierzu das folgende Beispiel:
function createAndSendOffer(peerConnection, signallingService) {
peerConnection.createOffer()
.then(offer => {
signallingService.send({
type: 'offer',
data: offer
});
});
}
Wenn wir den Code oben mit async
und await
schreiben, erhalten wir Folgendes:
async function createAndSendOffer(peerConnection, signallingService) {
const offer = await peerConnection.createOffer();
signallingService.send({
type: 'offer',
data: offer
});
}