vani-meeting-server 2.1.8 → 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.
@@ -5,6 +5,7 @@ import { Participant } from "./Participant";
5
5
  export declare enum VaniEvent {
6
6
  OnNewMeetingStarted = "onNewMeetingStarted",
7
7
  OnNewMeetingEnded = "onNewMeetingEnded",
8
+ OnNewMeetingStartedOnCurrentServer = "OnNewMeetingStartedOnCurrentServer",
8
9
  OnAllParticipantLeftOnServer = "OnAllParticipantLeftOnServer",
9
10
  OnUserJoined = "onUserJoined",
10
11
  OnUserLeft = "onUserLeft",
@@ -5,6 +5,7 @@ var VaniEvent;
5
5
  (function (VaniEvent) {
6
6
  VaniEvent["OnNewMeetingStarted"] = "onNewMeetingStarted";
7
7
  VaniEvent["OnNewMeetingEnded"] = "onNewMeetingEnded";
8
+ VaniEvent["OnNewMeetingStartedOnCurrentServer"] = "OnNewMeetingStartedOnCurrentServer";
8
9
  VaniEvent["OnAllParticipantLeftOnServer"] = "OnAllParticipantLeftOnServer";
9
10
  VaniEvent["OnUserJoined"] = "onUserJoined";
10
11
  VaniEvent["OnUserLeft"] = "onUserLeft";
@@ -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,17 +44,20 @@ 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;
50
51
  constructor(roomId: string, workers: Worker[], sendWorkerIndex: number, connectionProtocol?: ConnectionProtocol);
51
52
  onInit: () => Promise<void>;
53
+ private sendVaniEvent;
52
54
  getConnectionProtocolType(): ConnectionProtocol;
53
55
  onMutiRoomMessage: (message: MultiSystemEventsBody) => Promise<void>;
54
56
  onNewMessage(payload: SFUMessageBody, participant: Participant): void;
55
57
  private getEachRoomUserFromParticipant;
56
58
  private onGetRTPCapabilities;
57
59
  private setUpForRoomId;
60
+ private addAudioLevel;
58
61
  private addAudioObserver;
59
62
  private getWorkerIndexForCreatingRouter;
60
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 = [];
@@ -64,6 +65,7 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
64
65
  this.onInit();
65
66
  }
66
67
  onInit = async () => {
68
+ this.sendVaniEvent(Event_1.VaniEvent.OnNewMeetingStartedOnCurrentServer, this.roomId);
67
69
  await this.redisSubscribeToTopic(Utility_1.Utility.getTopicForRoomIdAndIp(this.roomId, await Constant_1.default.getPublicIp()));
68
70
  await this.setUpForRoomId(this.workers, this.sendWorkerIndex);
69
71
  if (this.sendRouter) {
@@ -73,6 +75,9 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
73
75
  // this.informOtherSystems()
74
76
  // }, 10000)
75
77
  };
78
+ async sendVaniEvent(event, data) {
79
+ EventEmitterHandler_1.EventEmitterHandler.getInstance().vaniEventEmitter.emit(event, data);
80
+ }
76
81
  // informOtherSystems = async () => {
77
82
  // if (!this.sendRouter) {
78
83
  // console.log("informOtherSystems sendRouter not found")
@@ -159,7 +164,12 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
159
164
  this.sendRouter = await worker.createRouter({ mediaCodecs: Constant_1.mediaCodecs });
160
165
  sendWorkerPID = worker.pid;
161
166
  currentWorkerIndexForRouter = this.getWorkerIndexForCreatingRouter(currentWorkerIndexForRouter, workers.length);
162
- 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
+ }
163
173
  console.log("setUpForRoomId informOtherSystems");
164
174
  // if(this.sendRouter && !this.eachRoomMutliserverHandler){
165
175
  // this.eachRoomMutliserverHandler = new SFUEachRoomMutliServerHandler(this.roomId, this.sendRouter,this)
@@ -189,6 +199,22 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
189
199
  this.workers = undefined;
190
200
  this.sendWorkerIndex = -1;
191
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
+ }
192
218
  async addAudioObserver() {
193
219
  if (this.sendRouter && !this.audioObserver) {
194
220
  this.audioObserver = await this.sendRouter.createActiveSpeakerObserver({
@@ -289,6 +315,9 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
289
315
  if (this.audioObserver) {
290
316
  this.audioObserver?.addProducer({ producerId: audioProducer.id });
291
317
  }
318
+ if (this.audioLevelObserver) {
319
+ this.audioLevelObserver?.addProducer({ producerId: audioProducer.id });
320
+ }
292
321
  }
293
322
  onUserLeft(participant) {
294
323
  if (this.roomPaticipants.has(participant.userId)) {
@@ -442,6 +471,10 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
442
471
  this.audioObserver.close();
443
472
  this.audioObserver = undefined;
444
473
  }
474
+ if (this.audioLevelObserver) {
475
+ this.audioLevelObserver.close();
476
+ this.audioLevelObserver = undefined;
477
+ }
445
478
  this.recvRouter = [];
446
479
  if (this.sendRouter) {
447
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.8",
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",