我有一个使用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: '/'})
关于端口,我在UFW和路由器中都允许55127。
由于一些奇怪的原因,我的对等连接和视频流在局域网中完美运行,但在互联网上失败 - 尽管有时它们可以工作,例如在3G移动网络的情况下。
在调试Peer连接时,我偶然发现了这些“错误”:
PeerJS: VP9 Codec: null
PeerJS: iceConnectionState is disconnected, closing connections to (...)
服务器端没有错误,所有这些错误都在主机或客户端上。
有没有人知道可能出现什么问题以及如何修复它?
提前致谢。
答案 0 :(得分:1)
好吧,似乎我遇到this问题,其中一个非常常见的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: 'username@gmail.com', credential: 'password' }]}});