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.
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.
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:
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 |