Я разрабатываю приложение для группового голосового чата с использованием WebRTC и React.
Мне удалось установить соединение, и голосовой чат прекрасно работает при первом подключении.
Способ работывыглядит так:
- Пользователь A присоединяется к чату.
- Пользователь B присоединяется к чату.
- Пользователь A включает звук с помощью кнопки-переключателя - это уведомляетсервер, на котором они открыты для любых подключений WebRTC.
- Пользователь B включает звук с помощью кнопки-переключателя - теперь он через сервер устанавливает процесс подключения WebRTC для всех, кто включил аудио (в данном случае это пользователь A).
До сих пор это работало нормально.Моя проблема заключается в установлении соединения во второй раз по сценарию:
- У обоих пользователей включен звук.Голосовая связь работает нормально.
- Пользователь 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 из массива одноранговых соединений в локальном состоянии каждого пользователя.Но это безрезультатно.
Я не понимаю, почему это происходит, потому что, если я выйду из комнаты чата и снова зайду на обоих пользователей, соединение может быть восстановлено еще раз, поэтому яПредположим, что это как-то связано с наличием остатков старого соединения, вызывающего проблемы с новым.
(Это также работает, если у обоих пользователей включен звук, один отключает, покидает комнату, возвращается и включает всев то время как первый пользователь включил его все время. Так что ошибка с клиентом, который отправляет предложение?)
Как всегда, любые советы и помощь будут оценены, спасибо.