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