vani-meeting-server 2.1.9 → 2.2.1
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/WebSocketServerStartRequest.d.ts +2 -0
- package/lib/models/WebSocketServerStartRequest.js +2 -0
- package/lib/sfu/SFUEachRoomHandler.d.ts +2 -0
- package/lib/sfu/SFUEachRoomHandler.js +30 -1
- package/lib/websocket/EachSocketConnectionHandler.d.ts +1 -0
- package/lib/websocket/EachSocketConnectionHandler.js +1 -0
- package/package.json +2 -2
|
@@ -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
|
-
|
|
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
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"description": "Vani Meeting Server SDK",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"dotenv": "^16.0.2",
|
|
32
32
|
"express": "^4.18.1",
|
|
33
33
|
"helmet": "^6.0.0",
|
|
34
|
-
"mediasoup": "^3.
|
|
34
|
+
"mediasoup": "^3.11.12",
|
|
35
35
|
"public-ip": "4.0.3",
|
|
36
36
|
"typescript": "^4.8.3",
|
|
37
37
|
"uuid": "^9.0.0",
|