iceConnectionState отключен - VP9 Coded имеет значение null - PeerServer

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

Вот как я создаю свой 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 (...)

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

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

Кто-нибудь знает, что может быть не так и как это можно исправить?

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


person Christian Marques    schedule 14.11.2016    source источник


Ответы (1)


Хорошо, кажется, я страдал от этой проблемы, где очень распространенный сценарий NAT/брандмауэра, в любом домашнем маршрутизаторе он блокирует порты, к которым должен получить доступ мой сервер 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' }]}});
person Christian Marques    schedule 15.11.2016