无法使自托管的peerJS服务器正常工作

时间:2017-12-14 10:26:58

标签: webrtc videochat peerjs

我正在尝试在我的工作场所的内部网络上实现一个简单的2对等视频聊天。 我编写了客户端代码,它可以工作:如果我使用peerjs API密钥连接到peerjs,则连接正确建立。但是存在一个问题:视频流速度非常慢(有时完全冻结)。我想这是因为我连接的免费peerjs服务器太弱了,所以我想尝试自己托管它。

我已经尝试了所有的方法,并深深地寻求帮助,但无法克服它。我已经尝试将它与express结合使用,或者只是创建一个PeerServer,按照我在https://github.com/peers/peerjs-server上找到的说明进行操作。我试过一个简单的'npm install peer'然后'peerjs --port 9000'。我试过heroku。我已经尝试了所有可以找到的代码的端口,路径和代码片段的组合,但没办法。此外,我很高兴能够了解很多关于同伴的事情,但仍然没有运气。

成功运行peerjs服务器的人能解释我错在哪里吗?

这是我的客户端最小代码(注释行是我试过但没有成功的行):

var name = prompt('What's your name?');

var peer = new Peer(name, { 
  host: 'https://videodesk-ennesimo.herokuapp.com/',
  port: 9000,
  //key: 'peerjs',
  //path: '/peerjs',
  //secure: true
});

peer.on('open', function(name){
  alert(name + ' connected');
});

一切正常

var peer = new Peer(name, { key: 'mypeerjsfreeapikey' });

但如前所述,它几乎被冻结了。 您可以检查我的对等服务器是否正在https://videodesk-ennesimo.herokuapp.com/

运行

我做过的其他尝试都是例如:

var express = require('express');
var app = express();
var ExpressPeerServer = require('peer').ExpressPeerServer;

var options = {
    debug: true,
    allow_discovery: true
}

var server = require('http').createServer(app);

app.use('/peerjs', ExpressPeerServer(server, options));
server.listen(9000, 'localhost');

随后修改客户端代码。

我必须强调我的客户端是使用express制作的node.js应用程序,并且我使用的是自签名SSL证书,因为Google Chrome不允许在不安全的连接上使用网络摄像头。

任何帮助都会有用。自上周以来我一直坚持这一点,我不能浪费任何时间。我也不知道该怎么办了。 同时,peerjs的替代工作也很有用。

非常感谢!

3 个答案:

答案 0 :(得分:1)

卡罗

首先,欢迎使用Stack Overflow。

只有在设置连接时才需要Peerjs,并且它在后续的视频通话中没有任何作用,所以你断言它是一个弱服务器是不对的。

如果需要连接两台计算机,则面临的挑战是如何连接它们。这就是peerjs所做的,它会查看可行的ip地址/端口组合。通常它存在于云中,因此它允许防火墙后面的机器连接,通常无法相互连接。

如果您在局域网上进行连接,则可以在局域网上运行peerjs服务器,它可以正常运行。但这不是你的问题,有些东西会导致视频性能问题,也许会以某种方式限制流量。

尝试将两台计算机放在同一路由器上,甚至为它们创建专用网络。这将说服你,peerjs不是问题所在。然后你可以解决为什么你的视频性能不佳的问题。

答案 1 :(得分:0)

聚会晚了一点,但是您的代码不起作用,因为heroku自动分配的端口是443,并且主机地址的末尾有一个反斜杠。

这是我连接到您的peerjs服务器的方式。

var peer = new Peer({secure: true, host: 'videodesk-ennesimo.herokuapp.com', port: 443, path: '/'});

仍在尝试让我自己的服务器正常工作。

答案 2 :(得分:0)

主要问题在于您的客户端代码,您编写了...

主持人:'https://videodesk-ennesimo.herokuapp.com/',

但在主机的情况下,你要么写

host: 'localhost' 或 'your-app-name.herokuapp.com' 没有任何 https 或末尾的反斜杠。

你的正确代码应该是

var name = prompt('What's your name?');

var peer = new Peer(name, { 
  host: 'videodesk-ennesimo.herokuapp.com',
  port: 9000,
  secure: true
});

peer.on('open', function(name){
  alert(name + ' connected');
});

这对我有用!祝你好运,编码愉快。