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 event

Baseline
Weitgehend verfügbar

Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2017 browserübergreifend verfügbar.

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 immer dann, wenn eine Änderung der Kommunikationsumgebung eine Neukonfiguration der Verbindung erfordert.

Das negotiationneeded-Ereignis wird erstmals an die RTCPeerConnection gesendet, wenn Medien erstmals zur Verbindung hinzugefügt werden. Dadurch wird der Prozess der ICE-Aushandlung gestartet, indem Ihr Code angewiesen wird, mit dem Austausch von ICE-Kandidaten über den Signalisierungsserver zu beginnen. Eine Beschreibung des Signalisierungsprozesses, der mit einem negotiationneeded-Ereignis beginnt, finden Sie unter Ablauf der Signalisierungstransaktion.

Dieses Ereignis ist nicht abbrechbar und wird nicht weitergegeben.

Syntax

Verwenden Sie den Ereignisnamen in Methoden wie addEventListener() oder legen Sie eine Event-Handler-Eigenschaft fest.

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

onnegotiationneeded = (event) => { }

Ereignistyp

Ein generisches Event.

Beispiele

In diesem Beispiel verwenden wir addEventListener(), um einen Event-Handler für negotiationneeded zu erstellen. Seine Aufgabe besteht darin, ein SDP-Angebot zu erstellen und es über den Signalisierungskanal an den Remote-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
    });
});

Nach dem Erstellen des Angebots wird das lokale Ende durch Aufrufen von RTCPeerConnection.setLocalDescription() konfiguriert; anschließend wird eine Signalisierungsnachricht erstellt und über den Signalisierungsserver an den Remote-Peer gesendet, um dieses Angebot mit dem anderen Peer zu teilen. Der andere Peer sollte diese Nachricht erkennen und anschließend eine eigene RTCPeerConnection erstellen, die Remote-Beschreibung mit setRemoteDescription() festlegen und dann eine Antwort erstellen, die an den Peer gesendet wird, der das Angebot gemacht hat.

Sie können auch einen Event-Handler für das negotiationneeded-Ereignis festlegen, indem Sie die Event-Handler-Funktion 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
    });
};

Ein ausführlicheres Beispiel finden Sie unter Aushandlung starten.

Spezifikationen

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

Browser-Kompatibilität

Siehe auch