[mirotalksfu] - add dominant speaker observer, fix, update dep

هذا الالتزام موجود في:
Miroslav Pejic
2024-04-30 11:32:59 +02:00
الأصل 990d99226f
التزام 8270a994b2
7 ملفات معدلة مع 74 إضافات و10 حذوفات

عرض الملف

@@ -116,7 +116,7 @@ module.exports = class Peer {
this.transports.forEach((transport, transport_id) => {
transport.close();
this.delTransport(transport_id);
log.debug('Close and delete peer transports', {
log.debug('Closed and deleted peer transport', {
//transport_id: transport_id,
transportInternal: transport.internal,
transport_closed: transport.closed,

عرض الملف

@@ -4,6 +4,8 @@ const config = require('./config');
const Logger = require('./Logger');
const log = new Logger('Room');
const { audioLevelObserverEnabled, activeSpeakerObserverEnabled } = config.mediasoup.router;
module.exports = class Room {
constructor(room_id, worker, io) {
this.id = room_id;
@@ -12,8 +14,11 @@ module.exports = class Room {
this.webRtcServerActive = config.mediasoup.webRtcServerActive;
this.io = io;
this.audioLevelObserver = null;
this.audioLevelObserverEnabled = true;
this.audioLevelObserverEnabled = audioLevelObserverEnabled !== undefined ? audioLevelObserverEnabled : true;
this.audioLastUpdateTime = 0;
this.activeSpeakerObserverEnabled =
activeSpeakerObserverEnabled !== undefined ? activeSpeakerObserverEnabled : false;
this.activeSpeakerObserver = null;
// ##########################
this._isBroadcasting = false;
// ##########################
@@ -79,6 +84,9 @@ module.exports = class Room {
if (this.audioLevelObserverEnabled) {
this.startAudioLevelObservation();
}
if (this.activeSpeakerObserverEnabled) {
this.startActiveSpeakerObserver();
}
this.router.observer.on('close', () => {
log.info('---------------> Router is now closed as the last peer has left the room', {
room: this.id,
@@ -87,6 +95,10 @@ module.exports = class Room {
});
}
getRtpCapabilities() {
return this.router.rtpCapabilities;
}
closeRouter() {
this.router.close();
log.debug('Close Room router', {
@@ -157,8 +169,38 @@ module.exports = class Room {
}
}
getRtpCapabilities() {
return this.router.rtpCapabilities;
// ####################################################
// PRODUCER DOMINANT ACTIVE SPEAKER
// ####################################################
async startActiveSpeakerObserver() {
this.activeSpeakerObserver = await this.router.createActiveSpeakerObserver();
this.activeSpeakerObserver.on('dominantspeaker', (dominantSpeaker) => {
log.debug('activeSpeakerObserver "dominantspeaker" event', dominantSpeaker.producer.id);
this.peers.forEach((peer) => {
const { id, peer_audio, peer_name } = peer;
peer.producers.forEach((peerProducer) => {
if (
peerProducer.id === dominantSpeaker.producer.id &&
peerProducer.kind === 'audio' &&
peer_audio
) {
const data = {
peer_id: id,
peer_name: peer_name,
};
// log.debug('Sending dominant speaker', data);
this.sendToAll('dominantSpeaker', data);
}
});
});
});
}
addProducerToActiveSpeakerObserver(producer) {
if (this.activeSpeakerObserverEnabled) {
this.activeSpeakerObserver.addProducer(producer);
}
}
// ####################################################

عرض الملف

@@ -41,7 +41,7 @@ dependencies: {
* @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon
* @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970
* @author Miroslav Pejic - miroslav.pejic.85@gmail.com
* @version 1.4.25
* @version 1.4.26
*
*/
@@ -1189,9 +1189,10 @@ function startServer() {
producer_id: producer_id,
});
// add & monitor producer audio level
// add & monitor producer audio level and active speaker
if (kind === 'audio') {
room.addProducerToAudioLevelObserver({ producerId: producer_id });
room.addProducerToActiveSpeakerObserver({ producerId: producer_id });
}
//log.debug('Producer transport callback', { callback: producer_id });

عرض الملف

@@ -359,6 +359,8 @@ module.exports = {
},
// Router settings
router: {
audioLevelObserverEnabled: true,
activeSpeakerObserverEnabled: false,
mediaCodecs: [
{
kind: 'audio',