@observertc/observer-js 0.42.1 → 0.42.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/ObservedCall.d.ts +5 -10
- package/lib/ObservedCall.d.ts.map +1 -1
- package/lib/ObservedCall.js +17 -22
- package/lib/ObservedClient.d.ts +19 -8
- package/lib/ObservedClient.d.ts.map +1 -1
- package/lib/ObservedClient.js +94 -27
- 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/package.json +1 -1
- package/src/ObservedCall.ts +35 -41
- package/src/ObservedClient.ts +114 -34
- 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/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":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAa,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,MAAM,MAAM,iBAAiB,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAChC,MAAM,EAAE,EAAE,CAAC;IACX,SAAS,EAAE,CAAC,cAAc,CAAC,CAAC;IAC5B,SAAS,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC;IACtE,KAAK,EAAE,EAAE,CAAC;CACV,CAAA;AAED,MAAM,CAAC,OAAO,WAAW,YAAY;IACpC,EAAE,CAAC,CAAC,SAAS,MAAM,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC3G,GAAG,CAAC,CAAC,SAAS,MAAM,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC5G,IAAI,CAAC,CAAC,SAAS,MAAM,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC7G,IAAI,CAAC,CAAC,SAAS,MAAM,kBAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;CAC5F;AAED,qBAAa,YAAY,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,SAAQ,YAAY;IAoB/G,OAAO,CAAC,QAAQ,CAAC,MAAM;aACP,QAAQ,EAAE,QAAQ;aAClB,OAAO,EAAE,OAAO;IArBjC,SAAgB,OAAO,SAAc;IAErC,SAAgB,SAAS,wDAAmC;IAE5D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAEvD,UAAU,CAAC,EAAE;QACnB,KAAK,EAAE,eAAe,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF,SAAgB,+BAA+B,mDAA0D;IACzG,SAAgB,+BAA+B,mDAA0D;IACzG,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAc;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAc;gBAGnB,MAAM,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO;IAMjC,IAAW,SAAS,IAAI,MAAM,CAG7B;IAED,IAAW,OAAO,kDAEjB;IAED,IAAW,MAAM,WAGhB;IAED,IAAW,MAAM,WAGhB;IAED,IAAW,OAAO,WAEjB;IAED,IAAW,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAExD;IAED,IAAW,KAAK,IAAI,eAAe,GAAG,SAAS,CA2B9C;IAED,IAAW,MAAM,YAEhB;IAEM,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM;IAexB,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAE,EAAE,WAAW,CAAC;IAUxG,YAAY,CAAC,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,mBAAmB,GAAG;QAC1H,OAAO,EAAE,aAAa,CAAC;QAIvB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,wBAAwB,CAAC,EAAE,OAAO,CAAC;QACnC,sBAAsB,CAAC,EAAE,OAAO,CAAC;KACjC;CA2DD"}
|
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,6 +73,17 @@ 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;
|
|
@@ -82,10 +93,10 @@ export declare class ObservedClient<AppData extends Record<string, unknown> = Re
|
|
|
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;
|
|
89
100
|
score?: CalculatedScore;
|
|
90
101
|
usingTURN: boolean;
|
|
91
102
|
availableOutgoingBitrate: number;
|
|
@@ -116,12 +127,12 @@ export declare class ObservedClient<AppData extends Record<string, unknown> = Re
|
|
|
116
127
|
inboundAudioBitrate?: number;
|
|
117
128
|
inboundVideoBitrate?: number;
|
|
118
129
|
mediaConstraints: string[];
|
|
119
|
-
readonly mediaDevices:
|
|
120
|
-
readonly
|
|
130
|
+
readonly mediaDevices: MediaDevice[];
|
|
131
|
+
readonly mediaCodecs: MediaCodecStats[];
|
|
121
132
|
readonly userMediaErrors: string[];
|
|
122
133
|
readonly issues: ClientIssue[];
|
|
123
|
-
|
|
124
|
-
|
|
134
|
+
ωpendingPeerConnectionTimestamps: PendingPeerConnectionTimestamp[];
|
|
135
|
+
ωpendingMediaTrackTimestamps: PendingMediaTrackTimestamp[];
|
|
125
136
|
constructor(_model: ObservedClientModel, call: ObservedCall, appData: AppData);
|
|
126
137
|
getSfu<T extends Record<string, unknown> = Record<string, unknown>>(): ObservedSfu<T> | undefined;
|
|
127
138
|
get sfu(): ObservedSfu | undefined;
|
|
@@ -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 {
|
|
@@ -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() {
|
|
@@ -145,9 +144,6 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
145
144
|
if (this._closed)
|
|
146
145
|
return;
|
|
147
146
|
this._closed = true;
|
|
148
|
-
if (!this._left) {
|
|
149
|
-
this._addClientLeftReport();
|
|
150
|
-
}
|
|
151
147
|
Array.from(this._peerConnections.values()).forEach((peerConnection) => peerConnection.close());
|
|
152
148
|
this.emit('close');
|
|
153
149
|
}
|
|
@@ -195,7 +191,7 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
195
191
|
this._addAndEmitIssue(issue);
|
|
196
192
|
}
|
|
197
193
|
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;
|
|
194
|
+
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
195
|
if (this._closed)
|
|
200
196
|
throw new Error(`Client ${this.clientId} is closed`);
|
|
201
197
|
if (sample.clientId && sample.clientId !== 'NULL' && sample.clientId !== this.clientId) {
|
|
@@ -289,19 +285,58 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
289
285
|
extensionType: extensionStats.type,
|
|
290
286
|
});
|
|
291
287
|
}
|
|
292
|
-
for (let
|
|
293
|
-
const { timestamp } =
|
|
288
|
+
for (let _30 of (_p = sample.customCallEvents) !== null && _p !== void 0 ? _p : []) {
|
|
289
|
+
const { timestamp } = _30, callEvent = __rest(_30, ["timestamp"]);
|
|
294
290
|
switch (callEvent.name) {
|
|
295
291
|
case CallEventType_1.CallEventType.CLIENT_JOINED: {
|
|
296
|
-
const lastJoined = this.
|
|
297
|
-
this.
|
|
298
|
-
if
|
|
292
|
+
const lastJoined = this.joined;
|
|
293
|
+
this.joined = timestamp;
|
|
294
|
+
// if it is joined before and it is joined again
|
|
295
|
+
if (lastJoined && this.joined && lastJoined !== this.joined) {
|
|
299
296
|
this.emit('rejoined', { lastJoined });
|
|
300
297
|
}
|
|
298
|
+
// in case we have a left event before the joined event
|
|
299
|
+
if (this.left && this.joined && this.left < this.joined) {
|
|
300
|
+
this.left = undefined;
|
|
301
|
+
}
|
|
301
302
|
break;
|
|
302
303
|
}
|
|
303
304
|
case CallEventType_1.CallEventType.CLIENT_LEFT: {
|
|
304
|
-
this.
|
|
305
|
+
this.left = timestamp;
|
|
306
|
+
break;
|
|
307
|
+
}
|
|
308
|
+
case CallEventType_1.CallEventType.PEER_CONNECTION_OPENED: {
|
|
309
|
+
callEvent.peerConnectionId && this.ωpendingPeerConnectionTimestamps.push({
|
|
310
|
+
type: 'opened',
|
|
311
|
+
peerConnectionId: callEvent.peerConnectionId,
|
|
312
|
+
timestamp: timestamp !== null && timestamp !== void 0 ? timestamp : sample.timestamp,
|
|
313
|
+
});
|
|
314
|
+
break;
|
|
315
|
+
}
|
|
316
|
+
case CallEventType_1.CallEventType.PEER_CONNECTION_CLOSED: {
|
|
317
|
+
callEvent.peerConnectionId && this.ωpendingPeerConnectionTimestamps.push({
|
|
318
|
+
type: 'closed',
|
|
319
|
+
peerConnectionId: callEvent.peerConnectionId,
|
|
320
|
+
timestamp: timestamp !== null && timestamp !== void 0 ? timestamp : sample.timestamp,
|
|
321
|
+
});
|
|
322
|
+
break;
|
|
323
|
+
}
|
|
324
|
+
case CallEventType_1.CallEventType.MEDIA_TRACK_ADDED: {
|
|
325
|
+
callEvent.peerConnectionId && callEvent.mediaTrackId && this.ωpendingMediaTrackTimestamps.push({
|
|
326
|
+
type: 'added',
|
|
327
|
+
peerConnectionId: callEvent.peerConnectionId,
|
|
328
|
+
mediaTrackId: callEvent.mediaTrackId,
|
|
329
|
+
timestamp: timestamp !== null && timestamp !== void 0 ? timestamp : sample.timestamp,
|
|
330
|
+
});
|
|
331
|
+
break;
|
|
332
|
+
}
|
|
333
|
+
case CallEventType_1.CallEventType.MEDIA_TRACK_REMOVED: {
|
|
334
|
+
callEvent.peerConnectionId && callEvent.mediaTrackId && this.ωpendingMediaTrackTimestamps.push({
|
|
335
|
+
type: 'removed',
|
|
336
|
+
peerConnectionId: callEvent.peerConnectionId,
|
|
337
|
+
mediaTrackId: callEvent.mediaTrackId,
|
|
338
|
+
timestamp: timestamp !== null && timestamp !== void 0 ? timestamp : sample.timestamp,
|
|
339
|
+
});
|
|
305
340
|
break;
|
|
306
341
|
}
|
|
307
342
|
case CallEventType_1.CallEventType.CLIENT_ISSUE: {
|
|
@@ -348,7 +383,9 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
348
383
|
payload: codec,
|
|
349
384
|
}, this.userId);
|
|
350
385
|
this.reports.addCallMetaReport(callMetaReport);
|
|
351
|
-
codec.mimeType && this.
|
|
386
|
+
if (codec.mimeType && !this.mediaCodecs.find((c) => c.mimeType === codec.mimeType)) {
|
|
387
|
+
this.mediaCodecs.push(codec);
|
|
388
|
+
}
|
|
352
389
|
}
|
|
353
390
|
for (const iceServer of (_t = sample.iceServers) !== null && _t !== void 0 ? _t : []) {
|
|
354
391
|
const callMetaReport = (0, CallMetaReports_1.createCallMetaReport)(this.serviceId, this.mediaUnitId, this.roomId, this.callId, this.clientId, {
|
|
@@ -363,7 +400,9 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
363
400
|
payload: mediaDevice,
|
|
364
401
|
}, this.userId);
|
|
365
402
|
this.reports.addCallMetaReport(callMetaReport);
|
|
366
|
-
mediaDevice.
|
|
403
|
+
if (mediaDevice.id && !this.mediaDevices.find((d) => d.id === mediaDevice.id)) {
|
|
404
|
+
this.mediaDevices.push(mediaDevice);
|
|
405
|
+
}
|
|
367
406
|
}
|
|
368
407
|
for (const mediaSource of (_v = sample.mediaSources) !== null && _v !== void 0 ? _v : []) {
|
|
369
408
|
const callMetaReport = (0, CallMetaReports_1.createCallMetaReport)(this.serviceId, this.mediaUnitId, this.roomId, this.callId, this.clientId, {
|
|
@@ -543,6 +582,40 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
543
582
|
logger.error(`Error creating data channel: ${err === null || err === void 0 ? void 0 : err.message}`);
|
|
544
583
|
}
|
|
545
584
|
}
|
|
585
|
+
// try to set the timestamps of the peer connections
|
|
586
|
+
if (0 < this.ωpendingPeerConnectionTimestamps.length) {
|
|
587
|
+
const newPendingTimestamps = [];
|
|
588
|
+
for (const pendingTimestamp of this.ωpendingPeerConnectionTimestamps) {
|
|
589
|
+
const peerConnection = this._peerConnections.get(pendingTimestamp.peerConnectionId);
|
|
590
|
+
if (!peerConnection) {
|
|
591
|
+
newPendingTimestamps.push(pendingTimestamp);
|
|
592
|
+
continue;
|
|
593
|
+
}
|
|
594
|
+
if (pendingTimestamp.type === 'opened')
|
|
595
|
+
peerConnection.opened = pendingTimestamp.timestamp;
|
|
596
|
+
else if (pendingTimestamp.type === 'closed')
|
|
597
|
+
peerConnection.closedTimestamp = pendingTimestamp.timestamp;
|
|
598
|
+
}
|
|
599
|
+
this.ωpendingPeerConnectionTimestamps = newPendingTimestamps;
|
|
600
|
+
}
|
|
601
|
+
// try to set the timestamps of the media tracks
|
|
602
|
+
if (0 < this.ωpendingMediaTrackTimestamps.length) {
|
|
603
|
+
const newPendingTimestamps = [];
|
|
604
|
+
for (const pendingTimestamp of this.ωpendingMediaTrackTimestamps) {
|
|
605
|
+
const peerConnection = this._peerConnections.get(pendingTimestamp.peerConnectionId);
|
|
606
|
+
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);
|
|
607
|
+
if (!mediaTrack) {
|
|
608
|
+
newPendingTimestamps.push(pendingTimestamp);
|
|
609
|
+
continue;
|
|
610
|
+
}
|
|
611
|
+
if (pendingTimestamp.type === 'added')
|
|
612
|
+
mediaTrack.added = pendingTimestamp.timestamp;
|
|
613
|
+
else if (pendingTimestamp.type === 'removed')
|
|
614
|
+
mediaTrack.removed = pendingTimestamp.timestamp;
|
|
615
|
+
}
|
|
616
|
+
this.ωpendingMediaTrackTimestamps = newPendingTimestamps;
|
|
617
|
+
}
|
|
618
|
+
// close resources that are not visited
|
|
546
619
|
for (const peerConnection of this._peerConnections.values()) {
|
|
547
620
|
if (!peerConnection.visited) {
|
|
548
621
|
peerConnection.close();
|
|
@@ -614,12 +687,12 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
614
687
|
this.deltaSentVideoBytes += peerConnection.deltaSentVideoBytes;
|
|
615
688
|
this.deltaDataChannelBytesReceived += peerConnection.deltaDataChannelBytesReceived;
|
|
616
689
|
this.deltaDataChannelBytesSent += peerConnection.deltaDataChannelBytesSent;
|
|
617
|
-
this.availableIncomingBitrate += (
|
|
618
|
-
this.availableOutgoingBitrate += (
|
|
619
|
-
sumRttInMs += (
|
|
690
|
+
this.availableIncomingBitrate += (_23 = peerConnection.availableIncomingBitrate) !== null && _23 !== void 0 ? _23 : 0;
|
|
691
|
+
this.availableOutgoingBitrate += (_24 = peerConnection.availableOutgoingBitrate) !== null && _24 !== void 0 ? _24 : 0;
|
|
692
|
+
sumRttInMs += (_25 = peerConnection.avgRttInMs) !== null && _25 !== void 0 ? _25 : 0;
|
|
620
693
|
anyPeerConnectionUsingTurn || (anyPeerConnectionUsingTurn = peerConnection.usingTURN);
|
|
621
|
-
minPcScore = Math.min(minPcScore, (
|
|
622
|
-
maxPcScore = Math.max(maxPcScore, (
|
|
694
|
+
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);
|
|
695
|
+
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
696
|
}
|
|
624
697
|
this.score = {
|
|
625
698
|
score: minPcScore,
|
|
@@ -696,11 +769,5 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
696
769
|
this.emit('newpeerconnection', result);
|
|
697
770
|
return result;
|
|
698
771
|
}
|
|
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
772
|
}
|
|
706
773
|
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,
|
|
@@ -5,6 +5,7 @@ import { OutboundVideoTrack } from '@observertc/sample-schemas-js';
|
|
|
5
5
|
import { ObservedInboundVideoTrack } from './ObservedInboundVideoTrack';
|
|
6
6
|
import { CalculatedScore } from './common/CalculatedScore';
|
|
7
7
|
import { ClientIssue } from './monitors/CallSummary';
|
|
8
|
+
import { SupportedVideoCodecType } from './common/types';
|
|
8
9
|
export type ObservedOutboundVideoTrackModel = {
|
|
9
10
|
trackId: string;
|
|
10
11
|
sfuStreamId?: string;
|
|
@@ -42,8 +43,10 @@ export declare class ObservedOutboundVideoTrack extends EventEmitter {
|
|
|
42
43
|
readonly peerConnection: ObservedPeerConnection;
|
|
43
44
|
readonly created: number;
|
|
44
45
|
visited: boolean;
|
|
46
|
+
added?: number;
|
|
47
|
+
removed?: number;
|
|
45
48
|
contentType: 'lowmotion' | 'standard' | 'highmotion';
|
|
46
|
-
codec
|
|
49
|
+
codec?: SupportedVideoCodecType;
|
|
47
50
|
highestLayer?: ObservedOutboundVideoTrackStats;
|
|
48
51
|
bitrate: number;
|
|
49
52
|
jitter?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedOutboundVideoTrack.d.ts","sourceRoot":"","sources":["../src/ObservedOutboundVideoTrack.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAA2B,eAAe,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"ObservedOutboundVideoTrack.d.ts","sourceRoot":"","sources":["../src/ObservedOutboundVideoTrack.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,6 @@ class ObservedOutboundVideoTrack 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.bitrate = 0;
|
|
16
15
|
this.totalLostPackets = 0;
|
|
17
16
|
this.totalSentPackets = 0;
|
|
@@ -135,6 +134,8 @@ class ObservedOutboundVideoTrack extends events_1.EventEmitter {
|
|
|
135
134
|
// this.deltaSentBytes = [ ...this._stats.values() ].reduce((acc, stat) => acc + stat.deltaSentBytes, 0);
|
|
136
135
|
// setting up sfu connection as it is not always available at the first sample
|
|
137
136
|
this.visited = true;
|
|
137
|
+
// a peer connection is active if it has at least one active track
|
|
138
|
+
this.peerConnection.visited = true;
|
|
138
139
|
this._updated = now;
|
|
139
140
|
this.emit('update', {
|
|
140
141
|
elapsedTimeInMs,
|