重新连接WebRTC对等连接的正确过程?

时间:2019-04-07 11:00:06

标签: javascript reactjs webrtc

我正在使用WebRTC和React开发一个群组语音聊天应用程序。

我设法建立了连接,并且语音聊天在第一次连接时工作正常。

工作方式如下:

  1. 用户A加入聊天室。
  2. 用户B加入聊天室。
  3. 用户A通过切换按钮启用音频-这通知信令服务器它们已为任何WebRTC连接打开。
  4. 用户B通过切换按钮启用音频-现在,他们通过服务器建立与启用了音频的任何人(在这种情况下为用户A)的WebRTC连接过程。

到目前为止,它运行良好。我的问题是在以下情况下再次建立连接:

  1. 两个用户都启用了音频。语音通讯正常。
  2. 用户B切换音频-禁用音频。用户A保持活动状态。
  3. 用户B再次切换音频以重新连接到用户A。

我收到以下错误:

DOMException: Failed to execute 'setRemoteDescription' on 'RTCPeerConnection': Failed to set remote answer sdp: Called in wrong state: kStable

我知道此错误表示连接顺序存在问题。因此,我认为这可能与没有足够的断开过程有关。

因此,我实现了一项功能,当用户B禁用音频时,它会向会议室中的所有其他用户发送一条消息,以从每个用户本地状态的对等连接数组中删除该人的Peer_Connection对象。但这无济于事。

我对为什么会发生这种情况感到困惑,因为如果我退出聊天室并重新进入两个用户,则可以再次建立连接,因此我认为这与剩余的内容有关旧连接导致新连接出现问题。

(如果两个用户都启用了音频,则该功能也将起作用,一个音频将被禁用,离开房间,返回并全部启用,而第一个用户一直启用了音频。因此,发送报价的客户端会出现部分错误?)

一如既往,感谢您提供任何提示和帮助。

1 个答案:

答案 0 :(得分:0)

无法重新连接。对于寻求解决类似问题的人:

代替重新连接,只需禁用音轨。在本地,这意味着没有人从您那里获得任何音频供稿。禁用远程音轨显然会使自己静音。两者都静音意味着没有声音进出,这可以模拟拨动开关,而对方仍在同一房间。