RTCPeerConnection: restartIce() 方法

restartIce() 方法是 RTCPeerConnection 接口的方法,允许 Web 应用程序请求在连接的两端重新执行 ICE 候选者收集。这简化了流程,允许调用方或接收方使用相同的方法触发 ICE 重启。

restartIce() 返回后,下次调用 createOffer() 返回的提议会自动配置为在本地对等方(一旦本地对等方已设置)和远程对等方(一旦提议通过您的信令机制发送,并且远程对等方也设置了其描述)触发 ICE 重启。

restartIce() 会在 RTCPeerConnection 上触发 negotiationneeded 事件,通知应用程序它应该使用其信令通道执行协商。

如果协商无法完成(由于回滚或因为正在协商传入的提议),RTCPeerConnection 会记住您请求了 ICE 重启。下次连接的 signalingState 变为 stable 时,连接会触发 negotiationneeded 事件。此过程会一直持续,直到成功完成 ICE 重启。

语法

js
restartIce()

参数

无。

返回值

无 (undefined).

使用说明

调用 restartIce() 后,下次使用 createOffer() 创建的提议将在发送到远程对等方(通过您的信令机制)后启动 ICE 重启。重启 ICE 实质上会重置 ICE,使其使用新的凭据创建所有新的候选者。在此过程中,现有的媒体传输会继续进行,不受干扰。

有关 ICE 重启工作原理的详细信息,请参阅 ICE 重启RFC 5245,第 9.1.1.1 节:ICE 规范

示例

此示例创建了一个 iceconnectionstatechange 事件的处理程序,该处理程序处理到 failed 状态的转换,方法是重启 ICE 以尝试再次连接。

js
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 的浏览器中加载。

另请参阅