Я пытаюсь получить простой видео-чат, работающий с PeerJS. Я хочу отправить аудио между Firefox на ПК и Firefox на Android. Я могу запустить вызов (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});
Тогда у меня есть два клиента, один для ПК, что делает вызов:
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/ Пожалуйста, если кто-нибудь увидит что-то, что нужно изменить, любая помощь приветствуется!
Спасибо за ответ, надеюсь, я смогу куда-нибудь с этим поработать. Поэтому я настроил сервер TURN на моем ubuntu, и я запускаю демона. Я изменил новый Peer на: var var = new Peer ({ config: {'iceServers': [ {urls: 'stun: stun.l.google.com: 19302'}, {urls: '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 не определен». – suppp111
Нужно ли мне все еще запускать собственный сервер Peer? Я думал, что не буду, потому что я больше не назову его ... другой вариант заключается в том, что этот peer.js на самом деле больше не работает, поскольку я получаю ошибку «change to urls». – suppp111
Если вы не работаете полностью в своей собственной сети, серверы peerjs, stun и turn all должны быть в Интернете, а не на вашей собственной машине – Mikkel