2016-11-14 13 views
0

У меня есть приложение, использующее PeerJS для потоковой передачи видео, и я использую узел на основе Peer Server, работающий на экземпляре сервера Ubuntu, поверх HTTPS (сертификаты SSL, установленные на сервере).iceConnectionState отключен - VP9 Coded is null - PeerServer

Это, как я создании экземпляра моего PeerServer:

var server = PeerServer({ 
port:55127, 
path:'/', 
debug:true, 
ssl:{ 
    key: fs.readFileSync('/etc/apache2/ssl/mykey.key'), 
    cert: fs.readFileSync('/etc/apache2/ssl/mycert.crt') 
    } 
}); 

Это, как я создаю связь пэра:

var peer = new Peer('peerHost',{host: 'myhost.com', port: 55127, path: '/'}) 

Относно портов, я позволил 55127 как в UFW и в маршрутизаторе.

По какой-то странной причине мои одноранговые соединения и потоковая передача видео прекрасно работают в локальной сети, но не работают через Интернет, хотя иногда они работают, например, в некоторых случаях через мобильную сеть 3G.

При отладке соединения Peer, я наткнулся на эту «ошибку»:

PeerJS: VP9 Codec: null  
PeerJS: iceConnectionState is disconnected, closing connections to (...) 

Нет ошибок на стороне сервера, все они являются либо на хосте или на клиенте.

Эта проблема аналогична this, this и this.

Есть ли у кого-нибудь представление о том, что может быть неправильным и как его можно исправить?

Заранее спасибо.

ответ

1

ОК, похоже, что я страдал от this вопроса, где очень распространенный сценарий NAT/Firewall на любом домашнем маршрутизаторе блокировал бы порты, которые нужен моему серверу PeerJS для доступа, таким образом, блокируя соединение с брокером, а не позволяя передавать видео.

Решение заключалось в использовании промежуточного сервера TURN для переопределения настроек NAT.

var peer = new Peer({host: 'host.com', port: 55127, path: '/', debug:true, config: {'iceServers': [{ url: 'stun:stun.l.google.com:19302' },{ url: 'turn:numb.viagenie.ca', username: '[email protected]', credential: 'password' }]}});