如何在一台 TURN 服务器出现故障时恢复 WebRTC 调用

How to resume WebRTC call when one TURN server goes down

我的 WebRTC 配置中有多个轮流服务器:

  iceServers: [
    {
      urls: 'turn:turn.example.com',
      username: 'username',
      credential: 'pass'
    },
    {
      urls: 'turn:turn2.example.com',
      username: 'username',
      credential: 'pass'
    }
  ]

当我启动 WebRTC 调用然后关闭时 turn.example.com 通信冻结。 WebRTC 似乎不会自动接听新的 ICE 候选人并恢复通话。

有没有办法 resume/reestablish 使用第二个 ICE 服务器进行通信?

您应该能够使用 ICE 重新启动来收集新的 TURN 候选人。要重新启动 ICE,您需要执行另一个 offer/answer 交换以更改 ICE 用户名片段和密码。要触发它,您只需调用:

pc.createOffer({iceRestart: true})