[mirotalksfu] - add dominant speaker observer, fix, update dep
هذا الالتزام موجود في:
@@ -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',
|
||||
|
||||
المرجع في مشكلة جديدة
حظر مستخدم