@observertc/observer-js 0.40.4-beta → 0.40.6-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/ObservedCall.d.ts +3 -2
- package/lib/ObservedCall.d.ts.map +1 -1
- package/lib/ObservedCall.js +8 -3
- package/lib/ObservedClient.d.ts +17 -2
- package/lib/ObservedClient.d.ts.map +1 -1
- package/lib/ObservedClient.js +51 -18
- package/lib/ObservedInboundTrack.d.ts.map +1 -1
- package/lib/ObservedInboundTrack.js +29 -9
- package/lib/ObservedOutboundTrack.d.ts.map +1 -1
- package/lib/ObservedOutboundTrack.js +23 -7
- package/lib/ObservedPeerConnection.d.ts +3 -3
- package/lib/ObservedPeerConnection.d.ts.map +1 -1
- package/lib/ObservedPeerConnection.js +33 -41
- package/lib/Observer.d.ts +2 -1
- package/lib/Observer.d.ts.map +1 -1
- package/lib/Observer.js +3 -3
- package/package.json +1 -1
- package/src/ObservedCall.ts +9 -4
- package/src/ObservedClient.ts +61 -20
- package/src/ObservedInboundTrack.ts +31 -9
- package/src/ObservedOutboundTrack.ts +25 -6
- package/src/ObservedPeerConnection.ts +36 -48
- package/src/Observer.ts +3 -4
package/lib/ObservedCall.d.ts
CHANGED
|
@@ -7,7 +7,6 @@ export type ObservedCallModel = {
|
|
|
7
7
|
serviceId: string;
|
|
8
8
|
roomId: string;
|
|
9
9
|
callId: string;
|
|
10
|
-
started: number;
|
|
11
10
|
};
|
|
12
11
|
export type ObservedCallEvents = {
|
|
13
12
|
update: [];
|
|
@@ -24,17 +23,19 @@ export declare class ObservedCall<AppData extends Record<string, unknown> = Reco
|
|
|
24
23
|
private readonly _model;
|
|
25
24
|
readonly observer: Observer;
|
|
26
25
|
readonly appData: AppData;
|
|
26
|
+
readonly created: number;
|
|
27
27
|
private readonly _clients;
|
|
28
28
|
readonly sfuStreamIdToOutboundAudioTrack: Map<string | number, ObservedOutboundTrack<"audio">>;
|
|
29
29
|
readonly sfuStreamIdToOutboundVideoTrack: Map<string | number, ObservedOutboundTrack<"video">>;
|
|
30
30
|
private _closed;
|
|
31
|
+
private _updated;
|
|
31
32
|
private _ended?;
|
|
32
33
|
constructor(_model: ObservedCallModel, observer: Observer, appData: AppData);
|
|
33
34
|
get serviceId(): string;
|
|
34
35
|
get reports(): import("./ReportsCollector").ReportsCollector;
|
|
35
36
|
get roomId(): string;
|
|
36
37
|
get callId(): string;
|
|
37
|
-
get
|
|
38
|
+
get updated(): number;
|
|
38
39
|
get ended(): number | undefined;
|
|
39
40
|
get clients(): ReadonlyMap<string, ObservedClient>;
|
|
40
41
|
get closed(): boolean;
|
|
@@ -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,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,MAAM,MAAM,iBAAiB,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,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,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,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,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;IAY/G,OAAO,CAAC,QAAQ,CAAC,MAAM;aACP,QAAQ,EAAE,QAAQ;aAClB,OAAO,EAAE,OAAO;IAbjC,SAAgB,OAAO,SAAc;IAErC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAE9D,SAAgB,+BAA+B,uDAA8D;IAC7G,SAAgB,+BAA+B,uDAA8D;IAC7G,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,MAAM,CAAC,CAAS;gBAGN,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,KAAK,uBAEf;IAED,IAAW,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAExD;IAED,IAAW,MAAM,YAEhB;IAEM,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM;IAUxB,YAAY,CAAC,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,mBAAmB,GAAG;QAAE,OAAO,EAAE,aAAa,CAAC;QAAC,0BAA0B,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;CAmC5M"}
|
package/lib/ObservedCall.js
CHANGED
|
@@ -21,10 +21,12 @@ class ObservedCall extends events_1.EventEmitter {
|
|
|
21
21
|
this._model = _model;
|
|
22
22
|
this.observer = observer;
|
|
23
23
|
this.appData = appData;
|
|
24
|
+
this.created = Date.now();
|
|
24
25
|
this._clients = new Map();
|
|
25
26
|
this.sfuStreamIdToOutboundAudioTrack = new Map();
|
|
26
27
|
this.sfuStreamIdToOutboundVideoTrack = new Map();
|
|
27
28
|
this._closed = false;
|
|
29
|
+
this._updated = Date.now();
|
|
28
30
|
this.setMaxListeners(Infinity);
|
|
29
31
|
}
|
|
30
32
|
get serviceId() {
|
|
@@ -42,8 +44,8 @@ class ObservedCall extends events_1.EventEmitter {
|
|
|
42
44
|
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
43
45
|
return this._model.callId;
|
|
44
46
|
}
|
|
45
|
-
get
|
|
46
|
-
return
|
|
47
|
+
get updated() {
|
|
48
|
+
return this._updated;
|
|
47
49
|
}
|
|
48
50
|
get ended() {
|
|
49
51
|
return this._ended;
|
|
@@ -67,7 +69,10 @@ class ObservedCall extends events_1.EventEmitter {
|
|
|
67
69
|
throw new Error(`Call ${this.callId} is closed`);
|
|
68
70
|
const { appData, generateClientJoinedReport, joined = Date.now() } = config, model = __rest(config, ["appData", "generateClientJoinedReport", "joined"]);
|
|
69
71
|
const result = new ObservedClient_1.ObservedClient(model, this, appData);
|
|
70
|
-
const onUpdate = () =>
|
|
72
|
+
const onUpdate = () => {
|
|
73
|
+
this._updated = Date.now();
|
|
74
|
+
this.emit('update');
|
|
75
|
+
};
|
|
71
76
|
result.once('close', () => {
|
|
72
77
|
result.off('update', onUpdate);
|
|
73
78
|
this._clients.delete(result.clientId);
|
package/lib/ObservedClient.d.ts
CHANGED
|
@@ -74,9 +74,24 @@ export declare class ObservedClient<AppData extends Record<string, unknown> = Re
|
|
|
74
74
|
totalDataChannelBytesReceived: number;
|
|
75
75
|
totalSentBytes: number;
|
|
76
76
|
totalReceivedBytes: number;
|
|
77
|
+
totalReceivedAudioBytes: number;
|
|
78
|
+
totalReceivedVideoBytes: number;
|
|
79
|
+
totalSentAudioBytes: number;
|
|
80
|
+
totalSentVideoBytes: number;
|
|
81
|
+
deltaReceivedAudioBytes: number;
|
|
82
|
+
deltaReceivedVideoBytes: number;
|
|
83
|
+
deltaSentAudioBytes: number;
|
|
84
|
+
deltaSentVideoBytes: number;
|
|
85
|
+
deltaDataChannelBytesSent: number;
|
|
86
|
+
deltaDataChannelBytesReceived: number;
|
|
87
|
+
deltaInboundPacketsLost: number;
|
|
88
|
+
deltaInboundPacketsReceived: number;
|
|
89
|
+
deltaOutboundPacketsSent: number;
|
|
77
90
|
avgRttInMs?: number;
|
|
78
|
-
|
|
79
|
-
|
|
91
|
+
outboundAudioBitrate?: number;
|
|
92
|
+
outboundVideoBitrate?: number;
|
|
93
|
+
inboundAudioBitrate?: number;
|
|
94
|
+
inboundVideoBitrate?: number;
|
|
80
95
|
readonly mediaDevices: string[];
|
|
81
96
|
readonly codecs: string[];
|
|
82
97
|
readonly userMediaErrors: string[];
|
|
@@ -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;AAChJ,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAOlE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,MAAM,MAAM,mBAAmB,GAAE;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAClC,MAAM,EAAE,EAAE,CAAC;IACX,KAAK,EAAE,EAAE,CAAC;IACV,iBAAiB,EAAE,CAAC,sBAAsB,CAAC,CAAC;IAC5C,wBAAwB,EAAE;QAAC;YAC1B,cAAc,EAAE,sBAAsB,CAAC;YACvC,KAAK,EAAE,MAAM,CAAC;SACd;KAAC,CAAC;IACH,uBAAuB,EAAE;QAAC;YACzB,cAAc,EAAE,sBAAsB,CAAC;YACvC,KAAK,EAAE,MAAM,CAAC;SACd;KAAC,CAAC;IACH,qBAAqB,EAAE;QAAC;YACvB,cAAc,EAAE,sBAAsB,CAAC;YACvC,KAAK,EAAE,MAAM,CAAC;SACd;KAAC,CAAC;IACH,qBAAqB,EAAE;QAAC;YACvB,cAAc,EAAE,sBAAsB,CAAC;YACvC,cAAc,EAAE,iBAAiB,CAAC;YAClC,eAAe,EAAE,kBAAkB,CAAC;SACpC;KAAC,CAAC;IACH,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;CACrB,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,cAAc,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACxG,EAAE,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/G,GAAG,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAChH,IAAI,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACjH,IAAI,CAAC,CAAC,SAAS,MAAM,oBAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAChG,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC1B;AAED,qBAAa,cAAc,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,SAAQ,YAAY;
|
|
1
|
+
{"version":3,"file":"ObservedClient.d.ts","sourceRoot":"","sources":["../src/ObservedClient.ts"],"names":[],"mappings":"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"}
|
package/lib/ObservedClient.js
CHANGED
|
@@ -42,6 +42,19 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
42
42
|
this.totalDataChannelBytesReceived = 0;
|
|
43
43
|
this.totalSentBytes = 0;
|
|
44
44
|
this.totalReceivedBytes = 0;
|
|
45
|
+
this.totalReceivedAudioBytes = 0;
|
|
46
|
+
this.totalReceivedVideoBytes = 0;
|
|
47
|
+
this.totalSentAudioBytes = 0;
|
|
48
|
+
this.totalSentVideoBytes = 0;
|
|
49
|
+
this.deltaReceivedAudioBytes = 0;
|
|
50
|
+
this.deltaReceivedVideoBytes = 0;
|
|
51
|
+
this.deltaSentAudioBytes = 0;
|
|
52
|
+
this.deltaSentVideoBytes = 0;
|
|
53
|
+
this.deltaDataChannelBytesSent = 0;
|
|
54
|
+
this.deltaDataChannelBytesReceived = 0;
|
|
55
|
+
this.deltaInboundPacketsLost = 0;
|
|
56
|
+
this.deltaInboundPacketsReceived = 0;
|
|
57
|
+
this.deltaOutboundPacketsSent = 0;
|
|
45
58
|
this.mediaDevices = [];
|
|
46
59
|
this.codecs = [];
|
|
47
60
|
this.userMediaErrors = [];
|
|
@@ -451,38 +464,58 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
451
464
|
}
|
|
452
465
|
// update metrics
|
|
453
466
|
const wasUsingTURN = this.usingTURN;
|
|
467
|
+
const elapsedTimeInMs = now - this._updated;
|
|
454
468
|
this.usingTURN = false;
|
|
455
469
|
this.availableIncomingBitrate = 0;
|
|
456
470
|
this.availableOutgoingBitrate = 0;
|
|
457
|
-
this.
|
|
458
|
-
this.
|
|
459
|
-
this.
|
|
460
|
-
this.
|
|
461
|
-
this.
|
|
462
|
-
this.
|
|
463
|
-
this.
|
|
464
|
-
this.
|
|
465
|
-
this.
|
|
471
|
+
this.deltaInboundPacketsLost = 0;
|
|
472
|
+
this.deltaInboundPacketsReceived = 0;
|
|
473
|
+
this.deltaOutboundPacketsSent = 0;
|
|
474
|
+
this.deltaReceivedAudioBytes = 0;
|
|
475
|
+
this.deltaReceivedVideoBytes = 0;
|
|
476
|
+
this.deltaSentAudioBytes = 0;
|
|
477
|
+
this.deltaSentVideoBytes = 0;
|
|
478
|
+
this.deltaDataChannelBytesReceived = 0;
|
|
479
|
+
this.deltaDataChannelBytesSent = 0;
|
|
480
|
+
this.outboundAudioBitrate = 0;
|
|
481
|
+
this.outboundVideoBitrate = 0;
|
|
482
|
+
this.inboundAudioBitrate = 0;
|
|
483
|
+
this.inboundVideoBitrate = 0;
|
|
466
484
|
let sumRttInMs = 0;
|
|
467
485
|
for (const peerConnection of this._peerConnections.values()) {
|
|
468
486
|
if (peerConnection.closed)
|
|
469
487
|
continue;
|
|
470
488
|
peerConnection.updateMetrics();
|
|
471
|
-
this.
|
|
472
|
-
this.
|
|
473
|
-
this.
|
|
474
|
-
this.
|
|
475
|
-
this.
|
|
476
|
-
this.
|
|
477
|
-
this.
|
|
478
|
-
this.
|
|
479
|
-
this.
|
|
489
|
+
this.deltaInboundPacketsLost += peerConnection.deltaInboundPacketsLost;
|
|
490
|
+
this.deltaInboundPacketsReceived += peerConnection.deltaInboundPacketsReceived;
|
|
491
|
+
this.deltaOutboundPacketsSent += peerConnection.deltaOutboundPacketsSent;
|
|
492
|
+
this.deltaReceivedAudioBytes += peerConnection.deltaReceivedAudioBytes;
|
|
493
|
+
this.deltaReceivedVideoBytes += peerConnection.deltaReceivedVideoBytes;
|
|
494
|
+
this.deltaSentAudioBytes += peerConnection.deltaSentAudioBytes;
|
|
495
|
+
this.deltaSentVideoBytes += peerConnection.deltaSentVideoBytes;
|
|
496
|
+
this.deltaDataChannelBytesReceived += peerConnection.deltaDataChannelBytesReceived;
|
|
497
|
+
this.deltaDataChannelBytesSent += peerConnection.deltaDataChannelBytesSent;
|
|
480
498
|
this.availableIncomingBitrate += (_18 = peerConnection.availableIncomingBitrate) !== null && _18 !== void 0 ? _18 : 0;
|
|
481
499
|
this.availableOutgoingBitrate += (_19 = peerConnection.availableOutgoingBitrate) !== null && _19 !== void 0 ? _19 : 0;
|
|
482
500
|
sumRttInMs += (_20 = peerConnection.avgRttInMs) !== null && _20 !== void 0 ? _20 : 0;
|
|
483
501
|
if (peerConnection.usingTURN)
|
|
484
502
|
this.usingTURN = true;
|
|
485
503
|
}
|
|
504
|
+
this.totalSentBytes += this.deltaSentAudioBytes + this.deltaSentVideoBytes;
|
|
505
|
+
this.totalReceivedBytes += this.deltaReceivedAudioBytes + this.deltaReceivedVideoBytes;
|
|
506
|
+
this.totalReceivedAudioBytes += this.deltaReceivedAudioBytes;
|
|
507
|
+
this.totalReceivedVideoBytes += this.deltaReceivedVideoBytes;
|
|
508
|
+
this.totalSentAudioBytes += this.deltaSentAudioBytes;
|
|
509
|
+
this.totalSentVideoBytes += this.deltaSentVideoBytes;
|
|
510
|
+
this.totalOutboundPacketsSent += this.deltaOutboundPacketsSent;
|
|
511
|
+
this.totalInboundPacketsReceived += this.deltaInboundPacketsReceived;
|
|
512
|
+
this.totalInboundPacketsLost += this.deltaInboundPacketsLost;
|
|
513
|
+
this.totalDataChannelBytesSent += this.deltaDataChannelBytesSent;
|
|
514
|
+
this.totalDataChannelBytesReceived += this.deltaDataChannelBytesReceived;
|
|
515
|
+
this.outboundAudioBitrate = (this.deltaSentAudioBytes * 8) / (Math.max(elapsedTimeInMs, 1) / 1000);
|
|
516
|
+
this.outboundVideoBitrate = (this.deltaSentVideoBytes * 8) / (Math.max(elapsedTimeInMs, 1) / 1000);
|
|
517
|
+
this.inboundAudioBitrate = (this.deltaReceivedAudioBytes * 8) / (Math.max(elapsedTimeInMs, 1) / 1000);
|
|
518
|
+
this.inboundVideoBitrate = (this.deltaReceivedVideoBytes * 8) / (Math.max(elapsedTimeInMs, 1) / 1000);
|
|
486
519
|
this.avgRttInMs = this._peerConnections.size ? sumRttInMs / this._peerConnections.size : undefined;
|
|
487
520
|
if (wasUsingTURN !== this.usingTURN)
|
|
488
521
|
this.emit('usingturn', this.usingTURN);
|
|
@@ -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,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;AAE3C,MAAM,MAAM,yBAAyB,CAAC,CAAC,SAAS,SAAS,IAAI;IAC5D,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;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAMF,MAAM,CAAC,OAAO,WAAW,oBAAoB,CAAC,IAAI,SAAS,SAAS;IACnE,EAAE,CAAC,CAAC,SAAS,MAAM,0BAA0B,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACvI,GAAG,CAAC,CAAC,SAAS,MAAM,0BAA0B,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACxI,IAAI,CAAC,CAAC,SAAS,MAAM,0BAA0B,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACzI,IAAI,CAAC,CAAC,SAAS,MAAM,0BAA0B,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IACxH,MAAM,CAAC,MAAM,EAAE,+BAA+B,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/E;AAED,qBAAa,oBAAoB,CAAC,IAAI,SAAS,SAAS,CAAE,SAAQ,YAAY;IAgC5E,OAAO,CAAC,QAAQ,CAAC,MAAM;aACP,cAAc,EAAE,sBAAsB;IAhCvD,SAAgB,OAAO,SAAc;IAErC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsD;IAE7E,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,oBAAoB,CAAC,CAA8B;IACpD,OAAO,SAAK;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,SAAK;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,gBAAgB,SAAK;IACrB,oBAAoB,SAAK;IACzB,kBAAkB,SAAK;IACvB,mBAAmB,SAAK;IACxB,kBAAkB,SAAK;IACvB,kBAAkB,SAAK;IACvB,oBAAoB,SAAK;IACzB,2BAA2B,SAAK;IAEhC,gBAAgB,SAAK;IACrB,oBAAoB,SAAK;IACzB,kBAAkB,SAAK;IACvB,mBAAmB,SAAK;IACxB,kBAAkB,SAAK;IACvB,kBAAkB,SAAK;IACvB,oBAAoB,SAAK;IACzB,2BAA2B,SAAK;gBAGrB,MAAM,EAAE,yBAAyB,CAAC,IAAI,CAAC,EACxC,cAAc,EAAE,sBAAsB;IAMvD,IAAW,SAAS,WAEnB;IAED,IAAW,MAAM,WAEhB;IAED,IAAW,MAAM,WAEhB;IAED,IAAW,QAAQ,WAElB;IAED,IAAW,WAAW,WAErB;IAED,IAAW,gBAAgB,WAE1B;IAED,IAAW,OAAO,WAEjB;IAED,IAAW,IAAI,IAAI,IAAI,CAEtB;IAED,IAAW,WAAW,uBAErB;IAED,IAAW,SAAS,uBAEnB;IAED,IAAW,OAAO,WAEjB;IAED,IAAW,KAAK,IAAI,WAAW,CAAC,MAAM,EAAE,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAEvE;IAED,IAAW,OAAO,kDAEjB;IAED,IAAW,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,CAAC,IAAI,CAAC,GAAG,SAAS,EAS5E;IAED,IAAW,mBAAmB,IAXQ,qBAAqB,CAAC,IAAI,CAAC,GAAG,SAAS,CAa5E;IAED,IAAW,MAAM,YAEhB;IAEM,KAAK;IAQL,YAAY;
|
|
1
|
+
{"version":3,"file":"ObservedInboundTrack.d.ts","sourceRoot":"","sources":["../src/ObservedInboundTrack.ts"],"names":[],"mappings":"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"}
|
|
@@ -108,7 +108,7 @@ class ObservedInboundTrack extends events_1.EventEmitter {
|
|
|
108
108
|
this.fractionLoss = 0;
|
|
109
109
|
}
|
|
110
110
|
update(sample, timestamp) {
|
|
111
|
-
var _a, _b, _c, _d, _e
|
|
111
|
+
var _a, _b, _c, _d, _e;
|
|
112
112
|
if (this._closed)
|
|
113
113
|
return;
|
|
114
114
|
const now = Date.now();
|
|
@@ -126,10 +126,22 @@ class ObservedInboundTrack extends events_1.EventEmitter {
|
|
|
126
126
|
const elapsedTimeInMs = Math.max(1, now - this._updated);
|
|
127
127
|
const lastStat = this._stats.get(sample.ssrc);
|
|
128
128
|
const rttInMs = sample.roundTripTime ? sample.roundTripTime * 1000 : undefined;
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
129
|
+
let bitrate = 0;
|
|
130
|
+
let fractionLost = 0;
|
|
131
|
+
let lostPackets = 0;
|
|
132
|
+
let receivedPackets = 0;
|
|
133
|
+
if ((lastStat === null || lastStat === void 0 ? void 0 : lastStat.bytesReceived) && sample.bytesReceived && lastStat.bytesReceived < sample.bytesReceived) {
|
|
134
|
+
bitrate = (sample.bytesReceived - lastStat.bytesReceived) / (elapsedTimeInMs / 1000);
|
|
135
|
+
}
|
|
136
|
+
if ((lastStat === null || lastStat === void 0 ? void 0 : lastStat.packetsReceived) && (sample === null || sample === void 0 ? void 0 : sample.packetsReceived) && lastStat.packetsReceived < sample.packetsReceived) {
|
|
137
|
+
receivedPackets = sample.packetsReceived - lastStat.packetsReceived;
|
|
138
|
+
}
|
|
139
|
+
if ((lastStat === null || lastStat === void 0 ? void 0 : lastStat.packetsLost) && sample.packetsLost && lastStat.packetsLost < sample.packetsLost) {
|
|
140
|
+
lostPackets = sample.packetsLost - lastStat.packetsLost;
|
|
141
|
+
if (0 < receivedPackets) {
|
|
142
|
+
fractionLost = lostPackets / (receivedPackets + lostPackets);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
133
145
|
let decodedFrames;
|
|
134
146
|
let droppedFrames;
|
|
135
147
|
let receivedFrames;
|
|
@@ -137,14 +149,22 @@ class ObservedInboundTrack extends events_1.EventEmitter {
|
|
|
137
149
|
if (this.kind === 'video') {
|
|
138
150
|
const videoSample = sample;
|
|
139
151
|
const lastVideoStat = lastStat;
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
152
|
+
if (videoSample.framesDecoded && (lastVideoStat === null || lastVideoStat === void 0 ? void 0 : lastVideoStat.framesDecoded) && lastVideoStat.framesDecoded < videoSample.framesDecoded) {
|
|
153
|
+
decodedFrames = videoSample.framesDecoded - lastVideoStat.framesDecoded;
|
|
154
|
+
}
|
|
155
|
+
if (videoSample.framesDropped && (lastVideoStat === null || lastVideoStat === void 0 ? void 0 : lastVideoStat.framesDropped) && lastVideoStat.framesDropped < videoSample.framesDropped) {
|
|
156
|
+
droppedFrames = videoSample.framesDropped - lastVideoStat.framesDropped;
|
|
157
|
+
}
|
|
158
|
+
if (videoSample.framesReceived && (lastVideoStat === null || lastVideoStat === void 0 ? void 0 : lastVideoStat.framesReceived) && lastVideoStat.framesReceived < videoSample.framesReceived) {
|
|
159
|
+
receivedFrames = videoSample.framesReceived - lastVideoStat.framesReceived;
|
|
160
|
+
}
|
|
143
161
|
}
|
|
144
162
|
else if (this.kind === 'audio') {
|
|
145
163
|
const audioSample = sample;
|
|
146
164
|
const lastAudioStat = lastStat;
|
|
147
|
-
|
|
165
|
+
if (audioSample.silentConcealedSamples && (lastAudioStat === null || lastAudioStat === void 0 ? void 0 : lastAudioStat.silentConcealedSamples) && lastAudioStat.silentConcealedSamples < audioSample.silentConcealedSamples) {
|
|
166
|
+
silentConcealedSamples = audioSample.silentConcealedSamples - lastAudioStat.silentConcealedSamples;
|
|
167
|
+
}
|
|
148
168
|
}
|
|
149
169
|
const stats = Object.assign(Object.assign({}, sample), { fractionLost,
|
|
150
170
|
rttInMs,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedOutboundTrack.d.ts","sourceRoot":"","sources":["../src/ObservedOutboundTrack.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ObservedOutboundTrack.d.ts","sourceRoot":"","sources":["../src/ObservedOutboundTrack.ts"],"names":[],"mappings":"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"}
|
|
@@ -82,7 +82,6 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
82
82
|
this.deltaEncodedFrames = 0;
|
|
83
83
|
}
|
|
84
84
|
update(sample, timestamp) {
|
|
85
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
86
85
|
if (this._closed)
|
|
87
86
|
return;
|
|
88
87
|
const now = Date.now();
|
|
@@ -94,17 +93,33 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
94
93
|
const elapsedTimeInMs = Math.max(1, now - this._updated);
|
|
95
94
|
const lastStat = this._stats.get(sample.ssrc);
|
|
96
95
|
const rttInMs = sample.roundTripTime ? sample.roundTripTime * 1000 : undefined;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
96
|
+
let bitrate = 0;
|
|
97
|
+
let deltaLostPackets = 0;
|
|
98
|
+
let deltaSentPackets = 0;
|
|
99
|
+
let deltaSentBytes = 0;
|
|
100
|
+
if (sample.bytesSent && (lastStat === null || lastStat === void 0 ? void 0 : lastStat.bytesSent) && lastStat.bytesSent < sample.bytesSent) {
|
|
101
|
+
bitrate = (sample.bytesSent - lastStat.bytesSent) * 8 / (elapsedTimeInMs / 1000);
|
|
102
|
+
}
|
|
103
|
+
if (sample.packetsLost && (lastStat === null || lastStat === void 0 ? void 0 : lastStat.packetsLost) && lastStat.packetsLost < sample.packetsLost) {
|
|
104
|
+
deltaLostPackets = sample.packetsLost - lastStat.packetsLost;
|
|
105
|
+
}
|
|
106
|
+
if (sample.packetsSent && (lastStat === null || lastStat === void 0 ? void 0 : lastStat.packetsSent) && lastStat.packetsSent < sample.packetsSent) {
|
|
107
|
+
deltaSentPackets = sample.packetsSent - lastStat.packetsSent;
|
|
108
|
+
}
|
|
109
|
+
if (sample.bytesSent && (lastStat === null || lastStat === void 0 ? void 0 : lastStat.bytesSent) && lastStat.bytesSent < sample.bytesSent) {
|
|
110
|
+
deltaSentBytes = sample.bytesSent - lastStat.bytesSent;
|
|
111
|
+
}
|
|
101
112
|
let deltaEncodedFrames;
|
|
102
113
|
let deltaSentFrames;
|
|
103
114
|
if (this.kind === 'video') {
|
|
104
115
|
const videoSample = sample;
|
|
105
116
|
const lastVideoStats = lastStat;
|
|
106
|
-
|
|
107
|
-
|
|
117
|
+
if ((videoSample === null || videoSample === void 0 ? void 0 : videoSample.framesEncoded) && (lastVideoStats === null || lastVideoStats === void 0 ? void 0 : lastVideoStats.framesEncoded) && lastVideoStats.framesEncoded < videoSample.framesEncoded) {
|
|
118
|
+
deltaEncodedFrames = videoSample.framesEncoded - lastVideoStats.framesEncoded;
|
|
119
|
+
}
|
|
120
|
+
if ((videoSample === null || videoSample === void 0 ? void 0 : videoSample.framesSent) && (lastVideoStats === null || lastVideoStats === void 0 ? void 0 : lastVideoStats.framesSent) && lastVideoStats.framesSent < videoSample.framesSent) {
|
|
121
|
+
deltaSentFrames = videoSample.framesSent - lastVideoStats.framesSent;
|
|
122
|
+
}
|
|
108
123
|
}
|
|
109
124
|
const stats = Object.assign(Object.assign({}, sample), { rttInMs,
|
|
110
125
|
bitrate, ssrc: sample.ssrc, deltaLostPackets,
|
|
@@ -118,6 +133,7 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
118
133
|
this.totalLostPackets = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.packetsLost) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
119
134
|
this.totalSentPackets = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.packetsSent) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
120
135
|
this.totalSentBytes = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.bytesSent) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
136
|
+
this.totalSentFrames = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.deltaSentPackets) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
121
137
|
this.deltaEncodedFrames = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.deltaEncodedFrames) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
122
138
|
this.deltaSentFrames = [...this._stats.values()].reduce((acc, stat) => { var _a; return acc + ((_a = stat.deltaSentFrames) !== null && _a !== void 0 ? _a : 0); }, 0);
|
|
123
139
|
this.deltaLostPackets = [...this._stats.values()].reduce((acc, stat) => acc + stat.deltaLostPackets, 0);
|
|
@@ -43,9 +43,9 @@ export declare class ObservedPeerConnection extends EventEmitter {
|
|
|
43
43
|
totalReceivedVideoPackets: number;
|
|
44
44
|
totalReceivedAudioBytes: number;
|
|
45
45
|
totalReceivedVideoBytes: number;
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
deltaInboundPacketsLost: number;
|
|
47
|
+
deltaInboundPacketsReceived: number;
|
|
48
|
+
deltaOutboundPacketsSent: number;
|
|
49
49
|
deltaDataChannelBytesSent: number;
|
|
50
50
|
deltaDataChannelBytesReceived: number;
|
|
51
51
|
deltaInboundReceivedBytes: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedPeerConnection.d.ts","sourceRoot":"","sources":["../src/ObservedPeerConnection.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ObservedPeerConnection.d.ts","sourceRoot":"","sources":["../src/ObservedPeerConnection.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,9 +25,9 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
25
25
|
this.totalReceivedVideoPackets = 0;
|
|
26
26
|
this.totalReceivedAudioBytes = 0;
|
|
27
27
|
this.totalReceivedVideoBytes = 0;
|
|
28
|
-
this.
|
|
29
|
-
this.
|
|
30
|
-
this.
|
|
28
|
+
this.deltaInboundPacketsLost = 0;
|
|
29
|
+
this.deltaInboundPacketsReceived = 0;
|
|
30
|
+
this.deltaOutboundPacketsSent = 0;
|
|
31
31
|
this.deltaDataChannelBytesSent = 0;
|
|
32
32
|
this.deltaDataChannelBytesReceived = 0;
|
|
33
33
|
this.deltaInboundReceivedBytes = 0;
|
|
@@ -146,15 +146,23 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
146
146
|
return (_c = (_b = (_a = this._inboundAudioTracks.get(trackId)) !== null && _a !== void 0 ? _a : this._inboundVideoTracks.get(trackId)) !== null && _b !== void 0 ? _b : this._outboundAudioTracks.get(trackId)) !== null && _c !== void 0 ? _c : this._outboundVideoTracks.get(trackId);
|
|
147
147
|
}
|
|
148
148
|
resetMetrics() {
|
|
149
|
-
this.
|
|
150
|
-
this.
|
|
151
|
-
this.
|
|
149
|
+
this.deltaInboundPacketsLost = 0;
|
|
150
|
+
this.deltaInboundPacketsReceived = 0;
|
|
151
|
+
this.deltaOutboundPacketsSent = 0;
|
|
152
152
|
this.deltaDataChannelBytesSent = 0;
|
|
153
153
|
this.deltaDataChannelBytesReceived = 0;
|
|
154
|
+
this.deltaInboundReceivedBytes = 0;
|
|
155
|
+
this.deltaOutboundSentBytes = 0;
|
|
154
156
|
this.deltaReceivedAudioBytes = 0;
|
|
155
157
|
this.deltaReceivedVideoBytes = 0;
|
|
158
|
+
this.deltaReceivedAudioPackets = 0;
|
|
159
|
+
this.deltaReceivedVideoPackets = 0;
|
|
156
160
|
this.deltaSentAudioBytes = 0;
|
|
157
161
|
this.deltaSentVideoBytes = 0;
|
|
162
|
+
this.sendingAudioBitrate = 0;
|
|
163
|
+
this.sendingVideoBitrate = 0;
|
|
164
|
+
this.receivingAudioBitrate = 0;
|
|
165
|
+
this.receivingVideoBitrate = 0;
|
|
158
166
|
this._inboundAudioTracks.forEach((track) => track.resetMetrics());
|
|
159
167
|
this._inboundVideoTracks.forEach((track) => track.resetMetrics());
|
|
160
168
|
this._outboundAudioTracks.forEach((track) => track.resetMetrics());
|
|
@@ -162,77 +170,48 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
162
170
|
}
|
|
163
171
|
updateMetrics() {
|
|
164
172
|
var _a;
|
|
165
|
-
this.totalInboundPacketsLost = 0;
|
|
166
|
-
this.totalInboundPacketsReceived = 0;
|
|
167
|
-
this.totalOutboundPacketsSent = 0;
|
|
168
|
-
this.totalDataChannelBytesSent = 0;
|
|
169
|
-
this.totalDataChannelBytesReceived = 0;
|
|
170
|
-
this.totalSentAudioBytes = 0;
|
|
171
|
-
this.totalSentVideoBytes = 0;
|
|
172
|
-
this.totalReceivedAudioBytes = 0;
|
|
173
|
-
this.totalReceivedVideoBytes = 0;
|
|
174
|
-
this.sendingAudioBitrate = 0;
|
|
175
|
-
this.sendingVideoBitrate = 0;
|
|
176
|
-
this.receivingAudioBitrate = 0;
|
|
177
|
-
this.receivingVideoBitrate = 0;
|
|
178
173
|
let sumRttInMs = 0;
|
|
179
174
|
this._inboundAudioTracks.forEach((track) => {
|
|
180
175
|
var _a;
|
|
181
|
-
this.
|
|
182
|
-
this.
|
|
176
|
+
this.deltaInboundPacketsLost += track.deltaLostPackets;
|
|
177
|
+
this.deltaInboundPacketsReceived += track.deltaReceivedPackets;
|
|
183
178
|
this.deltaInboundReceivedBytes += track.deltaBytesReceived;
|
|
184
179
|
this.deltaReceivedAudioBytes += track.deltaBytesReceived;
|
|
185
180
|
this.deltaReceivedAudioPackets += track.deltaReceivedPackets;
|
|
186
181
|
this.receivingAudioBitrate += track.bitrate;
|
|
187
|
-
this.totalInboundPacketsLost += track.totalLostPackets;
|
|
188
|
-
this.totalInboundPacketsReceived += track.totalReceivedPackets;
|
|
189
|
-
this.totalReceivedAudioBytes += track.totalBytesReceived;
|
|
190
|
-
this.totalReceivedAudioPacktes += track.totalReceivedPackets;
|
|
191
182
|
sumRttInMs = ((_a = track.rttInMs) !== null && _a !== void 0 ? _a : 0);
|
|
192
183
|
});
|
|
193
184
|
this._inboundVideoTracks.forEach((track) => {
|
|
194
185
|
var _a;
|
|
195
|
-
this.
|
|
196
|
-
this.
|
|
186
|
+
this.deltaInboundPacketsLost += track.deltaLostPackets;
|
|
187
|
+
this.deltaInboundPacketsReceived += track.deltaReceivedPackets;
|
|
197
188
|
this.deltaInboundReceivedBytes += track.deltaBytesReceived;
|
|
198
189
|
this.deltaReceivedVideoBytes += track.deltaBytesReceived;
|
|
199
190
|
this.deltaReceivedVideoPackets += track.deltaReceivedPackets;
|
|
200
191
|
this.receivingVideoBitrate += track.bitrate;
|
|
201
|
-
this.totalInboundPacketsLost += track.totalLostPackets;
|
|
202
|
-
this.totalInboundPacketsReceived += track.totalReceivedPackets;
|
|
203
|
-
this.totalReceivedVideoBytes += track.totalBytesReceived;
|
|
204
|
-
this.totalReceivedVideoPackets += track.totalReceivedPackets;
|
|
205
192
|
sumRttInMs = ((_a = track.rttInMs) !== null && _a !== void 0 ? _a : 0);
|
|
206
193
|
});
|
|
207
194
|
this._outboundAudioTracks.forEach((track) => {
|
|
208
195
|
var _a;
|
|
209
|
-
this.
|
|
196
|
+
this.deltaOutboundPacketsSent += track.deltaSentPackets;
|
|
210
197
|
this.deltaOutboundSentBytes += track.deltaSentBytes;
|
|
211
198
|
this.deltaSentAudioBytes += track.deltaSentBytes;
|
|
212
199
|
this.deltaSentAudioBytes += track.deltaSentPackets;
|
|
213
200
|
this.sendingAudioBitrate += track.bitrate;
|
|
214
|
-
this.totalOutboundPacketsSent += track.totalSentPackets;
|
|
215
|
-
this.totalSentAudioBytes += track.totalSentBytes;
|
|
216
|
-
this.totalSentAudioPackets += track.totalSentPackets;
|
|
217
201
|
sumRttInMs = ((_a = track.rttInMs) !== null && _a !== void 0 ? _a : 0);
|
|
218
202
|
});
|
|
219
203
|
this._outboundVideoTracks.forEach((track) => {
|
|
220
204
|
var _a;
|
|
221
|
-
this.
|
|
205
|
+
this.deltaOutboundPacketsSent += track.deltaSentPackets;
|
|
222
206
|
this.deltaOutboundSentBytes += track.deltaSentBytes;
|
|
223
207
|
this.deltaSentVideoBytes += track.deltaSentBytes;
|
|
224
208
|
this.deltaSentVideoBytes += track.deltaSentPackets;
|
|
225
209
|
this.sendingVideoBitrate += track.bitrate;
|
|
226
|
-
this.totalOutboundPacketsSent += track.totalSentPackets;
|
|
227
|
-
this.totalSentVideoBytes += track.totalSentBytes;
|
|
228
|
-
this.totalSentVideoPackets += track.totalSentPackets;
|
|
229
210
|
sumRttInMs = ((_a = track.rttInMs) !== null && _a !== void 0 ? _a : 0);
|
|
230
211
|
});
|
|
231
212
|
this._dataChannels.forEach((channel) => {
|
|
232
213
|
this.deltaDataChannelBytesSent += channel.deltaBytesSent;
|
|
233
214
|
this.deltaDataChannelBytesReceived += channel.deltaBytesReceived;
|
|
234
|
-
this.totalDataChannelBytesSent += channel.totalBytesSent;
|
|
235
|
-
this.totalDataChannelBytesReceived += channel.totalBytesReceived;
|
|
236
215
|
});
|
|
237
216
|
const iceRttInMs = (_a = this.ICE.stats) === null || _a === void 0 ? void 0 : _a.currentRoundTripTime;
|
|
238
217
|
let nrOfBelongings = this._inboundAudioTracks.size + this._inboundVideoTracks.size + this._outboundAudioTracks.size + this._outboundVideoTracks.size;
|
|
@@ -241,6 +220,19 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
241
220
|
nrOfBelongings += 1;
|
|
242
221
|
}
|
|
243
222
|
this.avgRttInMs = 0 < nrOfBelongings ? sumRttInMs / nrOfBelongings : undefined;
|
|
223
|
+
this.totalDataChannelBytesReceived += this.deltaDataChannelBytesReceived;
|
|
224
|
+
this.totalDataChannelBytesSent += this.deltaDataChannelBytesSent;
|
|
225
|
+
this.totalInboundPacketsLost += this.deltaInboundPacketsLost;
|
|
226
|
+
this.totalInboundPacketsReceived += this.deltaInboundPacketsReceived;
|
|
227
|
+
this.totalOutboundPacketsSent += this.deltaOutboundPacketsSent;
|
|
228
|
+
this.totalSentAudioBytes += this.deltaSentAudioBytes;
|
|
229
|
+
this.totalSentVideoBytes += this.deltaSentVideoBytes;
|
|
230
|
+
this.totalReceivedAudioBytes += this.deltaReceivedAudioBytes;
|
|
231
|
+
this.totalReceivedVideoBytes += this.deltaReceivedVideoBytes;
|
|
232
|
+
this.totalReceivedAudioPacktes += this.deltaReceivedAudioPackets;
|
|
233
|
+
this.totalReceivedVideoPackets += this.deltaReceivedVideoPackets;
|
|
234
|
+
this.totalSentAudioPackets += this.deltaSentAudioBytes;
|
|
235
|
+
this.totalSentVideoPackets += this.deltaSentVideoBytes;
|
|
244
236
|
}
|
|
245
237
|
update(sample, timestamp) {
|
|
246
238
|
if (this._closed)
|
package/lib/Observer.d.ts
CHANGED
|
@@ -45,8 +45,9 @@ export declare class Observer extends EventEmitter {
|
|
|
45
45
|
private _reportTimer?;
|
|
46
46
|
private _closed;
|
|
47
47
|
constructor(config: ObserverConfig);
|
|
48
|
-
createObservedCall<T extends Record<string, unknown> = Record<string, unknown>>(config: PartialBy<ObservedCallModel, 'serviceId'
|
|
48
|
+
createObservedCall<T extends Record<string, unknown> = Record<string, unknown>>(config: PartialBy<ObservedCallModel, 'serviceId'> & {
|
|
49
49
|
appData: T;
|
|
50
|
+
started?: number;
|
|
50
51
|
}): ObservedCall<T>;
|
|
51
52
|
createObservedSfu<AppData extends Record<string, unknown> = Record<string, unknown>>(model: ObservedSfuModel, appData: AppData): ObservedSfu<AppData>;
|
|
52
53
|
get observedCalls(): ReadonlyMap<string, ObservedCall>;
|
package/lib/Observer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Observer.d.ts","sourceRoot":"","sources":["../src/Observer.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAI9D,MAAM,MAAM,cAAc,GAAG;IAC5B,SAAS,EAAE,CAAC,YAAY,CAAC,CAAC;IAC1B,QAAQ,EAAE,CAAC,WAAW,CAAC,CAAC;IACxB,SAAS,EAAE,CAAC,mBAAmB,CAAC,CAAC;IACjC,OAAO,EAAE,EAAE,CAAC;CACZ,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAE5B;;;;;;OAMG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,kBAAkB,EAAE,MAAM,CAAC;IAE3B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,qBAAqB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAE3C,oBAAoB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1C,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,QAAQ;IAChC,EAAE,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACnG,GAAG,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACpG,IAAI,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IACrG,IAAI,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;CACpF;AAED,qBAAa,QAAS,SAAQ,YAAY;aA0BxB,MAAM,EAAE,cAAc;WAzBzB,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,QAAQ;IAkBvE,SAAgB,OAAO,mBAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmC;IAClE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;IAEhE,OAAO,CAAC,YAAY,CAAC,CAAgC;IACrD,OAAO,CAAC,OAAO,CAAS;gBAEP,MAAM,EAAE,cAAc;IAyBhC,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpF,MAAM,EAAE,SAAS,CAAC,iBAAiB,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"Observer.d.ts","sourceRoot":"","sources":["../src/Observer.ts"],"names":[],"mappings":"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"}
|
package/lib/Observer.js
CHANGED
|
@@ -62,8 +62,8 @@ class Observer extends events_1.EventEmitter {
|
|
|
62
62
|
if (this._closed) {
|
|
63
63
|
throw new Error('Attempted to create a call source on a closed observer');
|
|
64
64
|
}
|
|
65
|
-
const { appData } = config, model = __rest(config, ["appData"]);
|
|
66
|
-
const call = new ObservedCall_1.ObservedCall(Object.assign(Object.assign({}, model), { serviceId: this.config.defaultServiceId
|
|
65
|
+
const { appData, started = Date.now() } = config, model = __rest(config, ["appData", "started"]);
|
|
66
|
+
const call = new ObservedCall_1.ObservedCall(Object.assign(Object.assign({}, model), { serviceId: this.config.defaultServiceId }), this, appData);
|
|
67
67
|
if (this._closed)
|
|
68
68
|
throw new Error('Cannot create an observed call on a closed observer');
|
|
69
69
|
if (this._observedCalls.has(call.callId))
|
|
@@ -73,7 +73,7 @@ class Observer extends events_1.EventEmitter {
|
|
|
73
73
|
this.reports.addCallEventReport((0, callEventReports_1.createCallEndedEventReport)(call.serviceId, call.roomId, call.callId, Date.now()));
|
|
74
74
|
});
|
|
75
75
|
this._observedCalls.set(call.callId, call);
|
|
76
|
-
this.reports.addCallEventReport((0, callEventReports_1.createCallStartedEventReport)(call.serviceId, call.roomId, call.callId,
|
|
76
|
+
this.reports.addCallEventReport((0, callEventReports_1.createCallStartedEventReport)(call.serviceId, call.roomId, call.callId, started));
|
|
77
77
|
this.emit('newcall', call);
|
|
78
78
|
return call;
|
|
79
79
|
}
|
package/package.json
CHANGED
package/src/ObservedCall.ts
CHANGED
|
@@ -8,7 +8,6 @@ export type ObservedCallModel = {
|
|
|
8
8
|
serviceId: string;
|
|
9
9
|
roomId: string;
|
|
10
10
|
callId: string;
|
|
11
|
-
started: number,
|
|
12
11
|
};
|
|
13
12
|
|
|
14
13
|
export type ObservedCallEvents = {
|
|
@@ -25,11 +24,14 @@ export declare interface ObservedCall {
|
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
export class ObservedCall<AppData extends Record<string, unknown> = Record<string, unknown>> extends EventEmitter {
|
|
27
|
+
public readonly created = Date.now();
|
|
28
|
+
|
|
28
29
|
private readonly _clients = new Map<string, ObservedClient>();
|
|
29
30
|
|
|
30
31
|
public readonly sfuStreamIdToOutboundAudioTrack = new Map<string | number, ObservedOutboundTrack<'audio'>>();
|
|
31
32
|
public readonly sfuStreamIdToOutboundVideoTrack = new Map<string | number, ObservedOutboundTrack<'video'>>();
|
|
32
33
|
private _closed = false;
|
|
34
|
+
private _updated = Date.now();
|
|
33
35
|
private _ended?: number;
|
|
34
36
|
|
|
35
37
|
public constructor(
|
|
@@ -60,8 +62,8 @@ export class ObservedCall<AppData extends Record<string, unknown> = Record<strin
|
|
|
60
62
|
return this._model.callId!;
|
|
61
63
|
}
|
|
62
64
|
|
|
63
|
-
public get
|
|
64
|
-
return
|
|
65
|
+
public get updated() {
|
|
66
|
+
return this._updated;
|
|
65
67
|
}
|
|
66
68
|
|
|
67
69
|
public get ended() {
|
|
@@ -92,7 +94,10 @@ export class ObservedCall<AppData extends Record<string, unknown> = Record<strin
|
|
|
92
94
|
const { appData, generateClientJoinedReport, joined = Date.now(), ...model } = config;
|
|
93
95
|
|
|
94
96
|
const result = new ObservedClient(model, this, appData);
|
|
95
|
-
const onUpdate = () =>
|
|
97
|
+
const onUpdate = () => {
|
|
98
|
+
this._updated = Date.now();
|
|
99
|
+
this.emit('update');
|
|
100
|
+
};
|
|
96
101
|
|
|
97
102
|
result.once('close', () => {
|
|
98
103
|
result.off('update', onUpdate);
|
package/src/ObservedClient.ts
CHANGED
|
@@ -79,10 +79,26 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
79
79
|
public totalDataChannelBytesReceived = 0;
|
|
80
80
|
public totalSentBytes = 0;
|
|
81
81
|
public totalReceivedBytes = 0;
|
|
82
|
+
public totalReceivedAudioBytes = 0;
|
|
83
|
+
public totalReceivedVideoBytes = 0;
|
|
84
|
+
public totalSentAudioBytes = 0;
|
|
85
|
+
public totalSentVideoBytes = 0;
|
|
86
|
+
|
|
87
|
+
public deltaReceivedAudioBytes = 0;
|
|
88
|
+
public deltaReceivedVideoBytes = 0;
|
|
89
|
+
public deltaSentAudioBytes = 0;
|
|
90
|
+
public deltaSentVideoBytes = 0;
|
|
91
|
+
public deltaDataChannelBytesSent = 0;
|
|
92
|
+
public deltaDataChannelBytesReceived = 0;
|
|
93
|
+
public deltaInboundPacketsLost = 0;
|
|
94
|
+
public deltaInboundPacketsReceived = 0;
|
|
95
|
+
public deltaOutboundPacketsSent = 0;
|
|
82
96
|
|
|
83
97
|
public avgRttInMs?: number;
|
|
84
|
-
public
|
|
85
|
-
public
|
|
98
|
+
public outboundAudioBitrate?: number;
|
|
99
|
+
public outboundVideoBitrate?: number;
|
|
100
|
+
public inboundAudioBitrate?: number;
|
|
101
|
+
public inboundVideoBitrate?: number;
|
|
86
102
|
|
|
87
103
|
public readonly mediaDevices: string[] = [];
|
|
88
104
|
public readonly codecs: string[] = [];
|
|
@@ -677,40 +693,65 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
677
693
|
|
|
678
694
|
// update metrics
|
|
679
695
|
const wasUsingTURN = this.usingTURN;
|
|
696
|
+
const elapsedTimeInMs = now - this._updated;
|
|
680
697
|
|
|
681
698
|
this.usingTURN = false;
|
|
682
699
|
this.availableIncomingBitrate = 0;
|
|
683
700
|
this.availableOutgoingBitrate = 0;
|
|
684
|
-
this.
|
|
685
|
-
this.
|
|
686
|
-
this.
|
|
687
|
-
this.
|
|
688
|
-
this.
|
|
689
|
-
this.
|
|
690
|
-
this.
|
|
691
|
-
this.
|
|
692
|
-
this.
|
|
701
|
+
this.deltaInboundPacketsLost = 0;
|
|
702
|
+
this.deltaInboundPacketsReceived = 0;
|
|
703
|
+
this.deltaOutboundPacketsSent = 0;
|
|
704
|
+
this.deltaReceivedAudioBytes = 0;
|
|
705
|
+
this.deltaReceivedVideoBytes = 0;
|
|
706
|
+
this.deltaSentAudioBytes = 0;
|
|
707
|
+
this.deltaSentVideoBytes = 0;
|
|
708
|
+
this.deltaDataChannelBytesReceived = 0;
|
|
709
|
+
this.deltaDataChannelBytesSent = 0;
|
|
710
|
+
|
|
711
|
+
this.outboundAudioBitrate = 0;
|
|
712
|
+
this.outboundVideoBitrate = 0;
|
|
713
|
+
this.inboundAudioBitrate = 0;
|
|
714
|
+
this.inboundVideoBitrate = 0;
|
|
693
715
|
let sumRttInMs = 0;
|
|
694
716
|
|
|
695
717
|
for (const peerConnection of this._peerConnections.values()) {
|
|
696
718
|
if (peerConnection.closed) continue;
|
|
697
719
|
peerConnection.updateMetrics();
|
|
698
|
-
this.
|
|
699
|
-
this.
|
|
700
|
-
this.
|
|
701
|
-
this.
|
|
702
|
-
this.
|
|
703
|
-
this.
|
|
704
|
-
this.
|
|
705
|
-
this.
|
|
706
|
-
this.
|
|
720
|
+
this.deltaInboundPacketsLost += peerConnection.deltaInboundPacketsLost;
|
|
721
|
+
this.deltaInboundPacketsReceived += peerConnection.deltaInboundPacketsReceived;
|
|
722
|
+
this.deltaOutboundPacketsSent += peerConnection.deltaOutboundPacketsSent;
|
|
723
|
+
this.deltaReceivedAudioBytes += peerConnection.deltaReceivedAudioBytes;
|
|
724
|
+
this.deltaReceivedVideoBytes += peerConnection.deltaReceivedVideoBytes;
|
|
725
|
+
this.deltaSentAudioBytes += peerConnection.deltaSentAudioBytes;
|
|
726
|
+
this.deltaSentVideoBytes += peerConnection.deltaSentVideoBytes;
|
|
727
|
+
this.deltaDataChannelBytesReceived += peerConnection.deltaDataChannelBytesReceived;
|
|
728
|
+
this.deltaDataChannelBytesSent += peerConnection.deltaDataChannelBytesSent;
|
|
729
|
+
|
|
707
730
|
this.availableIncomingBitrate += peerConnection.availableIncomingBitrate ?? 0;
|
|
708
731
|
this.availableOutgoingBitrate += peerConnection.availableOutgoingBitrate ?? 0;
|
|
732
|
+
|
|
709
733
|
sumRttInMs += peerConnection.avgRttInMs ?? 0;
|
|
710
734
|
|
|
711
735
|
if (peerConnection.usingTURN) this.usingTURN = true;
|
|
712
736
|
}
|
|
713
737
|
|
|
738
|
+
this.totalSentBytes += this.deltaSentAudioBytes + this.deltaSentVideoBytes;
|
|
739
|
+
this.totalReceivedBytes += this.deltaReceivedAudioBytes + this.deltaReceivedVideoBytes;
|
|
740
|
+
this.totalReceivedAudioBytes += this.deltaReceivedAudioBytes;
|
|
741
|
+
this.totalReceivedVideoBytes += this.deltaReceivedVideoBytes;
|
|
742
|
+
this.totalSentAudioBytes += this.deltaSentAudioBytes;
|
|
743
|
+
this.totalSentVideoBytes += this.deltaSentVideoBytes;
|
|
744
|
+
this.totalOutboundPacketsSent += this.deltaOutboundPacketsSent;
|
|
745
|
+
this.totalInboundPacketsReceived += this.deltaInboundPacketsReceived;
|
|
746
|
+
this.totalInboundPacketsLost += this.deltaInboundPacketsLost;
|
|
747
|
+
this.totalDataChannelBytesSent += this.deltaDataChannelBytesSent;
|
|
748
|
+
this.totalDataChannelBytesReceived += this.deltaDataChannelBytesReceived;
|
|
749
|
+
|
|
750
|
+
this.outboundAudioBitrate = (this.deltaSentAudioBytes * 8) / (Math.max(elapsedTimeInMs, 1) / 1000);
|
|
751
|
+
this.outboundVideoBitrate = (this.deltaSentVideoBytes * 8) / (Math.max(elapsedTimeInMs, 1) / 1000);
|
|
752
|
+
this.inboundAudioBitrate = (this.deltaReceivedAudioBytes * 8) / (Math.max(elapsedTimeInMs, 1) / 1000);
|
|
753
|
+
this.inboundVideoBitrate = (this.deltaReceivedVideoBytes * 8) / (Math.max(elapsedTimeInMs, 1) / 1000);
|
|
754
|
+
|
|
714
755
|
this.avgRttInMs = this._peerConnections.size ? sumRttInMs / this._peerConnections.size : undefined;
|
|
715
756
|
|
|
716
757
|
if (wasUsingTURN !== this.usingTURN) this.emit('usingturn', this.usingTURN);
|
|
@@ -215,10 +215,24 @@ export class ObservedInboundTrack<Kind extends MediaKind> extends EventEmitter {
|
|
|
215
215
|
const elapsedTimeInMs = Math.max(1, now - this._updated);
|
|
216
216
|
const lastStat = this._stats.get(sample.ssrc);
|
|
217
217
|
const rttInMs = sample.roundTripTime ? sample.roundTripTime * 1000 : undefined;
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
218
|
+
let bitrate = 0;
|
|
219
|
+
let fractionLost = 0;
|
|
220
|
+
let lostPackets = 0;
|
|
221
|
+
let receivedPackets = 0;
|
|
222
|
+
|
|
223
|
+
if (lastStat?.bytesReceived && sample.bytesReceived && lastStat.bytesReceived < sample.bytesReceived) {
|
|
224
|
+
bitrate = (sample.bytesReceived - lastStat.bytesReceived) / (elapsedTimeInMs / 1000);
|
|
225
|
+
}
|
|
226
|
+
if (lastStat?.packetsReceived && sample?.packetsReceived && lastStat.packetsReceived < sample.packetsReceived) {
|
|
227
|
+
receivedPackets = sample.packetsReceived - lastStat.packetsReceived;
|
|
228
|
+
}
|
|
229
|
+
if (lastStat?.packetsLost && sample.packetsLost && lastStat.packetsLost < sample.packetsLost) {
|
|
230
|
+
lostPackets = sample.packetsLost - lastStat.packetsLost;
|
|
231
|
+
if (0 < receivedPackets) {
|
|
232
|
+
fractionLost = lostPackets / (receivedPackets + lostPackets);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
222
236
|
let decodedFrames: number | undefined;
|
|
223
237
|
let droppedFrames: number | undefined;
|
|
224
238
|
let receivedFrames: number | undefined;
|
|
@@ -228,14 +242,22 @@ export class ObservedInboundTrack<Kind extends MediaKind> extends EventEmitter {
|
|
|
228
242
|
const videoSample = sample as InboundVideoTrack;
|
|
229
243
|
const lastVideoStat = lastStat as InboundVideoTrack | undefined;
|
|
230
244
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
245
|
+
if (videoSample.framesDecoded && lastVideoStat?.framesDecoded && lastVideoStat.framesDecoded < videoSample.framesDecoded) {
|
|
246
|
+
decodedFrames = videoSample.framesDecoded - lastVideoStat.framesDecoded;
|
|
247
|
+
}
|
|
248
|
+
if (videoSample.framesDropped && lastVideoStat?.framesDropped && lastVideoStat.framesDropped < videoSample.framesDropped) {
|
|
249
|
+
droppedFrames = videoSample.framesDropped - lastVideoStat.framesDropped;
|
|
250
|
+
}
|
|
251
|
+
if (videoSample.framesReceived && lastVideoStat?.framesReceived && lastVideoStat.framesReceived < videoSample.framesReceived) {
|
|
252
|
+
receivedFrames = videoSample.framesReceived - lastVideoStat.framesReceived;
|
|
253
|
+
}
|
|
234
254
|
} else if (this.kind === 'audio') {
|
|
235
255
|
const audioSample = sample as InboundAudioTrack;
|
|
236
256
|
const lastAudioStat = lastStat as InboundAudioTrack | undefined;
|
|
237
|
-
|
|
238
|
-
|
|
257
|
+
|
|
258
|
+
if (audioSample.silentConcealedSamples && lastAudioStat?.silentConcealedSamples && lastAudioStat.silentConcealedSamples < audioSample.silentConcealedSamples) {
|
|
259
|
+
silentConcealedSamples = audioSample.silentConcealedSamples - lastAudioStat.silentConcealedSamples;
|
|
260
|
+
}
|
|
239
261
|
}
|
|
240
262
|
|
|
241
263
|
const stats: ObservedInboundTrackStats<Kind> = {
|
|
@@ -172,10 +172,24 @@ export class ObservedOutboundTrack<Kind extends MediaKind> extends EventEmitter
|
|
|
172
172
|
const elapsedTimeInMs = Math.max(1, now - this._updated);
|
|
173
173
|
const lastStat = this._stats.get(sample.ssrc);
|
|
174
174
|
const rttInMs = sample.roundTripTime ? sample.roundTripTime * 1000 : undefined;
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
175
|
+
let bitrate = 0;
|
|
176
|
+
let deltaLostPackets = 0;
|
|
177
|
+
let deltaSentPackets = 0;
|
|
178
|
+
let deltaSentBytes = 0;
|
|
179
|
+
|
|
180
|
+
if (sample.bytesSent && lastStat?.bytesSent && lastStat.bytesSent < sample.bytesSent) {
|
|
181
|
+
bitrate = (sample.bytesSent - lastStat.bytesSent) * 8 / (elapsedTimeInMs / 1000);
|
|
182
|
+
}
|
|
183
|
+
if (sample.packetsLost && lastStat?.packetsLost && lastStat.packetsLost < sample.packetsLost) {
|
|
184
|
+
deltaLostPackets = sample.packetsLost - lastStat.packetsLost;
|
|
185
|
+
}
|
|
186
|
+
if (sample.packetsSent && lastStat?.packetsSent && lastStat.packetsSent < sample.packetsSent) {
|
|
187
|
+
deltaSentPackets = sample.packetsSent - lastStat.packetsSent;
|
|
188
|
+
}
|
|
189
|
+
if (sample.bytesSent && lastStat?.bytesSent && lastStat.bytesSent < sample.bytesSent) {
|
|
190
|
+
deltaSentBytes = sample.bytesSent - lastStat.bytesSent;
|
|
191
|
+
}
|
|
192
|
+
|
|
179
193
|
let deltaEncodedFrames: number | undefined;
|
|
180
194
|
let deltaSentFrames: number | undefined;
|
|
181
195
|
|
|
@@ -183,8 +197,12 @@ export class ObservedOutboundTrack<Kind extends MediaKind> extends EventEmitter
|
|
|
183
197
|
const videoSample = sample as OutboundVideoTrack;
|
|
184
198
|
const lastVideoStats = lastStat as OutboundVideoTrack | undefined;
|
|
185
199
|
|
|
186
|
-
|
|
187
|
-
|
|
200
|
+
if (videoSample?.framesEncoded && lastVideoStats?.framesEncoded && lastVideoStats.framesEncoded < videoSample.framesEncoded) {
|
|
201
|
+
deltaEncodedFrames = videoSample.framesEncoded - lastVideoStats.framesEncoded;
|
|
202
|
+
}
|
|
203
|
+
if (videoSample?.framesSent && lastVideoStats?.framesSent && lastVideoStats.framesSent < videoSample.framesSent) {
|
|
204
|
+
deltaSentFrames = videoSample.framesSent - lastVideoStats.framesSent;
|
|
205
|
+
}
|
|
188
206
|
}
|
|
189
207
|
const stats: ObservedOutboundTrackStats<Kind> = {
|
|
190
208
|
...sample,
|
|
@@ -207,6 +225,7 @@ export class ObservedOutboundTrack<Kind extends MediaKind> extends EventEmitter
|
|
|
207
225
|
this.totalLostPackets = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.packetsLost ?? 0), 0);
|
|
208
226
|
this.totalSentPackets = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.packetsSent ?? 0), 0);
|
|
209
227
|
this.totalSentBytes = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.bytesSent ?? 0), 0);
|
|
228
|
+
this.totalSentFrames = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.deltaSentPackets ?? 0), 0);
|
|
210
229
|
|
|
211
230
|
this.deltaEncodedFrames = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.deltaEncodedFrames ?? 0), 0);
|
|
212
231
|
this.deltaSentFrames = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.deltaSentFrames ?? 0), 0);
|
|
@@ -49,9 +49,9 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
49
49
|
public totalReceivedAudioBytes = 0;
|
|
50
50
|
public totalReceivedVideoBytes = 0;
|
|
51
51
|
|
|
52
|
-
public
|
|
53
|
-
public
|
|
54
|
-
public
|
|
52
|
+
public deltaInboundPacketsLost = 0;
|
|
53
|
+
public deltaInboundPacketsReceived = 0;
|
|
54
|
+
public deltaOutboundPacketsSent = 0;
|
|
55
55
|
public deltaDataChannelBytesSent = 0;
|
|
56
56
|
public deltaDataChannelBytesReceived = 0;
|
|
57
57
|
public deltaInboundReceivedBytes = 0;
|
|
@@ -206,16 +206,24 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
206
206
|
}
|
|
207
207
|
|
|
208
208
|
public resetMetrics() {
|
|
209
|
-
this.
|
|
210
|
-
this.
|
|
211
|
-
this.
|
|
212
|
-
|
|
209
|
+
this.deltaInboundPacketsLost = 0;
|
|
210
|
+
this.deltaInboundPacketsReceived = 0;
|
|
211
|
+
this.deltaOutboundPacketsSent = 0;
|
|
213
212
|
this.deltaDataChannelBytesSent = 0;
|
|
214
213
|
this.deltaDataChannelBytesReceived = 0;
|
|
214
|
+
this.deltaInboundReceivedBytes = 0;
|
|
215
|
+
this.deltaOutboundSentBytes = 0;
|
|
216
|
+
|
|
215
217
|
this.deltaReceivedAudioBytes = 0;
|
|
216
218
|
this.deltaReceivedVideoBytes = 0;
|
|
219
|
+
this.deltaReceivedAudioPackets = 0;
|
|
220
|
+
this.deltaReceivedVideoPackets = 0;
|
|
217
221
|
this.deltaSentAudioBytes = 0;
|
|
218
222
|
this.deltaSentVideoBytes = 0;
|
|
223
|
+
this.sendingAudioBitrate = 0;
|
|
224
|
+
this.sendingVideoBitrate = 0;
|
|
225
|
+
this.receivingAudioBitrate = 0;
|
|
226
|
+
this.receivingVideoBitrate = 0;
|
|
219
227
|
|
|
220
228
|
this._inboundAudioTracks.forEach((track) => track.resetMetrics());
|
|
221
229
|
this._inboundVideoTracks.forEach((track) => track.resetMetrics());
|
|
@@ -224,26 +232,11 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
224
232
|
}
|
|
225
233
|
|
|
226
234
|
public updateMetrics() {
|
|
227
|
-
this.totalInboundPacketsLost = 0;
|
|
228
|
-
this.totalInboundPacketsReceived = 0;
|
|
229
|
-
this.totalOutboundPacketsSent = 0;
|
|
230
|
-
this.totalDataChannelBytesSent = 0;
|
|
231
|
-
this.totalDataChannelBytesReceived = 0;
|
|
232
|
-
|
|
233
|
-
this.totalSentAudioBytes = 0;
|
|
234
|
-
this.totalSentVideoBytes = 0;
|
|
235
|
-
this.totalReceivedAudioBytes = 0;
|
|
236
|
-
this.totalReceivedVideoBytes = 0;
|
|
237
|
-
this.sendingAudioBitrate = 0;
|
|
238
|
-
this.sendingVideoBitrate = 0;
|
|
239
|
-
this.receivingAudioBitrate = 0;
|
|
240
|
-
this.receivingVideoBitrate = 0;
|
|
241
|
-
|
|
242
235
|
let sumRttInMs = 0;
|
|
243
236
|
|
|
244
237
|
this._inboundAudioTracks.forEach((track) => {
|
|
245
|
-
this.
|
|
246
|
-
this.
|
|
238
|
+
this.deltaInboundPacketsLost += track.deltaLostPackets;
|
|
239
|
+
this.deltaInboundPacketsReceived += track.deltaReceivedPackets;
|
|
247
240
|
this.deltaInboundReceivedBytes += track.deltaBytesReceived;
|
|
248
241
|
|
|
249
242
|
this.deltaReceivedAudioBytes += track.deltaBytesReceived;
|
|
@@ -251,17 +244,12 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
251
244
|
|
|
252
245
|
this.receivingAudioBitrate += track.bitrate;
|
|
253
246
|
|
|
254
|
-
this.totalInboundPacketsLost += track.totalLostPackets;
|
|
255
|
-
this.totalInboundPacketsReceived += track.totalReceivedPackets;
|
|
256
|
-
this.totalReceivedAudioBytes += track.totalBytesReceived;
|
|
257
|
-
this.totalReceivedAudioPacktes += track.totalReceivedPackets;
|
|
258
|
-
|
|
259
247
|
sumRttInMs = (track.rttInMs ?? 0);
|
|
260
248
|
});
|
|
261
249
|
|
|
262
250
|
this._inboundVideoTracks.forEach((track) => {
|
|
263
|
-
this.
|
|
264
|
-
this.
|
|
251
|
+
this.deltaInboundPacketsLost += track.deltaLostPackets;
|
|
252
|
+
this.deltaInboundPacketsReceived += track.deltaReceivedPackets;
|
|
265
253
|
this.deltaInboundReceivedBytes += track.deltaBytesReceived;
|
|
266
254
|
|
|
267
255
|
this.deltaReceivedVideoBytes += track.deltaBytesReceived;
|
|
@@ -269,16 +257,11 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
269
257
|
|
|
270
258
|
this.receivingVideoBitrate += track.bitrate;
|
|
271
259
|
|
|
272
|
-
this.totalInboundPacketsLost += track.totalLostPackets;
|
|
273
|
-
this.totalInboundPacketsReceived += track.totalReceivedPackets;
|
|
274
|
-
this.totalReceivedVideoBytes += track.totalBytesReceived;
|
|
275
|
-
this.totalReceivedVideoPackets += track.totalReceivedPackets;
|
|
276
|
-
|
|
277
260
|
sumRttInMs = (track.rttInMs ?? 0);
|
|
278
261
|
});
|
|
279
262
|
|
|
280
263
|
this._outboundAudioTracks.forEach((track) => {
|
|
281
|
-
this.
|
|
264
|
+
this.deltaOutboundPacketsSent += track.deltaSentPackets;
|
|
282
265
|
this.deltaOutboundSentBytes += track.deltaSentBytes;
|
|
283
266
|
|
|
284
267
|
this.deltaSentAudioBytes += track.deltaSentBytes;
|
|
@@ -286,15 +269,11 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
286
269
|
|
|
287
270
|
this.sendingAudioBitrate += track.bitrate;
|
|
288
271
|
|
|
289
|
-
this.totalOutboundPacketsSent += track.totalSentPackets;
|
|
290
|
-
this.totalSentAudioBytes += track.totalSentBytes;
|
|
291
|
-
this.totalSentAudioPackets += track.totalSentPackets;
|
|
292
|
-
|
|
293
272
|
sumRttInMs = (track.rttInMs ?? 0);
|
|
294
273
|
});
|
|
295
274
|
|
|
296
275
|
this._outboundVideoTracks.forEach((track) => {
|
|
297
|
-
this.
|
|
276
|
+
this.deltaOutboundPacketsSent += track.deltaSentPackets;
|
|
298
277
|
this.deltaOutboundSentBytes += track.deltaSentBytes;
|
|
299
278
|
|
|
300
279
|
this.deltaSentVideoBytes += track.deltaSentBytes;
|
|
@@ -302,18 +281,12 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
302
281
|
|
|
303
282
|
this.sendingVideoBitrate += track.bitrate;
|
|
304
283
|
|
|
305
|
-
this.totalOutboundPacketsSent += track.totalSentPackets;
|
|
306
|
-
this.totalSentVideoBytes += track.totalSentBytes;
|
|
307
|
-
this.totalSentVideoPackets += track.totalSentPackets;
|
|
308
|
-
|
|
309
284
|
sumRttInMs = (track.rttInMs ?? 0);
|
|
310
285
|
});
|
|
311
286
|
|
|
312
287
|
this._dataChannels.forEach((channel) => {
|
|
313
288
|
this.deltaDataChannelBytesSent += channel.deltaBytesSent;
|
|
314
289
|
this.deltaDataChannelBytesReceived += channel.deltaBytesReceived;
|
|
315
|
-
this.totalDataChannelBytesSent += channel.totalBytesSent;
|
|
316
|
-
this.totalDataChannelBytesReceived += channel.totalBytesReceived;
|
|
317
290
|
});
|
|
318
291
|
|
|
319
292
|
const iceRttInMs = this.ICE.stats?.currentRoundTripTime;
|
|
@@ -323,7 +296,22 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
323
296
|
sumRttInMs += iceRttInMs;
|
|
324
297
|
nrOfBelongings += 1;
|
|
325
298
|
}
|
|
299
|
+
|
|
326
300
|
this.avgRttInMs = 0 < nrOfBelongings ? sumRttInMs / nrOfBelongings : undefined;
|
|
301
|
+
this.totalDataChannelBytesReceived += this.deltaDataChannelBytesReceived;
|
|
302
|
+
this.totalDataChannelBytesSent += this.deltaDataChannelBytesSent;
|
|
303
|
+
this.totalInboundPacketsLost += this.deltaInboundPacketsLost;
|
|
304
|
+
this.totalInboundPacketsReceived += this.deltaInboundPacketsReceived;
|
|
305
|
+
this.totalOutboundPacketsSent += this.deltaOutboundPacketsSent;
|
|
306
|
+
this.totalSentAudioBytes += this.deltaSentAudioBytes;
|
|
307
|
+
this.totalSentVideoBytes += this.deltaSentVideoBytes;
|
|
308
|
+
this.totalReceivedAudioBytes += this.deltaReceivedAudioBytes;
|
|
309
|
+
this.totalReceivedVideoBytes += this.deltaReceivedVideoBytes;
|
|
310
|
+
this.totalReceivedAudioPacktes += this.deltaReceivedAudioPackets;
|
|
311
|
+
this.totalReceivedVideoPackets += this.deltaReceivedVideoPackets;
|
|
312
|
+
this.totalSentAudioPackets += this.deltaSentAudioBytes;
|
|
313
|
+
this.totalSentVideoPackets += this.deltaSentVideoBytes;
|
|
314
|
+
|
|
327
315
|
}
|
|
328
316
|
|
|
329
317
|
public update(sample: PeerConnectionTransport, timestamp: number) {
|
package/src/Observer.ts
CHANGED
|
@@ -99,17 +99,16 @@ export class Observer extends EventEmitter {
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
public createObservedCall<T extends Record<string, unknown> = Record<string, unknown>>(
|
|
102
|
-
config: PartialBy<ObservedCallModel, 'serviceId'
|
|
102
|
+
config: PartialBy<ObservedCallModel, 'serviceId'> & { appData: T, started?: number }
|
|
103
103
|
): ObservedCall<T> {
|
|
104
104
|
if (this._closed) {
|
|
105
105
|
throw new Error('Attempted to create a call source on a closed observer');
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
const { appData, ...model } = config;
|
|
108
|
+
const { appData, started = Date.now(), ...model } = config;
|
|
109
109
|
const call = new ObservedCall({
|
|
110
110
|
...model,
|
|
111
111
|
serviceId: this.config.defaultServiceId,
|
|
112
|
-
started: Date.now(),
|
|
113
112
|
}, this, appData);
|
|
114
113
|
|
|
115
114
|
if (this._closed) throw new Error('Cannot create an observed call on a closed observer');
|
|
@@ -130,7 +129,7 @@ export class Observer extends EventEmitter {
|
|
|
130
129
|
call.serviceId,
|
|
131
130
|
call.roomId,
|
|
132
131
|
call.callId,
|
|
133
|
-
|
|
132
|
+
started,
|
|
134
133
|
));
|
|
135
134
|
|
|
136
135
|
this.emit('newcall', call);
|