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.
- package/lib/models/Event.d.ts +1 -0
- package/lib/models/Event.js +1 -0
- package/lib/models/WebSocketServerStartRequest.d.ts +2 -0
- package/lib/models/WebSocketServerStartRequest.js +2 -0
- package/lib/sfu/SFUEachRoomHandler.d.ts +3 -0
- package/lib/sfu/SFUEachRoomHandler.js +34 -1
- package/lib/websocket/EachSocketConnectionHandler.d.ts +1 -0
- package/lib/websocket/EachSocketConnectionHandler.js +1 -0
- package/package.json +1 -1
package/lib/models/Event.d.ts
CHANGED
|
@@ -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",
|
package/lib/models/Event.js
CHANGED
|
@@ -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";
|
|
@@ -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
|
-
|
|
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";
|