Peer-Verbindungen

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:

  1. Neue RTCPeerConnection-Instanz mit entsprechendem ICE erstellen Konfiguration.
  2. Erstellen Sie mit RTCPeerConnection.createOffer() eine lokale SDP-Beschreibung.
  3. Legen Sie die lokale SDP-Beschreibung fest mit RTCPeerConnection.setLocalDescription()
  4. Lokale SDP-Beschreibung (über einen Signalisierungsdienst) an die Remote-Maschine übertragen Peer.
  5. Registrieren Sie einen Listener für icecandidate-Ereignisse auf der RTCPeerConnection.
  6. Übertragen Sie jedes icecandidate-Ereignis mithilfe eines Signalisierungsdienstes an den Remote-Peer an.
  7. Warten Sie auf eine eingehende Remote-SDP-Beschreibung vom Signalisierungsdienst und mit RTCPeerConnection.setRemoteDescription() festlegen.
  8. 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.

  1. Neue RTCPeerConnection-Instanz mit entsprechendem ICE erstellen Konfiguration.
  2. Warten Sie auf eine eingehende Remote-SDP-Beschreibung vom Signalisierungsdienst und mit RTCPeerConnection.setRemoteDescription() festlegen.
  3. Erstellen Sie eine Antwort für die Remote-SDP-Beschreibung, indem Sie folgenden Befehl aufrufen: RTCPeerConnection.createAnswer()
  4. Übertragen Sie die Antwort mithilfe eines Signalisierungsdienstes an den Remote-Peer.
  5. Registrieren Sie einen Listener für icecandidate-Ereignisse auf der RTCPeerConnection.
  6. Übertragen Sie jedes icecandidate-Ereignis mithilfe eines Signalisierungsdienstes an den Remote-Peer an.
  7. 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
    });
}