feross / feross/simple-peer

In localhost working very well but in production not.

Open
#775 0 comments 0 reactions 0 assignees View on GitHub
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.