我已经尝试了一段时间。我正在尝试使用peerjs建立简单的连接。我可以使用id USER_ID
成功连接到对等方。但是,他们无法连接到我。当他们尝试连接时,我收到以下日志。iceConnectionState
最终更改为failed
,并且无法接收任何数据。
知道为什么会发生这种情况吗?
任何帮助表示赞赏!
peer.min.js:1 PeerJS:套接字打开
peer.min.js:1 PeerJS:创建RTCPeerConnection。
peer.min.js:1 PeerJS:聆听ICE候选人。
peer.min.js:1 PeerJS:侦听“negotiationneeded”
peer.min.js:1 PeerJS:监听数据通道
peer.min.js:1 PeerJS:监听远程流
peer.min.js:1 PeerJS:设置远程描述RTCSessionDescription
peer.min.js:1 PeerJS:已为USER_ID添加ICE候选
peer.min.js:1 PeerJS:设置远程描述:提供给:USER_ID
peer.min.js:1 PeerJS:已创建答案。
peer.min.js:1 PeerJS:设置localDescription:USER_ID的答案
peer.min.js:1 PeerJS:已收到USER_ID的ICE候选人
peer.min.js:1 PeerJS:已为USER_ID添加ICE候选
peer.min.js:1 PeerJS:已收到USER_ID的ICE候选人
peer.min.js:1 PeerJS:已为USER_ID添加ICE候选
peer.min.js:1 PeerJS:已收到USER_ID的ICE候选人
peer.min.js:1 PeerJS:iceConnectionState已断开,关闭了与USER_ID的连接
最佳答案
我有完全一样的问题。添加STUN TURN服务器应该可以解决此问题。
客户端代码
peer = new Peer(this.api.currentUserValue().id+'-'+this.api.currentUserValue().first_name,{
host: 'localhost',
port: 8080,
path: '/api',
debug: 3,
config: { 'iceServers': [
{ 'url': 'stun:stun.l.google.com:19302' },
{ 'url': 'turn:numb.viagenie.ca',credential: 'xxxx', username:'[email protected]' } ] } // this is must for keeping the connection open
});
服务器端代码
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var expressPeerServer = require('peer').ExpressPeerServer;
var path = require('path');
app.set('port', (process.env.OPENSHIFT_NODEJS_PORT || "8080"));
app.set('host', (process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1"));
app.use(express.static(path.join(__dirname, '/client')));
app.use('/api', expressPeerServer(server, {debug:true}));
server.listen(app.get('port'),app.get('host'),function(){
console.log('Server running at %s:%s',app.get('host'),app.get('port'));
});