Ich versuche, einen einfachen Video-Chat mit PeerJS zu arbeiten. Ich möchte Audio zwischen Firefox auf einem PC und Firefox auf Android senden. Ich kann den Anruf erhalten (call.on) und ich kann lokales Video ansehen, aber aus irgendeinem Grund kommt das Medium einfach nicht zum anderen Benutzer durch. Derzeit bin ich den Fehler bekommen:ICE fehlgeschlagen, PeerJS Anruf gestartet, aber kein Video/Audio über
ICE failed, see about:webrtc for more details
habe ich einen Server, der in seiner einfachen Version ist als solche:
var ip = require('ip');
var PeerServer = require('peer').PeerServer;
var port = 9000;
var server = new PeerServer({port: port, allow_discovery: true});
Dann habe ich zwei Kunden, eine für den PC, die den Anruf macht:
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);
}
}
Und derjenige, der den Anruf entgegennimmt ist:
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);
}
}
Ich denke, es ist ein wenig zwicken, dass ich falsch liege, ich habe hauptsächlich Anweisungen auf PeerJS Website gefolgt: http://peerjs.com/ Bitte, wenn jemand etwas sehen kann, das geändert werden muss, ist jede Hilfe willkommen!
Danke für die Antwort, hoffentlich kann ich irgendwo damit kommen. Also habe ich einen TURN-Server auf meinem Ubuntu eingerichtet und ich betreibe den Dämon. Ich änderte den neuen Peer zu: 'var peer = new Peer ({ config: {'iceServers': [ {urls: 'stun: stun.l.google.com: 19302'}, {urls: 'drehen: https://myurl.com:3478 ', credential:' test ', username:' test '} }} }); 'und ich tauschte meine lokale peer.js zu https://cdnjs.cloudflare.com/ ajax/libs/peerjs/0.3.14/peer.js, da es sich über HTTPS/http-Inkonsistenz beschwert hat, aber jetzt bekomme ich einen "ReferenceError: Peer ist nicht definiert". – suppp111
Muss ich noch meinen eigenen Peer-Server betreiben? Ich dachte, ich würde es nicht tun, da ich es nicht mehr wirklich anrufe ... Eine andere Option ist, dass diese peer.js nicht mehr funktioniert, da ich den Fehler "Änderung an URLs" erhalte. – suppp111
Sofern Sie nicht vollständig in Ihrem eigenen Netzwerk arbeiten, müssen die peerjs, stun and turn Server alle im Internet sein, nicht auf Ihrem eigenen Rechner. – Mikkel