我正在尝试使用PeerJS进行简单的视频聊天。我想在PC上的Firefox和Android上的Firefox之间发送音频。我可以让呼叫在运行(call.on),我可以查看本地视频,但由于某些原因,媒体无法通过其他用户。目前,我得到的错误:ICE失败,PeerJS调用开始但没有视频/音频通过
ICE failed, see about:webrtc for more details
我有一个服务器,在其简单的版本是这样的:
var ip = require('ip');
var PeerServer = require('peer').PeerServer;
var port = 9000;
var server = new PeerServer({port: port, allow_discovery: true});
然后,我有两个客户,一个用于使调用PC:
var SERVER_IP = window.location.hostname;
var SERVER_PORT = 9000;
var localStream = "";
var peerID = "pc"
var peerConnectionID = "and"
var remoteVideo = document.querySelector('#rremote-video');
var localVideo = document.querySelector('#llocal-video');
var peer = new Peer(peerID, {host: SERVER_IP, port: SERVER_PORT});
var conn = peer.connect(peerConnectionID);
var getUserMedia = navigator.mediaDevices.getUserMedia({ video: true, audio: true })
.then(stream => localVideo.srcObject = stream)
.then(stream => localStream = stream)
.catch(e => console.log(e.name + ": "+ e.message));
waitForElement();
function waitForElement(){
if(localStream != ""){
conn.on('open', function(){
conn.send('hi from PC!');
});
peer.on('connection', function(conn) {
conn.on('data', function(data){
console.log(data);
});
});
console.log("we have a stream: "+localStream);
var call = peer.call(peerConnectionID, localStream);
console.log("Calling "+peerConnectionID);
call.on('stream', function(remotestream) {
console.log("Call on.");
remoteVideo.srcObject = remotestream;
});
}
else{
setTimeout(function(){
waitForElement();
},750);
}
}
这接听来电的一个是:
var SERVER_IP = window.location.hostname;
var SERVER_PORT = 9000;
var localStream = "";
var peerID = "and"
var peerConnectionID = "pc"
var remoteVideo = document.querySelector('#rremote-video');
var localVideo = document.querySelector('#llocal-video');
var remoteAudio = document.querySelector('#remote-audio');
var localAudio = document.querySelector('#local-audio');
var peer = new Peer(peerID, {host: SERVER_IP, port: SERVER_PORT});
var conn = peer.connect(peerConnectionID);
var getUserMedia = navigator.mediaDevices.getUserMedia({ video: true, audio: true })
.then(stream => localAudio.srcObject = stream)
.then(stream => localVideo.srcObject = stream)
.then(stream => localStream = stream)
.catch(e => console.log(e.name + ": "+ e.message));
waitForElement();
function waitForElement(){
if(localStream != ""){
conn.on('open', function(){
conn.send('hi from android!');
});
peer.on('connection', function(conn) {
conn.on('data', function(data){
console.log(data);
});
});
peer.on('call', function(call) {
console.log("Picking up call.");
call.answer(localStream);
call.on('stream', function(remotestream) {
console.log("Call on.");
remoteVideo.srcObject = remotestream;
});
});
}
else{
setTimeout(function(){
waitForElement();
},750);
}
}
我认为这是一些小小的调整,我错了,我主要遵循PeerJS网站上的说明:http://peerjs.com/如果有人可以看到需要改变的东西,欢迎任何帮助!
感谢您的回复,希望我能在这个地方找到合适的位置。所以我在我的Ubuntu上设置了一个TURN服务器,我正在运行这个恶魔。我将新的Peer更改为:'var peer = new Peer({'iceServers':[{urls:'stun:stun.l.google.com:19302'}, {url:'turn: https://myurl.com:3478',凭证:'test',用户名:'test'} ]} });'我将我的本地peer.js换成了https://cdnjs.cloudflare.com/ ajax/libs/peerjs/0.3.14/peer.js,因为它抱怨https/http不一致,但现在我得到了“ReferenceError:Peer is not defined”。 – suppp111
我是否还需要运行我自己的对等服务器?我以为我不会这样做,因为我没有真正调用它...另一种选择是,这个peer.js实际上不再工作了,因为我得到了“更改为url”的错误。 – suppp111
除非您完全在您自己的网络中运行,否则peerjs,stun和turn服务器都需要在互联网上,而不是在您自己的机器上 – Mikkel