@observertc/observer-js 0.30.1-beta → 0.30.3-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/ObservedClient.d.ts +15 -6
- package/lib/ObservedClient.d.ts.map +1 -1
- package/lib/ObservedClient.js +146 -73
- package/lib/ObservedICE.d.ts +47 -0
- package/lib/ObservedICE.d.ts.map +1 -0
- package/lib/ObservedICE.js +105 -0
- package/lib/ObservedInboundTrack.d.ts +29 -1
- package/lib/ObservedInboundTrack.d.ts.map +1 -1
- package/lib/ObservedInboundTrack.js +78 -8
- package/lib/ObservedOutboundTrack.d.ts +20 -3
- package/lib/ObservedOutboundTrack.d.ts.map +1 -1
- package/lib/ObservedOutboundTrack.js +53 -9
- package/lib/ObservedPeerConnection.d.ts +47 -1
- package/lib/ObservedPeerConnection.d.ts.map +1 -1
- package/lib/ObservedPeerConnection.js +155 -0
- package/lib/common/CallEventType.d.ts +22 -0
- package/lib/common/CallEventType.d.ts.map +1 -0
- package/lib/common/CallEventType.js +26 -0
- package/lib/common/callEventReports.d.ts +0 -10
- package/lib/common/callEventReports.d.ts.map +1 -1
- package/lib/common/callEventReports.js +10 -21
- package/lib/models/Models.d.ts +3 -70
- package/lib/models/Models.d.ts.map +1 -1
- package/lib/models/Models.js +2 -72
- package/lib/models/samples_pb.js +1 -1
- package/package.json +1 -1
- package/src/ObservedClient.ts +146 -89
- package/src/ObservedICE.ts +176 -0
- package/src/ObservedInboundTrack.ts +97 -3
- package/src/ObservedOutboundTrack.ts +70 -9
- package/src/ObservedPeerConnection.ts +205 -1
- package/src/common/CallEventType.ts +23 -0
- package/src/common/callEventReports.ts +1 -11
- package/src/models/Models.ts +4 -113
- package/src/models/samples_pb.ts +1 -1
- package/lib/common/ReportsCollector.d.ts +0 -23
- package/lib/common/ReportsCollector.d.ts.map +0 -1
- package/lib/common/ReportsCollector.js +0 -26
- package/src/common/ReportsCollector.ts +0 -71
|
@@ -22,6 +22,14 @@ export type ObservedInboundTrackStats<K extends MediaKind> = ObservedInboundTrac
|
|
|
22
22
|
bitrate: number;
|
|
23
23
|
fractionLost: number;
|
|
24
24
|
rttInMs?: number;
|
|
25
|
+
lostPackets?: number;
|
|
26
|
+
receivedPackets?: number;
|
|
27
|
+
receivedFrames?: number;
|
|
28
|
+
decodedFrames?: number;
|
|
29
|
+
droppedFrames?: number;
|
|
30
|
+
receivedSamples?: number;
|
|
31
|
+
silentConcealedSamples?: number;
|
|
32
|
+
fractionLoss?: number;
|
|
25
33
|
};
|
|
26
34
|
export declare interface ObservedInboundTrack<Kind extends MediaKind> {
|
|
27
35
|
on<U extends keyof ObservedInboundTrackEvents<Kind>>(event: U, listener: (...args: ObservedInboundTrackEvents<Kind>[U]) => void): this;
|
|
@@ -35,13 +43,31 @@ export declare class ObservedInboundTrack<Kind extends MediaKind> extends EventE
|
|
|
35
43
|
readonly peerConnection: ObservedPeerConnection;
|
|
36
44
|
private readonly _storageProvider;
|
|
37
45
|
static create<K extends MediaKind>(config: ObservedInboundTrackConfig<K>, peerConnection: ObservedPeerConnection, storageProvider: StorageProvider): Promise<ObservedInboundTrack<K>>;
|
|
46
|
+
created: number;
|
|
38
47
|
private readonly _stats;
|
|
39
48
|
private readonly _execute;
|
|
40
49
|
private _closed;
|
|
41
50
|
private _updated;
|
|
42
51
|
private _remoteOutboundTrack?;
|
|
43
52
|
bitrate: number;
|
|
44
|
-
rttInMs
|
|
53
|
+
rttInMs?: number;
|
|
54
|
+
fractionLoss: number;
|
|
55
|
+
totalLostPackets: number;
|
|
56
|
+
totalReceivedPackets: number;
|
|
57
|
+
totalBytesReceived: number;
|
|
58
|
+
totalReceivedFrames: number;
|
|
59
|
+
totalDecodedFrames: number;
|
|
60
|
+
totalDroppedFrames: number;
|
|
61
|
+
totalReceivedSamples: number;
|
|
62
|
+
totalSilentConcealedSamples: number;
|
|
63
|
+
deltaLostPackets: number;
|
|
64
|
+
deltaReceivedPackets: number;
|
|
65
|
+
deltaBytesReceived: number;
|
|
66
|
+
deltaReceivedFrames: number;
|
|
67
|
+
deltaDecodedFrames: number;
|
|
68
|
+
deltaDroppedFrames: number;
|
|
69
|
+
deltaReceivedSamples: number;
|
|
70
|
+
deltaSilentConcealedSamples: number;
|
|
45
71
|
private constructor();
|
|
46
72
|
get serviceId(): string;
|
|
47
73
|
get roomId(): string;
|
|
@@ -56,10 +82,12 @@ export declare class ObservedInboundTrack<Kind extends MediaKind> extends EventE
|
|
|
56
82
|
get updated(): number;
|
|
57
83
|
get stats(): ReadonlyMap<number, ObservedInboundTrackStats<Kind>>;
|
|
58
84
|
get reports(): import("./ReportsCollector").ReportsCollector;
|
|
85
|
+
get uptimeInMs(): number;
|
|
59
86
|
set remoteOutboundTrack(track: ObservedOutboundTrack<Kind> | undefined);
|
|
60
87
|
get remoteOutboundTrack(): ObservedOutboundTrack<Kind> | undefined;
|
|
61
88
|
get closed(): boolean;
|
|
62
89
|
close(): void;
|
|
90
|
+
resetMetrics(): void;
|
|
63
91
|
private _save;
|
|
64
92
|
}
|
|
65
93
|
//# sourceMappingURL=ObservedInboundTrack.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedInboundTrack.d.ts","sourceRoot":"","sources":["../src/ObservedInboundTrack.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,MAAM,0BAA0B,CAAC,CAAC,SAAS,SAAS,IAAI;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,CAAC,CAAC;IACR,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,CAAA;AAED,MAAM,MAAM,0BAA0B,CAAC,CAAC,SAAS,SAAS,IAAI;IAC7D,MAAM,EAAE,EAAE,CAAC;IACX,KAAK,EAAE,EAAE,CAAC;IACV,mBAAmB,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;CAChD,CAAC;AAEF,MAAM,MAAM,+BAA+B,CAAC,CAAC,SAAS,SAAS,IAAI,CAAC,SAAS,OAAO,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;AAE7H,MAAM,MAAM,yBAAyB,CAAC,CAAC,SAAS,SAAS,IAAI,+BAA+B,CAAC,CAAC,CAAC,GAAG;IACjG,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ObservedInboundTrack.d.ts","sourceRoot":"","sources":["../src/ObservedInboundTrack.ts"],"names":[],"mappings":"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"}
|
|
@@ -62,12 +62,29 @@ class ObservedInboundTrack extends events_1.EventEmitter {
|
|
|
62
62
|
this._model = _model;
|
|
63
63
|
this.peerConnection = peerConnection;
|
|
64
64
|
this._storageProvider = _storageProvider;
|
|
65
|
+
this.created = Date.now();
|
|
65
66
|
this._stats = new Map();
|
|
66
67
|
this._execute = (0, SingleExecutor_1.createSingleExecutor)();
|
|
67
68
|
this._closed = false;
|
|
68
69
|
this._updated = Date.now();
|
|
69
|
-
this.bitrate =
|
|
70
|
-
this.
|
|
70
|
+
this.bitrate = 0;
|
|
71
|
+
this.fractionLoss = 0;
|
|
72
|
+
this.totalLostPackets = 0;
|
|
73
|
+
this.totalReceivedPackets = 0;
|
|
74
|
+
this.totalBytesReceived = 0;
|
|
75
|
+
this.totalReceivedFrames = 0;
|
|
76
|
+
this.totalDecodedFrames = 0;
|
|
77
|
+
this.totalDroppedFrames = 0;
|
|
78
|
+
this.totalReceivedSamples = 0;
|
|
79
|
+
this.totalSilentConcealedSamples = 0;
|
|
80
|
+
this.deltaLostPackets = 0;
|
|
81
|
+
this.deltaReceivedPackets = 0;
|
|
82
|
+
this.deltaBytesReceived = 0;
|
|
83
|
+
this.deltaReceivedFrames = 0;
|
|
84
|
+
this.deltaDecodedFrames = 0;
|
|
85
|
+
this.deltaDroppedFrames = 0;
|
|
86
|
+
this.deltaReceivedSamples = 0;
|
|
87
|
+
this.deltaSilentConcealedSamples = 0;
|
|
71
88
|
}
|
|
72
89
|
get serviceId() {
|
|
73
90
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
@@ -116,6 +133,9 @@ class ObservedInboundTrack extends events_1.EventEmitter {
|
|
|
116
133
|
get reports() {
|
|
117
134
|
return this.peerConnection.reports;
|
|
118
135
|
}
|
|
136
|
+
get uptimeInMs() {
|
|
137
|
+
return this._updated - this.created;
|
|
138
|
+
}
|
|
119
139
|
set remoteOutboundTrack(track) {
|
|
120
140
|
if (this._closed)
|
|
121
141
|
return;
|
|
@@ -143,13 +163,25 @@ class ObservedInboundTrack extends events_1.EventEmitter {
|
|
|
143
163
|
.catch(() => void 0)
|
|
144
164
|
.finally(() => this.emit('close'));
|
|
145
165
|
}
|
|
166
|
+
resetMetrics() {
|
|
167
|
+
this.bitrate = 0;
|
|
168
|
+
this.rttInMs = undefined;
|
|
169
|
+
this.deltaBytesReceived = 0;
|
|
170
|
+
this.deltaLostPackets = 0;
|
|
171
|
+
this.deltaReceivedFrames = 0;
|
|
172
|
+
this.deltaDecodedFrames = 0;
|
|
173
|
+
this.deltaDroppedFrames = 0;
|
|
174
|
+
this.deltaReceivedSamples = 0;
|
|
175
|
+
this.deltaSilentConcealedSamples = 0;
|
|
176
|
+
this.fractionLoss = 0;
|
|
177
|
+
}
|
|
146
178
|
update(sample, timestamp) {
|
|
147
|
-
var _a, _b, _c, _d, _e, _f;
|
|
179
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
|
|
148
180
|
return __awaiter(this, void 0, void 0, function* () {
|
|
149
181
|
if (this._closed)
|
|
150
182
|
return;
|
|
151
183
|
let executeSave = false;
|
|
152
|
-
const report = Object.assign(Object.assign({ serviceId: this.peerConnection.client.call.serviceId, roomId: this.peerConnection.client.call.roomId, callId: this.peerConnection.client.call.callId, clientId: this.peerConnection.client.clientId, userId: this.peerConnection.client.userId, mediaUnitId: this.peerConnection.client.mediaUnitId, peerConnectionId: this.peerConnection.peerConnectionId }, sample), { timestamp, sampleSeq: -1 });
|
|
184
|
+
const report = Object.assign(Object.assign({ serviceId: this.peerConnection.client.call.serviceId, roomId: this.peerConnection.client.call.roomId, callId: this.peerConnection.client.call.callId, clientId: this.peerConnection.client.clientId, userId: this.peerConnection.client.userId, mediaUnitId: this.peerConnection.client.mediaUnitId, peerConnectionId: this.peerConnection.peerConnectionId }, sample), { timestamp, sampleSeq: -1, remoteClientId: (_a = sample.remoteClientId) !== null && _a !== void 0 ? _a : (_b = this.remoteOutboundTrack) === null || _b === void 0 ? void 0 : _b.peerConnection.client.clientId, remoteUserId: (_c = this.remoteOutboundTrack) === null || _c === void 0 ? void 0 : _c.peerConnection.client.userId, remoteTrackId: (_d = this.remoteOutboundTrack) === null || _d === void 0 ? void 0 : _d.trackId, remotePeerConnectionId: (_e = this.remoteOutboundTrack) === null || _e === void 0 ? void 0 : _e.peerConnection.peerConnectionId });
|
|
153
185
|
if (this.kind === 'audio')
|
|
154
186
|
this.reports.addInboundAudioTrackReport(report);
|
|
155
187
|
else if (this.kind === 'video')
|
|
@@ -165,16 +197,54 @@ class ObservedInboundTrack extends events_1.EventEmitter {
|
|
|
165
197
|
const elapsedTimeInMs = Math.max(1, timestamp - this._updated);
|
|
166
198
|
const lastStat = this._stats.get(sample.ssrc);
|
|
167
199
|
const rttInMs = sample.roundTripTime ? sample.roundTripTime * 1000 : undefined;
|
|
168
|
-
const bitrate = (((
|
|
169
|
-
const lostPackets = ((
|
|
170
|
-
const receivedPackets = ((
|
|
200
|
+
const bitrate = (((_f = sample.bytesReceived) !== null && _f !== void 0 ? _f : 0) - ((_g = lastStat === null || lastStat === void 0 ? void 0 : lastStat.bytesReceived) !== null && _g !== void 0 ? _g : 0)) * 8 / (elapsedTimeInMs / 1000);
|
|
201
|
+
const lostPackets = ((_h = sample.packetsLost) !== null && _h !== void 0 ? _h : 0) - ((_j = lastStat === null || lastStat === void 0 ? void 0 : lastStat.packetsLost) !== null && _j !== void 0 ? _j : 0);
|
|
202
|
+
const receivedPackets = ((_k = sample.packetsReceived) !== null && _k !== void 0 ? _k : 0) - ((_l = lastStat === null || lastStat === void 0 ? void 0 : lastStat.packetsReceived) !== null && _l !== void 0 ? _l : 0);
|
|
171
203
|
const fractionLost = 0 < receivedPackets && 0 < lostPackets ? (lostPackets / (receivedPackets + lostPackets)) : 0;
|
|
204
|
+
let decodedFrames;
|
|
205
|
+
let droppedFrames;
|
|
206
|
+
let receivedFrames;
|
|
207
|
+
let silentConcealedSamples;
|
|
208
|
+
if (this.kind === 'video') {
|
|
209
|
+
const videoSample = sample;
|
|
210
|
+
const lastVideoStat = lastStat;
|
|
211
|
+
decodedFrames = ((_m = videoSample.framesDecoded) !== null && _m !== void 0 ? _m : 0) - ((_o = lastVideoStat === null || lastVideoStat === void 0 ? void 0 : lastVideoStat.framesDecoded) !== null && _o !== void 0 ? _o : 0);
|
|
212
|
+
droppedFrames = ((_p = videoSample.framesDropped) !== null && _p !== void 0 ? _p : 0) - ((_q = lastVideoStat === null || lastVideoStat === void 0 ? void 0 : lastVideoStat.framesDropped) !== null && _q !== void 0 ? _q : 0);
|
|
213
|
+
receivedFrames = ((_r = videoSample.framesReceived) !== null && _r !== void 0 ? _r : 0) - ((_s = lastVideoStat === null || lastVideoStat === void 0 ? void 0 : lastVideoStat.framesReceived) !== null && _s !== void 0 ? _s : 0);
|
|
214
|
+
}
|
|
215
|
+
else if (this.kind === 'audio') {
|
|
216
|
+
const audioSample = sample;
|
|
217
|
+
const lastAudioStat = lastStat;
|
|
218
|
+
silentConcealedSamples = ((_t = audioSample.silentConcealedSamples) !== null && _t !== void 0 ? _t : 0) - ((_u = lastAudioStat === null || lastAudioStat === void 0 ? void 0 : lastAudioStat.silentConcealedSamples) !== null && _u !== void 0 ? _u : 0);
|
|
219
|
+
}
|
|
172
220
|
const stats = Object.assign(Object.assign({}, sample), { fractionLost,
|
|
173
221
|
rttInMs,
|
|
174
|
-
bitrate, ssrc: sample.ssrc
|
|
222
|
+
bitrate, ssrc: sample.ssrc, lostPackets,
|
|
223
|
+
receivedPackets,
|
|
224
|
+
receivedFrames,
|
|
225
|
+
decodedFrames,
|
|
226
|
+
droppedFrames,
|
|
227
|
+
silentConcealedSamples });
|
|
175
228
|
this._stats.set(sample.ssrc, stats);
|
|
176
229
|
this.bitrate = [...this._stats.values()].reduce((acc, stat) => acc + stat.bitrate, 0);
|
|
177
230
|
this.rttInMs = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.rttInMs) !== null && _a !== void 0 ? _a : 0); }, 0) / (this._stats.size || 1);
|
|
231
|
+
this.totalLostPackets = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.lostPackets) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
232
|
+
this.totalReceivedPackets = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.receivedPackets) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
233
|
+
this.totalBytesReceived = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.bytesReceived) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
234
|
+
this.totalReceivedFrames = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.receivedFrames) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
235
|
+
this.totalDecodedFrames = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.decodedFrames) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
236
|
+
this.totalDroppedFrames = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.droppedFrames) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
237
|
+
this.totalReceivedSamples = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.receivedSamples) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
238
|
+
this.totalSilentConcealedSamples = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.silentConcealedSamples) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
239
|
+
this.deltaLostPackets = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.lostPackets) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
240
|
+
this.deltaReceivedPackets = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.receivedPackets) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
241
|
+
this.deltaBytesReceived = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.bytesReceived) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
242
|
+
this.deltaReceivedFrames = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.receivedFrames) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
243
|
+
this.deltaDecodedFrames = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.decodedFrames) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
244
|
+
this.deltaDroppedFrames = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.droppedFrames) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
245
|
+
this.deltaReceivedSamples = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.receivedSamples) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
246
|
+
this.deltaSilentConcealedSamples = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.silentConcealedSamples) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
247
|
+
this.fractionLoss = 0 < this.deltaReceivedPackets && 0 < this.deltaLostPackets ? (this.deltaLostPackets / (this.deltaReceivedPackets + this.deltaLostPackets)) : 0;
|
|
178
248
|
if (executeSave)
|
|
179
249
|
yield this._save();
|
|
180
250
|
this._updated = timestamp;
|
|
@@ -19,6 +19,11 @@ export type ObservedOutboundTrackStats<K extends MediaKind> = ObservedOutboundTr
|
|
|
19
19
|
ssrc: number;
|
|
20
20
|
bitrate: number;
|
|
21
21
|
rttInMs?: number;
|
|
22
|
+
deltaLostPackets: number;
|
|
23
|
+
deltaSentPackets: number;
|
|
24
|
+
deltaSentBytes: number;
|
|
25
|
+
deltaSentFrames?: number;
|
|
26
|
+
deltaEncodedFrames?: number;
|
|
22
27
|
};
|
|
23
28
|
export declare interface ObservedOutboundTrack<Kind extends MediaKind> {
|
|
24
29
|
on<U extends keyof ObservedOutboundTrackEvents>(event: U, listener: (...args: ObservedOutboundTrackEvents[U]) => void): this;
|
|
@@ -32,8 +37,18 @@ export declare class ObservedOutboundTrack<Kind extends MediaKind> extends Event
|
|
|
32
37
|
readonly peerConnection: ObservedPeerConnection;
|
|
33
38
|
private readonly _storageProvider;
|
|
34
39
|
static create<K extends MediaKind>(config: ObservedOutboundTrackConfig<K>, peerConnection: ObservedPeerConnection, storageProvider: StorageProvider): Promise<ObservedOutboundTrack<K>>;
|
|
35
|
-
bitrate
|
|
40
|
+
bitrate: number;
|
|
36
41
|
rttInMs?: number;
|
|
42
|
+
totalLostPackets: number;
|
|
43
|
+
totalSentPackets: number;
|
|
44
|
+
totalSentBytes: number;
|
|
45
|
+
totalSentFrames: number;
|
|
46
|
+
deltaLostPackets: number;
|
|
47
|
+
deltaSentPackets: number;
|
|
48
|
+
deltaSentBytes: number;
|
|
49
|
+
deltaSentFrames: number;
|
|
50
|
+
deltaEncodedFrames: number;
|
|
51
|
+
created: number;
|
|
37
52
|
private readonly _stats;
|
|
38
53
|
private readonly _execute;
|
|
39
54
|
private _closed;
|
|
@@ -43,12 +58,14 @@ export declare class ObservedOutboundTrack<Kind extends MediaKind> extends Event
|
|
|
43
58
|
get kind(): Kind;
|
|
44
59
|
get trackId(): string;
|
|
45
60
|
get sfuStreamId(): string | undefined;
|
|
46
|
-
get closed(): boolean;
|
|
47
61
|
get remoteInboundTracks(): ReadonlyMap<string, ObservedInboundTrack<Kind>>;
|
|
48
62
|
get reports(): import("./ReportsCollector").ReportsCollector;
|
|
49
63
|
get updated(): number;
|
|
50
|
-
close(): void;
|
|
51
64
|
get stats(): ReadonlyMap<number, ObservedOutboundTrackStats<Kind>>;
|
|
65
|
+
get uptimeInMs(): number;
|
|
66
|
+
get closed(): boolean;
|
|
67
|
+
close(): void;
|
|
68
|
+
resetMetrics(): void;
|
|
52
69
|
connectInboundTrack(track: ObservedInboundTrack<Kind>): void;
|
|
53
70
|
private _save;
|
|
54
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedOutboundTrack.d.ts","sourceRoot":"","sources":["../src/ObservedOutboundTrack.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,MAAM,2BAA2B,CAAC,CAAC,SAAS,SAAS,IAAI;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,CAAC,CAAC;IACR,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACzC,MAAM,EAAE,EAAE,CAAC;IACX,KAAK,EAAE,EAAE,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,gCAAgC,CAAC,CAAC,SAAS,SAAS,IAAI,CAAC,SAAS,OAAO,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;AAEhI,MAAM,MAAM,0BAA0B,CAAC,CAAC,SAAS,SAAS,IAAI,gCAAgC,CAAC,CAAC,CAAC,GAAG;IACnG,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ObservedOutboundTrack.d.ts","sourceRoot":"","sources":["../src/ObservedOutboundTrack.ts"],"names":[],"mappings":"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"}
|
|
@@ -61,6 +61,17 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
61
61
|
this._model = _model;
|
|
62
62
|
this.peerConnection = peerConnection;
|
|
63
63
|
this._storageProvider = _storageProvider;
|
|
64
|
+
this.bitrate = 0;
|
|
65
|
+
this.totalLostPackets = 0;
|
|
66
|
+
this.totalSentPackets = 0;
|
|
67
|
+
this.totalSentBytes = 0;
|
|
68
|
+
this.totalSentFrames = 0;
|
|
69
|
+
this.deltaLostPackets = 0;
|
|
70
|
+
this.deltaSentPackets = 0;
|
|
71
|
+
this.deltaSentBytes = 0;
|
|
72
|
+
this.deltaSentFrames = 0;
|
|
73
|
+
this.deltaEncodedFrames = 0;
|
|
74
|
+
this.created = Date.now();
|
|
64
75
|
this._stats = new Map();
|
|
65
76
|
this._execute = (0, SingleExecutor_1.createSingleExecutor)();
|
|
66
77
|
this._closed = false;
|
|
@@ -78,9 +89,6 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
78
89
|
get sfuStreamId() {
|
|
79
90
|
return this._model.sfuStreamId;
|
|
80
91
|
}
|
|
81
|
-
get closed() {
|
|
82
|
-
return this._closed;
|
|
83
|
-
}
|
|
84
92
|
get remoteInboundTracks() {
|
|
85
93
|
return this._remoteInboundTracks;
|
|
86
94
|
}
|
|
@@ -90,6 +98,15 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
90
98
|
get updated() {
|
|
91
99
|
return this._updated;
|
|
92
100
|
}
|
|
101
|
+
get stats() {
|
|
102
|
+
return this._stats;
|
|
103
|
+
}
|
|
104
|
+
get uptimeInMs() {
|
|
105
|
+
return this._updated - this.created;
|
|
106
|
+
}
|
|
107
|
+
get closed() {
|
|
108
|
+
return this._closed;
|
|
109
|
+
}
|
|
93
110
|
close() {
|
|
94
111
|
if (this._closed)
|
|
95
112
|
return;
|
|
@@ -98,11 +115,17 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
98
115
|
.catch(() => void 0)
|
|
99
116
|
.finally(() => this.emit('close'));
|
|
100
117
|
}
|
|
101
|
-
|
|
102
|
-
|
|
118
|
+
resetMetrics() {
|
|
119
|
+
this.bitrate = 0;
|
|
120
|
+
this.rttInMs = 0;
|
|
121
|
+
this.deltaLostPackets = 0;
|
|
122
|
+
this.deltaSentPackets = 0;
|
|
123
|
+
this.deltaSentBytes = 0;
|
|
124
|
+
this.deltaSentFrames = 0;
|
|
125
|
+
this.deltaEncodedFrames = 0;
|
|
103
126
|
}
|
|
104
127
|
update(sample, timestamp) {
|
|
105
|
-
var _a, _b;
|
|
128
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
106
129
|
return __awaiter(this, void 0, void 0, function* () {
|
|
107
130
|
if (this._closed)
|
|
108
131
|
return;
|
|
@@ -116,13 +139,34 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
116
139
|
const lastStat = this._stats.get(sample.ssrc);
|
|
117
140
|
const rttInMs = sample.roundTripTime ? sample.roundTripTime * 1000 : undefined;
|
|
118
141
|
const bitrate = (((_a = sample.bytesSent) !== null && _a !== void 0 ? _a : 0) - ((_b = lastStat === null || lastStat === void 0 ? void 0 : lastStat.bytesSent) !== null && _b !== void 0 ? _b : 0)) * 8 / (elapsedTimeInMs / 1000);
|
|
119
|
-
|
|
120
|
-
|
|
142
|
+
const deltaLostPackets = ((_c = sample.packetsLost) !== null && _c !== void 0 ? _c : 0) - ((_d = lastStat === null || lastStat === void 0 ? void 0 : lastStat.packetsLost) !== null && _d !== void 0 ? _d : 0);
|
|
143
|
+
const deltaSentPackets = ((_e = sample.packetsSent) !== null && _e !== void 0 ? _e : 0) - ((_f = lastStat === null || lastStat === void 0 ? void 0 : lastStat.packetsSent) !== null && _f !== void 0 ? _f : 0);
|
|
144
|
+
const deltaSentBytes = ((_g = sample.bytesSent) !== null && _g !== void 0 ? _g : 0) - ((_h = lastStat === null || lastStat === void 0 ? void 0 : lastStat.bytesSent) !== null && _h !== void 0 ? _h : 0);
|
|
145
|
+
let deltaEncodedFrames;
|
|
146
|
+
let deltaSentFrames;
|
|
147
|
+
if (this.kind === 'video') {
|
|
148
|
+
const videoSample = sample;
|
|
149
|
+
const lastVideoStats = lastStat;
|
|
150
|
+
deltaEncodedFrames = ((_j = videoSample.framesEncoded) !== null && _j !== void 0 ? _j : 0) - ((_k = lastVideoStats === null || lastVideoStats === void 0 ? void 0 : lastVideoStats.framesEncoded) !== null && _k !== void 0 ? _k : 0);
|
|
151
|
+
deltaSentFrames = ((_l = videoSample.framesSent) !== null && _l !== void 0 ? _l : 0) - ((_m = lastVideoStats === null || lastVideoStats === void 0 ? void 0 : lastVideoStats.framesSent) !== null && _m !== void 0 ? _m : 0);
|
|
152
|
+
}
|
|
121
153
|
const stats = Object.assign(Object.assign({}, sample), { rttInMs,
|
|
122
|
-
bitrate, ssrc: sample.ssrc
|
|
154
|
+
bitrate, ssrc: sample.ssrc, deltaLostPackets,
|
|
155
|
+
deltaSentPackets,
|
|
156
|
+
deltaSentBytes,
|
|
157
|
+
deltaEncodedFrames,
|
|
158
|
+
deltaSentFrames });
|
|
123
159
|
this._stats.set(sample.ssrc, stats);
|
|
124
160
|
this.bitrate = [...this._stats.values()].reduce((acc, stat) => acc + stat.bitrate, 0);
|
|
125
161
|
this.rttInMs = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.rttInMs) !== null && _a !== void 0 ? _a : 0); }, 0) / (this._stats.size || 1);
|
|
162
|
+
this.totalLostPackets = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.packetsLost) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
163
|
+
this.totalSentPackets = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.packetsSent) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
164
|
+
this.totalSentBytes = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.bytesSent) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
165
|
+
this.deltaEncodedFrames = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.deltaEncodedFrames) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
166
|
+
this.deltaSentFrames = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.deltaSentFrames) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
167
|
+
this.deltaLostPackets = [...this._stats.values()].reduce((acc, stat) => acc + stat.deltaLostPackets, 0);
|
|
168
|
+
this.deltaSentPackets = [...this._stats.values()].reduce((acc, stat) => acc + stat.deltaSentPackets, 0);
|
|
169
|
+
this.deltaSentBytes = [...this._stats.values()].reduce((acc, stat) => acc + stat.deltaSentBytes, 0);
|
|
126
170
|
// setting up sfu connection as it is not always available at the first sample
|
|
127
171
|
if (sample.sfuStreamId && !this._model.sfuStreamId) {
|
|
128
172
|
this._model.sfuStreamId = sample.sfuStreamId;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { EventEmitter } from 'events';
|
|
3
3
|
import { StorageProvider } from './storages/StorageProvider';
|
|
4
|
-
import { PeerConnectionTransport } from '@observertc/sample-schemas-js';
|
|
4
|
+
import { IceLocalCandidate, IceRemoteCandidate, PeerConnectionTransport } from '@observertc/sample-schemas-js';
|
|
5
5
|
import { ObservedClient } from './ObservedClient';
|
|
6
6
|
import { ObservedInboundTrack, ObservedInboundTrackConfig } from './ObservedInboundTrack';
|
|
7
7
|
import { ObservedOutboundTrack, ObservedOutboundTrackConfig } from './ObservedOutboundTrack';
|
|
8
|
+
import { ObservedICE } from './ObservedICE';
|
|
8
9
|
export type ObservedPeerConnectionEvents = {
|
|
9
10
|
update: [];
|
|
10
11
|
close: [];
|
|
@@ -12,6 +13,9 @@ export type ObservedPeerConnectionEvents = {
|
|
|
12
13
|
newinboudvideotrack: [ObservedInboundTrack<'video'>];
|
|
13
14
|
newoutboundaudiotrack: [ObservedOutboundTrack<'audio'>];
|
|
14
15
|
newoutboundvideotrack: [ObservedOutboundTrack<'video'>];
|
|
16
|
+
iceconnectionstatechange: [string];
|
|
17
|
+
icegatheringstatechange: [string];
|
|
18
|
+
connectionstatechange: [string];
|
|
15
19
|
};
|
|
16
20
|
export type ObservedPeerConnectionConfig = {
|
|
17
21
|
peerConnectionId: string;
|
|
@@ -28,9 +32,44 @@ export declare class ObservedPeerConnection extends EventEmitter {
|
|
|
28
32
|
readonly client: ObservedClient;
|
|
29
33
|
private readonly _storageProvider;
|
|
30
34
|
static create(config: ObservedPeerConnectionConfig, client: ObservedClient, storageProvider: StorageProvider): Promise<ObservedPeerConnection>;
|
|
35
|
+
created: number;
|
|
36
|
+
totalInboundPacketsLost: number;
|
|
37
|
+
totalInboundPacketsReceived: number;
|
|
38
|
+
totalOutboundPacketsSent: number;
|
|
39
|
+
totalDataChannelBytesSent: number;
|
|
40
|
+
totalDataChannelBytesReceived: number;
|
|
41
|
+
totalSentAudioBytes: number;
|
|
42
|
+
totalSentVideoBytes: number;
|
|
43
|
+
totalSentAudioPackets: number;
|
|
44
|
+
totalSentVideoPackets: number;
|
|
45
|
+
totalReceivedAudioPacktes: number;
|
|
46
|
+
totalReceivedVideoPackets: number;
|
|
47
|
+
totalReceivedAudioBytes: number;
|
|
48
|
+
totalReceivedVideoBytes: number;
|
|
49
|
+
deltaInboundLostPackets: number;
|
|
50
|
+
deltaInboundReceivedPackets: number;
|
|
51
|
+
deltaOutboundSentPackets: number;
|
|
52
|
+
deltaDataChannelBytesSent: number;
|
|
53
|
+
deltaDataChannelBytesReceived: number;
|
|
54
|
+
deltaInboundReceivedBytes: number;
|
|
55
|
+
deltaOutboundSentBytes: number;
|
|
56
|
+
deltaReceivedAudioBytes: number;
|
|
57
|
+
deltaReceivedVideoBytes: number;
|
|
58
|
+
deltaReceivedAudioPackets: number;
|
|
59
|
+
deltaReceivedVideoPackets: number;
|
|
60
|
+
deltaSentAudioBytes: number;
|
|
61
|
+
deltaSentVideoBytes: number;
|
|
62
|
+
sendingAudioBitrate: number;
|
|
63
|
+
sendingVideoBitrate: number;
|
|
64
|
+
receivingAudioBitrate: number;
|
|
65
|
+
receivingVideoBitrate: number;
|
|
66
|
+
avgRttInS?: number;
|
|
31
67
|
private _closed;
|
|
32
68
|
private _updated;
|
|
33
69
|
private _sample?;
|
|
70
|
+
private _selectedLocalIceCandidate?;
|
|
71
|
+
private _selectedRemoteIceCandidate?;
|
|
72
|
+
readonly ICE: ObservedICE;
|
|
34
73
|
private readonly _inboundAudioTracks;
|
|
35
74
|
private readonly _inboundVideoTracks;
|
|
36
75
|
private readonly _outboundAudioTracks;
|
|
@@ -41,13 +80,20 @@ export declare class ObservedPeerConnection extends EventEmitter {
|
|
|
41
80
|
get reports(): import("./ReportsCollector").ReportsCollector;
|
|
42
81
|
get stats(): ObservedPeerConnectionStats | undefined;
|
|
43
82
|
get updated(): number;
|
|
83
|
+
get selectedLocalIceCandidate(): IceLocalCandidate | undefined;
|
|
84
|
+
get selectedRemoteIceCandidate(): IceRemoteCandidate | undefined;
|
|
44
85
|
get inboundAudioTracks(): ReadonlyMap<string, ObservedInboundTrack<'audio'>>;
|
|
45
86
|
get inboundVideoTracks(): ReadonlyMap<string, ObservedInboundTrack<'video'>>;
|
|
46
87
|
get outboundAudioTracks(): ReadonlyMap<string, ObservedOutboundTrack<'audio'>>;
|
|
47
88
|
get outboundVideoTracks(): ReadonlyMap<string, ObservedOutboundTrack<'video'>>;
|
|
89
|
+
get uptimeInMs(): number;
|
|
48
90
|
get closed(): boolean;
|
|
49
91
|
close(): void;
|
|
92
|
+
getTrack(trackId: string): ObservedInboundTrack<'audio'> | ObservedInboundTrack<'video'> | ObservedOutboundTrack<'audio'> | ObservedOutboundTrack<'video'> | undefined;
|
|
93
|
+
resetMetrics(): void;
|
|
94
|
+
updateMetrics(): void;
|
|
50
95
|
update(sample: PeerConnectionTransport, timestamp: number): void;
|
|
96
|
+
updateSelectedCandidate(localCandidate: IceLocalCandidate, remoteCandidate: IceRemoteCandidate): void;
|
|
51
97
|
createInboundAudioTrack(config: Omit<ObservedInboundTrackConfig<'audio'>, 'kind'>): Promise<ObservedInboundTrack<'audio'>>;
|
|
52
98
|
createInboundVideoTrack(config: Omit<ObservedInboundTrackConfig<'video'>, 'kind'>): Promise<ObservedInboundTrack<'video'>>;
|
|
53
99
|
createOutboundAudioTrack(config: Omit<ObservedOutboundTrackConfig<'audio'>, 'kind'>): Promise<ObservedOutboundTrack<'audio'>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedPeerConnection.d.ts","sourceRoot":"","sources":["../src/ObservedPeerConnection.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"ObservedPeerConnection.d.ts","sourceRoot":"","sources":["../src/ObservedPeerConnection.ts"],"names":[],"mappings":"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"}
|