RTCPeerConnection
ist die zentrale Schnittstelle in der WebRTC API. Es
stellt die Verbindung zwischen dem lokalen und dem Remote-Peer dar und stellt alle
und Ereignisse, die zum Herstellen der Verbindung erforderlich sind.
Peer-Verbindung herstellen
Anwendungen, die WebRTC-Funktionen implementieren, sind in der Regel stark auf den
RTCPeerConnection
-Schnittstelle. Aufseiten der Aufrufer (d. h. der Peer
eine Verbindung hergestellt wird, ist der Vorgang zum Herstellen einer Verbindung normalerweise der
Folgendes:
- Neue
RTCPeerConnection
-Instanz mit entsprechendem ICE erstellen Konfiguration. - Erstellen Sie mit
RTCPeerConnection.createOffer()
eine lokale SDP-Beschreibung. - Legen Sie die lokale SDP-Beschreibung fest mit
RTCPeerConnection.setLocalDescription()
- Lokale SDP-Beschreibung (über einen Signalisierungsdienst) an die Remote-Maschine übertragen Peer.
- Registrieren Sie einen Listener für
icecandidate
-Ereignisse auf derRTCPeerConnection
. - Übertragen Sie jedes
icecandidate
-Ereignis mithilfe eines Signalisierungsdienstes an den Remote-Peer an. - Warten Sie auf eine eingehende Remote-SDP-Beschreibung vom Signalisierungsdienst und
mit
RTCPeerConnection.setRemoteDescription()
festlegen. - Warten Sie auf eingehende Remote-ICE-Kandidaten des Signalisierungsdienstes und fügen Sie
mit
RTCPeerConnection.addIceCandidate()
Auf der Seite des Aufgerufenen sieht der Prozess etwas anders aus.
- Neue
RTCPeerConnection
-Instanz mit entsprechendem ICE erstellen Konfiguration. - Warten Sie auf eine eingehende Remote-SDP-Beschreibung vom Signalisierungsdienst und
mit
RTCPeerConnection.setRemoteDescription()
festlegen. - Erstellen Sie eine Antwort für die Remote-SDP-Beschreibung, indem Sie folgenden Befehl aufrufen:
RTCPeerConnection.createAnswer()
- Ü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 an. - Warten Sie auf eingehende Remote-ICE-Kandidaten des Signalisierungsdienstes und fügen Sie
mit
RTCPeerConnection.addIceCandidate()
Die Herausforderung bei dieser API besteht darin,
dass die meisten Vorgänge asynchron sind.
wodurch die eigentliche Implementierung einer WebRTC-Anwendung oft kompliziert wird.
Viele der Funktionen geben ein Promise
zurück, das vor dem
nächsten Schritt fortfahren können.
Es wird empfohlen, bei der Implementierung einer Anwendung, die diese API verwendet, den Parameter
Entwickler verwenden async
und await
, statt Listener zu registrieren
(unter Verwendung von Promise.then()
), da Ihr Code dadurch leichter nachzuvollziehen ist. Erwägen Sie
im folgenden Beispiel:
function createAndSendOffer(peerConnection, signallingService) {
peerConnection.createOffer()
.then(offer => {
signallingService.send({
type: 'offer',
data: offer
});
});
}
Wenn Sie den obigen Code mit async
und await
schreiben, erhalten Sie Folgendes:
async function createAndSendOffer(peerConnection, signallingService) {
const offer = await peerConnection.createOffer();
signallingService.send({
type: 'offer',
data: offer
});
}