@observertc/observer-js 0.40.3-beta → 0.40.5-beta
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/CallSummary.d.ts +2 -9
- package/lib/CallSummary.d.ts.map +1 -1
- package/lib/ObservedCall.d.ts +2 -0
- package/lib/ObservedCall.d.ts.map +1 -1
- package/lib/ObservedCall.js +8 -0
- package/lib/ObservedClient.d.ts +20 -2
- package/lib/ObservedClient.d.ts.map +1 -1
- package/lib/ObservedClient.js +57 -18
- package/lib/ObservedDataChannel.d.ts +1 -0
- package/lib/ObservedDataChannel.d.ts.map +1 -1
- package/lib/ObservedDataChannel.js +1 -1
- package/lib/ObservedICE.d.ts +1 -0
- package/lib/ObservedICE.d.ts.map +1 -1
- package/lib/ObservedICE.js +1 -1
- package/lib/ObservedInboundTrack.d.ts +1 -0
- package/lib/ObservedInboundTrack.d.ts.map +1 -1
- package/lib/ObservedInboundTrack.js +1 -1
- package/lib/ObservedOutboundTrack.d.ts +1 -0
- package/lib/ObservedOutboundTrack.d.ts.map +1 -1
- package/lib/ObservedOutboundTrack.js +2 -1
- package/lib/ObservedPeerConnection.d.ts +6 -3
- package/lib/ObservedPeerConnection.d.ts.map +1 -1
- package/lib/ObservedPeerConnection.js +51 -42
- package/lib/ObservedSfu.d.ts +12 -0
- package/lib/ObservedSfu.d.ts.map +1 -1
- package/lib/ObservedSfu.js +76 -0
- package/lib/ObservedSfuInboundRtpPad.d.ts +38 -0
- package/lib/ObservedSfuInboundRtpPad.d.ts.map +1 -0
- package/lib/ObservedSfuInboundRtpPad.js +67 -0
- package/lib/ObservedSfuOutboundRtpPad.d.ts +38 -0
- package/lib/ObservedSfuOutboundRtpPad.d.ts.map +1 -0
- package/lib/ObservedSfuOutboundRtpPad.js +68 -0
- package/lib/ObservedSfuSctpChannel.d.ts +38 -0
- package/lib/ObservedSfuSctpChannel.d.ts.map +1 -0
- package/lib/ObservedSfuSctpChannel.js +53 -0
- package/lib/ObservedSfuTransport.d.ts +54 -0
- package/lib/ObservedSfuTransport.d.ts.map +1 -0
- package/lib/ObservedSfuTransport.js +116 -0
- package/lib/Observer.d.ts +5 -0
- package/lib/Observer.d.ts.map +1 -1
- package/lib/Observer.js +21 -0
- package/package.json +1 -1
- package/src/CallSummary.ts +2 -10
- package/src/ObservedCall.ts +9 -0
- package/src/ObservedClient.ts +71 -21
- package/src/ObservedDataChannel.ts +2 -0
- package/src/ObservedICE.ts +3 -0
- package/src/ObservedInboundTrack.ts +2 -0
- package/src/ObservedOutboundTrack.ts +3 -0
- package/src/ObservedPeerConnection.ts +56 -45
- package/src/ObservedSfu.ts +118 -2
- package/src/ObservedSfuInboundRtpPad.ts +100 -0
- package/src/ObservedSfuOutboundRtpPad.ts +101 -0
- package/src/ObservedSfuSctpChannel.ts +97 -0
- package/src/ObservedSfuTransport.ts +179 -0
- package/src/Observer.ts +31 -1
|
@@ -25,9 +25,9 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
25
25
|
this.totalReceivedVideoPackets = 0;
|
|
26
26
|
this.totalReceivedAudioBytes = 0;
|
|
27
27
|
this.totalReceivedVideoBytes = 0;
|
|
28
|
-
this.
|
|
29
|
-
this.
|
|
30
|
-
this.
|
|
28
|
+
this.deltaInboundPacketsLost = 0;
|
|
29
|
+
this.deltaInboundPacketsReceived = 0;
|
|
30
|
+
this.deltaOutboundPacketsSent = 0;
|
|
31
31
|
this.deltaDataChannelBytesSent = 0;
|
|
32
32
|
this.deltaDataChannelBytesReceived = 0;
|
|
33
33
|
this.deltaInboundReceivedBytes = 0;
|
|
@@ -116,6 +116,18 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
116
116
|
get uptimeInMs() {
|
|
117
117
|
return this._updated - this.created;
|
|
118
118
|
}
|
|
119
|
+
get marker() {
|
|
120
|
+
return this._marker;
|
|
121
|
+
}
|
|
122
|
+
set marker(value) {
|
|
123
|
+
this._marker = value;
|
|
124
|
+
this._inboundAudioTracks.forEach((track) => (track.marker = value));
|
|
125
|
+
this._inboundVideoTracks.forEach((track) => (track.marker = value));
|
|
126
|
+
this._outboundAudioTracks.forEach((track) => (track.marker = value));
|
|
127
|
+
this._outboundVideoTracks.forEach((track) => (track.marker = value));
|
|
128
|
+
this._dataChannels.forEach((channel) => (channel.marker = value));
|
|
129
|
+
this.ICE.marker = value;
|
|
130
|
+
}
|
|
119
131
|
get closed() {
|
|
120
132
|
return this._closed;
|
|
121
133
|
}
|
|
@@ -134,9 +146,9 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
134
146
|
return (_c = (_b = (_a = this._inboundAudioTracks.get(trackId)) !== null && _a !== void 0 ? _a : this._inboundVideoTracks.get(trackId)) !== null && _b !== void 0 ? _b : this._outboundAudioTracks.get(trackId)) !== null && _c !== void 0 ? _c : this._outboundVideoTracks.get(trackId);
|
|
135
147
|
}
|
|
136
148
|
resetMetrics() {
|
|
137
|
-
this.
|
|
138
|
-
this.
|
|
139
|
-
this.
|
|
149
|
+
this.deltaInboundPacketsLost = 0;
|
|
150
|
+
this.deltaInboundPacketsReceived = 0;
|
|
151
|
+
this.deltaOutboundPacketsSent = 0;
|
|
140
152
|
this.deltaDataChannelBytesSent = 0;
|
|
141
153
|
this.deltaDataChannelBytesReceived = 0;
|
|
142
154
|
this.deltaReceivedAudioBytes = 0;
|
|
@@ -149,78 +161,62 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
149
161
|
this._outboundVideoTracks.forEach((track) => track.resetMetrics());
|
|
150
162
|
}
|
|
151
163
|
updateMetrics() {
|
|
164
|
+
// this.totalInboundPacketsLost = 0;
|
|
165
|
+
// this.totalInboundPacketsReceived = 0;
|
|
166
|
+
// this.totalOutboundPacketsSent = 0;
|
|
167
|
+
// this.totalDataChannelBytesSent = 0;
|
|
168
|
+
// this.totalDataChannelBytesReceived = 0;
|
|
152
169
|
var _a;
|
|
153
|
-
this.
|
|
154
|
-
this.
|
|
155
|
-
this.
|
|
156
|
-
this.
|
|
157
|
-
this.
|
|
158
|
-
this.
|
|
159
|
-
this.
|
|
160
|
-
this.
|
|
161
|
-
this.totalReceivedVideoBytes = 0;
|
|
162
|
-
this.sendingAudioBitrate = 0;
|
|
163
|
-
this.sendingVideoBitrate = 0;
|
|
164
|
-
this.receivingAudioBitrate = 0;
|
|
165
|
-
this.receivingVideoBitrate = 0;
|
|
170
|
+
// this.totalSentAudioBytes = 0;
|
|
171
|
+
// this.totalSentVideoBytes = 0;
|
|
172
|
+
// this.totalReceivedAudioBytes = 0;
|
|
173
|
+
// this.totalReceivedVideoBytes = 0;
|
|
174
|
+
// this.sendingAudioBitrate = 0;
|
|
175
|
+
// this.sendingVideoBitrate = 0;
|
|
176
|
+
// this.receivingAudioBitrate = 0;
|
|
177
|
+
// this.receivingVideoBitrate = 0;
|
|
166
178
|
let sumRttInMs = 0;
|
|
167
179
|
this._inboundAudioTracks.forEach((track) => {
|
|
168
180
|
var _a;
|
|
169
|
-
this.
|
|
170
|
-
this.
|
|
181
|
+
this.deltaInboundPacketsLost += track.deltaLostPackets;
|
|
182
|
+
this.deltaInboundPacketsReceived += track.deltaReceivedPackets;
|
|
171
183
|
this.deltaInboundReceivedBytes += track.deltaBytesReceived;
|
|
172
184
|
this.deltaReceivedAudioBytes += track.deltaBytesReceived;
|
|
173
185
|
this.deltaReceivedAudioPackets += track.deltaReceivedPackets;
|
|
174
186
|
this.receivingAudioBitrate += track.bitrate;
|
|
175
|
-
this.totalInboundPacketsLost += track.totalLostPackets;
|
|
176
|
-
this.totalInboundPacketsReceived += track.totalReceivedPackets;
|
|
177
|
-
this.totalReceivedAudioBytes += track.totalBytesReceived;
|
|
178
|
-
this.totalReceivedAudioPacktes += track.totalReceivedPackets;
|
|
179
187
|
sumRttInMs = ((_a = track.rttInMs) !== null && _a !== void 0 ? _a : 0);
|
|
180
188
|
});
|
|
181
189
|
this._inboundVideoTracks.forEach((track) => {
|
|
182
190
|
var _a;
|
|
183
|
-
this.
|
|
184
|
-
this.
|
|
191
|
+
this.deltaInboundPacketsLost += track.deltaLostPackets;
|
|
192
|
+
this.deltaInboundPacketsReceived += track.deltaReceivedPackets;
|
|
185
193
|
this.deltaInboundReceivedBytes += track.deltaBytesReceived;
|
|
186
194
|
this.deltaReceivedVideoBytes += track.deltaBytesReceived;
|
|
187
195
|
this.deltaReceivedVideoPackets += track.deltaReceivedPackets;
|
|
188
196
|
this.receivingVideoBitrate += track.bitrate;
|
|
189
|
-
this.totalInboundPacketsLost += track.totalLostPackets;
|
|
190
|
-
this.totalInboundPacketsReceived += track.totalReceivedPackets;
|
|
191
|
-
this.totalReceivedVideoBytes += track.totalBytesReceived;
|
|
192
|
-
this.totalReceivedVideoPackets += track.totalReceivedPackets;
|
|
193
197
|
sumRttInMs = ((_a = track.rttInMs) !== null && _a !== void 0 ? _a : 0);
|
|
194
198
|
});
|
|
195
199
|
this._outboundAudioTracks.forEach((track) => {
|
|
196
200
|
var _a;
|
|
197
|
-
this.
|
|
201
|
+
this.deltaOutboundPacketsSent += track.deltaSentPackets;
|
|
198
202
|
this.deltaOutboundSentBytes += track.deltaSentBytes;
|
|
199
203
|
this.deltaSentAudioBytes += track.deltaSentBytes;
|
|
200
204
|
this.deltaSentAudioBytes += track.deltaSentPackets;
|
|
201
205
|
this.sendingAudioBitrate += track.bitrate;
|
|
202
|
-
this.totalOutboundPacketsSent += track.totalSentPackets;
|
|
203
|
-
this.totalSentAudioBytes += track.totalSentBytes;
|
|
204
|
-
this.totalSentAudioPackets += track.totalSentPackets;
|
|
205
206
|
sumRttInMs = ((_a = track.rttInMs) !== null && _a !== void 0 ? _a : 0);
|
|
206
207
|
});
|
|
207
208
|
this._outboundVideoTracks.forEach((track) => {
|
|
208
209
|
var _a;
|
|
209
|
-
this.
|
|
210
|
+
this.deltaOutboundPacketsSent += track.deltaSentPackets;
|
|
210
211
|
this.deltaOutboundSentBytes += track.deltaSentBytes;
|
|
211
212
|
this.deltaSentVideoBytes += track.deltaSentBytes;
|
|
212
213
|
this.deltaSentVideoBytes += track.deltaSentPackets;
|
|
213
214
|
this.sendingVideoBitrate += track.bitrate;
|
|
214
|
-
this.totalOutboundPacketsSent += track.totalSentPackets;
|
|
215
|
-
this.totalSentVideoBytes += track.totalSentBytes;
|
|
216
|
-
this.totalSentVideoPackets += track.totalSentPackets;
|
|
217
215
|
sumRttInMs = ((_a = track.rttInMs) !== null && _a !== void 0 ? _a : 0);
|
|
218
216
|
});
|
|
219
217
|
this._dataChannels.forEach((channel) => {
|
|
220
218
|
this.deltaDataChannelBytesSent += channel.deltaBytesSent;
|
|
221
219
|
this.deltaDataChannelBytesReceived += channel.deltaBytesReceived;
|
|
222
|
-
this.totalDataChannelBytesSent += channel.totalBytesSent;
|
|
223
|
-
this.totalDataChannelBytesReceived += channel.totalBytesReceived;
|
|
224
220
|
});
|
|
225
221
|
const iceRttInMs = (_a = this.ICE.stats) === null || _a === void 0 ? void 0 : _a.currentRoundTripTime;
|
|
226
222
|
let nrOfBelongings = this._inboundAudioTracks.size + this._inboundVideoTracks.size + this._outboundAudioTracks.size + this._outboundVideoTracks.size;
|
|
@@ -229,6 +225,19 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
229
225
|
nrOfBelongings += 1;
|
|
230
226
|
}
|
|
231
227
|
this.avgRttInMs = 0 < nrOfBelongings ? sumRttInMs / nrOfBelongings : undefined;
|
|
228
|
+
this.totalDataChannelBytesReceived += this.deltaDataChannelBytesReceived;
|
|
229
|
+
this.totalDataChannelBytesSent += this.deltaDataChannelBytesSent;
|
|
230
|
+
this.totalInboundPacketsLost += this.deltaInboundPacketsLost;
|
|
231
|
+
this.totalInboundPacketsReceived += this.deltaInboundPacketsReceived;
|
|
232
|
+
this.totalOutboundPacketsSent += this.deltaOutboundPacketsSent;
|
|
233
|
+
this.totalSentAudioBytes += this.deltaSentAudioBytes;
|
|
234
|
+
this.totalSentVideoBytes += this.deltaSentVideoBytes;
|
|
235
|
+
this.totalReceivedAudioBytes += this.deltaReceivedAudioBytes;
|
|
236
|
+
this.totalReceivedVideoBytes += this.deltaReceivedVideoBytes;
|
|
237
|
+
this.totalReceivedAudioPacktes += this.deltaReceivedAudioPackets;
|
|
238
|
+
this.totalReceivedVideoPackets += this.deltaReceivedVideoPackets;
|
|
239
|
+
this.totalSentAudioPackets += this.deltaSentAudioBytes;
|
|
240
|
+
this.totalSentVideoPackets += this.deltaSentVideoBytes;
|
|
232
241
|
}
|
|
233
242
|
update(sample, timestamp) {
|
|
234
243
|
if (this._closed)
|
|
@@ -239,7 +248,7 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
239
248
|
if (this._model.label !== sample.label) {
|
|
240
249
|
this._model.label = sample.label;
|
|
241
250
|
}
|
|
242
|
-
const report = Object.assign(Object.assign({ serviceId: this.client.call.serviceId, roomId: this.client.call.roomId, callId: this.client.call.callId, clientId: this.client.clientId, userId: this.client.userId, mediaUnitId: this.client.mediaUnitId }, sample), { timestamp, sampleSeq: -1 });
|
|
251
|
+
const report = Object.assign(Object.assign({ serviceId: this.client.call.serviceId, roomId: this.client.call.roomId, callId: this.client.call.callId, clientId: this.client.clientId, userId: this.client.userId, mediaUnitId: this.client.mediaUnitId }, sample), { timestamp, sampleSeq: -1, marker: this.marker });
|
|
243
252
|
this.reports.addPeerConnectionTransportReports(report);
|
|
244
253
|
this._updated = Date.now();
|
|
245
254
|
this.emit('update');
|
package/lib/ObservedSfu.d.ts
CHANGED
|
@@ -2,14 +2,17 @@
|
|
|
2
2
|
import { EventEmitter } from 'events';
|
|
3
3
|
import { Observer } from './Observer';
|
|
4
4
|
import { SfuSample } from '@observertc/sample-schemas-js';
|
|
5
|
+
import { ObservedSfuTransport } from './ObservedSfuTransport';
|
|
5
6
|
export type ObservedSfuModel = {
|
|
6
7
|
serviceId: string;
|
|
8
|
+
mediaUnitId: string;
|
|
7
9
|
sfuId: string;
|
|
8
10
|
joined?: number;
|
|
9
11
|
};
|
|
10
12
|
export type ObservedSfuEvents = {
|
|
11
13
|
update: [];
|
|
12
14
|
close: [];
|
|
15
|
+
newtransport: [ObservedSfuTransport];
|
|
13
16
|
};
|
|
14
17
|
export declare interface ObservedSfu<AppData extends Record<string, unknown> = Record<string, unknown>> {
|
|
15
18
|
on<U extends keyof ObservedSfuEvents>(event: U, listener: (...args: ObservedSfuEvents[U]) => void): this;
|
|
@@ -26,12 +29,21 @@ export declare class ObservedSfu<AppData extends Record<string, unknown> = Recor
|
|
|
26
29
|
readonly created: number;
|
|
27
30
|
private _updated;
|
|
28
31
|
private _closed;
|
|
32
|
+
private _marker?;
|
|
33
|
+
private _timeZoneOffsetInHours?;
|
|
34
|
+
private _left?;
|
|
35
|
+
private readonly _transports;
|
|
29
36
|
constructor(_model: ObservedSfuModel, observer: Observer, appData: AppData);
|
|
37
|
+
get marker(): string | undefined;
|
|
38
|
+
get reports(): import("./ReportsCollector").ReportsCollector;
|
|
30
39
|
get serviceId(): string;
|
|
40
|
+
get mediaUnitId(): string;
|
|
31
41
|
get sfuId(): string;
|
|
32
42
|
get joined(): number;
|
|
43
|
+
get transports(): ReadonlyMap<string, ObservedSfuTransport>;
|
|
33
44
|
get updated(): number;
|
|
34
45
|
get closed(): boolean;
|
|
35
46
|
close(): void;
|
|
47
|
+
private _createTransport;
|
|
36
48
|
}
|
|
37
49
|
//# sourceMappingURL=ObservedSfu.d.ts.map
|
package/lib/ObservedSfu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedSfu.d.ts","sourceRoot":"","sources":["../src/ObservedSfu.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"ObservedSfu.d.ts","sourceRoot":"","sources":["../src/ObservedSfu.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAA6B,MAAM,wBAAwB,CAAC;AAGzF,MAAM,MAAM,gBAAgB,GAAE;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC/B,MAAM,EAAE,EAAE,CAAC;IACX,KAAK,EAAE,EAAE,CAAC;IACV,YAAY,EAAE,CAAC,oBAAoB,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,WAAW,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACrG,EAAE,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACzG,GAAG,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1G,IAAI,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC3G,IAAI,CAAC,CAAC,SAAS,MAAM,iBAAiB,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAE1F,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC;CAChC;AAED,qBAAa,WAAW,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,SAAQ,YAAY;IAY9G,OAAO,CAAC,QAAQ,CAAC,MAAM;aACP,QAAQ,EAAE,QAAQ;aAClB,OAAO,EAAE,OAAO;IAbjC,SAAgB,OAAO,SAAc;IAErC,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,sBAAsB,CAAC,CAAS;IACxC,OAAO,CAAC,KAAK,CAAC,CAAS;IAEvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2C;gBAGrD,MAAM,EAAE,gBAAgB,EACzB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO;IAMjC,IAAW,MAAM,uBAEhB;IAED,IAAW,OAAO,kDAEjB;IAED,IAAW,SAAS,WAGnB;IAED,IAAW,WAAW,WAErB;IAED,IAAW,KAAK,WAGf;IAED,IAAW,MAAM,WAGhB;IAED,IAAW,UAAU,IAAI,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAEjE;IAED,IAAW,OAAO,WAEjB;IAED,IAAW,MAAM,YAEhB;IAEM,KAAK;IA4FZ,OAAO,CAAC,gBAAgB;CAYxB"}
|
package/lib/ObservedSfu.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ObservedSfu = void 0;
|
|
4
4
|
const events_1 = require("events");
|
|
5
|
+
const ObservedSfuTransport_1 = require("./ObservedSfuTransport");
|
|
5
6
|
class ObservedSfu extends events_1.EventEmitter {
|
|
6
7
|
constructor(_model, observer, appData) {
|
|
7
8
|
super();
|
|
@@ -11,12 +12,22 @@ class ObservedSfu extends events_1.EventEmitter {
|
|
|
11
12
|
this.created = Date.now();
|
|
12
13
|
this._updated = Date.now();
|
|
13
14
|
this._closed = false;
|
|
15
|
+
this._transports = new Map();
|
|
14
16
|
this.setMaxListeners(Infinity);
|
|
15
17
|
}
|
|
18
|
+
get marker() {
|
|
19
|
+
return this._marker;
|
|
20
|
+
}
|
|
21
|
+
get reports() {
|
|
22
|
+
return this.observer.reports;
|
|
23
|
+
}
|
|
16
24
|
get serviceId() {
|
|
17
25
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
18
26
|
return this._model.serviceId;
|
|
19
27
|
}
|
|
28
|
+
get mediaUnitId() {
|
|
29
|
+
return this._model.mediaUnitId;
|
|
30
|
+
}
|
|
20
31
|
get sfuId() {
|
|
21
32
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
22
33
|
return this._model.sfuId;
|
|
@@ -25,6 +36,9 @@ class ObservedSfu extends events_1.EventEmitter {
|
|
|
25
36
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
26
37
|
return Number(this._model.joined);
|
|
27
38
|
}
|
|
39
|
+
get transports() {
|
|
40
|
+
return this._transports;
|
|
41
|
+
}
|
|
28
42
|
get updated() {
|
|
29
43
|
return this._updated;
|
|
30
44
|
}
|
|
@@ -35,15 +49,77 @@ class ObservedSfu extends events_1.EventEmitter {
|
|
|
35
49
|
if (this._closed)
|
|
36
50
|
return;
|
|
37
51
|
this._closed = true;
|
|
52
|
+
[...this._transports.values()].forEach((transport) => transport.close());
|
|
38
53
|
this.emit('close');
|
|
39
54
|
}
|
|
40
55
|
update(sample) {
|
|
56
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
41
57
|
if (this._closed)
|
|
42
58
|
throw new Error(`Sfu ${this.sfuId} is closed`);
|
|
43
59
|
if (sample.sfuId !== this.sfuId)
|
|
44
60
|
throw new Error(`Sfu ${this.sfuId} is not the same as sample.sfuId`);
|
|
61
|
+
if (!this._timeZoneOffsetInHours && sample.timeZoneOffsetInHours) {
|
|
62
|
+
this._timeZoneOffsetInHours = sample.timeZoneOffsetInHours;
|
|
63
|
+
}
|
|
64
|
+
for (const customSfuEvents of (_a = sample.customSfuEvents) !== null && _a !== void 0 ? _a : []) {
|
|
65
|
+
const report = Object.assign(Object.assign({ serviceId: this.serviceId, mediaUnitId: this.mediaUnitId, sfuId: this.sfuId }, customSfuEvents), { timestamp: sample.timestamp, marker: this._marker });
|
|
66
|
+
this.reports.addSfuEventReport(report);
|
|
67
|
+
}
|
|
68
|
+
for (const extensionStats of (_b = sample.extensionStats) !== null && _b !== void 0 ? _b : []) {
|
|
69
|
+
const report = {
|
|
70
|
+
serviceId: this.serviceId,
|
|
71
|
+
mediaUnitId: this.mediaUnitId,
|
|
72
|
+
sfuId: this.sfuId,
|
|
73
|
+
extensionType: extensionStats.type,
|
|
74
|
+
payload: extensionStats.payload,
|
|
75
|
+
timestamp: sample.timestamp,
|
|
76
|
+
};
|
|
77
|
+
this.reports.addSfuExtensionReport(report);
|
|
78
|
+
}
|
|
79
|
+
for (const transport of (_c = sample.transports) !== null && _c !== void 0 ? _c : []) {
|
|
80
|
+
const observedSfuTransport = (_d = this._transports.get(transport.transportId)) !== null && _d !== void 0 ? _d : this._createTransport({
|
|
81
|
+
sfuTransportId: transport.transportId,
|
|
82
|
+
});
|
|
83
|
+
observedSfuTransport.update(transport, sample.timestamp);
|
|
84
|
+
}
|
|
85
|
+
for (const inboundRtpPad of (_e = sample.inboundRtpPads) !== null && _e !== void 0 ? _e : []) {
|
|
86
|
+
const transport = (_f = this._transports.get(inboundRtpPad.transportId)) !== null && _f !== void 0 ? _f : this._createTransport({
|
|
87
|
+
sfuTransportId: inboundRtpPad.transportId,
|
|
88
|
+
});
|
|
89
|
+
const observedSfuInboundRtpPad = (_g = transport.inboundRtpPads.get(inboundRtpPad.padId)) !== null && _g !== void 0 ? _g : transport.createSfuInboundRtpPad({
|
|
90
|
+
sfuInboundRtpPadId: inboundRtpPad.padId,
|
|
91
|
+
});
|
|
92
|
+
observedSfuInboundRtpPad.update(inboundRtpPad, sample.timestamp);
|
|
93
|
+
}
|
|
94
|
+
for (const outboundRtpPad of (_h = sample.outboundRtpPads) !== null && _h !== void 0 ? _h : []) {
|
|
95
|
+
const transport = (_j = this._transports.get(outboundRtpPad.transportId)) !== null && _j !== void 0 ? _j : this._createTransport({
|
|
96
|
+
sfuTransportId: outboundRtpPad.transportId,
|
|
97
|
+
});
|
|
98
|
+
const observedSfuOutboundRtpPad = (_k = transport.outboundRtpPads.get(outboundRtpPad.padId)) !== null && _k !== void 0 ? _k : transport.createSfuOutboundRtpPad({
|
|
99
|
+
sfuOutboundRtpPadId: outboundRtpPad.padId,
|
|
100
|
+
});
|
|
101
|
+
observedSfuOutboundRtpPad.update(outboundRtpPad, sample.timestamp);
|
|
102
|
+
}
|
|
103
|
+
for (const sctpChannel of (_l = sample.sctpChannels) !== null && _l !== void 0 ? _l : []) {
|
|
104
|
+
const transport = (_m = this._transports.get(sctpChannel.transportId)) !== null && _m !== void 0 ? _m : this._createTransport({
|
|
105
|
+
sfuTransportId: sctpChannel.transportId,
|
|
106
|
+
});
|
|
107
|
+
const observedSfuSctpChannel = (_o = transport.sctpChannels.get(sctpChannel.channelId)) !== null && _o !== void 0 ? _o : transport.createSfuSctpChannel({
|
|
108
|
+
sfuSctpChannelId: sctpChannel.channelId,
|
|
109
|
+
});
|
|
110
|
+
observedSfuSctpChannel.update(sctpChannel, sample.timestamp);
|
|
111
|
+
}
|
|
45
112
|
this._updated = Date.now();
|
|
46
113
|
this.emit('update');
|
|
47
114
|
}
|
|
115
|
+
_createTransport(model) {
|
|
116
|
+
const result = new ObservedSfuTransport_1.ObservedSfuTransport(model, this);
|
|
117
|
+
result.once('close', () => {
|
|
118
|
+
this._transports.delete(model.sfuTransportId);
|
|
119
|
+
});
|
|
120
|
+
this._transports.set(model.sfuTransportId, result);
|
|
121
|
+
this.emit('newtransport', result);
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
48
124
|
}
|
|
49
125
|
exports.ObservedSfu = ObservedSfu;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
import { SfuInboundRtpPad } from '@observertc/sample-schemas-js';
|
|
4
|
+
import { ObservedSfuTransport } from './ObservedSfuTransport';
|
|
5
|
+
export type ObservedSfuInboundRtpPadModel = {
|
|
6
|
+
sfuInboundRtpPadId: string;
|
|
7
|
+
};
|
|
8
|
+
export type ObservedSfuInboundRtpPadEvents = {
|
|
9
|
+
update: [];
|
|
10
|
+
close: [];
|
|
11
|
+
};
|
|
12
|
+
export declare interface ObservedSfuInboundRtpPad {
|
|
13
|
+
on<U extends keyof ObservedSfuInboundRtpPadEvents>(event: U, listener: (...args: ObservedSfuInboundRtpPadEvents[U]) => void): this;
|
|
14
|
+
off<U extends keyof ObservedSfuInboundRtpPadEvents>(event: U, listener: (...args: ObservedSfuInboundRtpPadEvents[U]) => void): this;
|
|
15
|
+
once<U extends keyof ObservedSfuInboundRtpPadEvents>(event: U, listener: (...args: ObservedSfuInboundRtpPadEvents[U]) => void): this;
|
|
16
|
+
emit<U extends keyof ObservedSfuInboundRtpPadEvents>(event: U, ...args: ObservedSfuInboundRtpPadEvents[U]): boolean;
|
|
17
|
+
update(sample: SfuInboundRtpPad, timestamp: number): void;
|
|
18
|
+
}
|
|
19
|
+
export declare class ObservedSfuInboundRtpPad extends EventEmitter {
|
|
20
|
+
private readonly _model;
|
|
21
|
+
readonly transport: ObservedSfuTransport;
|
|
22
|
+
readonly created: number;
|
|
23
|
+
stats?: SfuInboundRtpPad;
|
|
24
|
+
marker?: string;
|
|
25
|
+
private _updated;
|
|
26
|
+
private _closed;
|
|
27
|
+
constructor(_model: ObservedSfuInboundRtpPadModel, transport: ObservedSfuTransport);
|
|
28
|
+
get reports(): import("./ReportsCollector").ReportsCollector;
|
|
29
|
+
get serviceId(): string;
|
|
30
|
+
get mediaUnitId(): string;
|
|
31
|
+
get sfuId(): string;
|
|
32
|
+
get sfuTransportId(): string;
|
|
33
|
+
get sfuRtpPadId(): string;
|
|
34
|
+
get updated(): number;
|
|
35
|
+
get closed(): boolean;
|
|
36
|
+
close(): void;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=ObservedSfuInboundRtpPad.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservedSfuInboundRtpPad.d.ts","sourceRoot":"","sources":["../src/ObservedSfuInboundRtpPad.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,MAAM,MAAM,6BAA6B,GAAE;IAC1C,kBAAkB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC5C,MAAM,EAAE,EAAE,CAAC;IACX,KAAK,EAAE,EAAE,CAAC;CACV,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,wBAAwB;IAChD,EAAE,CAAC,CAAC,SAAS,MAAM,8BAA8B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,8BAA8B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACnI,GAAG,CAAC,CAAC,SAAS,MAAM,8BAA8B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,8BAA8B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACpI,IAAI,CAAC,CAAC,SAAS,MAAM,8BAA8B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,8BAA8B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACrI,IAAI,CAAC,CAAC,SAAS,MAAM,8BAA8B,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,8BAA8B,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAEpH,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1D;AAED,qBAAa,wBAAyB,SAAQ,YAAY;IASxD,OAAO,CAAC,QAAQ,CAAC,MAAM;aACP,SAAS,EAAE,oBAAoB;IAThD,SAAgB,OAAO,SAAc;IAE9B,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAGN,MAAM,EAAE,6BAA6B,EACtC,SAAS,EAAE,oBAAoB;IAMhD,IAAW,OAAO,kDAEjB;IAED,IAAW,SAAS,WAEnB;IAED,IAAW,WAAW,WAErB;IAED,IAAW,KAAK,WAEf;IAED,IAAW,cAAc,WAExB;IAED,IAAW,WAAW,WAErB;IAED,IAAW,OAAO,WAEjB;IAED,IAAW,MAAM,YAEhB;IAEM,KAAK;CA4BZ"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.ObservedSfuInboundRtpPad = void 0;
|
|
15
|
+
const events_1 = require("events");
|
|
16
|
+
class ObservedSfuInboundRtpPad extends events_1.EventEmitter {
|
|
17
|
+
constructor(_model, transport) {
|
|
18
|
+
super();
|
|
19
|
+
this._model = _model;
|
|
20
|
+
this.transport = transport;
|
|
21
|
+
this.created = Date.now();
|
|
22
|
+
this._updated = Date.now();
|
|
23
|
+
this._closed = false;
|
|
24
|
+
this.setMaxListeners(Infinity);
|
|
25
|
+
}
|
|
26
|
+
get reports() {
|
|
27
|
+
return this.transport.reports;
|
|
28
|
+
}
|
|
29
|
+
get serviceId() {
|
|
30
|
+
return this.transport.serviceId;
|
|
31
|
+
}
|
|
32
|
+
get mediaUnitId() {
|
|
33
|
+
return this.transport.mediaUnitId;
|
|
34
|
+
}
|
|
35
|
+
get sfuId() {
|
|
36
|
+
return this.transport.sfuId;
|
|
37
|
+
}
|
|
38
|
+
get sfuTransportId() {
|
|
39
|
+
return this.transport.sfuTransportId;
|
|
40
|
+
}
|
|
41
|
+
get sfuRtpPadId() {
|
|
42
|
+
return this._model.sfuInboundRtpPadId;
|
|
43
|
+
}
|
|
44
|
+
get updated() {
|
|
45
|
+
return this._updated;
|
|
46
|
+
}
|
|
47
|
+
get closed() {
|
|
48
|
+
return this._closed;
|
|
49
|
+
}
|
|
50
|
+
close() {
|
|
51
|
+
if (this._closed)
|
|
52
|
+
return;
|
|
53
|
+
this._closed = true;
|
|
54
|
+
this.emit('close');
|
|
55
|
+
}
|
|
56
|
+
update(sample, timestamp) {
|
|
57
|
+
const { streamId: sfuStreamId, padId: rtpPadId } = sample, reportData = __rest(sample, ["streamId", "padId"]);
|
|
58
|
+
const report = Object.assign(Object.assign({ serviceId: this.serviceId, mediaUnitId: this.mediaUnitId, sfuId: this.sfuId, callId: undefined, // TODO: where to get this from?
|
|
59
|
+
sfuStreamId,
|
|
60
|
+
rtpPadId }, reportData), { timestamp, marker: this.marker });
|
|
61
|
+
this.reports.addSfuInboundRtpPadReport(report);
|
|
62
|
+
this.stats = sample;
|
|
63
|
+
this._updated = Date.now();
|
|
64
|
+
this.emit('update');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.ObservedSfuInboundRtpPad = ObservedSfuInboundRtpPad;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
import { SfuOutboundRtpPad } from '@observertc/sample-schemas-js';
|
|
4
|
+
import { ObservedSfuTransport } from './ObservedSfuTransport';
|
|
5
|
+
export type ObservedSfuOutboundRtpPadModel = {
|
|
6
|
+
sfuOutboundRtpPadId: string;
|
|
7
|
+
};
|
|
8
|
+
export type ObservedSfuOutboundRtpPadEvents = {
|
|
9
|
+
update: [];
|
|
10
|
+
close: [];
|
|
11
|
+
};
|
|
12
|
+
export declare interface ObservedSfuOutboundRtpPad {
|
|
13
|
+
on<U extends keyof ObservedSfuOutboundRtpPadEvents>(event: U, listener: (...args: ObservedSfuOutboundRtpPadEvents[U]) => void): this;
|
|
14
|
+
off<U extends keyof ObservedSfuOutboundRtpPadEvents>(event: U, listener: (...args: ObservedSfuOutboundRtpPadEvents[U]) => void): this;
|
|
15
|
+
once<U extends keyof ObservedSfuOutboundRtpPadEvents>(event: U, listener: (...args: ObservedSfuOutboundRtpPadEvents[U]) => void): this;
|
|
16
|
+
emit<U extends keyof ObservedSfuOutboundRtpPadEvents>(event: U, ...args: ObservedSfuOutboundRtpPadEvents[U]): boolean;
|
|
17
|
+
update(sample: SfuOutboundRtpPad, timestamp: number): void;
|
|
18
|
+
}
|
|
19
|
+
export declare class ObservedSfuOutboundRtpPad extends EventEmitter {
|
|
20
|
+
private readonly _model;
|
|
21
|
+
readonly transport: ObservedSfuTransport;
|
|
22
|
+
readonly created: number;
|
|
23
|
+
stats?: SfuOutboundRtpPad;
|
|
24
|
+
marker?: string;
|
|
25
|
+
private _updated;
|
|
26
|
+
private _closed;
|
|
27
|
+
constructor(_model: ObservedSfuOutboundRtpPadModel, transport: ObservedSfuTransport);
|
|
28
|
+
get reports(): import("./ReportsCollector").ReportsCollector;
|
|
29
|
+
get serviceId(): string;
|
|
30
|
+
get mediaUnitId(): string;
|
|
31
|
+
get sfuId(): string;
|
|
32
|
+
get sfuTransportId(): string;
|
|
33
|
+
get sfuRtpPadId(): string;
|
|
34
|
+
get updated(): number;
|
|
35
|
+
get closed(): boolean;
|
|
36
|
+
close(): void;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=ObservedSfuOutboundRtpPad.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservedSfuOutboundRtpPad.d.ts","sourceRoot":"","sources":["../src/ObservedSfuOutboundRtpPad.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,MAAM,8BAA8B,GAAE;IAC3C,mBAAmB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC7C,MAAM,EAAE,EAAE,CAAC;IACX,KAAK,EAAE,EAAE,CAAC;CACV,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,yBAAyB;IACjD,EAAE,CAAC,CAAC,SAAS,MAAM,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,+BAA+B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACrI,GAAG,CAAC,CAAC,SAAS,MAAM,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,+BAA+B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACtI,IAAI,CAAC,CAAC,SAAS,MAAM,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,+BAA+B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACvI,IAAI,CAAC,CAAC,SAAS,MAAM,+BAA+B,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,+BAA+B,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAEtH,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3D;AAED,qBAAa,yBAA0B,SAAQ,YAAY;IASzD,OAAO,CAAC,QAAQ,CAAC,MAAM;aACP,SAAS,EAAE,oBAAoB;IAThD,SAAgB,OAAO,SAAc;IAE9B,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAGN,MAAM,EAAE,8BAA8B,EACvC,SAAS,EAAE,oBAAoB;IAMhD,IAAW,OAAO,kDAEjB;IAED,IAAW,SAAS,WAEnB;IAED,IAAW,WAAW,WAErB;IAED,IAAW,KAAK,WAEf;IAED,IAAW,cAAc,WAExB;IAED,IAAW,WAAW,WAErB;IAED,IAAW,OAAO,WAEjB;IAED,IAAW,MAAM,YAEhB;IAEM,KAAK;CA6BZ"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.ObservedSfuOutboundRtpPad = void 0;
|
|
15
|
+
const events_1 = require("events");
|
|
16
|
+
class ObservedSfuOutboundRtpPad extends events_1.EventEmitter {
|
|
17
|
+
constructor(_model, transport) {
|
|
18
|
+
super();
|
|
19
|
+
this._model = _model;
|
|
20
|
+
this.transport = transport;
|
|
21
|
+
this.created = Date.now();
|
|
22
|
+
this._updated = Date.now();
|
|
23
|
+
this._closed = false;
|
|
24
|
+
this.setMaxListeners(Infinity);
|
|
25
|
+
}
|
|
26
|
+
get reports() {
|
|
27
|
+
return this.transport.reports;
|
|
28
|
+
}
|
|
29
|
+
get serviceId() {
|
|
30
|
+
return this.transport.serviceId;
|
|
31
|
+
}
|
|
32
|
+
get mediaUnitId() {
|
|
33
|
+
return this.transport.mediaUnitId;
|
|
34
|
+
}
|
|
35
|
+
get sfuId() {
|
|
36
|
+
return this.transport.sfuId;
|
|
37
|
+
}
|
|
38
|
+
get sfuTransportId() {
|
|
39
|
+
return this.transport.sfuTransportId;
|
|
40
|
+
}
|
|
41
|
+
get sfuRtpPadId() {
|
|
42
|
+
return this._model.sfuOutboundRtpPadId;
|
|
43
|
+
}
|
|
44
|
+
get updated() {
|
|
45
|
+
return this._updated;
|
|
46
|
+
}
|
|
47
|
+
get closed() {
|
|
48
|
+
return this._closed;
|
|
49
|
+
}
|
|
50
|
+
close() {
|
|
51
|
+
if (this._closed)
|
|
52
|
+
return;
|
|
53
|
+
this._closed = true;
|
|
54
|
+
this.emit('close');
|
|
55
|
+
}
|
|
56
|
+
update(sample, timestamp) {
|
|
57
|
+
const { streamId: sfuStreamId, padId: rtpPadId, sinkId: sfuSinkId } = sample, reportData = __rest(sample, ["streamId", "padId", "sinkId"]);
|
|
58
|
+
const report = Object.assign(Object.assign({ serviceId: this.serviceId, mediaUnitId: this.mediaUnitId, sfuId: this.sfuId, callId: undefined, // TODO: where to get this from?
|
|
59
|
+
sfuStreamId,
|
|
60
|
+
sfuSinkId,
|
|
61
|
+
rtpPadId }, reportData), { timestamp, marker: this.marker });
|
|
62
|
+
this.reports.addSfuOutboundRtpPadReport(report);
|
|
63
|
+
this.stats = sample;
|
|
64
|
+
this._updated = Date.now();
|
|
65
|
+
this.emit('update');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.ObservedSfuOutboundRtpPad = ObservedSfuOutboundRtpPad;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
import { SfuSctpChannel } from '@observertc/sample-schemas-js';
|
|
4
|
+
import { ObservedSfuTransport } from './ObservedSfuTransport';
|
|
5
|
+
export type ObservedSfuSctpChannelModel = {
|
|
6
|
+
sfuSctpChannelId: string;
|
|
7
|
+
};
|
|
8
|
+
export type ObservedSfuSctpChannelEvents = {
|
|
9
|
+
update: [];
|
|
10
|
+
close: [];
|
|
11
|
+
};
|
|
12
|
+
export declare interface ObservedSfuSctpChannel {
|
|
13
|
+
on<U extends keyof ObservedSfuSctpChannelEvents>(event: U, listener: (...args: ObservedSfuSctpChannelEvents[U]) => void): this;
|
|
14
|
+
off<U extends keyof ObservedSfuSctpChannelEvents>(event: U, listener: (...args: ObservedSfuSctpChannelEvents[U]) => void): this;
|
|
15
|
+
once<U extends keyof ObservedSfuSctpChannelEvents>(event: U, listener: (...args: ObservedSfuSctpChannelEvents[U]) => void): this;
|
|
16
|
+
emit<U extends keyof ObservedSfuSctpChannelEvents>(event: U, ...args: ObservedSfuSctpChannelEvents[U]): boolean;
|
|
17
|
+
update(sample: SfuSctpChannel, timestamp: number): void;
|
|
18
|
+
}
|
|
19
|
+
export declare class ObservedSfuSctpChannel extends EventEmitter {
|
|
20
|
+
private readonly _model;
|
|
21
|
+
readonly transport: ObservedSfuTransport;
|
|
22
|
+
readonly created: number;
|
|
23
|
+
stats?: SfuSctpChannel;
|
|
24
|
+
marker?: string;
|
|
25
|
+
private _updated;
|
|
26
|
+
private _closed;
|
|
27
|
+
constructor(_model: ObservedSfuSctpChannelModel, transport: ObservedSfuTransport);
|
|
28
|
+
get serviceId(): string;
|
|
29
|
+
get sfuId(): string;
|
|
30
|
+
get mediaUnitId(): string;
|
|
31
|
+
get sfuTransportId(): string;
|
|
32
|
+
get sfuSctpChannelId(): string;
|
|
33
|
+
get reports(): import("./ReportsCollector").ReportsCollector;
|
|
34
|
+
get updated(): number;
|
|
35
|
+
get closed(): boolean;
|
|
36
|
+
close(): void;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=ObservedSfuSctpChannel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservedSfuSctpChannel.d.ts","sourceRoot":"","sources":["../src/ObservedSfuSctpChannel.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,MAAM,MAAM,2BAA2B,GAAE;IACxC,gBAAgB,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IAC1C,MAAM,EAAE,EAAE,CAAC;IACX,KAAK,EAAE,EAAE,CAAC;CACV,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,sBAAsB;IAC9C,EAAE,CAAC,CAAC,SAAS,MAAM,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,4BAA4B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/H,GAAG,CAAC,CAAC,SAAS,MAAM,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,4BAA4B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAChI,IAAI,CAAC,CAAC,SAAS,MAAM,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,4BAA4B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACjI,IAAI,CAAC,CAAC,SAAS,MAAM,4BAA4B,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,4BAA4B,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAEhH,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACxD;AAED,qBAAa,sBAAuB,SAAQ,YAAY;IAStD,OAAO,CAAC,QAAQ,CAAC,MAAM;aACP,SAAS,EAAE,oBAAoB;IAThD,SAAgB,OAAO,SAAc;IAE9B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAGN,MAAM,EAAE,2BAA2B,EACpC,SAAS,EAAE,oBAAoB;IAMhD,IAAW,SAAS,WAEnB;IAED,IAAW,KAAK,WAEf;IAED,IAAW,WAAW,WAErB;IAED,IAAW,cAAc,WAExB;IAED,IAAW,gBAAgB,WAE1B;IAED,IAAW,OAAO,kDAEjB;IAED,IAAW,OAAO,WAEjB;IAED,IAAW,MAAM,YAEhB;IAEM,KAAK;CAyBZ"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ObservedSfuSctpChannel = void 0;
|
|
4
|
+
const events_1 = require("events");
|
|
5
|
+
class ObservedSfuSctpChannel extends events_1.EventEmitter {
|
|
6
|
+
constructor(_model, transport) {
|
|
7
|
+
super();
|
|
8
|
+
this._model = _model;
|
|
9
|
+
this.transport = transport;
|
|
10
|
+
this.created = Date.now();
|
|
11
|
+
this._updated = Date.now();
|
|
12
|
+
this._closed = false;
|
|
13
|
+
this.setMaxListeners(Infinity);
|
|
14
|
+
}
|
|
15
|
+
get serviceId() {
|
|
16
|
+
return this.transport.serviceId;
|
|
17
|
+
}
|
|
18
|
+
get sfuId() {
|
|
19
|
+
return this.transport.sfuId;
|
|
20
|
+
}
|
|
21
|
+
get mediaUnitId() {
|
|
22
|
+
return this.transport.mediaUnitId;
|
|
23
|
+
}
|
|
24
|
+
get sfuTransportId() {
|
|
25
|
+
return this.transport.sfuTransportId;
|
|
26
|
+
}
|
|
27
|
+
get sfuSctpChannelId() {
|
|
28
|
+
return this._model.sfuSctpChannelId;
|
|
29
|
+
}
|
|
30
|
+
get reports() {
|
|
31
|
+
return this.transport.reports;
|
|
32
|
+
}
|
|
33
|
+
get updated() {
|
|
34
|
+
return this._updated;
|
|
35
|
+
}
|
|
36
|
+
get closed() {
|
|
37
|
+
return this._closed;
|
|
38
|
+
}
|
|
39
|
+
close() {
|
|
40
|
+
if (this._closed)
|
|
41
|
+
return;
|
|
42
|
+
this._closed = true;
|
|
43
|
+
this.emit('close');
|
|
44
|
+
}
|
|
45
|
+
update(sample, timestamp) {
|
|
46
|
+
const report = Object.assign(Object.assign({ serviceId: this.serviceId, mediaUnitId: this.mediaUnitId, sfuId: this.sfuId, callId: undefined, roomId: undefined }, sample), { timestamp, marker: this.marker });
|
|
47
|
+
this.reports.addSfuTransportReport(report);
|
|
48
|
+
this.stats = sample;
|
|
49
|
+
this._updated = Date.now();
|
|
50
|
+
this.emit('update');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.ObservedSfuSctpChannel = ObservedSfuSctpChannel;
|