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: negotiationneeded 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 negotiationneeded Ereignis wird an die RTCPeerConnection gesendet, wenn eine Verhandlung der Verbindung über den Signalisierungskanal erforderlich ist. Dies tritt sowohl während der Ersteinrichtung der Verbindung als auch jederzeit auf, wenn eine Änderung der Kommunikationsumgebung eine Neukonfiguration der Verbindung erfordert.

Das negotiationneeded Ereignis wird zuerst an die RTCPeerConnection gesendet, wenn Medien erstmals zur Verbindung hinzugefügt werden. Dies startet den Prozess der ICE Verhandlung, indem Ihr Code angewiesen wird, ICE-Kandidaten über den Signalisierungsserver auszutauschen. Siehe Signalisierungstransaktionsfluss für eine Beschreibung des Signalisierungsprozesses, der mit einem negotiationneeded Ereignis beginnt.

Dieses Ereignis kann nicht abgebrochen werden und es wird nicht weitergeleitet.

Syntax

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

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

onnegotiationneeded = (event) => { }

Ereignistyp

Ein generisches Event.

Beispiele

In diesem Beispiel verwenden wir addEventListener(), um einen Ereignis-Handler für negotiationneeded zu erstellen. Seine Aufgabe ist es, ein SDP Angebot zu erstellen und es über den Signalisierungskanal an den entfernten Teilnehmer zu senden.

js
pc.addEventListener("negotiationneeded", (ev) => {
  pc.createOffer()
    .then((offer) => pc.setLocalDescription(offer))
    .then(() =>
      sendSignalingMessage({
        type: "video-offer",
        sdp: pc.localDescription,
      }),
    )
    .catch((err) => {
      // handle error
    });
});

Nachdem das Angebot erstellt wurde, wird das lokale Ende konfiguriert, indem RTCPeerConnection.setLocalDescription() aufgerufen wird, dann wird eine Signalisierungsnachricht erstellt und über den Signalisierungsserver an den entfernten Teilnehmer gesendet, um dieses Angebot mit dem anderen Teilnehmer zu teilen. Der andere Teilnehmer sollte diese Nachricht erkennen und daraufhin eine eigene RTCPeerConnection erstellen, die entfernte Beschreibung mit setRemoteDescription() setzen und dann eine Antwort erstellen, die an den anbietenden Teilnehmer zurückgesendet wird.

Sie können auch einen Ereignis-Handler für das negotiationneeded Ereignis festlegen, indem Sie die Funktion des Ereignis-Handlers der Eigenschaft onnegotiationneeded zuweisen:

js
pc.onnegotiationneeded = (ev) => {
  pc.createOffer()
    .then((offer) => pc.setLocalDescription(offer))
    .then(() =>
      sendSignalingMessage({
        type: "video-offer",
        sdp: pc.localDescription,
      }),
    )
    .catch((err) => {
      // handle error
    });
};

Für ein detaillierteres Beispiel siehe Verhandlungsbeginn.

Spezifikationen

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

Browser-Kompatibilität

Siehe auch