vani-meeting-server 2.1.9 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,4 +20,6 @@ export declare class WebSocketServerStartRequest {
20
20
  wssServerCertificateOption?: any;
21
21
  logLevel: LogLevel;
22
22
  shouldCleanRedisOnStartUp: boolean;
23
+ isSpeakerFindRequired: boolean;
24
+ isAudioVolumeLevelRequired: boolean;
23
25
  }
@@ -25,5 +25,7 @@ class WebSocketServerStartRequest {
25
25
  wssServerCertificateOption;
26
26
  logLevel = LogLevel.None;
27
27
  shouldCleanRedisOnStartUp = true;
28
+ isSpeakerFindRequired = true;
29
+ isAudioVolumeLevelRequired = true;
28
30
  }
29
31
  exports.WebSocketServerStartRequest = WebSocketServerStartRequest;
@@ -44,6 +44,7 @@ export declare class SFUEachRoomHandler extends BaseSFUWebsocket implements SFUE
44
44
  private workers?;
45
45
  private sendWorkerIndex;
46
46
  private audioObserver?;
47
+ private audioLevelObserver?;
47
48
  private connectionProtocol;
48
49
  private eachRoomMutliserverHandler?;
49
50
  private redisSubscribtionDetails;
@@ -56,6 +57,7 @@ export declare class SFUEachRoomHandler extends BaseSFUWebsocket implements SFUE
56
57
  private getEachRoomUserFromParticipant;
57
58
  private onGetRTPCapabilities;
58
59
  private setUpForRoomId;
60
+ private addAudioLevel;
59
61
  private addAudioObserver;
60
62
  private getWorkerIndexForCreatingRouter;
61
63
  getProducerById(producerId: string): SFUEachRoomProducer | undefined;
@@ -47,6 +47,7 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
47
47
  workers;
48
48
  sendWorkerIndex = -1;
49
49
  audioObserver;
50
+ audioLevelObserver;
50
51
  connectionProtocol = ServerHandler_1.ServerHandler.getInstance().serverStartRequest.connectionProtocol;
51
52
  eachRoomMutliserverHandler;
52
53
  redisSubscribtionDetails = [];
@@ -163,7 +164,12 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
163
164
  this.sendRouter = await worker.createRouter({ mediaCodecs: Constant_1.mediaCodecs });
164
165
  sendWorkerPID = worker.pid;
165
166
  currentWorkerIndexForRouter = this.getWorkerIndexForCreatingRouter(currentWorkerIndexForRouter, workers.length);
166
- this.addAudioObserver();
167
+ if (ServerHandler_1.ServerHandler.getInstance().serverStartRequest.isAudioVolumeLevelRequired) {
168
+ this.addAudioLevel();
169
+ }
170
+ if (ServerHandler_1.ServerHandler.getInstance().serverStartRequest.isSpeakerFindRequired) {
171
+ this.addAudioObserver();
172
+ }
167
173
  console.log("setUpForRoomId informOtherSystems");
168
174
  // if(this.sendRouter && !this.eachRoomMutliserverHandler){
169
175
  // this.eachRoomMutliserverHandler = new SFUEachRoomMutliServerHandler(this.roomId, this.sendRouter,this)
@@ -193,6 +199,22 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
193
199
  this.workers = undefined;
194
200
  this.sendWorkerIndex = -1;
195
201
  }
202
+ async addAudioLevel() {
203
+ if (this.sendRouter && !this.addAudioLevel) {
204
+ this.audioLevelObserver = await this.sendRouter.createAudioLevelObserver({
205
+ interval: 500
206
+ });
207
+ this.audioLevelObserver.on("volumes", (audioLevelVolumes) => {
208
+ audioLevelVolumes.forEach((eachAudioLevelVol) => {
209
+ const speakerUserId = eachAudioLevelVol.producer.appData.userId;
210
+ const participant = RedisHandler_1.RedisHandler.getInstance().getParticipantByUserId(this.roomId, speakerUserId);
211
+ if (participant) {
212
+ this.redisBroadcastMessageToTopic(this.roomId, this.preapreClientMessageBody(true, participant, this.preapreWebSocketMessageBody(EachSocketConnectionHandler_1.SFUMessageType.OnAudioVolumeChanged, { volume: eachAudioLevelVol.volume, userId: speakerUserId })));
213
+ }
214
+ });
215
+ });
216
+ }
217
+ }
196
218
  async addAudioObserver() {
197
219
  if (this.sendRouter && !this.audioObserver) {
198
220
  this.audioObserver = await this.sendRouter.createActiveSpeakerObserver({
@@ -293,6 +315,9 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
293
315
  if (this.audioObserver) {
294
316
  this.audioObserver?.addProducer({ producerId: audioProducer.id });
295
317
  }
318
+ if (this.audioLevelObserver) {
319
+ this.audioLevelObserver?.addProducer({ producerId: audioProducer.id });
320
+ }
296
321
  }
297
322
  onUserLeft(participant) {
298
323
  if (this.roomPaticipants.has(participant.userId)) {
@@ -446,6 +471,10 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
446
471
  this.audioObserver.close();
447
472
  this.audioObserver = undefined;
448
473
  }
474
+ if (this.audioLevelObserver) {
475
+ this.audioLevelObserver.close();
476
+ this.audioLevelObserver = undefined;
477
+ }
449
478
  this.recvRouter = [];
450
479
  if (this.sendRouter) {
451
480
  this.sendRouter.close();
@@ -54,6 +54,7 @@ export declare enum SFUMessageType {
54
54
  PauseConsumer = "pauseConsumer",
55
55
  OnProduceSyncDone = "produceSyncDone",
56
56
  OnSpeakerChanged = "onSpeakerChanged",
57
+ OnAudioVolumeChanged = "OnAudioVolumeChanged",
57
58
  OnRestartIceCandidate = "restartIceCandidate",
58
59
  OnRestartIceCandidateResponse = "onRestartIceCandidate",
59
60
  OnTrackEnded = "onTrackEnded",
@@ -71,6 +71,7 @@ var SFUMessageType;
71
71
  SFUMessageType["PauseConsumer"] = "pauseConsumer";
72
72
  SFUMessageType["OnProduceSyncDone"] = "produceSyncDone";
73
73
  SFUMessageType["OnSpeakerChanged"] = "onSpeakerChanged";
74
+ SFUMessageType["OnAudioVolumeChanged"] = "OnAudioVolumeChanged";
74
75
  SFUMessageType["OnRestartIceCandidate"] = "restartIceCandidate";
75
76
  SFUMessageType["OnRestartIceCandidateResponse"] = "onRestartIceCandidate";
76
77
  SFUMessageType["OnTrackEnded"] = "onTrackEnded";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vani-meeting-server",
3
- "version": "2.1.9",
3
+ "version": "2.2.0",
4
4
  "description": "Vani Meeting Server SDK",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",