javascript - 重新连接 WebRTC 对等连接的正确程序?
问题描述
我正在使用 WebRTC 和 React 开发一个群组语音聊天应用程序。
我已成功建立连接,并且语音聊天在第一次连接时工作正常。
它的工作方式是这样的:
- 用户 A 加入聊天室。
- 用户 B 加入聊天室。
- 用户 A 通过切换按钮启用音频 - 这会通知信令服务器它们已为任何 WebRTC 连接打开。
- 用户 B 通过切换按钮启用音频 - 他们现在通过服务器与启用音频的任何人(在本例中为用户 A)建立 WebRTC 连接过程。
到目前为止,这工作得很好。我的问题是在以下情况下第二次建立连接:
- 两个用户都启用了音频。语音通讯工作正常。
- 用户 B 切换音频 - 禁用它。用户 A 保持活动状态。
- 用户 B 再次切换音频以重新连接到用户 A。
我收到以下错误:
DOMException: Failed to execute 'setRemoteDescription' on 'RTCPeerConnection': Failed to set remote answer sdp: Called in wrong state: kStable
我了解此错误意味着连接顺序存在问题。所以我认为这可能与没有足够的断开连接过程有关。
所以我实现了一个功能,当用户 B 禁用音频时,它会向房间中的所有其他用户发送一条消息,以从每个用户本地状态的对等连接数组中删除该人员 Peer_Connection 对象。但这无济于事。
我对为什么会发生这种情况感到困惑,因为如果我退出聊天室并重新进入两个用户,则可以再次重新建立连接,所以我认为这与旧的残余有关连接导致新的问题。
(如果两个用户都启用了音频,它也可以工作,一个禁用,离开房间,回来并启用所有,而第一个用户一直启用它。所以发送报价的客户部分错误?)
一如既往,任何提示和帮助将不胜感激,谢谢。
解决方案
无法重新连接。对于寻求解决类似问题的任何人:
而不是重新连接,简单地禁用音轨。在本地,这意味着没有人从您那里获得任何音频信息。禁用远程音轨显然会使您自己的音频静音。将两者都静音意味着没有音频进出,这可以模拟在人留在同一个房间时使用拨动开关断开连接。
推荐阅读
- python - 我们可以使用 Pandas 从嵌套字典中创建一个表吗?
- c# - Hot Chocolate (GraphQL) 拦截器/中间件在数据获取之前获取 IQueryable
- go - Go-sfml ` 已弃用
- jquery - jqGrid 插件 (Tony Tomov, Oleg Kiriljuk) - 兼容 jQuery, jQuery UI
- python - 验证用户输入python的最佳方法
- r - 仅使用 dplyr 对 3 列应用条件时如何填充是和否?
- r - 转换数据框中的命名向量
- html - 删除每个容器后的额外高度空间
- mingw-w64 - 对 std::thread::detach() 和其他的未定义引用
- java - 你能有一个包含单链表的 ArrayList 吗?