vani-meeting-server 2.7.1 → 2.7.4
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/ServerHandler.d.ts +6 -4
- package/lib/models/Event.d.ts +4 -1
- package/lib/models/Event.js +3 -0
- package/lib/models/WebSocketServerStartRequest.d.ts +2 -0
- package/lib/models/WebSocketServerStartRequest.js +2 -0
- package/lib/sfu/SFUEachRoomHandler.js +1 -1
- package/lib/sfu/SFUEachRoomUserHandler.d.ts +1 -0
- package/lib/sfu/SFUEachRoomUserHandler.js +32 -0
- package/lib/websocket/EachSocketConnectionHandler.d.ts +3 -0
- package/lib/websocket/EachSocketConnectionHandler.js +3 -0
- package/package.json +3 -3
package/lib/ServerHandler.d.ts
CHANGED
|
@@ -5,19 +5,21 @@ import { Participant } from "./models/Participant";
|
|
|
5
5
|
import { WebSocketServerStartRequest } from "./models/WebSocketServerStartRequest";
|
|
6
6
|
import { SFUHandler } from "./sfu/SFUHandler";
|
|
7
7
|
import { WebSocketHandler } from "./websocket/WebSocketHandler";
|
|
8
|
+
import { RtpCapabilities } from "mediasoup/node/lib/rtpParametersTypes";
|
|
8
9
|
export interface PlainTransportPayload {
|
|
9
10
|
remoteIpAddress: string;
|
|
10
11
|
isAudioRequired: boolean;
|
|
11
12
|
isVideoRequired: boolean;
|
|
12
|
-
audioPort
|
|
13
|
-
audioRtcpPort
|
|
14
|
-
videoPort
|
|
15
|
-
videoRtcpPort
|
|
13
|
+
audioPort?: number;
|
|
14
|
+
audioRtcpPort?: number;
|
|
15
|
+
videoPort?: number;
|
|
16
|
+
videoRtcpPort?: number;
|
|
16
17
|
extraData?: any;
|
|
17
18
|
}
|
|
18
19
|
export interface PlainTransportCreatedCallback {
|
|
19
20
|
roomId: string;
|
|
20
21
|
plainTransportPayload: PlainTransportPayload;
|
|
22
|
+
rtpCapabilities?: RtpCapabilities;
|
|
21
23
|
}
|
|
22
24
|
export declare class ServerHandler {
|
|
23
25
|
serverStartRequest: WebSocketServerStartRequest;
|
package/lib/models/Event.d.ts
CHANGED
|
@@ -14,7 +14,10 @@ export declare enum VaniEvent {
|
|
|
14
14
|
OnPlainTransportCreateError = "onPlainTransportCreateError",
|
|
15
15
|
OnLog = "OnLog",
|
|
16
16
|
OnNewChatMessageReceived = "OnNewChatMessageReceived",
|
|
17
|
-
OnClientPingRecieved = "OnClientPingRecieved"
|
|
17
|
+
OnClientPingRecieved = "OnClientPingRecieved",
|
|
18
|
+
OnConsumerScoreChange = "OnConsumerScoreChange",
|
|
19
|
+
OnConsumerLayerChange = "OnConsumerLayerChange",
|
|
20
|
+
OnProducerScoreChange = "OnProducerScoreChange"
|
|
18
21
|
}
|
|
19
22
|
interface VaniConnectionEvents {
|
|
20
23
|
[VaniEvent.OnNewMeetingStarted]: (roomId: string) => any;
|
package/lib/models/Event.js
CHANGED
|
@@ -15,4 +15,7 @@ var VaniEvent;
|
|
|
15
15
|
VaniEvent["OnLog"] = "OnLog";
|
|
16
16
|
VaniEvent["OnNewChatMessageReceived"] = "OnNewChatMessageReceived";
|
|
17
17
|
VaniEvent["OnClientPingRecieved"] = "OnClientPingRecieved";
|
|
18
|
+
VaniEvent["OnConsumerScoreChange"] = "OnConsumerScoreChange";
|
|
19
|
+
VaniEvent["OnConsumerLayerChange"] = "OnConsumerLayerChange";
|
|
20
|
+
VaniEvent["OnProducerScoreChange"] = "OnProducerScoreChange";
|
|
18
21
|
})(VaniEvent || (exports.VaniEvent = VaniEvent = {}));
|
|
@@ -29,5 +29,7 @@ class WebSocketServerStartRequest {
|
|
|
29
29
|
isAudioVolumeLevelRequired = true;
|
|
30
30
|
iceServers;
|
|
31
31
|
wssServerHostForCert;
|
|
32
|
+
shouldShareDetailStats = false;
|
|
33
|
+
shouldShareStreamScoreChange = false;
|
|
32
34
|
}
|
|
33
35
|
exports.WebSocketServerStartRequest = WebSocketServerStartRequest;
|
|
@@ -417,7 +417,7 @@ class SFUEachRoomHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
|
|
|
417
417
|
}
|
|
418
418
|
});
|
|
419
419
|
}
|
|
420
|
-
const response = { plainTransportPayload: plainTransportPayload, roomId: this.roomId };
|
|
420
|
+
const response = { plainTransportPayload: plainTransportPayload, roomId: this.roomId, rtpCapabilities: this.sendRouter?.rtpCapabilities };
|
|
421
421
|
EventEmitterHandler_1.EventEmitterHandler.getInstance().vaniEventEmitter.emit(Event_1.VaniEvent.OnPlainTransportCreated, response);
|
|
422
422
|
}
|
|
423
423
|
async consumeProducerForPlainTransport(plainTransport, producer) {
|
|
@@ -21,6 +21,7 @@ export declare class SFUEachRoomUserHandler extends BaseSFUWebsocket {
|
|
|
21
21
|
private resumeConsumer;
|
|
22
22
|
private pauseConsumer;
|
|
23
23
|
private updateSpatialConsumer;
|
|
24
|
+
private addObserverForProducer;
|
|
24
25
|
private onTransportProduceSyncRequest;
|
|
25
26
|
private onResumeProducer;
|
|
26
27
|
private onPauseProducer;
|
|
@@ -11,6 +11,8 @@ const Logs_1 = require("../models/Logs");
|
|
|
11
11
|
const WebSocketServerStartRequest_1 = require("../models/WebSocketServerStartRequest");
|
|
12
12
|
const Utility_1 = require("../utility/Utility");
|
|
13
13
|
const ServerHandler_1 = require("../ServerHandler");
|
|
14
|
+
const EventEmitterHandler_1 = require("../utility/EventEmitterHandler");
|
|
15
|
+
const Event_1 = require("../models/Event");
|
|
14
16
|
class SFUEachRoomUserHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
|
|
15
17
|
isUserPresentInRoom = true;
|
|
16
18
|
selfParticipant;
|
|
@@ -116,6 +118,18 @@ class SFUEachRoomUserHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
|
|
|
116
118
|
consumer.pause();
|
|
117
119
|
}
|
|
118
120
|
});
|
|
121
|
+
if (ServerHandler_1.ServerHandler.getInstance().serverStartRequest.shouldShareStreamScoreChange) {
|
|
122
|
+
consumer.on("score", async (score) => {
|
|
123
|
+
ServerHandler_1.ServerHandler.getInstance().serverStartRequest && ServerHandler_1.ServerHandler.getInstance().serverStartRequest.logLevel !== WebSocketServerStartRequest_1.LogLevel.None && console.log("Consumer score Change - ", JSON.stringify(score), "App Data", JSON.stringify(consumer.appData));
|
|
124
|
+
EventEmitterHandler_1.EventEmitterHandler.getInstance().vaniEventEmitter.emit(Event_1.VaniEvent.OnConsumerScoreChange, { score: score, consumerId: consumer.id, participant: this.selfParticipant });
|
|
125
|
+
this.redisBroadcastMessageToTopic(Utility_1.Utility.getTopicForRoomIdAndIp(this.selfParticipant.roomId, (await Constant_1.default.getPublicIp())), this.preapreClientMessageBody(true, this.selfParticipant, this.preapreWebSocketMessageBody(EachSocketConnectionHandler_1.SFUMessageType.OnConsumerScoreChange, { score: score, consumerId: consumer.id, participant: this.selfParticipant })));
|
|
126
|
+
});
|
|
127
|
+
consumer.on("layerschange", async (layers) => {
|
|
128
|
+
ServerHandler_1.ServerHandler.getInstance().serverStartRequest && ServerHandler_1.ServerHandler.getInstance().serverStartRequest.logLevel !== WebSocketServerStartRequest_1.LogLevel.None && console.log("Consumer layerschange Change - ", JSON.stringify(layers), "App Data", JSON.stringify(consumer.appData));
|
|
129
|
+
EventEmitterHandler_1.EventEmitterHandler.getInstance().vaniEventEmitter.emit(Event_1.VaniEvent.OnConsumerLayerChange, { layer: layers, consumerId: consumer.id, participant: this.selfParticipant });
|
|
130
|
+
this.redisBroadcastMessageToTopic(Utility_1.Utility.getTopicForRoomIdAndIp(this.selfParticipant.roomId, (await Constant_1.default.getPublicIp())), this.preapreClientMessageBody(true, this.selfParticipant, this.preapreWebSocketMessageBody(EachSocketConnectionHandler_1.SFUMessageType.OnConsumerLayerChange, { layer: layers, consumerId: consumer.id, participant: this.selfParticipant })));
|
|
131
|
+
});
|
|
132
|
+
}
|
|
119
133
|
consumer.on("producerresume", () => {
|
|
120
134
|
ServerHandler_1.ServerHandler.getInstance().serverStartRequest && ServerHandler_1.ServerHandler.getInstance().serverStartRequest.logLevel !== WebSocketServerStartRequest_1.LogLevel.None && console.log("producerresume");
|
|
121
135
|
if (consumer.closed === false) {
|
|
@@ -213,11 +227,29 @@ class SFUEachRoomUserHandler extends BaseSFUWebsocket_1.BaseSFUWebsocket {
|
|
|
213
227
|
}
|
|
214
228
|
}
|
|
215
229
|
}
|
|
230
|
+
addObserverForProducer = async (producer) => {
|
|
231
|
+
producer.on("@close", () => {
|
|
232
|
+
try {
|
|
233
|
+
const sfuMessagePayload = { message: { producerId: producer.id }, type: EachSocketConnectionHandler_1.SFUMessageType.OnStopProducer, to: "self" };
|
|
234
|
+
this.onProducerClosed(sfuMessagePayload);
|
|
235
|
+
}
|
|
236
|
+
catch (err) {
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
if (ServerHandler_1.ServerHandler.getInstance().serverStartRequest.shouldShareStreamScoreChange) {
|
|
240
|
+
producer.on("score", async (score) => {
|
|
241
|
+
ServerHandler_1.ServerHandler.getInstance().serverStartRequest && ServerHandler_1.ServerHandler.getInstance().serverStartRequest.logLevel !== WebSocketServerStartRequest_1.LogLevel.None && console.log("producer score Change - ", JSON.stringify(score), "App Data", JSON.stringify(producer.appData));
|
|
242
|
+
EventEmitterHandler_1.EventEmitterHandler.getInstance().vaniEventEmitter.emit(Event_1.VaniEvent.OnProducerScoreChange, { score: score, producerId: producer.id, participant: this.selfParticipant });
|
|
243
|
+
this.redisBroadcastMessageToTopic(Utility_1.Utility.getTopicForRoomIdAndIp(this.selfParticipant.roomId, (await Constant_1.default.getPublicIp())), this.preapreClientMessageBody(true, this.selfParticipant, this.preapreWebSocketMessageBody(EachSocketConnectionHandler_1.SFUMessageType.OnProducerScoreChange, { score: score, producerId: producer.id, participant: this.selfParticipant })));
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
};
|
|
216
247
|
async onTransportProduceSyncRequest(payload) {
|
|
217
248
|
ServerHandler_1.ServerHandler.getInstance().serverStartRequest && ServerHandler_1.ServerHandler.getInstance().serverStartRequest.logLevel !== WebSocketServerStartRequest_1.LogLevel.None && console.log("onTransportProduceSyncRequest");
|
|
218
249
|
if (this.roomHandlerDataSource) {
|
|
219
250
|
const producer = await this.webrtcSendTransport?.produce(payload.message);
|
|
220
251
|
if (producer) {
|
|
252
|
+
this.addObserverForProducer(producer);
|
|
221
253
|
await this.onNewProducer(producer);
|
|
222
254
|
if (producer.kind === 'audio') {
|
|
223
255
|
this.roomHandlerDataSource.addAudioObserverForProducer(producer);
|
|
@@ -67,6 +67,9 @@ export declare enum SFUMessageType {
|
|
|
67
67
|
GetAllProducers = "getAllProducers",
|
|
68
68
|
OnAllProducers = "onAllProducers",
|
|
69
69
|
OnStopProducer = "stopProducer",
|
|
70
|
+
OnConsumerScoreChange = "OnConsumerScoreChange",
|
|
71
|
+
OnProducerScoreChange = "OnProducerScoreChange",
|
|
72
|
+
OnConsumerLayerChange = "OnConsumerLayerChange",
|
|
70
73
|
OnProducerNotFound = "OnProducerNotFound"
|
|
71
74
|
}
|
|
72
75
|
export declare enum MultiSystemEvents {
|
|
@@ -84,6 +84,9 @@ var SFUMessageType;
|
|
|
84
84
|
SFUMessageType["GetAllProducers"] = "getAllProducers";
|
|
85
85
|
SFUMessageType["OnAllProducers"] = "onAllProducers";
|
|
86
86
|
SFUMessageType["OnStopProducer"] = "stopProducer";
|
|
87
|
+
SFUMessageType["OnConsumerScoreChange"] = "OnConsumerScoreChange";
|
|
88
|
+
SFUMessageType["OnProducerScoreChange"] = "OnProducerScoreChange";
|
|
89
|
+
SFUMessageType["OnConsumerLayerChange"] = "OnConsumerLayerChange";
|
|
87
90
|
// },
|
|
88
91
|
// socket
|
|
89
92
|
// );
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vani-meeting-server",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.4",
|
|
4
4
|
"description": "Vani Meeting Server SDK",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -31,11 +31,11 @@
|
|
|
31
31
|
"dotenv": "^16.0.2",
|
|
32
32
|
"express": "^4.18.1",
|
|
33
33
|
"helmet": "^6.0.0",
|
|
34
|
-
"mediasoup": "3.
|
|
34
|
+
"mediasoup": "3.16.0",
|
|
35
35
|
"public-ip": "4.0.3",
|
|
36
36
|
"typescript": "^5.6.2",
|
|
37
37
|
"uuid": "^9.0.0",
|
|
38
|
-
"ws": "^8.
|
|
38
|
+
"ws": "^8.18.2"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@types/uuid": "^8.3.4",
|