LINXD-2209-black-screen-when-2-video-calls-are-answered-simultaneously #3

Merged
sergiu merged 31 commits from LINXD-2209-black-screen-when-2-video-calls-are-answered-simultaneously into master 2022-09-15 14:49:55 +00:00
Showing only changes of commit 41b50d2a11 - Show all commits

26
app.js
View File

@ -36,6 +36,7 @@ let worker
*
**/
let videoCalls = {}
let socketDetails = {}
app.get('/', (_req, res) => {
res.send('Hello from mediasoup app!')
@ -112,16 +113,18 @@ peers.on('connection', async socket => {
socket.on('disconnect', () => {
// do some cleanup
console.log('peer disconnected')
console.log('peer disconnected | socket.id', socket.id)
delete socketDetails[socket.id];
})
socket.on('createRoom', async ({ callId }, callback) => {
if (videoCalls[callId].router === undefined) {
console.log('[createRoom] callId', callId);
videoCalls[callId].router = await worker.createRouter({ mediaCodecs })
videoCalls[callId].router = await worker.createRouter({ mediaCodecs });
console.log(`[createRoom] Router ID: ${videoCalls[callId].router.id}`)
}
getRtpCapabilities(callId, callback)
socketDetails[socket.id] = callId;
getRtpCapabilities(callId, callback);
})
// Client emits a request to create server side Transport
@ -137,13 +140,16 @@ peers.on('connection', async socket => {
})
cristi marked this conversation as resolved Outdated

For refactor: why do we need to differentiate between producerTransport and consumerTransport? Why don't we have a transport variable (it is only one transport for each client regardless if they are producer or consumer)?

For refactor: why do we need to differentiate between producerTransport and consumerTransport? Why don't we have a `transport` variable (it is only one transport for each client regardless if they are producer or consumer)?

We need producer and consumer transports for each call.

We need producer and consumer transports for each call.
// see client's socket.emit('transport-connect', ...)
socket.on('transport-connect', async ({ dtlsParameters, callId }) => {
console.log('[transport-connect] DTLS PARAMS... ', { dtlsParameters })
socket.on('transport-connect', async ({ dtlsParameters }) => {
const callId = socketDetails[socket.id];
console.log(`[transport-connect] socket.id ${socket.id} | callId ${callId} | DTLS PARAMS... ${dtlsParameters}`)
await videoCalls[callId].producerTransport.connect({ dtlsParameters })
})
// see client's socket.emit('transport-produce', ...)
socket.on('transport-produce', async ({ kind, rtpParameters, appData, callId }) => {
socket.on('transport-produce', async ({ kind, rtpParameters, appData }) => {
const callId = socketDetails[socket.id];
console.log('[transport-produce] | socket.id', socket.id, '| callId', callId);
// call produce based on the prameters from the client
videoCalls[callId].producer = await videoCalls[callId].producerTransport.produce({
kind,
@ -164,12 +170,14 @@ peers.on('connection', async socket => {
})
// see client's socket.emit('transport-recv-connect', ...)
socket.on('transport-recv-connect', async ({ dtlsParameters, callId }) => {
console.log(`[transport-recv-connect] DTLS PARAMS: ${dtlsParameters}`)
socket.on('transport-recv-connect', async ({ dtlsParameters }) => {
const callId = socketDetails[socket.id];
console.log(`[transport-recv-connect] socket.id ${socket.id} | callId ${callId} | DTLS PARAMS: ${dtlsParameters}`);
await videoCalls[callId].consumerTransport.connect({ dtlsParameters })
})
socket.on('consume', async ({ rtpCapabilities, callId }, callback) => {
socket.on('consume', async ({ rtpCapabilities }, callback) => {
const callId = socketDetails[socket.id];
console.log('[consume] callId', callId);
try {
// console.log('consume', rtpCapabilities, callId);