RTCPeerConnection: setConfiguration() 方法
RTCPeerConnection 接口的 setConfiguration() 方法根据指定对象中包含的值来设置连接的当前配置。这允许您更改连接使用的 ICE 服务器以及使用的传输策略。
此方法最常见的用例(即使如此,也可能不是一个非常常见的用例)是替换要使用的 ICE 服务器集。可能执行此操作的两个潜在场景是:
RTCPeerConnection在未指定任何 ICE 服务器的情况下被实例化。例如,如果未使用任何参数调用RTCPeerConnection()构造函数,则必须在 ICE 协商开始之前调用setConfiguration()来添加 ICE 服务器。- 需要重新协商连接,并且出于某种原因需要使用不同的 ICE 服务器集。例如,用户可能已移至新区域,因此需要使用新的区域 ICE 服务器。在这种情况下,可以调用
setConfiguration()来切换到新的区域 ICE 服务器,然后启动 ICE 重启。
注意: 一旦设置了连接的身份信息,就无法更改它。
语法
setConfiguration(configuration)
参数
configuration-
提供要设置的选项的对象。更改不是累加的;而是,新值会完全替换现有值。有关允许的选项的信息,请参阅
RTCPeerConnection()。
返回值
无(undefined)。
异常
InvalidAccessErrorDOMException-
如果在
configuration.iceServers中指定的 URL 中有一个或多个是 TURN 服务器,但未提供完整的登录信息(即,缺少username或credential,或者如果credentialType是"password"且credential不是字符串),则会抛出此错误。这会阻止成功登录服务器。 InvalidModificationErrorDOMException-
如果
configuration包含已更改的身份信息,但连接已指定身份信息,则会抛出此错误。如果设置了configuration.peerIdentity或configuration.certificates并且它们的值与当前配置不同,则会发生这种情况。如果更改了configuration.bundlePolicy或configuration.rtcpMuxPolicy,或者更改了configuration.iceCandidatePoolSize(并且RTCPeerConnection.setLocalDescription()已被调用),也可能抛出此错误。 InvalidStateErrorDOMException-
如果
RTCPeerConnection已关闭,则抛出此异常。 SyntaxErrorDOMException-
如果
configuration.iceServers不包含任何 URL,或者列表中的某个值无效,则会抛出此错误。 NotSupportedErrorDOMException-
如果
configuration.iceServers包含的 URL 的方案不受支持,则会抛出此错误。
示例
在此示例中,已确定需要 ICE 重启,并且需要使用不同的 ICE 服务器进行协商。
const restartConfig = {
iceServers: [
{
urls: "turn:asia.turn-server.net",
username: "allie@oopcode.com",
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);
首先,创建一个新对象 restartConfig,指定新的 ICE 服务器及其凭据。然后将其传递给 setConfiguration()。通过调用 restartIce() 来重启 ICE 协商,这会导致创建的下一个 offer 包含新的 ICE 服务器信息。从那里,我们按常规处理流程,将本地描述设置为返回的 offer,然后将该 offer 发送给另一方。
规范
| 规范 |
|---|
| WebRTC:浏览器中的实时通信 # dom-rtcpeerconnection-setconfiguration |
浏览器兼容性
加载中…