From 4c87a559df0547ce9fada6a39a7dc26561e84bda Mon Sep 17 00:00:00 2001 From: Miroslav Pejic Date: Sun, 10 Mar 2024 13:53:22 +0100 Subject: [PATCH] [mirotalksfu] - signaling producer pause/resume --- app/src/Server.js | 49 ++++++++++++++++++++++++++++++++++++++--- public/js/RoomClient.js | 18 +++++++++++++-- 2 files changed, 62 insertions(+), 5 deletions(-) diff --git a/app/src/Server.js b/app/src/Server.js index 1759617e..6a227937 100644 --- a/app/src/Server.js +++ b/app/src/Server.js @@ -1128,9 +1128,52 @@ function startServer() { room.closeProducer(socket.id, data.producer_id); }); - socket.on('resume', async (_, callback) => { - await consumer.resume(); - callback(); + socket.on('pauseProducer', async ({ producer_id }, callback) => { + if (!roomList.has(socket.room_id)) return; + + const room = roomList.get(socket.room_id); + + const peer_name = getPeerName(room, false); + + const producer = room.getPeers()?.get(socket.id)?.getProducer(producer_id); + + if (!producer) { + return callback({ error: `producer with id "${producer_id}" not found` }); + } + + log.debug('Producer paused', { peer_name: peer_name, producer_id: producer_id }); + + try { + await producer.pause(); + } catch (error) { + return callback({ error: error.message }); + } + + callback('successfully'); + }); + + socket.on('resumeProducer', async ({ producer_id }, callback) => { + if (!roomList.has(socket.room_id)) return; + + const room = roomList.get(socket.room_id); + + const peer_name = getPeerName(room, false); + + const producer = room.getPeers()?.get(socket.id)?.getProducer(producer_id); + + if (!producer) { + return callback({ error: `producer with id "${producer_id}" not found` }); + } + + log.debug('Producer resumed', { peer_name: peer_name, producer_id: producer_id }); + + try { + await producer.resume(); + } catch (error) { + return callback({ error: error.message }); + } + + callback('successfully'); }); socket.on('getProducers', () => { diff --git a/public/js/RoomClient.js b/public/js/RoomClient.js index 5a297868..5f3bd2ba 100644 --- a/public/js/RoomClient.js +++ b/public/js/RoomClient.js @@ -1676,7 +1676,7 @@ class RoomClient { return elem; } - pauseProducer(type) { + async pauseProducer(type) { if (!this.producerLabel.has(type)) { return console.log('There is no producer for this type ' + type); } @@ -1684,6 +1684,13 @@ class RoomClient { const producer_id = this.producerLabel.get(type); this.producers.get(producer_id).pause(); + try { + const response = await this.socket.request('pauseProducer', { producer_id: producer_id }); + console.log('Producer paused', response); + } catch (error) { + console.error('Error pausing producer', error); + } + switch (type) { case mediaType.audio: this.event(_EVENTS.pauseAudio); @@ -1699,7 +1706,7 @@ class RoomClient { } } - resumeProducer(type) { + async resumeProducer(type) { if (!this.producerLabel.has(type)) { return console.log('There is no producer for this type ' + type); } @@ -1707,6 +1714,13 @@ class RoomClient { const producer_id = this.producerLabel.get(type); this.producers.get(producer_id).resume(); + try { + const response = await this.socket.request('resumeProducer', { producer_id: producer_id }); + console.log('Producer resumed', response); + } catch (error) { + console.error('Error resuming producer', error); + } + switch (type) { case mediaType.audio: this.event(_EVENTS.resumeAudio);