Methode RTCPeerConnection: setConfiguration()
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit April 2022 browserübergreifend verfügbar.
Die Methode setConfiguration() des Interfaces RTCPeerConnection legt die aktuelle Konfiguration der Verbindung anhand der im angegebenen Objekt enthaltenen Werte fest.
Damit können Sie die von der Verbindung verwendeten ICE-Server und die zu verwendenden Transportrichtlinien ändern.
Der häufigste Anwendungsfall für diese Methode (und selbst dann wahrscheinlich kein sehr häufiger Anwendungsfall) besteht darin, den Satz der zu verwendenden ICE-Server zu ersetzen. Zwei mögliche Szenarien, in denen dies geschehen könnte:
- Die Instanz von
RTCPeerConnectionwurde erstellt, ohne ICE-Server anzugeben. Wenn beispielsweise der KonstruktorRTCPeerConnection()ohne Parameter aufgerufen wurde, müssten Sie anschließendsetConfiguration()aufrufen, um ICE-Server hinzuzufügen, bevor die ICE-Aushandlung beginnen kann. - Eine erneute Aushandlung der Verbindung ist erforderlich, und aus irgendeinem Grund muss ein anderer Satz von ICE-Servern verwendet werden.
Möglicherweise hat der Benutzer beispielsweise eine neue Region betreten, sodass die Verwendung neuer regionaler ICE-Server erforderlich ist.
In dieser Situation könnte
setConfiguration()aufgerufen werden, um zu neuen regionalen ICE-Servern zu wechseln, und anschließend ein ICE-Neustart eingeleitet werden.
Hinweis: Sie können die Identitätsinformationen für eine Verbindung nicht ändern, nachdem sie bereits festgelegt wurden.
Syntax
setConfiguration(configuration)
Parameter
configuration-
Ein Objekt, das die festzulegenden Optionen bereitstellt. Die Änderungen sind nicht additiv; stattdessen ersetzen die neuen Werte die vorhandenen Werte vollständig. Weitere Informationen zu den zulässigen Optionen finden Sie unter
RTCPeerConnection().
Rückgabewert
Keiner (undefined).
Ausnahmen
InvalidAccessErrorDOMException-
Wird ausgelöst, wenn eine oder mehrere der in
configuration.iceServersangegebenen URLs ein TURN-Server sind, aber keine vollständigen Anmeldeinformationen bereitgestellt werden (d.h. entwederusernameodercredentialfehlt odercredentialType"password"ist undcredentialkein String ist). Dadurch wird eine erfolgreiche Anmeldung beim Server verhindert. InvalidModificationErrorDOMException-
Wird ausgelöst, wenn
configurationgeänderte Identitätsinformationen enthält, die Verbindung jedoch bereits Identitätsinformationen angegeben hat. Dies geschieht, wennconfiguration.alwaysNegotiateDataChannels,configuration.peerIdentityoderconfiguration.certificatesfestgelegt sind und sich ihre Werte von der aktuellen Konfiguration unterscheiden. Dies kann auch ausgelöst werden, wenn Änderungen anconfiguration.bundlePolicyoderconfiguration.rtcpMuxPolicyvorgenommen werden oder anconfiguration.iceCandidatePoolSize, wennRTCPeerConnection.setLocalDescription()bereits aufgerufen wurde. InvalidStateErrorDOMException-
Wird ausgelöst, wenn die
RTCPeerConnectiongeschlossen ist. SyntaxErrorDOMException-
Wird ausgelöst, wenn
configuration.iceServerskeine URLs enthält oder einer der Werte in der Liste ungültig ist. NotSupportedErrorDOMException-
Wird ausgelöst, wenn
configuration.iceServerseine URL mit einem nicht unterstützten Schema enthält.
Beispiel
In diesem Beispiel wurde bereits festgestellt, dass ein ICE-Neustart erforderlich ist und die Aushandlung unter Verwendung eines anderen ICE-Servers erfolgen muss.
const restartConfig = {
iceServers: [
{
urls: "turn:asia.turn-server.net",
username: "[email protected]",
credential: "topsecretpassword",
},
],
};
myPeerConnection.setConfiguration(restartConfig);
myPeerConnection.restartIce();
myPeerConnection
.createOffer() // restartIce() causes iceRestart to be set true
.then((offer) => myPeerConnection.setLocalDescription(offer))
.then(() => {
// send the offer to the other peer using the signaling server
})
.catch(window.reportError);
Zunächst wird ein neues Objekt, restartConfig, erstellt, das den neuen ICE-Server und dessen Anmeldeinformationen angibt.
Dieses wird dann an setConfiguration() übergeben.
Die ICE-Aushandlung wird durch den Aufruf von restartIce() neu gestartet, wodurch das nächste erstellte Angebot die Informationen des neuen ICE-Servers enthält.
Danach behandeln wir den Prozess wie üblich, indem wir die lokale Beschreibung auf das zurückgegebene Angebot setzen und dieses Angebot anschließend an den anderen Peer senden.
Spezifikationen
| Spezifikation |
|---|
| WebRTC: Real-Time Communication in Browsers> # dom-rtcpeerconnection-setconfiguration> |