webRT C - видео вызывает прерывание звонка через интернет - PullRequest
1 голос
/ 06 августа 2020

ОБНОВЛЕНИЕ 1: Я попытался изменить ограничение видео следующим образом

var mediaConstraints = {
  audio: true,            // We want an audio track
  video: {
    width: { min: 160, ideal: 320, max: 640 },
    height: { min: 120, ideal: 240, max: 480 },
  }
};

Это немного улучшило вызов. Видео все еще зависает и иногда вызывает прерывание вызова. Я думаю, это означает, что проблема заключается в медленной сети, а не в NAT.

Я все еще ищу ответы, чтобы улучшить это соединение вызова на низких скоростях.

ОРИГИНАЛЬНОЕ ПОЧТУ:

Я знаю, что есть несколько похожих вопросов по SO, но то, что я пытаюсь задать, не было задано, что касается моего поиска.

webRT C видеозвонок работает нормально внутри моя локальная сеть. Но когда я пытаюсь позвонить своему другу по инте rnet, это отстой. Я и мой друг пользуемся одним интернет-провайдером, и мы живем в одной географической c области в пределах нескольких миль от них. Поэтому я предполагаю, что эта проблема не связана с некоторыми NAT или брандмауэрами, но, возможно, я ошибаюсь. Первоначально наш вызов подключает звук, а видео проходит всего несколько битов, а затем зависает или просто зависает, прежде чем вызов прерывается. Если отключить видео, звонок длится дольше и обычно не прерывается. Может ли это быть проблемой медленной сети, потому что мы оба находимся в регионе, где скорость inte rnet составляет около 150 Кбит / с? Но как тогда работают видеозвонки через WhatsApp? Но если проблема не из-за скорости, а из-за NAT et c, для которого мне понадобится сервер TURN, я думаю, что 100% моих звонков будут go через TURN, и это будет очень дорого для меня.

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

Если это поможет, моя конфигурация ограничений:

var mediaConstraints = {
  audio: true,            // We want an audio track
  video: {
    width: { min: 240, ideal: 720, max: 1080 },
    height: { min: 240, ideal: 720, max: 1080 },
  }
};

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 августа 2020

Я отправляю здесь ответ на случай, если кто-нибудь столкнется с этим.

Причина в том, что я закрывал соединение всякий раз, когда состояние ICE менялось на disconnected. Иногда из-за медленной сети или какой-либо другой проблемы ICE может временно изменить состояние на disconnect. Обычно он восстанавливается в течение одной или двух секунд самостоятельно. Чтобы правильно обработать это состояние, нужно определить, когда disconnected является постоянным, а когда временным. В ответе на вопрос здесь я считаю байты, полученные за две секунды. Если количество байтов увеличилось, я считаю disconnect в противном случае постоянным, а затем закрываю соединение.

0 голосов
/ 07 августа 2020

Единственное, что вам нужно сделать, это использовать Simulcast, который изначально является частью webrt c. Это заставит отправителя получать потоки разного качества. Затем потребляющая часть автоматически выберет лучший поток на основе сетевого подключения.

пример: https://www.w3.org/TR/webrtc/#simulcast -пример

...