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
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 die Verbindung über den Signalisierungskanal ausgehandelt werden muss. Dies geschieht sowohl beim erstmaligen Aufbau 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 der Verbindung zum ersten Mal Medien hinzugefügt werden. Dadurch beginnt die ICE-Aushandlung: Ihr Code wird angewiesen, ICE-Kandidaten über den Signalisierungsserver auszutauschen. Eine Beschreibung des Signalisierungsprozesses, der mit einem negotiationneeded-Ereignis beginnt, finden Sie unter Ablauf der Signalisierungstransaktion.

Dieses Ereignis kann nicht abgebrochen werden und wird nicht nach oben weitergegeben.

Syntax

Verwenden Sie den Ereignisnamen in addEventListener():

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

Alternativ können Sie die Funktion der Event-Handler-Eigenschaft der Schnittstelle zuweisen:

js
onnegotiationneeded = (event) => { }

Ereignistyp

Ein generisches Event.

Beispiele

In diesem Beispiel verwenden wir addEventListener(), um einen Event-Handler für negotiationneeded einzurichten. Er erstellt ein SDP-Angebot und sendet es über den Signalisierungskanal an den entfernten Peer.

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 die lokale Seite durch einen Aufruf von RTCPeerConnection.setLocalDescription() konfiguriert. Anschließend wird eine Signalisierungsnachricht erstellt und über den Signalisierungsserver an den entfernten Peer gesendet, um ihm das Angebot zu übermitteln. Der andere Peer sollte diese Nachricht erkennen, eine eigene RTCPeerConnection erstellen, die Remote Description mit setRemoteDescription() festlegen und anschließend eine Antwort erstellen, die er an den anbietenden Peer zurücksendet.

Sie können auch einen Event-Handler für das negotiationneeded-Ereignis festlegen, indem Sie die Event-Handler-Funktion der Eigenschaft onnegotiationneeded zuweisen. Beachten Sie jedoch, dass dadurch gegebenenfalls andere über onnegotiationneeded hinzugefügte Event-Listener ersetzt werden:

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