Правильные процедуры для повторного подключения WebRTC Peer Connection? - PullRequest
1 голос
/ 07 апреля 2019

Я разрабатываю приложение для группового голосового чата с использованием WebRTC и React.

Мне удалось установить соединение, и голосовой чат прекрасно работает при первом подключении.

Способ работывыглядит так:

  1. Пользователь A присоединяется к чату.
  2. Пользователь B присоединяется к чату.
  3. Пользователь A включает звук с помощью кнопки-переключателя - это уведомляетсервер, на котором они открыты для любых подключений WebRTC.
  4. Пользователь B включает звук с помощью кнопки-переключателя - теперь он через сервер устанавливает процесс подключения WebRTC для всех, кто включил аудио (в данном случае это пользователь A).

До сих пор это работало нормально.Моя проблема заключается в установлении соединения во второй раз по сценарию:

  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 голосов
/ 08 апреля 2019

Переподключение было невозможно. Для тех, кто ищет решение для подобной проблемы:

Вместо переподключения просто отключите аудиотреки. Локально это означает, что никто не получает аудио от вас. Отключение удаленных аудиотреков, очевидно, отключает звук для вас. Приглушение обоих означает, что нет звука, входящего или выходящего, который может имитировать отключение с помощью тумблера, пока человек остается в той же комнате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...