@observertc/observer-js 0.42.1 → 0.42.3
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/ObservedCall.d.ts +5 -10
- package/lib/ObservedCall.d.ts.map +1 -1
- package/lib/ObservedCall.js +17 -22
- package/lib/ObservedClient.d.ts +21 -10
- package/lib/ObservedClient.d.ts.map +1 -1
- package/lib/ObservedClient.js +98 -33
- package/lib/ObservedInboundAudioTrack.d.ts +2 -0
- package/lib/ObservedInboundAudioTrack.d.ts.map +1 -1
- package/lib/ObservedInboundAudioTrack.js +2 -0
- package/lib/ObservedInboundVideoTrack.d.ts +4 -1
- package/lib/ObservedInboundVideoTrack.d.ts.map +1 -1
- package/lib/ObservedInboundVideoTrack.js +2 -1
- package/lib/ObservedOutboundAudioTrack.d.ts +2 -0
- package/lib/ObservedOutboundAudioTrack.d.ts.map +1 -1
- package/lib/ObservedOutboundAudioTrack.js +2 -12
- package/lib/ObservedOutboundVideoTrack.d.ts +4 -1
- package/lib/ObservedOutboundVideoTrack.d.ts.map +1 -1
- package/lib/ObservedOutboundVideoTrack.js +2 -1
- package/lib/ObservedPeerConnection.d.ts +2 -0
- package/lib/ObservedPeerConnection.d.ts.map +1 -1
- package/lib/Observer.d.ts +0 -2
- package/lib/Observer.d.ts.map +1 -1
- package/lib/Observer.js +5 -3
- package/lib/common/CalculatedScore.js +3 -3
- package/lib/common/types.d.ts +1 -0
- package/lib/common/types.d.ts.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/ObservedCall.ts +35 -41
- package/src/ObservedClient.ts +120 -42
- package/src/ObservedInboundAudioTrack.ts +8 -0
- package/src/ObservedInboundVideoTrack.ts +10 -1
- package/src/ObservedOutboundAudioTrack.ts +8 -16
- package/src/ObservedOutboundVideoTrack.ts +10 -1
- package/src/ObservedPeerConnection.ts +6 -1
- package/src/Observer.ts +3 -5
- package/src/common/CalculatedScore.ts +1 -1
- package/src/common/types.ts +1 -0
- package/src/index.ts +1 -0
- package/lib/monitors/ClientQualityMonitor.d.ts +0 -1
- package/lib/monitors/ClientQualityMonitor.d.ts.map +0 -1
- package/lib/monitors/ClientQualityMonitor.js +0 -1
- package/src/monitors/ClientQualityMonitor.ts +0 -0
package/lib/ObservedCall.d.ts
CHANGED
|
@@ -5,11 +5,9 @@ import { Observer } from './Observer';
|
|
|
5
5
|
import { PartialBy } from './common/utils';
|
|
6
6
|
import { CallEventReport } from '@observertc/report-schemas-js';
|
|
7
7
|
import { ClientSample } from '@observertc/sample-schemas-js';
|
|
8
|
-
import { ClientIssue } from './monitors/CallSummary';
|
|
9
8
|
import { ObservedOutboundAudioTrack } from './ObservedOutboundAudioTrack';
|
|
10
9
|
import { ObservedOutboundVideoTrack } from './ObservedOutboundVideoTrack';
|
|
11
10
|
import { CalculatedScore } from './common/CalculatedScore';
|
|
12
|
-
type ClientIssueDetectionConfig = Pick<ClientIssue, 'severity'>;
|
|
13
11
|
export type ObservedCallModel = {
|
|
14
12
|
serviceId: string;
|
|
15
13
|
roomId: string;
|
|
@@ -42,14 +40,14 @@ export declare class ObservedCall<AppData extends Record<string, unknown> = Reco
|
|
|
42
40
|
readonly sfuStreamIdToOutboundVideoTrack: Map<string | number, ObservedOutboundVideoTrack>;
|
|
43
41
|
private _closed;
|
|
44
42
|
private _updated;
|
|
45
|
-
|
|
43
|
+
ended?: number;
|
|
44
|
+
started?: number;
|
|
46
45
|
constructor(_model: ObservedCallModel, observer: Observer, appData: AppData);
|
|
47
46
|
get serviceId(): string;
|
|
48
47
|
get reports(): import("./ReportsCollector").ReportsCollector;
|
|
49
48
|
get roomId(): string;
|
|
50
49
|
get callId(): string;
|
|
51
50
|
get updated(): number;
|
|
52
|
-
get ended(): number | undefined;
|
|
53
51
|
get clients(): ReadonlyMap<string, ObservedClient>;
|
|
54
52
|
get score(): CalculatedScore | undefined;
|
|
55
53
|
get closed(): boolean;
|
|
@@ -57,12 +55,9 @@ export declare class ObservedCall<AppData extends Record<string, unknown> = Reco
|
|
|
57
55
|
addEventReport(params: PartialBy<Omit<CallEventReport, 'serviceId' | 'roomId' | 'callId'>, 'timestamp'>): void;
|
|
58
56
|
createClient<ClientAppData extends Record<string, unknown> = Record<string, unknown>>(config: ObservedClientModel & {
|
|
59
57
|
appData: ClientAppData;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
rejoin: ClientIssue['severity'] | ClientIssueDetectionConfig;
|
|
64
|
-
};
|
|
58
|
+
joinedTimestamp?: number;
|
|
59
|
+
createClientJoinedReport?: boolean;
|
|
60
|
+
createClientLeftReport?: boolean;
|
|
65
61
|
}): ObservedClient<ClientAppData>;
|
|
66
62
|
}
|
|
67
|
-
export {};
|
|
68
63
|
//# sourceMappingURL=ObservedCall.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedCall.d.ts","sourceRoot":"","sources":["../src/ObservedCall.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"ObservedCall.d.ts","sourceRoot":"","sources":["../src/ObservedCall.ts"],"names":[],"mappings":"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"}
|
package/lib/ObservedCall.js
CHANGED
|
@@ -30,6 +30,7 @@ class ObservedCall extends events_1.EventEmitter {
|
|
|
30
30
|
this.sfuStreamIdToOutboundVideoTrack = new Map();
|
|
31
31
|
this._closed = false;
|
|
32
32
|
this._updated = Date.now();
|
|
33
|
+
this.started = Date.now();
|
|
33
34
|
this.setMaxListeners(Infinity);
|
|
34
35
|
}
|
|
35
36
|
get serviceId() {
|
|
@@ -50,9 +51,6 @@ class ObservedCall extends events_1.EventEmitter {
|
|
|
50
51
|
get updated() {
|
|
51
52
|
return this._updated;
|
|
52
53
|
}
|
|
53
|
-
get ended() {
|
|
54
|
-
return this._ended;
|
|
55
|
-
}
|
|
56
54
|
get clients() {
|
|
57
55
|
return this._clients;
|
|
58
56
|
}
|
|
@@ -90,7 +88,12 @@ class ObservedCall extends events_1.EventEmitter {
|
|
|
90
88
|
if (this._closed)
|
|
91
89
|
return;
|
|
92
90
|
this._closed = true;
|
|
93
|
-
|
|
91
|
+
if (timestamp) {
|
|
92
|
+
this.ended = timestamp;
|
|
93
|
+
}
|
|
94
|
+
else if (!this.ended) {
|
|
95
|
+
this.ended = Date.now();
|
|
96
|
+
}
|
|
94
97
|
Array.from(this._clients.values()).forEach((client) => client.close());
|
|
95
98
|
this.emit('close');
|
|
96
99
|
}
|
|
@@ -99,11 +102,10 @@ class ObservedCall extends events_1.EventEmitter {
|
|
|
99
102
|
this.reports.addCallEventReport(Object.assign(Object.assign({}, params), { serviceId: this.serviceId, roomId: this.roomId, callId: this.callId, timestamp: (_a = params.timestamp) !== null && _a !== void 0 ? _a : Date.now() }));
|
|
100
103
|
}
|
|
101
104
|
createClient(config) {
|
|
105
|
+
var _a;
|
|
102
106
|
if (this._closed)
|
|
103
107
|
throw new Error(`Call ${this.callId} is closed`);
|
|
104
|
-
const { appData,
|
|
105
|
-
rejoin: 'minor'
|
|
106
|
-
} } = config, model = __rest(config, ["appData", "generateClientJoinedReport", "joined", "detectIssues"]);
|
|
108
|
+
const { appData, createClientJoinedReport, createClientLeftReport, joinedTimestamp = Date.now() } = config, model = __rest(config, ["appData", "createClientJoinedReport", "createClientLeftReport", "joinedTimestamp"]);
|
|
107
109
|
const result = new ObservedClient_1.ObservedClient(model, this, appData);
|
|
108
110
|
const onUpdate = ({ sample }) => {
|
|
109
111
|
this._updated = Date.now();
|
|
@@ -116,22 +118,15 @@ class ObservedCall extends events_1.EventEmitter {
|
|
|
116
118
|
});
|
|
117
119
|
result.on('update', onUpdate);
|
|
118
120
|
this._clients.set(result.clientId, result);
|
|
119
|
-
if (
|
|
120
|
-
this.reports.addCallEventReport((0, callEventReports_1.createClientJoinedEventReport)(this.serviceId, result.mediaUnitId, this.roomId, this.callId, result.clientId, joined, result.userId, result.marker));
|
|
121
|
-
}
|
|
122
|
-
if (detectIssues === null || detectIssues === void 0 ? void 0 : detectIssues.rejoin) {
|
|
123
|
-
const issueBaseConfig = typeof detectIssues.rejoin === 'object' ? detectIssues.rejoin : {
|
|
124
|
-
severity: detectIssues.rejoin
|
|
125
|
-
};
|
|
126
|
-
const rejoinedClientIssueListener = (event) => {
|
|
127
|
-
event.lastJoined;
|
|
128
|
-
result.addIssue(Object.assign({ timestamp: Date.now() }, issueBaseConfig));
|
|
129
|
-
};
|
|
130
|
-
result.once('close', () => {
|
|
131
|
-
result.off('rejoined', rejoinedClientIssueListener);
|
|
132
|
-
});
|
|
133
|
-
result.on('rejoined', rejoinedClientIssueListener);
|
|
121
|
+
if (createClientJoinedReport) {
|
|
122
|
+
this.reports.addCallEventReport((0, callEventReports_1.createClientJoinedEventReport)(this.serviceId, result.mediaUnitId, this.roomId, this.callId, result.clientId, (_a = result.joined) !== null && _a !== void 0 ? _a : joinedTimestamp, result.userId, result.marker));
|
|
134
123
|
}
|
|
124
|
+
result.once('close', () => {
|
|
125
|
+
var _a;
|
|
126
|
+
if (createClientLeftReport) {
|
|
127
|
+
this.reports.addCallEventReport((0, callEventReports_1.createClientLeftEventReport)(this.serviceId, result.mediaUnitId, this.roomId, this.callId, result.clientId, (_a = result.left) !== null && _a !== void 0 ? _a : Date.now(), result.userId, result.marker));
|
|
128
|
+
}
|
|
129
|
+
});
|
|
135
130
|
this.emit('newclient', result);
|
|
136
131
|
return result;
|
|
137
132
|
}
|
package/lib/ObservedClient.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { Browser, ClientSample, Engine, IceLocalCandidate, IceRemoteCandidate, OperationSystem, Platform } from '@observertc/sample-schemas-js';
|
|
2
|
+
import { Browser, ClientSample, Engine, IceLocalCandidate, IceRemoteCandidate, MediaCodecStats, MediaDevice, OperationSystem, Platform } from '@observertc/sample-schemas-js';
|
|
3
3
|
import { ObservedCall } from './ObservedCall';
|
|
4
4
|
import { EventEmitter } from 'events';
|
|
5
5
|
import { ObservedPeerConnection } from './ObservedPeerConnection';
|
|
@@ -73,19 +73,31 @@ export declare interface ObservedClient<AppData extends Record<string, unknown>
|
|
|
73
73
|
emit<U extends keyof ObservedClientEvents>(event: U, ...args: ObservedClientEvents[U]): boolean;
|
|
74
74
|
readonly appData: AppData;
|
|
75
75
|
}
|
|
76
|
+
type PendingPeerConnectionTimestamp = {
|
|
77
|
+
type: 'opened' | 'closed';
|
|
78
|
+
peerConnectionId: string;
|
|
79
|
+
timestamp: number;
|
|
80
|
+
};
|
|
81
|
+
type PendingMediaTrackTimestamp = {
|
|
82
|
+
type: 'added' | 'removed';
|
|
83
|
+
peerConnectionId: string;
|
|
84
|
+
mediaTrackId: string;
|
|
85
|
+
timestamp: number;
|
|
86
|
+
};
|
|
76
87
|
export declare class ObservedClient<AppData extends Record<string, unknown> = Record<string, unknown>> extends EventEmitter {
|
|
77
88
|
private readonly _model;
|
|
78
89
|
readonly call: ObservedCall;
|
|
79
90
|
readonly appData: AppData;
|
|
80
91
|
readonly created: number;
|
|
81
|
-
|
|
92
|
+
updated: number;
|
|
82
93
|
sfuId?: string;
|
|
83
94
|
private readonly _peerConnections;
|
|
84
95
|
private _closed;
|
|
85
|
-
private _joinedEventAt?;
|
|
86
96
|
private _acceptedSamples;
|
|
87
97
|
private _timeZoneOffsetInHours?;
|
|
88
|
-
|
|
98
|
+
joined?: number;
|
|
99
|
+
left?: number;
|
|
100
|
+
lastStatsTimestamp?: number;
|
|
89
101
|
score?: CalculatedScore;
|
|
90
102
|
usingTURN: boolean;
|
|
91
103
|
availableOutgoingBitrate: number;
|
|
@@ -116,12 +128,12 @@ export declare class ObservedClient<AppData extends Record<string, unknown> = Re
|
|
|
116
128
|
inboundAudioBitrate?: number;
|
|
117
129
|
inboundVideoBitrate?: number;
|
|
118
130
|
mediaConstraints: string[];
|
|
119
|
-
readonly mediaDevices:
|
|
120
|
-
readonly
|
|
131
|
+
readonly mediaDevices: MediaDevice[];
|
|
132
|
+
readonly mediaCodecs: MediaCodecStats[];
|
|
121
133
|
readonly userMediaErrors: string[];
|
|
122
134
|
readonly issues: ClientIssue[];
|
|
123
|
-
|
|
124
|
-
|
|
135
|
+
ωpendingPeerConnectionTimestamps: PendingPeerConnectionTimestamp[];
|
|
136
|
+
ωpendingMediaTrackTimestamps: PendingMediaTrackTimestamp[];
|
|
125
137
|
constructor(_model: ObservedClientModel, call: ObservedCall, appData: AppData);
|
|
126
138
|
getSfu<T extends Record<string, unknown> = Record<string, unknown>>(): ObservedSfu<T> | undefined;
|
|
127
139
|
get sfu(): ObservedSfu | undefined;
|
|
@@ -148,7 +160,6 @@ export declare class ObservedClient<AppData extends Record<string, unknown> = Re
|
|
|
148
160
|
get operationSystem(): OperationSystem | undefined;
|
|
149
161
|
get platform(): Platform | undefined;
|
|
150
162
|
get acceptedSamples(): number;
|
|
151
|
-
get updated(): number;
|
|
152
163
|
get closed(): boolean;
|
|
153
164
|
get peerConnections(): ReadonlyMap<string, ObservedPeerConnection>;
|
|
154
165
|
close(): void;
|
|
@@ -160,6 +171,6 @@ export declare class ObservedClient<AppData extends Record<string, unknown> = Re
|
|
|
160
171
|
accept(sample: ClientSample): void;
|
|
161
172
|
private _addAndEmitIssue;
|
|
162
173
|
private _createPeerConnection;
|
|
163
|
-
private _addClientLeftReport;
|
|
164
174
|
}
|
|
175
|
+
export {};
|
|
165
176
|
//# sourceMappingURL=ObservedClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedClient.d.ts","sourceRoot":"","sources":["../src/ObservedClient.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"ObservedClient.d.ts","sourceRoot":"","sources":["../src/ObservedClient.ts"],"names":[],"mappings":"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"}
|
package/lib/ObservedClient.js
CHANGED
|
@@ -18,7 +18,6 @@ const logger_1 = require("./common/logger");
|
|
|
18
18
|
const CallMetaReports_1 = require("./common/CallMetaReports");
|
|
19
19
|
// eslint-disable-next-line camelcase
|
|
20
20
|
const utils_1 = require("./common/utils");
|
|
21
|
-
const callEventReports_1 = require("./common/callEventReports");
|
|
22
21
|
const CallEventType_1 = require("./common/CallEventType");
|
|
23
22
|
const logger = (0, logger_1.createLogger)('ObservedClient');
|
|
24
23
|
class ObservedClient extends events_1.EventEmitter {
|
|
@@ -28,7 +27,7 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
28
27
|
this.call = call;
|
|
29
28
|
this.appData = appData;
|
|
30
29
|
this.created = Date.now();
|
|
31
|
-
this.
|
|
30
|
+
this.updated = Date.now();
|
|
32
31
|
this._peerConnections = new Map();
|
|
33
32
|
this._closed = false;
|
|
34
33
|
this._acceptedSamples = 0;
|
|
@@ -57,11 +56,11 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
57
56
|
this.deltaOutboundPacketsSent = 0;
|
|
58
57
|
this.mediaConstraints = [];
|
|
59
58
|
this.mediaDevices = [];
|
|
60
|
-
this.
|
|
59
|
+
this.mediaCodecs = [];
|
|
61
60
|
this.userMediaErrors = [];
|
|
62
61
|
this.issues = [];
|
|
63
|
-
this.ω
|
|
64
|
-
this.ω
|
|
62
|
+
this.ωpendingPeerConnectionTimestamps = [];
|
|
63
|
+
this.ωpendingMediaTrackTimestamps = [];
|
|
65
64
|
this.setMaxListeners(Infinity);
|
|
66
65
|
}
|
|
67
66
|
getSfu() {
|
|
@@ -132,9 +131,6 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
132
131
|
get acceptedSamples() {
|
|
133
132
|
return this._acceptedSamples;
|
|
134
133
|
}
|
|
135
|
-
get updated() {
|
|
136
|
-
return this._updated;
|
|
137
|
-
}
|
|
138
134
|
get closed() {
|
|
139
135
|
return this._closed;
|
|
140
136
|
}
|
|
@@ -145,9 +141,6 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
145
141
|
if (this._closed)
|
|
146
142
|
return;
|
|
147
143
|
this._closed = true;
|
|
148
|
-
if (!this._left) {
|
|
149
|
-
this._addClientLeftReport();
|
|
150
|
-
}
|
|
151
144
|
Array.from(this._peerConnections.values()).forEach((peerConnection) => peerConnection.close());
|
|
152
145
|
this.emit('close');
|
|
153
146
|
}
|
|
@@ -195,7 +188,7 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
195
188
|
this._addAndEmitIssue(issue);
|
|
196
189
|
}
|
|
197
190
|
accept(sample) {
|
|
198
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26;
|
|
191
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29;
|
|
199
192
|
if (this._closed)
|
|
200
193
|
throw new Error(`Client ${this.clientId} is closed`);
|
|
201
194
|
if (sample.clientId && sample.clientId !== 'NULL' && sample.clientId !== this.clientId) {
|
|
@@ -289,19 +282,58 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
289
282
|
extensionType: extensionStats.type,
|
|
290
283
|
});
|
|
291
284
|
}
|
|
292
|
-
for (let
|
|
293
|
-
const { timestamp } =
|
|
285
|
+
for (let _30 of (_p = sample.customCallEvents) !== null && _p !== void 0 ? _p : []) {
|
|
286
|
+
const { timestamp } = _30, callEvent = __rest(_30, ["timestamp"]);
|
|
294
287
|
switch (callEvent.name) {
|
|
295
288
|
case CallEventType_1.CallEventType.CLIENT_JOINED: {
|
|
296
|
-
const lastJoined = this.
|
|
297
|
-
this.
|
|
298
|
-
if
|
|
289
|
+
const lastJoined = this.joined;
|
|
290
|
+
this.joined = timestamp;
|
|
291
|
+
// if it is joined before and it is joined again
|
|
292
|
+
if (lastJoined && this.joined && lastJoined !== this.joined) {
|
|
299
293
|
this.emit('rejoined', { lastJoined });
|
|
300
294
|
}
|
|
295
|
+
// in case we have a left event before the joined event
|
|
296
|
+
if (this.left && this.joined && this.left < this.joined) {
|
|
297
|
+
this.left = undefined;
|
|
298
|
+
}
|
|
301
299
|
break;
|
|
302
300
|
}
|
|
303
301
|
case CallEventType_1.CallEventType.CLIENT_LEFT: {
|
|
304
|
-
this.
|
|
302
|
+
this.left = timestamp;
|
|
303
|
+
break;
|
|
304
|
+
}
|
|
305
|
+
case CallEventType_1.CallEventType.PEER_CONNECTION_OPENED: {
|
|
306
|
+
callEvent.peerConnectionId && this.ωpendingPeerConnectionTimestamps.push({
|
|
307
|
+
type: 'opened',
|
|
308
|
+
peerConnectionId: callEvent.peerConnectionId,
|
|
309
|
+
timestamp: timestamp !== null && timestamp !== void 0 ? timestamp : sample.timestamp,
|
|
310
|
+
});
|
|
311
|
+
break;
|
|
312
|
+
}
|
|
313
|
+
case CallEventType_1.CallEventType.PEER_CONNECTION_CLOSED: {
|
|
314
|
+
callEvent.peerConnectionId && this.ωpendingPeerConnectionTimestamps.push({
|
|
315
|
+
type: 'closed',
|
|
316
|
+
peerConnectionId: callEvent.peerConnectionId,
|
|
317
|
+
timestamp: timestamp !== null && timestamp !== void 0 ? timestamp : sample.timestamp,
|
|
318
|
+
});
|
|
319
|
+
break;
|
|
320
|
+
}
|
|
321
|
+
case CallEventType_1.CallEventType.MEDIA_TRACK_ADDED: {
|
|
322
|
+
callEvent.peerConnectionId && callEvent.mediaTrackId && this.ωpendingMediaTrackTimestamps.push({
|
|
323
|
+
type: 'added',
|
|
324
|
+
peerConnectionId: callEvent.peerConnectionId,
|
|
325
|
+
mediaTrackId: callEvent.mediaTrackId,
|
|
326
|
+
timestamp: timestamp !== null && timestamp !== void 0 ? timestamp : sample.timestamp,
|
|
327
|
+
});
|
|
328
|
+
break;
|
|
329
|
+
}
|
|
330
|
+
case CallEventType_1.CallEventType.MEDIA_TRACK_REMOVED: {
|
|
331
|
+
callEvent.peerConnectionId && callEvent.mediaTrackId && this.ωpendingMediaTrackTimestamps.push({
|
|
332
|
+
type: 'removed',
|
|
333
|
+
peerConnectionId: callEvent.peerConnectionId,
|
|
334
|
+
mediaTrackId: callEvent.mediaTrackId,
|
|
335
|
+
timestamp: timestamp !== null && timestamp !== void 0 ? timestamp : sample.timestamp,
|
|
336
|
+
});
|
|
305
337
|
break;
|
|
306
338
|
}
|
|
307
339
|
case CallEventType_1.CallEventType.CLIENT_ISSUE: {
|
|
@@ -348,7 +380,9 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
348
380
|
payload: codec,
|
|
349
381
|
}, this.userId);
|
|
350
382
|
this.reports.addCallMetaReport(callMetaReport);
|
|
351
|
-
codec.mimeType && this.
|
|
383
|
+
if (codec.mimeType && !this.mediaCodecs.find((c) => c.mimeType === codec.mimeType)) {
|
|
384
|
+
this.mediaCodecs.push(codec);
|
|
385
|
+
}
|
|
352
386
|
}
|
|
353
387
|
for (const iceServer of (_t = sample.iceServers) !== null && _t !== void 0 ? _t : []) {
|
|
354
388
|
const callMetaReport = (0, CallMetaReports_1.createCallMetaReport)(this.serviceId, this.mediaUnitId, this.roomId, this.callId, this.clientId, {
|
|
@@ -363,7 +397,9 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
363
397
|
payload: mediaDevice,
|
|
364
398
|
}, this.userId);
|
|
365
399
|
this.reports.addCallMetaReport(callMetaReport);
|
|
366
|
-
mediaDevice.
|
|
400
|
+
if (mediaDevice.id && !this.mediaDevices.find((d) => d.id === mediaDevice.id)) {
|
|
401
|
+
this.mediaDevices.push(mediaDevice);
|
|
402
|
+
}
|
|
367
403
|
}
|
|
368
404
|
for (const mediaSource of (_v = sample.mediaSources) !== null && _v !== void 0 ? _v : []) {
|
|
369
405
|
const callMetaReport = (0, CallMetaReports_1.createCallMetaReport)(this.serviceId, this.mediaUnitId, this.roomId, this.callId, this.clientId, {
|
|
@@ -543,6 +579,40 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
543
579
|
logger.error(`Error creating data channel: ${err === null || err === void 0 ? void 0 : err.message}`);
|
|
544
580
|
}
|
|
545
581
|
}
|
|
582
|
+
// try to set the timestamps of the peer connections
|
|
583
|
+
if (0 < this.ωpendingPeerConnectionTimestamps.length) {
|
|
584
|
+
const newPendingTimestamps = [];
|
|
585
|
+
for (const pendingTimestamp of this.ωpendingPeerConnectionTimestamps) {
|
|
586
|
+
const peerConnection = this._peerConnections.get(pendingTimestamp.peerConnectionId);
|
|
587
|
+
if (!peerConnection) {
|
|
588
|
+
newPendingTimestamps.push(pendingTimestamp);
|
|
589
|
+
continue;
|
|
590
|
+
}
|
|
591
|
+
if (pendingTimestamp.type === 'opened')
|
|
592
|
+
peerConnection.opened = pendingTimestamp.timestamp;
|
|
593
|
+
else if (pendingTimestamp.type === 'closed')
|
|
594
|
+
peerConnection.closedTimestamp = pendingTimestamp.timestamp;
|
|
595
|
+
}
|
|
596
|
+
this.ωpendingPeerConnectionTimestamps = newPendingTimestamps;
|
|
597
|
+
}
|
|
598
|
+
// try to set the timestamps of the media tracks
|
|
599
|
+
if (0 < this.ωpendingMediaTrackTimestamps.length) {
|
|
600
|
+
const newPendingTimestamps = [];
|
|
601
|
+
for (const pendingTimestamp of this.ωpendingMediaTrackTimestamps) {
|
|
602
|
+
const peerConnection = this._peerConnections.get(pendingTimestamp.peerConnectionId);
|
|
603
|
+
const mediaTrack = (_22 = (_21 = (_20 = peerConnection === null || peerConnection === void 0 ? void 0 : peerConnection.inboundAudioTracks.get(pendingTimestamp.mediaTrackId)) !== null && _20 !== void 0 ? _20 : peerConnection === null || peerConnection === void 0 ? void 0 : peerConnection.inboundVideoTracks.get(pendingTimestamp.mediaTrackId)) !== null && _21 !== void 0 ? _21 : peerConnection === null || peerConnection === void 0 ? void 0 : peerConnection.outboundAudioTracks.get(pendingTimestamp.mediaTrackId)) !== null && _22 !== void 0 ? _22 : peerConnection === null || peerConnection === void 0 ? void 0 : peerConnection.outboundVideoTracks.get(pendingTimestamp.mediaTrackId);
|
|
604
|
+
if (!mediaTrack) {
|
|
605
|
+
newPendingTimestamps.push(pendingTimestamp);
|
|
606
|
+
continue;
|
|
607
|
+
}
|
|
608
|
+
if (pendingTimestamp.type === 'added')
|
|
609
|
+
mediaTrack.added = pendingTimestamp.timestamp;
|
|
610
|
+
else if (pendingTimestamp.type === 'removed')
|
|
611
|
+
mediaTrack.removed = pendingTimestamp.timestamp;
|
|
612
|
+
}
|
|
613
|
+
this.ωpendingMediaTrackTimestamps = newPendingTimestamps;
|
|
614
|
+
}
|
|
615
|
+
// close resources that are not visited
|
|
546
616
|
for (const peerConnection of this._peerConnections.values()) {
|
|
547
617
|
if (!peerConnection.visited) {
|
|
548
618
|
peerConnection.close();
|
|
@@ -580,7 +650,7 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
580
650
|
}
|
|
581
651
|
// update metrics
|
|
582
652
|
const wasUsingTURN = this.usingTURN;
|
|
583
|
-
const elapsedTimeInMs = now - this.
|
|
653
|
+
const elapsedTimeInMs = now - this.updated;
|
|
584
654
|
this.usingTURN = false;
|
|
585
655
|
this.availableIncomingBitrate = 0;
|
|
586
656
|
this.availableOutgoingBitrate = 0;
|
|
@@ -614,12 +684,12 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
614
684
|
this.deltaSentVideoBytes += peerConnection.deltaSentVideoBytes;
|
|
615
685
|
this.deltaDataChannelBytesReceived += peerConnection.deltaDataChannelBytesReceived;
|
|
616
686
|
this.deltaDataChannelBytesSent += peerConnection.deltaDataChannelBytesSent;
|
|
617
|
-
this.availableIncomingBitrate += (
|
|
618
|
-
this.availableOutgoingBitrate += (
|
|
619
|
-
sumRttInMs += (
|
|
687
|
+
this.availableIncomingBitrate += (_23 = peerConnection.availableIncomingBitrate) !== null && _23 !== void 0 ? _23 : 0;
|
|
688
|
+
this.availableOutgoingBitrate += (_24 = peerConnection.availableOutgoingBitrate) !== null && _24 !== void 0 ? _24 : 0;
|
|
689
|
+
sumRttInMs += (_25 = peerConnection.avgRttInMs) !== null && _25 !== void 0 ? _25 : 0;
|
|
620
690
|
anyPeerConnectionUsingTurn || (anyPeerConnectionUsingTurn = peerConnection.usingTURN);
|
|
621
|
-
minPcScore = Math.min(minPcScore, (
|
|
622
|
-
maxPcScore = Math.max(maxPcScore, (
|
|
691
|
+
minPcScore = Math.min(minPcScore, (_27 = (_26 = peerConnection.score) === null || _26 === void 0 ? void 0 : _26.score) !== null && _27 !== void 0 ? _27 : Number.MAX_SAFE_INTEGER);
|
|
692
|
+
maxPcScore = Math.max(maxPcScore, (_29 = (_28 = peerConnection.score) === null || _28 === void 0 ? void 0 : _28.score) !== null && _29 !== void 0 ? _29 : Number.MIN_SAFE_INTEGER);
|
|
623
693
|
}
|
|
624
694
|
this.score = {
|
|
625
695
|
score: minPcScore,
|
|
@@ -651,7 +721,8 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
651
721
|
this.avgRttInMs = this._peerConnections.size ? sumRttInMs / this._peerConnections.size : undefined;
|
|
652
722
|
// to make sure when sample is emitted it can be associated to this client
|
|
653
723
|
sample.clientId = this.clientId;
|
|
654
|
-
this.
|
|
724
|
+
this.updated = now;
|
|
725
|
+
this.lastStatsTimestamp = sample.timestamp;
|
|
655
726
|
this.emit('update', {
|
|
656
727
|
sample,
|
|
657
728
|
elapsedTimeInMs,
|
|
@@ -696,11 +767,5 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
696
767
|
this.emit('newpeerconnection', result);
|
|
697
768
|
return result;
|
|
698
769
|
}
|
|
699
|
-
_addClientLeftReport() {
|
|
700
|
-
if (this._left)
|
|
701
|
-
return;
|
|
702
|
-
this._left = Date.now();
|
|
703
|
-
this.reports.addCallEventReport((0, callEventReports_1.createClientLeftEventReport)(this.serviceId, this.mediaUnitId, this.roomId, this.callId, this.clientId, this._left, this.userId, this.marker));
|
|
704
|
-
}
|
|
705
770
|
}
|
|
706
771
|
exports.ObservedClient = ObservedClient;
|
|
@@ -48,6 +48,8 @@ export declare class ObservedInboundAudioTrack extends EventEmitter {
|
|
|
48
48
|
readonly peerConnection: ObservedPeerConnection;
|
|
49
49
|
readonly created: number;
|
|
50
50
|
visited: boolean;
|
|
51
|
+
added?: number;
|
|
52
|
+
removed?: number;
|
|
51
53
|
private readonly _stats;
|
|
52
54
|
private _closed;
|
|
53
55
|
private _updated;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedInboundAudioTrack.d.ts","sourceRoot":"","sources":["../src/ObservedInboundAudioTrack.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAA2B,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,MAAM,MAAM,8BAA8B,GAAG;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,CAAA;AAED,MAAM,MAAM,+BAA+B,GAAG;IAC7C,MAAM,EAAE;QAAC;YACR,eAAe,EAAE,MAAM,CAAC;SACxB;KAAC,CAAC;IACH,KAAK,EAAE,CAAC,eAAe,CAAC,CAAC;IACzB,KAAK,EAAE,EAAE,CAAC;IACV,mBAAmB,EAAE,CAAC,0BAA0B,GAAG,SAAS,CAAC,CAAC;CAC9D,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,iBAAiB,GAAG;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACvB,CAAC;AAMF,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;IACtH,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3D;AAED,qBAAa,yBAA0B,SAAQ,YAAY;
|
|
1
|
+
{"version":3,"file":"ObservedInboundAudioTrack.d.ts","sourceRoot":"","sources":["../src/ObservedInboundAudioTrack.ts"],"names":[],"mappings":"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"}
|
|
@@ -149,6 +149,8 @@ class ObservedInboundAudioTrack extends events_1.EventEmitter {
|
|
|
149
149
|
statsTimestamp });
|
|
150
150
|
this._stats.set(sample.ssrc, stats);
|
|
151
151
|
this.visited = true;
|
|
152
|
+
// a peer connection is active if it has at least one active track
|
|
153
|
+
this.peerConnection.visited = true;
|
|
152
154
|
this._updated = now;
|
|
153
155
|
this.emit('update', {
|
|
154
156
|
elapsedTimeInMs,
|
|
@@ -5,6 +5,7 @@ import { InboundVideoTrack } from '@observertc/sample-schemas-js';
|
|
|
5
5
|
import { CalculatedScore } from './common/CalculatedScore';
|
|
6
6
|
import { ClientIssue } from './monitors/CallSummary';
|
|
7
7
|
import { ObservedOutboundVideoTrack } from './ObservedOutboundVideoTrack';
|
|
8
|
+
import { SupportedVideoCodecType } from './common/types';
|
|
8
9
|
export type ObservedInboundVideoTrackModel = {
|
|
9
10
|
trackId: string;
|
|
10
11
|
sfuStreamId?: string;
|
|
@@ -47,8 +48,10 @@ export declare class ObservedInboundVideoTrack extends EventEmitter {
|
|
|
47
48
|
readonly peerConnection: ObservedPeerConnection;
|
|
48
49
|
readonly created: number;
|
|
49
50
|
visited: boolean;
|
|
51
|
+
added?: number;
|
|
52
|
+
removed?: number;
|
|
50
53
|
contentType: 'lowmotion' | 'standard' | 'highmotion';
|
|
51
|
-
codec
|
|
54
|
+
codec?: SupportedVideoCodecType;
|
|
52
55
|
private readonly _stats;
|
|
53
56
|
private _closed;
|
|
54
57
|
private _updated;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedInboundVideoTrack.d.ts","sourceRoot":"","sources":["../src/ObservedInboundVideoTrack.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,eAAe,EAA2B,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"ObservedInboundVideoTrack.d.ts","sourceRoot":"","sources":["../src/ObservedInboundVideoTrack.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,6 @@ class ObservedInboundVideoTrack extends events_1.EventEmitter {
|
|
|
11
11
|
this.created = Date.now();
|
|
12
12
|
this.visited = false;
|
|
13
13
|
this.contentType = 'standard';
|
|
14
|
-
this.codec = 'vp8';
|
|
15
14
|
this._stats = new Map();
|
|
16
15
|
this._closed = false;
|
|
17
16
|
this._updated = Date.now();
|
|
@@ -157,6 +156,8 @@ class ObservedInboundVideoTrack extends events_1.EventEmitter {
|
|
|
157
156
|
statsTimestamp });
|
|
158
157
|
this._stats.set(sample.ssrc, stats);
|
|
159
158
|
this.visited = true;
|
|
159
|
+
// a peer connection is active if it has at least one active track
|
|
160
|
+
this.peerConnection.visited = true;
|
|
160
161
|
this._updated = now;
|
|
161
162
|
this.emit('update', {
|
|
162
163
|
elapsedTimeInMs,
|
|
@@ -42,6 +42,8 @@ export declare class ObservedOutboundAudioTrack extends EventEmitter {
|
|
|
42
42
|
readonly peerConnection: ObservedPeerConnection;
|
|
43
43
|
readonly created: number;
|
|
44
44
|
visited: boolean;
|
|
45
|
+
added?: number;
|
|
46
|
+
removed?: number;
|
|
45
47
|
bitrate: number;
|
|
46
48
|
rttInMs?: number;
|
|
47
49
|
jitter?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedOutboundAudioTrack.d.ts","sourceRoot":"","sources":["../src/ObservedOutboundAudioTrack.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAsB,MAAM,+BAA+B,CAAC;AAEvF,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAA2B,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,MAAM,MAAM,+BAA+B,GAAG;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,CAAA;AAED,MAAM,MAAM,gCAAgC,GAAG;IAC9C,wBAAwB,EAAE,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,EAAE;QAAC;YACR,eAAe,EAAE,MAAM,CAAC;SACxB;KAAC,CAAC;IACH,KAAK,EAAE,CAAC,eAAe,CAAC,CAAC;IACzB,KAAK,EAAE,EAAE,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG,kBAAkB,GAAG;IAClE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,cAAc,EAAE,MAAM,CAAC;CACvB,CAAC;AAMF,MAAM,CAAC,OAAO,WAAW,0BAA0B;IAClD,EAAE,CAAC,CAAC,SAAS,MAAM,gCAAgC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,gCAAgC,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACvI,GAAG,CAAC,CAAC,SAAS,MAAM,gCAAgC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,gCAAgC,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACxI,IAAI,CAAC,CAAC,SAAS,MAAM,gCAAgC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,gCAAgC,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACzI,IAAI,CAAC,CAAC,SAAS,MAAM,gCAAgC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,gCAAgC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IACxH,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5D;AAED,qBAAa,0BAA2B,SAAQ,YAAY;
|
|
1
|
+
{"version":3,"file":"ObservedOutboundAudioTrack.d.ts","sourceRoot":"","sources":["../src/ObservedOutboundAudioTrack.ts"],"names":[],"mappings":"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"}
|
|
@@ -120,19 +120,9 @@ class ObservedOutboundAudioTrack extends events_1.EventEmitter {
|
|
|
120
120
|
deltaSentFrames,
|
|
121
121
|
statsTimestamp });
|
|
122
122
|
this._stats.set(sample.ssrc, stats);
|
|
123
|
-
// this.bitrate = [ ...this._stats.values() ].reduce((acc, stat) => acc + stat.bitrate, 0);
|
|
124
|
-
// this.rttInMs = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.rttInMs ?? 0), 0) / (this._stats.size || 1);
|
|
125
|
-
// this.totalLostPackets = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.packetsLost ?? 0), 0);
|
|
126
|
-
// this.totalSentPackets = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.packetsSent ?? 0), 0);
|
|
127
|
-
// this.totalSentBytes = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.bytesSent ?? 0), 0);
|
|
128
|
-
// this.totalSentFrames = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.deltaSentPackets ?? 0), 0);
|
|
129
|
-
// this.deltaEncodedFrames = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.deltaEncodedFrames ?? 0), 0);
|
|
130
|
-
// this.deltaSentFrames = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.deltaSentFrames ?? 0), 0);
|
|
131
|
-
// this.deltaLostPackets = [ ...this._stats.values() ].reduce((acc, stat) => acc + stat.deltaLostPackets, 0);
|
|
132
|
-
// this.deltaSentPackets = [ ...this._stats.values() ].reduce((acc, stat) => acc + stat.deltaSentPackets, 0);
|
|
133
|
-
// this.deltaSentBytes = [ ...this._stats.values() ].reduce((acc, stat) => acc + stat.deltaSentBytes, 0);
|
|
134
|
-
// setting up sfu connection as it is not always available at the first sample
|
|
135
123
|
this.visited = true;
|
|
124
|
+
// a peer connection is active if it has at least one active track
|
|
125
|
+
this.peerConnection.visited = true;
|
|
136
126
|
this._updated = now;
|
|
137
127
|
this.emit('update', {
|
|
138
128
|
elapsedTimeInMs,
|