Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

RTCPeerConnection: iceconnectionstatechange Ereignis

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨September 2017⁩.

Ein iceconnectionstatechange Ereignis wird an ein RTCPeerConnection Objekt gesendet, jedes Mal, wenn sich der ICE Verbindungsstatus während des Aushandlungsprozesses ändert. Der neue ICE-Verbindungsstatus ist in der iceConnectionState Eigenschaft des Objekts verfügbar.

Eine häufige Aufgabe, die vom iceconnectionstatechange Ereignis-Listener ausgeführt wird, ist das Auslösen eines ICE-Neustarts, wenn der Status auf failed wechselt.

Dieses Ereignis ist nicht abbrechbar und wird nicht weitergeleitet.

Syntax

Verwenden Sie den Ereignisnamen in Methoden wie addEventListener() oder setzen Sie eine Ereignishandler-Eigenschaft.

js
addEventListener("iceconnectionstatechange", (event) => { })

oniceconnectionstatechange = (event) => { }

Ereignistyp

Ein generisches Event.

Nutzungshinweise

Ein erfolgreicher Verbindungsversuch beginnt typischerweise im Zustand new, wechselt dann über checking zu connected und schließlich zu completed. Unter bestimmten Umständen kann der connected Zustand übersprungen werden, was dazu führt, dass eine Verbindung direkt vom checking Zustand zu completed wechselt. Dies kann geschehen, wenn nur der zuletzt überprüfte Kandidat erfolgreich ist und die Signale für das Sammeln und das Ende der Kandidaten beide eintreffen, bevor die erfolgreiche Aushandlung abgeschlossen ist.

ICE-Verbindungsstatus während ICE-Neustarts

Wenn ein ICE-Neustart verarbeitet wird, wird der Sammel- und Konnektivitätsprüfungsprozess von Anfang an neu gestartet, was dazu führt, dass das iceConnectionState auf connected wechselt, wenn der ICE-Neustart im completed Zustand ausgelöst wurde. Wenn der ICE-Neustart im transienten Zustand disconnected initiiert wird, wechselt der Zustand stattdessen auf checking, was im Wesentlichen anzeigt, dass die Verhandlung ignoriert, dass die Verbindung vorübergehend verloren war.

Zustandsübergänge, wenn die Verhandlung endet

Wenn der Verhandlungsprozess keine Kandidaten mehr zu überprüfen hat, wechselt die ICE-Verbindung in einen von zwei Zuständen. Wenn keine geeigneten Kandidaten gefunden wurden, wechselt der Zustand auf failed. Wenn mindestens ein geeigneter Kandidat erfolgreich identifiziert wurde, wechselt der Zustand auf completed. Die ICE-Schicht trifft diese Entscheidung, nachdem sie das Ende-der-Kandidaten-Signal erhalten hat, das durch Aufruf von addIceCandidate() mit einem Kandidaten, dessen candidate Eigenschaft ein leerer String ("") ist, bereitgestellt wird, oder durch Setzen der RTCPeerConnection Eigenschaft canTrickleIceCandidates auf false.

Beispiele

Ein Ereignishandler für dieses Ereignis kann mit der oniceconnectionstatechange Eigenschaft oder durch Verwendung von addEventListener() auf der RTCPeerConnection hinzugefügt werden.

In diesem Beispiel wird ein Handler für iceconnectionstatechange eingerichtet, um einen Anrufstatusanzeiger zu aktualisieren, indem der Wert von iceConnectionState verwendet wird, um eine Zeichenfolge zu erstellen, die dem Namen einer CSS-Klasse entspricht, die wir dem Statusanzeiger zuweisen können, damit er den aktuellen Zustand der Verbindung widerspiegelt.

js
pc.addEventListener("iceconnectionstatechange", (ev) => {
  let stateElem = document.querySelector("#call-state");
  stateElem.className = `${pc.iceConnectionState}-state`;
});

Dies kann auch so geschrieben werden:

js
pc.oniceconnectionstatechange = (ev) => {
  let stateElem = document.querySelector("#call-state");
  stateElem.className = `${pc.iceConnectionState}-state`;
};

Spezifikationen

Specification
WebRTC: Real-Time Communication in Browsers
# dom-rtcpeerconnection-oniceconnectionstatechange

Browser-Kompatibilität

Siehe auch