vani-meeting-client 1.9.0 → 1.9.2
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/MeetingHandler.d.ts +2 -0
- package/lib/MeetingHandler.js +9 -0
- package/lib/model/Event.d.ts +19 -1
- package/lib/model/Event.js +3 -0
- package/lib/model/TrackStats.d.ts +11 -0
- package/lib/model/TrackStats.js +14 -0
- package/lib/video-call-handler/BaseVideoCallHandler.d.ts +2 -0
- package/lib/video-call-handler/BaseVideoCallHandler.js +7 -1
- package/lib/video-call-handler/SFUHandler.d.ts +5 -0
- package/lib/video-call-handler/SFUHandler.js +119 -0
- package/lib/websocket-handler/WebsocketHandler.d.ts +4 -1
- package/lib/websocket-handler/WebsocketHandler.js +3 -0
- package/package.json +2 -4
package/lib/MeetingHandler.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { GetDevicesType } from "./user-media-handler/UserMediaHandler";
|
|
|
4
4
|
import { Track, TrackKind } from "./model/Track";
|
|
5
5
|
import { TaskResponse } from "./model/TaskResponse";
|
|
6
6
|
import { Participant } from "./model/Participant";
|
|
7
|
+
import { TrackStats } from "./model/TrackStats";
|
|
7
8
|
export declare class MeetingHandler {
|
|
8
9
|
private meetingStartRequest?;
|
|
9
10
|
private videoCallHandler?;
|
|
@@ -23,6 +24,7 @@ export declare class MeetingHandler {
|
|
|
23
24
|
getDevices(deviceType: GetDevicesType): Promise<Device[] | undefined>;
|
|
24
25
|
pauseCamera(userId?: string): Promise<TaskResponse>;
|
|
25
26
|
muteUser(userId?: string): Promise<TaskResponse>;
|
|
27
|
+
getClientStats: () => Promise<TrackStats[] | undefined>;
|
|
26
28
|
resumeCamera(userId?: string): Promise<TaskResponse>;
|
|
27
29
|
unmute(userId?: string): Promise<TaskResponse>;
|
|
28
30
|
resumeStreamWithoutAdding(streamKind: TrackKind): TaskResponse | undefined;
|
package/lib/MeetingHandler.js
CHANGED
|
@@ -69,6 +69,15 @@ var MeetingHandler = /** @class */ (function () {
|
|
|
69
69
|
}
|
|
70
70
|
});
|
|
71
71
|
}); };
|
|
72
|
+
this.getClientStats = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
73
|
+
var _a;
|
|
74
|
+
return __generator(this, function (_b) {
|
|
75
|
+
switch (_b.label) {
|
|
76
|
+
case 0: return [4 /*yield*/, ((_a = this.videoCallHandler) === null || _a === void 0 ? void 0 : _a.getClientStats())];
|
|
77
|
+
case 1: return [2 /*return*/, _b.sent()];
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}); };
|
|
72
81
|
this.restartTransport = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
73
82
|
var _a;
|
|
74
83
|
return __generator(this, function (_b) {
|
package/lib/model/Event.d.ts
CHANGED
|
@@ -33,7 +33,10 @@ export declare enum VaniEvent {
|
|
|
33
33
|
OnReconectionTimeout = "reconectionTimeout",
|
|
34
34
|
OnReconecting = "reconecting",
|
|
35
35
|
OnUserOnFoundWhileReconnect = "onUserOnFoundWhileReconnect",
|
|
36
|
-
OnNewPingFromServer = "OnNewPingFromServer"
|
|
36
|
+
OnNewPingFromServer = "OnNewPingFromServer",
|
|
37
|
+
OnConsumerScoreChange = "OnConsumerScoreChange",
|
|
38
|
+
OnProducerScoreChange = "OnProducerScoreChange",
|
|
39
|
+
OnConsumerLayerChange = "OnConsumerLayerChange"
|
|
37
40
|
}
|
|
38
41
|
interface VaniConnectionEvents {
|
|
39
42
|
[VaniEvent.OnInitDone]: () => any;
|
|
@@ -61,6 +64,21 @@ interface VaniConnectionEvents {
|
|
|
61
64
|
participant: Participant;
|
|
62
65
|
volume: any;
|
|
63
66
|
}) => any;
|
|
67
|
+
[VaniEvent.OnConsumerScoreChange]: (data: {
|
|
68
|
+
participant: Participant;
|
|
69
|
+
track: Track;
|
|
70
|
+
score: any;
|
|
71
|
+
}) => any;
|
|
72
|
+
[VaniEvent.OnProducerScoreChange]: (data: {
|
|
73
|
+
participant: Participant;
|
|
74
|
+
track: Track;
|
|
75
|
+
score: any;
|
|
76
|
+
}) => any;
|
|
77
|
+
[VaniEvent.OnConsumerLayerChange]: (data: {
|
|
78
|
+
participant: Participant;
|
|
79
|
+
track: Track;
|
|
80
|
+
layer: any;
|
|
81
|
+
}) => any;
|
|
64
82
|
[VaniEvent.OnNotReachable]: () => any;
|
|
65
83
|
[VaniEvent.OnReconectionTimeout]: () => any;
|
|
66
84
|
[VaniEvent.OnReconecting]: () => any;
|
package/lib/model/Event.js
CHANGED
|
@@ -32,4 +32,7 @@ export var VaniEvent;
|
|
|
32
32
|
VaniEvent["OnReconecting"] = "reconecting";
|
|
33
33
|
VaniEvent["OnUserOnFoundWhileReconnect"] = "onUserOnFoundWhileReconnect";
|
|
34
34
|
VaniEvent["OnNewPingFromServer"] = "OnNewPingFromServer";
|
|
35
|
+
VaniEvent["OnConsumerScoreChange"] = "OnConsumerScoreChange";
|
|
36
|
+
VaniEvent["OnProducerScoreChange"] = "OnProducerScoreChange";
|
|
37
|
+
VaniEvent["OnConsumerLayerChange"] = "OnConsumerLayerChange";
|
|
35
38
|
})(VaniEvent || (VaniEvent = {}));
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Track } from "./Track";
|
|
2
|
+
export declare enum StreamType {
|
|
3
|
+
Consumer = "Consumer",
|
|
4
|
+
Producer = "Producer"
|
|
5
|
+
}
|
|
6
|
+
export declare class TrackStats {
|
|
7
|
+
track: Track;
|
|
8
|
+
type: StreamType;
|
|
9
|
+
stats: any;
|
|
10
|
+
constructor(_track: Track, _type: StreamType, _stats?: any);
|
|
11
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export var StreamType;
|
|
2
|
+
(function (StreamType) {
|
|
3
|
+
StreamType["Consumer"] = "Consumer";
|
|
4
|
+
StreamType["Producer"] = "Producer";
|
|
5
|
+
})(StreamType || (StreamType = {}));
|
|
6
|
+
var TrackStats = /** @class */ (function () {
|
|
7
|
+
function TrackStats(_track, _type, _stats) {
|
|
8
|
+
this.track = _track;
|
|
9
|
+
this.type = _type;
|
|
10
|
+
this.stats = _stats;
|
|
11
|
+
}
|
|
12
|
+
return TrackStats;
|
|
13
|
+
}());
|
|
14
|
+
export { TrackStats };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Track } from "../model/Track";
|
|
2
2
|
import { WebSocketMessageBody } from "../websocket-handler/WebsocketHandler";
|
|
3
3
|
import { Base } from "../base/Base";
|
|
4
|
+
import { TrackStats } from "../model/TrackStats";
|
|
4
5
|
export declare abstract class BaseVideoCallHandler extends Base {
|
|
5
6
|
protected onObjectCreated(): void;
|
|
6
7
|
abstract init(): Promise<void>;
|
|
@@ -22,4 +23,5 @@ export declare abstract class BaseVideoCallHandler extends Base {
|
|
|
22
23
|
updateSpatialForTrack(track: Track, spatialLayerIndex: number): Promise<void>;
|
|
23
24
|
cleanup(shouldStopTracks?: boolean): void;
|
|
24
25
|
restartTransport(): void;
|
|
26
|
+
getClientStats: () => Promise<TrackStats[]>;
|
|
25
27
|
}
|
|
@@ -55,7 +55,13 @@ import { Base } from "../base/Base";
|
|
|
55
55
|
var BaseVideoCallHandler = /** @class */ (function (_super) {
|
|
56
56
|
__extends(BaseVideoCallHandler, _super);
|
|
57
57
|
function BaseVideoCallHandler() {
|
|
58
|
-
|
|
58
|
+
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|
59
|
+
_this.getClientStats = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
60
|
+
return __generator(this, function (_a) {
|
|
61
|
+
return [2 /*return*/, []];
|
|
62
|
+
});
|
|
63
|
+
}); };
|
|
64
|
+
return _this;
|
|
59
65
|
}
|
|
60
66
|
BaseVideoCallHandler.prototype.onObjectCreated = function () {
|
|
61
67
|
var _a;
|
|
@@ -4,6 +4,7 @@ import { Track } from "../model/Track";
|
|
|
4
4
|
import { Consumer } from "mediasoup-client/lib/Consumer";
|
|
5
5
|
import { MeetingStartRequest } from '..';
|
|
6
6
|
import { CommunicationHandler } from '../inter-communication-handler/CommunicationHandler';
|
|
7
|
+
import { TrackStats } from '../model/TrackStats';
|
|
7
8
|
export declare class SFUHandler extends BaseVideoCallHandler {
|
|
8
9
|
private device?;
|
|
9
10
|
private transportCallBacks;
|
|
@@ -50,8 +51,12 @@ export declare class SFUHandler extends BaseVideoCallHandler {
|
|
|
50
51
|
private onProducerNotFound;
|
|
51
52
|
private onTrackEnded;
|
|
52
53
|
private onNewProducer;
|
|
54
|
+
onConsumerScoreChange: (data: any) => Promise<void>;
|
|
55
|
+
onProducerScoreChange: (data: any) => Promise<void>;
|
|
56
|
+
onConsumerLayerChange: (data: any) => Promise<void>;
|
|
53
57
|
private onServerConsumer;
|
|
54
58
|
private onAudioVolumeChanged;
|
|
55
59
|
private onSpeakerChanged;
|
|
60
|
+
getClientStats: () => Promise<TrackStats[]>;
|
|
56
61
|
cleanup(shouldStopTracks?: boolean): void;
|
|
57
62
|
}
|
|
@@ -66,6 +66,7 @@ import { detectDevice, Device } from 'mediasoup-client';
|
|
|
66
66
|
import { SFUMessageType } from "../websocket-handler/WebsocketHandler";
|
|
67
67
|
import { Track, TrackKind } from "../model/Track";
|
|
68
68
|
import { LogLevel, VaniEvent } from '..';
|
|
69
|
+
import { StreamType, TrackStats } from '../model/TrackStats';
|
|
69
70
|
var SFUHandler = /** @class */ (function (_super) {
|
|
70
71
|
__extends(SFUHandler, _super);
|
|
71
72
|
function SFUHandler(_meetingStartRequest, _communicationHandler) {
|
|
@@ -97,6 +98,115 @@ var SFUHandler = /** @class */ (function (_super) {
|
|
|
97
98
|
}
|
|
98
99
|
}
|
|
99
100
|
};
|
|
101
|
+
_this.onConsumerScoreChange = function (data) { return __awaiter(_this, void 0, void 0, function () {
|
|
102
|
+
var score, consumerId, consumedProducer, track;
|
|
103
|
+
var _a, _b;
|
|
104
|
+
return __generator(this, function (_c) {
|
|
105
|
+
this.meetingStartRequest && this.meetingStartRequest.logLevel === LogLevel.Debug && log.info("onConsumerScoreChange", data);
|
|
106
|
+
score = data.score;
|
|
107
|
+
consumerId = data.consumerId;
|
|
108
|
+
consumedProducer = this.consumers.find(function (eachConsumer) { return eachConsumer.id === consumerId; });
|
|
109
|
+
if (consumedProducer) {
|
|
110
|
+
track = (_a = this.communicationHandler) === null || _a === void 0 ? void 0 : _a.getAllTracks().find(function (eachTrack) { return consumedProducer.appData.producerData.trackId === eachTrack.trackId; });
|
|
111
|
+
(_b = this.communicationHandler) === null || _b === void 0 ? void 0 : _b.emitMessageToSource(VaniEvent.OnConsumerScoreChange, { track: track, score: score, participant: track === null || track === void 0 ? void 0 : track.participant });
|
|
112
|
+
}
|
|
113
|
+
return [2 /*return*/];
|
|
114
|
+
});
|
|
115
|
+
}); };
|
|
116
|
+
_this.onProducerScoreChange = function (data) { return __awaiter(_this, void 0, void 0, function () {
|
|
117
|
+
var score, producerId, producer, consumedProducer, track, track;
|
|
118
|
+
var _a, _b, _c, _d;
|
|
119
|
+
return __generator(this, function (_e) {
|
|
120
|
+
this.meetingStartRequest && this.meetingStartRequest.logLevel === LogLevel.Debug && log.info("onProducerScoreChange", data);
|
|
121
|
+
score = data.score;
|
|
122
|
+
producerId = data.producerId;
|
|
123
|
+
producer = this.producers.find(function (producer) { return producer.id === producerId; });
|
|
124
|
+
consumedProducer = this.consumers.find(function (eachConsumer) { return eachConsumer.producerId === producerId; });
|
|
125
|
+
if (consumedProducer) {
|
|
126
|
+
track = (_a = this.communicationHandler) === null || _a === void 0 ? void 0 : _a.getAllTracks().find(function (eachTrack) { return consumedProducer.appData.producerData.trackId === eachTrack.trackId; });
|
|
127
|
+
(_b = this.communicationHandler) === null || _b === void 0 ? void 0 : _b.emitMessageToSource(VaniEvent.OnProducerScoreChange, { track: track, score: score, participant: track === null || track === void 0 ? void 0 : track.participant });
|
|
128
|
+
}
|
|
129
|
+
if (producer) {
|
|
130
|
+
track = (_c = this.communicationHandler) === null || _c === void 0 ? void 0 : _c.getAllTracks().find(function (eachTrack) { return (producer.appData).trackId === eachTrack.trackId; });
|
|
131
|
+
if (track) {
|
|
132
|
+
(_d = this.communicationHandler) === null || _d === void 0 ? void 0 : _d.emitMessageToSource(VaniEvent.OnProducerScoreChange, { track: track, score: score, participant: track === null || track === void 0 ? void 0 : track.participant });
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return [2 /*return*/];
|
|
136
|
+
});
|
|
137
|
+
}); };
|
|
138
|
+
_this.onConsumerLayerChange = function (data) { return __awaiter(_this, void 0, void 0, function () {
|
|
139
|
+
var layer, consumerId, consumer, track;
|
|
140
|
+
var _a, _b;
|
|
141
|
+
return __generator(this, function (_c) {
|
|
142
|
+
this.meetingStartRequest && this.meetingStartRequest.logLevel === LogLevel.Debug && log.info("onConsumerLayerChange", data);
|
|
143
|
+
layer = data.layer;
|
|
144
|
+
consumerId = data.consumerId;
|
|
145
|
+
consumer = this.consumers.find(function (consumer) { return consumer.id === consumerId; });
|
|
146
|
+
if (consumer) {
|
|
147
|
+
track = (_a = this.communicationHandler) === null || _a === void 0 ? void 0 : _a.getAllTracks().find(function (eachTrack) { return consumer.appData.producerData.trackId === eachTrack.trackId; });
|
|
148
|
+
if (track) {
|
|
149
|
+
(_b = this.communicationHandler) === null || _b === void 0 ? void 0 : _b.emitMessageToSource(VaniEvent.OnConsumerLayerChange, { track: track, layer: layer, participant: track.participant });
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return [2 /*return*/];
|
|
153
|
+
});
|
|
154
|
+
}); };
|
|
155
|
+
_this.getClientStats = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
156
|
+
var allStats, allTracks, _loop_1, this_1, _i, allTracks_1, track;
|
|
157
|
+
var _a;
|
|
158
|
+
return __generator(this, function (_b) {
|
|
159
|
+
switch (_b.label) {
|
|
160
|
+
case 0:
|
|
161
|
+
allStats = [];
|
|
162
|
+
if (!this.communicationHandler) return [3 /*break*/, 4];
|
|
163
|
+
allTracks = (_a = this.communicationHandler) === null || _a === void 0 ? void 0 : _a.getAllTracks();
|
|
164
|
+
_loop_1 = function (track) {
|
|
165
|
+
var trackId, consumer, _c, _d, _e, _f, producer, _g, _h, _j, _k;
|
|
166
|
+
return __generator(this, function (_l) {
|
|
167
|
+
switch (_l.label) {
|
|
168
|
+
case 0:
|
|
169
|
+
trackId = track.trackId;
|
|
170
|
+
consumer = this_1.consumers.find(function (consumer) { return consumer.appData.producerData.trackId === trackId; });
|
|
171
|
+
if (!consumer) return [3 /*break*/, 2];
|
|
172
|
+
_d = (_c = allStats).push;
|
|
173
|
+
_e = TrackStats.bind;
|
|
174
|
+
_f = [void 0, track, StreamType.Consumer];
|
|
175
|
+
return [4 /*yield*/, consumer.getStats()];
|
|
176
|
+
case 1:
|
|
177
|
+
_d.apply(_c, [new (_e.apply(TrackStats, _f.concat([_l.sent()])))()]);
|
|
178
|
+
return [3 /*break*/, 4];
|
|
179
|
+
case 2:
|
|
180
|
+
producer = this_1.producers.find(function (producer) { return (producer.appData).trackId === trackId; });
|
|
181
|
+
if (!producer) return [3 /*break*/, 4];
|
|
182
|
+
_h = (_g = allStats).push;
|
|
183
|
+
_j = TrackStats.bind;
|
|
184
|
+
_k = [void 0, track, StreamType.Producer];
|
|
185
|
+
return [4 /*yield*/, producer.getStats()];
|
|
186
|
+
case 3:
|
|
187
|
+
_h.apply(_g, [new (_j.apply(TrackStats, _k.concat([_l.sent()])))()]);
|
|
188
|
+
_l.label = 4;
|
|
189
|
+
case 4: return [2 /*return*/];
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
};
|
|
193
|
+
this_1 = this;
|
|
194
|
+
_i = 0, allTracks_1 = allTracks;
|
|
195
|
+
_b.label = 1;
|
|
196
|
+
case 1:
|
|
197
|
+
if (!(_i < allTracks_1.length)) return [3 /*break*/, 4];
|
|
198
|
+
track = allTracks_1[_i];
|
|
199
|
+
return [5 /*yield**/, _loop_1(track)];
|
|
200
|
+
case 2:
|
|
201
|
+
_b.sent();
|
|
202
|
+
_b.label = 3;
|
|
203
|
+
case 3:
|
|
204
|
+
_i++;
|
|
205
|
+
return [3 /*break*/, 1];
|
|
206
|
+
case 4: return [2 /*return*/, allStats];
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
}); };
|
|
100
210
|
var handlerName = detectDevice();
|
|
101
211
|
if (handlerName) {
|
|
102
212
|
_this.device = new Device();
|
|
@@ -614,6 +724,15 @@ var SFUHandler = /** @class */ (function (_super) {
|
|
|
614
724
|
else if (websocketCallHandler.type === SFUMessageType.OnServerConsumer) {
|
|
615
725
|
this.onServerConsumer(websocketCallHandler.data);
|
|
616
726
|
}
|
|
727
|
+
else if (websocketCallHandler.type === SFUMessageType.OnConsumerLayerChange) {
|
|
728
|
+
this.onConsumerLayerChange(websocketCallHandler.data);
|
|
729
|
+
}
|
|
730
|
+
else if (websocketCallHandler.type === SFUMessageType.OnConsumerScoreChange) {
|
|
731
|
+
this.onConsumerScoreChange(websocketCallHandler.data);
|
|
732
|
+
}
|
|
733
|
+
else if (websocketCallHandler.type === SFUMessageType.OnProducerScoreChange) {
|
|
734
|
+
this.onProducerScoreChange(websocketCallHandler.data);
|
|
735
|
+
}
|
|
617
736
|
else if (websocketCallHandler.type === SFUMessageType.OnProduceSyncDone) {
|
|
618
737
|
this.onProduceSyncDone(websocketCallHandler.data);
|
|
619
738
|
}
|
|
@@ -65,7 +65,10 @@ export declare enum SFUMessageType {
|
|
|
65
65
|
OnAllProducers = "onAllProducers",
|
|
66
66
|
OnAudioVolumeChanged = "OnAudioVolumeChanged",
|
|
67
67
|
OnConsumerNotFound = "OnConsumerNotFound",
|
|
68
|
-
OnProducerNotFound = "OnProducerNotFound"
|
|
68
|
+
OnProducerNotFound = "OnProducerNotFound",
|
|
69
|
+
OnConsumerScoreChange = "OnConsumerScoreChange",
|
|
70
|
+
OnProducerScoreChange = "OnProducerScoreChange",
|
|
71
|
+
OnConsumerLayerChange = "OnConsumerLayerChange"
|
|
69
72
|
}
|
|
70
73
|
export type WebSocketEvents = SFUMessageType | WebSocketBasicEvents;
|
|
71
74
|
export interface WebSocketMessageBody {
|
|
@@ -122,6 +122,9 @@ export var SFUMessageType;
|
|
|
122
122
|
SFUMessageType["OnAudioVolumeChanged"] = "OnAudioVolumeChanged";
|
|
123
123
|
SFUMessageType["OnConsumerNotFound"] = "OnConsumerNotFound";
|
|
124
124
|
SFUMessageType["OnProducerNotFound"] = "OnProducerNotFound";
|
|
125
|
+
SFUMessageType["OnConsumerScoreChange"] = "OnConsumerScoreChange";
|
|
126
|
+
SFUMessageType["OnProducerScoreChange"] = "OnProducerScoreChange";
|
|
127
|
+
SFUMessageType["OnConsumerLayerChange"] = "OnConsumerLayerChange";
|
|
125
128
|
})(SFUMessageType || (SFUMessageType = {}));
|
|
126
129
|
var ConnectionType;
|
|
127
130
|
(function (ConnectionType) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vani-meeting-client",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.2",
|
|
4
4
|
"description": "Vani Meeting Clinet SDK",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -42,11 +42,9 @@
|
|
|
42
42
|
"typescript": "^4.5.2"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@analytics/google-analytics": "^0.5.3",
|
|
46
|
-
"analytics": "^0.7.21",
|
|
47
45
|
"axios": "^0.24.0",
|
|
48
46
|
"loglevel": "^1.8.0",
|
|
49
|
-
"mediasoup-client": "^3.
|
|
47
|
+
"mediasoup-client": "^3.11.0"
|
|
50
48
|
},
|
|
51
49
|
"optionalDependencies": {}
|
|
52
50
|
}
|