I am trying to create a node+socket.io+express+peerjs application for voice chat.
The problem I am facing is that I cannot access the stream of the connected peer since the call.on("stream")
is not firing for some reason. I have tried to manipulate the .on
events, but I'm still not able to get it to work. It's not giving me any errors. I am new to peerjs so any help is appreciated a lot, I already spent countless hours trying to fix this.
Client-side call creation and connection:
if(peerid!=-1 && peer){
if(!window.localStream){
window.localStream=new MediaStream();
}
//peer.listAllPeers((peers) => {
// console.log(peers);
//});
peerConn = peer.connect(peerid);
peerConn.on("open", ()=>{
// THIS IS FIRING
call = peer.call(peerid, window.localStream);
console.log("Connecting to: "+ peerid);
call.on("stream", (stream)=>{
// THIS IS NOT FIRING
console.log("STEAMING CALLER");
});
call.on("error", function (err) {
console.error(err);
});
});
}
Client side answer call:
peer.on('connection', function(connection){
peerConn=connection;
});
peer.on('call', (incoming) => {
// THIS IS FIRING
if(!window.localStream){
window.localStream=new MediaStream();
}
console.log('Answering incoming call from ' + incoming.peer);
incoming.answer(window.localStream);
incoming.on("stream", (stream) => {
// THIS IS NOT FIRING
console.log("STREAMING CALLEE");
});
incoming.on("error", (err) => {
console.log(err);
});
});
Thank you in advance for your help!
I tried to catch errors using the call.on("error")
, no errors are thrown. I also tried inserting the call events inside different .on
functions since I thought it was due to perhaps the call being answered before the connection was made, to no avail. The result is always the same: peer.on("call")
fires but "stream"
does not. I cannot for the life of me figure out this behaviour.
Update: after a lot of messing about, I found a solution, which is changing the call creation code to the following:
peerConn.on("open", ()=>{
if(microphone&&peerMicrophone){
setTimeout(function temp() {
try {
getLocalStream();
call = peer.call(peerid, window.localStream);
call.on("stream", (stream)=>{
window.remoteAudio.srcObject = stream;
window.remoteAudio.autoplay = true;
window.peerStream = stream;
addMessage(11);
console.log("Connecting asdato: "+ peerid);
});
call.on("error", function (err) {
console.error(err);
});
} catch (error) {
setTimeout(temp, 20);
}
}, 10);
} else {
addMessage(12);
peerConn.send("vc_unavailable");
}
});
I dont really understand why I needed to add a timeout there, and I got it through pure trial and error. Is there perhaps a more elegant solution to the problem?
Via Active questions tagged javascript - Stack Overflow https://ift.tt/lcY2Neb
Comments
Post a Comment