RTCPeerConnection: restartIce() 方法
restartIce()
方法是 RTCPeerConnection
接口的方法,允许 Web 应用程序请求在连接的两端重新执行 ICE 候选者收集。这简化了流程,允许调用方或接收方使用相同的方法触发 ICE 重启。
restartIce()
返回后,下次调用 createOffer()
返回的提议会自动配置为在本地对等方(一旦本地对等方已设置)和远程对等方(一旦提议通过您的信令机制发送,并且远程对等方也设置了其描述)触发 ICE 重启。
restartIce()
会在 RTCPeerConnection
上触发 negotiationneeded
事件,通知应用程序它应该使用其信令通道执行协商。
如果协商无法完成(由于回滚或因为正在协商传入的提议),RTCPeerConnection
会记住您请求了 ICE 重启。下次连接的 signalingState
变为 stable
时,连接会触发 negotiationneeded
事件。此过程会一直持续,直到成功完成 ICE 重启。
语法
restartIce()
参数
无。
返回值
无 (undefined
).
使用说明
调用 restartIce()
后,下次使用 createOffer()
创建的提议将在发送到远程对等方(通过您的信令机制)后启动 ICE 重启。重启 ICE 实质上会重置 ICE,使其使用新的凭据创建所有新的候选者。在此过程中,现有的媒体传输会继续进行,不受干扰。
有关 ICE 重启工作原理的详细信息,请参阅 ICE 重启 和 RFC 5245,第 9.1.1.1 节:ICE 规范。
示例
此示例创建了一个 iceconnectionstatechange
事件的处理程序,该处理程序处理到 failed
状态的转换,方法是重启 ICE 以尝试再次连接。
pc.addEventListener("iceconnectionstatechange", (event) => {
if (pc.iceConnectionState === "failed") {
/* possibly reconfigure the connection in some way here */
/* then request ICE restart */
pc.restartIce();
}
});
有了这段代码,ICE 协商期间的 failed
状态转换会导致 negotiationneeded
事件触发,作为响应,您的代码应该像往常一样重新协商。但是,由于您已经调用了 restartIce()
,因此您在 negotiationneeded
处理程序中执行的 createOffer()
调用将触发 ICE 重启,而不仅仅是常规重新协商。
规范
规范 |
---|
WebRTC:浏览器中的实时通信 # dom-rtcpeerconnection-restartice |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。