2015-04-01 3 views

ответ

1
  • Под капотом webrtc собирает местный кандидат в зависимости от доступных сетевых подключений и список ледовых серверов, передаваемых ему через JS API.
  • После того, как кандидат на лед готов, он предоставляется уровню JS через API onicecandidate.
  • Если вы используете проточную ICE, вы можете отправить кандидата прямо через путь сигнализации к удаленному одноранговому узлу. В противном случае дождитесь последнего (нулевого) кандидата, закажите их по приоритету, добавьте их в предложение/ответ sdp и отправьте предложение/ответ по пути сигнализации. Это обычно делается автоматически для вас браузером.
  • Вы могли бы посмотреть на спецификации рукопожатия здесь: https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-09
1

Устройство сверстников не будет иметь возможность потокового медиа к другому партнеру, используя свой собственный IP-адрес. Поэтому нам нужен сервер NAT-traversing (ICE-сервер), который отображает частный IP-адрес в общедоступный.

Таким образом, клиентское приложение должно запросить ICE-сервер для своих собственных кандидатов ICE, «который является общедоступным идентификатором».

Сначала вызывающий абонент попросит публичный IP-адрес (кандидат ICE) и отправит его другому партнеру через сервер сигнализации.

Когда другой парень получил кандидатов, он также попросил сервер ICE о своем кандидате и отправить его обратно вызывающему абоненту.

, когда оба пэра имеют друг друга со льдом (публичные IP-адреса), чтобы они могли делать потоки P2P.

enter image description here

ICE ПРОБЛЕМ

20% SERVER ICE - протокол STUN будет сбой в обеспечении общественного IP. Потому что либо оба устройства, расположенные за симметричным NAT! или P2P-трафика, заблокированного брандмауэром!

В этом случае потоковая передача P2P будет надежной! Для решения этого мы должны использовать внешнее реле медиа-сервер - сервер TURN, который представляет собой протокол, поддерживаемый ICE сервер

enter image description here

0

Вот пример:

connection.onicecandidate = function(newRTCPeerConnectionIceEvent) { 

    // a new candidate has been created 
    var newRTCIceCandidate = newRTCPeerConnectionIceEvent.candidate; 
    // could send this to the remote peer 
}; 

кандидат представляет собой пункт назначения (отправка или получение) для медиапотока и в SDP будет выглядеть примерно так:

a=candidate:1 1 UDP 2130706431 10.0.1.1 8998 typ host 
Смежные вопросы