RTCPeerConnection: setLocalDescription() Methode
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.
Die setLocalDescription()
Methode des RTCPeerConnection
-Interfaces ändert die lokale Beschreibung, die mit der Verbindung verknüpft ist. Diese Beschreibung spezifiziert die Eigenschaften des lokalen Endes der Verbindung, einschließlich des Medienformats. Die Methode nimmt einen einzigen Parameter - die Sitzungsbeschreibung - und gibt ein Promise
zurück, das erfüllt wird, sobald die Beschreibung asynchron geändert wurde.
Wenn setLocalDescription()
aufgerufen wird, während bereits eine Verbindung besteht, bedeutet dies, dass gerade eine Neuverhandlung stattfindet (möglicherweise um sich an sich ändernde Netzwerkbedingungen anzupassen). Da die Beschreibungen ausgetauscht werden, bis sich die beiden Peers auf eine Konfiguration einigen, wird die Beschreibung, die durch den Aufruf von setLocalDescription()
übermittelt wird, nicht sofort wirksam. Stattdessen bleibt die aktuelle Konfigurationsverbindung bestehen, bis die Verhandlung abgeschlossen ist. Erst dann wird die vereinbarte Konfiguration wirksam.
Syntax
setLocalDescription()
setLocalDescription(sessionDescription)
setLocalDescription(sessionDescription, successCallback, errorCallback) // deprecated
Parameter
sessionDescription
Optional-
Ein Objekt, das die Konfiguration spezifiziert, die auf das lokale Ende der Verbindung angewendet werden soll. Es sollte die folgenden Eigenschaften enthalten:
type
Optional-
Ein String, der den Typ der Sitzungsbeschreibung angibt. Wenn Sie nicht explizit eine Sitzungsbeschreibung angeben, versucht die WebRTC-Laufzeitumgebung, sie korrekt zu behandeln. Wenn der Signalisierungszustand einer der folgenden ist:
stable
,have-local-offer
oderhave-remote-pranswer
, erstellt die WebRTC-Laufzeitumgebung automatisch ein neues Angebot und legt es als neue lokale Beschreibung fest. Andernfalls erstelltsetLocalDescription()
eine Antwort, die zur neuen lokalen Beschreibung wird. sdp
Optional-
Ein String, der die SDP beschreibt, die die Sitzung beschreibt. Wenn sdp nicht bereitgestellt wird, wird es auf einen leeren String zurückgesetzt. Wenn
type
"rollback"
ist, musssdp
null oder ein leerer String sein.
Wenn die Beschreibung weggelassen wird, versucht die WebRTC-Laufzeitumgebung, automatisch das Richtige zu tun.
Sie können auch eine tatsächliche
RTCSessionDescription
-Instanz übergeben, aber es gibt keinen Unterschied. Aus diesem Grund wird derRTCSessionDescription
-Konstruktor als veraltet betrachtet.
In älterem Code und Dokumentationen können Sie eine rückrufbasierte Version dieser Funktion verwenden. Diese ist veraltet und ihre Verwendung wird stark abgeraten, da sie in Zukunft entfernt wird. Sie sollten vorhandenen Code aktualisieren, um die auf Promise
basierende Version von setLocalDescription()
zu verwenden. Die Parameter der älteren Form von setLocalDescription()
sind unten beschrieben, um die Aktualisierung vorhandenen Codes zu erleichtern.
successCallback
Veraltet-
Eine JavaScript-
Function
, die keine Eingabeparameter akzeptiert und aufgerufen wird, sobald die Beschreibung erfolgreich festgelegt wurde. Zu diesem Zeitpunkt kann das Angebot über den Signalisierungsserver an einen entfernten Peer gesendet werden. errorCallback
Veraltet-
Eine Funktion mit der Signatur
RTCPeerConnectionErrorCallback
, die aufgerufen wird, wenn die Beschreibung nicht festgelegt werden kann. Es wird ein einzelnesDOMException
-Objekt übergeben, das erklärt, warum die Anfrage fehlgeschlagen ist.
Diese veraltete Form der Methode kehrt sofort zurück, ohne auf das tatsächliche Setzen zu warten: Im Erfolgsfall wird der successCallback
aufgerufen; im Fehlerfall wird der errorCallback
aufgerufen.
Rückgabewert
Ein Promise
, das erfüllt wird, sobald der Wert von RTCPeerConnection.localDescription
erfolgreich geändert wurde oder abgelehnt wird, wenn die Änderung nicht angewendet werden kann (zum Beispiel, wenn die angegebene Beschreibung inkompatibel mit einem oder beiden Peers in der Verbindung ist). Der Erfüllungshandler des Versprechens erhält keine Eingabeparameter.
Hinweis: Der Prozess des Änderns von Beschreibungen umfasst tatsächlich Zwischenschritte, die von der WebRTC-Schicht verwaltet werden, um sicherzustellen, dass eine aktive Verbindung geändert werden kann, ohne die Verbindung zu verlieren, wenn die Änderung nicht erfolgreich ist. Siehe Ausstehende und aktuelle Beschreibungen auf der WebRTC Connectivity-Seite für weitere Details zu diesem Prozess.
Veraltete Ausnahmen
Bei Verwendung der veralteten rückrufbasierten Version von setLocalDescription()
können die folgenden Ausnahmen auftreten:
InvalidStateError
DOMException
Veraltet-
Wird ausgelöst, wenn sich der
signalingState
der Verbindung im Zustand"closed"
befindet, was darauf hinweist, dass die Verbindung derzeit nicht offen ist, sodass keine Verhandlung stattfinden kann. InvalidSessionDescriptionError
DOMException
Veraltet-
Wird ausgelöst, wenn der Parameter
sessionDescription
ungültig ist.
Beispiele
Implizite Beschreibungen
Ein Vorteil der parameterlosen Form von setLocalDescription()
besteht darin, dass Sie Ihren Verhandlungscode erheblich vereinfachen können. So sollte Ihr negotiationneeded
-Ereignishandler im Wesentlichen aussehen. Fügen Sie einfach den Code für den Signalisierungsserver hinzu, der hier durch den Aufruf von signalRemotePeer()
dargestellt wird.
pc.addEventListener("negotiationneeded", async (event) => {
await pc.setLocalDescription();
signalRemotePeer({ description: pc.localDescription });
});
Abgesehen von der Fehlerbehandlung war es das im Wesentlichen!
Eigene Angebote oder Antworten bereitstellen
Das folgende Beispiel zeigt die Implementierung eines Handlers für das negotiationneeded
-Ereignis, das explizit ein Angebot erstellt, anstatt setLocalDescription()
dies übernehmen zu lassen.
async function handleNegotiationNeededEvent() {
try {
const offer = await pc.createOffer();
pc.setLocalDescription(offer);
signalRemotePeer({ description: pc.localDescription });
} catch (err) {
window.reportError(err);
}
}
Dies beginnt mit der Erstellung eines Angebots durch den Aufruf von createOffer()
; wenn das erfolgreich ist, rufen wir setLocalDescription()
auf. Wir können dann das neu erstellte Angebot über den Signalisierungsserver an den anderen Peer senden, was hier durch den Aufruf einer Funktion namens signalRemotePeer()
erfolgt.
Spezifikationen
Specification |
---|
WebRTC: Real-Time Communication in Browsers # dom-peerconnection-setlocaldescription |