RTCPeerConnection: negotiationneeded Ereignis

Ein negotiationneeded Ereignis wird an die RTCPeerConnection gesendet, wenn eine Aushandlung der Verbindung über den Signalisierungskanal erforderlich ist. Dies geschieht sowohl während der anfänglichen Einrichtung der Verbindung als auch jedes Mal, wenn eine Änderung der Kommunikationsumgebung eine Neukonfiguration der Verbindung erfordert.

Das negotiationneeded Ereignis wird zuerst an die RTCPeerConnection verteilt, wenn Medien erstmals zur Verbindung hinzugefügt werden. Dies startet den Prozess der ICE Verhandlung, indem Ihrem Code mitgeteilt wird, dass er beginnen soll, ICE-Kandidaten über den Signalisierungsserver auszutauschen. Siehe Signalisierungsablauf für eine Beschreibung des Signalisierungsprozesses, der mit einem negotiationneeded Ereignis beginnt.

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("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 Peer 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 konfiguriert, indem RTCPeerConnection.setLocalDescription() aufgerufen wird; dann wird eine Signalisierungsnachricht erstellt und über den Signalisierungsserver an den entfernten Peer gesendet, um dieses Angebot mit dem anderen Peer zu teilen. Der andere Peer sollte diese Nachricht erkennen und durch die Erstellung seiner eigenen RTCPeerConnection folgen, die Remote-Beschreibung mit setRemoteDescription() einstellen und dann eine Antwort erstellen, die an den angebotenen Peer zurückgesendet wird.

Sie können auch einen Ereignishandler für das negotiationneeded Ereignis festlegen, indem Sie die Ereignishandlerfunktion 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 Aushandlung starten.

Spezifikationen

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

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch