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 geschieht sowohl während der anfänglichen Einrichtung der Verbindung als auch zu jeder Zeit, 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, mit dem Austausch von ICE-Kandidaten über den Signalisierungsserver zu beginnen. Siehe Signalisierungs-Transaktionsablauf für eine Beschreibung des Signalisierungsprozesses, der mit einem negotiationneeded-Ereignis beginnt.

Dieses Ereignis kann nicht abgebrochen werden und führt nicht zur Ausbreitung.

Syntax

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

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

onnegotiationneeded = (event) => { }

Ereignistyp

Ein generisches Event.

Beispiele

In diesem Beispiel verwenden wir addEventListener(), um einen Ereignishandler für negotiationneeded zu erstellen. Seine Aufgabe ist es, ein SDP-Angebot zu erstellen und es über den Signalisierungskanal an den entfernten Partner 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
      });
  },
  false,
);

Nach der Erstellung des Angebots wird das lokale Ende durch den Aufruf von RTCPeerConnection.setLocalDescription() konfiguriert; anschließend wird eine Signalisierungsnachricht erstellt und über den Signalisierungsserver an den entfernten Partner gesendet, um dieses Angebot mit dem anderen Partner zu teilen. Der andere Partner sollte diese Nachricht erkennen und daraufhin seine eigene RTCPeerConnection erstellen, die Remote-Beschreibung mit setRemoteDescription() setzen und dann eine Antwort zurück an den anbietenden Partner senden.

Sie können auch einen Ereignishandler für das negotiationneeded-Ereignis setzen, indem Sie die Ereignishandler-Funktion der onnegotiationneeded-Eigenschaft 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 Verhandlung beginnen.

Spezifikationen

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

Browser-Kompatibilität

Siehe auch