In localhost working very well but in production not.
- Dominant language
- JavaScript
- Stars
- 7.8k
- Forks
- 983
- PR merge metrics
- No merged PRs in 30d
Description
Im still all week work these library and apply broadcast video chat, i tryng to execute in my local, and in this execute very well conect if a disconnect, this disconnect. but the problem is when tryng to apply this proyect in production an still al day, yesterday im connect in my phone network and in mi desktop in my network home and i see good really good i dont know if the problem is websockets, but in connect not see that users (sockets) connect to room and i dont know how do it. to see in production thanks and sorry for my bad english.
some of my code in frontend with vue js
`beforeDestroy(){
socket.emit('disconnect')
},
async mounted(){
this.local_video = this.$refs.local_video;
this.remote_video = this.$refs.remote_video;
if(navigator.mediaDevices && navigator.mediaDevices.getUserMedia){
let stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true })
this.local_video.srcObject = stream;
this.myStream = stream
await socket.emit("join room", this.$route.params.sala);
await socket.on("all users", users => {
console.log(users)
const peers = [];
users.forEach( async (userID) => {
const peer = await this.createPeer(userID, socket.id, this.myStream);
this.peersRef.push({
peerID: userID,
peer,
})
peer.on('stream', stream => {
console.log('aqui')
this.peers.push(stream)
})
})
})
await socket.on("user joined", payload => {
console.log(payload, 'user joined')
const item = this.peersRef.find(p => p.peerID == payload.callerID);
if(!item || this.peersRef.length == 0) {
const peer = this.addPeer(payload.signal, payload.callerID, this.myStream);
this.peersRef.push({
peerID: payload.callerID,
peer
})
const peerObj = {
peer,
peerID: payload.callerID
}
peer.on('stream', stream => {
this.peers.length == 0 ? this.peers.push(stream) : this.peers = [...this.peers, stream]
})
}
});
await socket.on("receiving returned signal", payload => {
const item = this.peersRef.find(p => p.peerID === payload.id);
item.peer.signal(payload.signal);
});
await socket.on('user-disconnected', (payload) => {
console.log('user-disconnected', payload)
const item = this.peersRef.find((p) => p.peerID === payload.id);
if (item) {
item.peer.destroy();
this.peersRef = this.peersRef.filter(
(p) => p.peerID !== payload.id
);
this.peers = this.peersRef.map(peer => peer.peer);
}
});
} else {
alert('No soportado')
}
},
methods:{
createPeer(userToSignal, callerID, stream) {
const peer = new Peer({
initiator: true,
stream: stream,
offerConstraints: {
offerToReceiveAudio: true,
offerToReceiveVideo: true
},
config: {
"iceServers": [{
urls: "stun:stun.l.google.com:19302"
},
{
urls: 'turn:numb.viagenie.ca',
credential: 'luispadronmillan@gmail.com',
username: '1234567890.'
}
]
}
});
peer.on("signal", signal => {
socket.emit("sending signal", { userToSignal, callerID, signal })
})
return peer;
},
addPeer(incomingSignal, callerID, stream) {
const peer = new Peer({
initiator: false,
trickle: false,
stream,
offerConstraints: {
offerToReceiveAudio: false,
offerToReceiveVideo: false
},
config: {
"iceServers": [{
urls: "stun:stun.l.google.com:19302"
},
{
urls: 'turn:numb.viagenie.ca',
credential: 'luispadronmillan@gmail.com',
username: '1234567890.'
}
]
}
})
console.log(peer)
peer._debug = console.log
peer.on("signal", signal => {
socket.emit("returning signal", { signal, callerID })
})
peer.signal(incomingSignal);
return peer;
}, `
and another is backend with node js
`
const users = {};
const socketToRoom = {};
socket.on("join room", (roomID) => {
if (users[roomID]) {
if(users[roomID].some(id => id !== socket.id) || users[roomID].length == 0) users[roomID].push(socket.id);
} else {
users[roomID] = [socket.id];
}
socketToRoom[socket.id] = roomID;
const usersInThisRoom = users[roomID].filter(id => id !== socket.id);
socket.emit("all users", usersInThisRoom);
});
socket.on("sending signal", payload => {
io.to(payload.userToSignal).emit('user joined', { signal: payload.signal, callerID: payload.callerID });
});
socket.on("returning signal", payload => {
io.to(payload.callerID).emit('receiving returned signal', { signal: payload.signal, id: socket.id });
});
socket.on("disconnect", () => {
const roomID = socketToRoom[socket.id];
let room = users[roomID];
if (room) {
room = room.filter(id => id !== socket.id);
users[roomID] = room;
socket.broadcast.emit('user-disconnected', { id : socket.id});
}
});
`
In production use redis-server because dont work websockets in a clouster mode. thanks
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.