2013-11-16 2 views
2

Я установил RTCPeerConnection, но он работает только локально (между 2 ноутбуками на моем беспроводном соединении). Для других соединений я вижу черный поток. Я подозреваю, что это из-за кандидатов ICE не правильно собранными, они содержат только локальные IP-адреса:Заявки на участие в конкурсе WebRTC

RTCIceCandidate {sdpMLineIndex: 0, sdpMid: "", candidate: "a=candidate:2999745851 1 udp 2113937151 192.168.56.1 51411 typ host generation 0 
↵"} app.js:14530 
RTCIceCandidate {sdpMLineIndex: 0, sdpMid: "", candidate: "a=candidate:3366620645 1 udp 2113937151 192.168.0.17 44628 typ host generation 0 
↵"} app.js:14530 
RTCIceCandidate {sdpMLineIndex: 1, sdpMid: "", candidate: "a=candidate:2999745851 1 udp 2113937151 192.168.56.1 51411 typ host generation 0 
↵"} app.js:14530 
RTCIceCandidate {sdpMLineIndex: 1, sdpMid: "", candidate: "a=candidate:3366620645 1 udp 2113937151 192.168.0.17 44628 typ host generation 0 
↵"} 
RTCIceCandidate {sdpMLineIndex: 0, sdpMid: "", candidate: "a=candidate:4233069003 1 tcp 1509957375 192.168.56.1 0 typ host generation 0 
↵"} app.js:14507 
RTCIceCandidate {sdpMLineIndex: 0, sdpMid: "", candidate: "a=candidate:2250862869 1 tcp 1509957375 192.168.0.17 0 typ host generation 0 
↵"} app.js:14507 
RTCIceCandidate {sdpMLineIndex: 1, sdpMid: "", candidate: "a=candidate:4233069003 1 tcp 1509957375 192.168.56.1 0 typ host generation 0 
↵"} app.js:14507 
RTCIceCandidate {sdpMLineIndex: 1, sdpMid: "", candidate: "a=candidate:2250862869 1 tcp 1509957375 192.168.0.17 0 typ host generation 0 
↵"} 

Здесь представлен iceServers конфигурации:

this.configuration = { 
    'iceServers': [ 
     { 
     'url': 'stun:stun.l.google.com:19302' 
     } 
    ] 
    }; 

Однако на другой машине развертывания эта конфигурация на самом деле работает для удаленных сверстников, и я получаю кандидатов с публичным IP-адресом.

РЕДАКТИРОВАТЬ

на самом деле работает тесты с еще одним пэра выводит следующее:

handling offer from radu1 
caching candidate from radu1 (x 15 - saving them locally because the remote description is not received/set yet and it will throw errors like: Illegal string...) 
Set remote description from radu1 
Object {sdp: "v=0 
↵o=- 7594479116751954142 2 IN IP4 127.0.0.1 
↵s…06 label:iuzaFLXbo6HCbnWGdobaYN2gSPQmAFKZQaP1v0 
↵", type: "offer"} 
sdp: "v=0 
↵o=- 7594479116751954142 2 IN IP4 127.0.0.1 
↵s=- 
↵t=0 0 
↵a=group:BUNDLE audio video 
↵a=msid-semantic: WMS iuzaFLXbo6HCbnWGdobaYN2gSPQmAFKZQaP1 
↵m=audio 1 RTP/SAVPF 111 103 104 0 8 106 105 13 126 
↵c=IN IP4 0.0.0.0 
↵a=rtcp:1 IN IP4 0.0.0.0 
↵a=ice-ufrag:nFjsr4JB2b6hTc4K 
↵a=ice-pwd:z3BUY0Mlga5JywRNw9lLGqeF 
↵a=ice-options:google-ice 
↵a=fingerprint:sha-256 64:76:B6:98:ED:FA:6D:D5:E2:40:B6:FE:98:00:29:F7:28:93:C5:6A:CF:2F:59:D2:B7:82:14:BF:38:FD:3B:83 
↵a=setup:actpass 
↵a=mid:audio 
↵a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level 
↵a=sendrecv 
↵a=rtcp-mux 
↵a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:xGSOTjjxbfNVNAxoRxY6UFHTJY86bFnGqK1p23Tm 
↵a=rtpmap:111 opus/48000/2 
↵a=fmtp:111 minptime=10 
↵a=rtpmap:103 ISAC/16000 
↵a=rtpmap:104 ISAC/32000 
↵a=rtpmap:0 PCMU/8000 
↵a=rtpmap:8 PCMA/8000 
↵a=rtpmap:106 CN/32000 
↵a=rtpmap:105 CN/16000 
↵a=rtpmap:13 CN/8000 
↵a=rtpmap:126 telephone-event/8000 
↵a=maxptime:60 
↵a=ssrc:4260698723 cname:8jJISPnQEaP+YvYy 
↵a=ssrc:4260698723 msid:iuzaFLXbo6HCbnWGdobaYN2gSPQmAFKZQaP1 iuzaFLXbo6HCbnWGdobaYN2gSPQmAFKZQaP1a0 
↵a=ssrc:4260698723 mslabel:iuzaFLXbo6HCbnWGdobaYN2gSPQmAFKZQaP1 
↵a=ssrc:4260698723 label:iuzaFLXbo6HCbnWGdobaYN2gSPQmAFKZQaP1a0 
↵m=video 1 RTP/SAVPF 100 116 117 
↵c=IN IP4 0.0.0.0 
↵a=rtcp:1 IN IP4 0.0.0.0 
↵a=ice-ufrag:nFjsr4JB2b6hTc4K 
↵a=ice-pwd:z3BUY0Mlga5JywRNw9lLGqeF 
↵a=ice-options:google-ice 
↵a=fingerprint:sha-256 64:76:B6:98:ED:FA:6D:D5:E2:40:B6:FE:98:00:29:F7:28:93:C5:6A:CF:2F:59:D2:B7:82:14:BF:38:FD:3B:83 
↵a=setup:actpass 
↵a=mid:video 
↵a=extmap:2 urn:ietf:params:rtp-hdrext:toffset 
↵a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time 
↵a=sendrecv 
↵a=rtcp-mux 
↵a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:xGSOTjjxbfNVNAxoRxY6UFHTJY86bFnGqK1p23Tm 
↵a=rtpmap:100 VP8/90000 
↵a=rtcp-fb:100 ccm fir 
↵a=rtcp-fb:100 nack 
↵a=rtcp-fb:100 goog-remb 
↵a=rtpmap:116 red/90000 
↵a=rtpmap:117 ulpfec/90000 
↵a=ssrc:1805691906 cname:8jJISPnQEaP+YvYy 
↵a=ssrc:1805691906 msid:iuzaFLXbo6HCbnWGdobaYN2gSPQmAFKZQaP1 iuzaFLXbo6HCbnWGdobaYN2gSPQmAFKZQaP1v0 
↵a=ssrc:1805691906 mslabel:iuzaFLXbo6HCbnWGdobaYN2gSPQmAFKZQaP1 
↵a=ssrc:1805691906 label:iuzaFLXbo6HCbnWGdobaYN2gSPQmAFKZQaP1v0 
↵" 
type: "offer" 

RTC: adding stream from radu1 
Sending answer to radu1 
Set candidate from cache for radu1 (x 15) 
RTCIceCandidate {sdpMLineIndex: 0, sdpMid: "", candidate: "a=candidate:826241329 1 udp 2113937151 169.254.159.173 52996 typ host generation 0 
↵"} 
... 

Приведенные выше результаты в качестве peerconnection.iceConnectionState = '' проверки. Является ли порядок событий подходящим для вызываемого лица?

  1. Получить предложение
  2. Прием кандидатов льда от другого партнера, но не спасают их, потому что setRemoteDescription обратного вызов не был уволен
  3. Удаленного описания успешно установлен.
  4. Удаленный поток получил
  5. Отправить ответ
  6. Добавить кэшированные кандидат

Обратите внимание, что это фактическая установка работает от 2-х ноутбуков в моей локальной сети. Я могу просматривать удаленные потоки. Он просто не работает для разных сетей, черный экран и iceConnectionState = 'checking' Что это значит? Как я могу решить эту проблему? Нужно ли настраивать какие-либо другие серверы STUN/TURN?

+0

Вы уверены, что список оглушающих серверов установлен правильно (он должен быть передан в качестве аргумента в конструктор PeerConnection. Этот фрагмент кода не показывает это)? Можете ли вы подтвердить, что локальный сверстник действительно подключается к оглушающему серверу (например, попробуйте обнюхивать сеть с помощью Wireshark)? –

+0

Очень точно: 192 \t 17.839377000 \t 192.168.56.1 \t 173.194.70.127 \t STUN Запрос на связывание. – Samson

+0

Смешно, но сегодня вечером он начал работать внезапно. Рефлексивные кандидаты ICE начали появляться с сервера Google Stun, а поток удаленных потоков. Это означает, что Stun-сервер не является надежным в 100% случаев? – Samson

ответ

2

Решается путем правильной настройки сервера STUN/TURN. Кажется, что некоторым сверстникам нужен сервер TURN для ретрансляции трафика, потому что STUN терпит неудачу.

+0

Как настроить сервер STUN/TURN для вашей системы? –

+0

Никогда не устанавливайте его самостоятельно, так как я использовал сторонние сервисы, такие как http://www.anyfirewall.com/ – Samson

Смежные вопросы