@observertc/observer-js 0.42.6 → 0.42.8
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.map +1 -1
- package/lib/ObservedClient.js +15 -9
- package/lib/ObservedPeerConnection.d.ts +1 -0
- package/lib/ObservedPeerConnection.d.ts.map +1 -1
- package/lib/ObservedPeerConnection.js +43 -22
- package/lib/common/CalculatedScore.d.ts +1 -0
- package/lib/common/CalculatedScore.d.ts.map +1 -1
- package/lib/common/CalculatedScore.js +15 -8
- package/package.json +1 -1
- package/src/ObservedClient.ts +11 -6
- package/src/ObservedPeerConnection.ts +48 -25
- package/src/common/CalculatedScore.ts +15 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedClient.d.ts","sourceRoot":"","sources":["../src/ObservedClient.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ObservedClient.d.ts","sourceRoot":"","sources":["../src/ObservedClient.ts"],"names":[],"mappings":"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"}
|
package/lib/ObservedClient.js
CHANGED
|
@@ -206,7 +206,7 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
206
206
|
this._addAndEmitIssue(issue);
|
|
207
207
|
}
|
|
208
208
|
accept(sample) {
|
|
209
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25
|
|
209
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25;
|
|
210
210
|
if (this._closed)
|
|
211
211
|
throw new Error(`Client ${this.clientId} is closed`);
|
|
212
212
|
if (sample.clientId && sample.clientId !== 'NULL' && sample.clientId !== this.clientId) {
|
|
@@ -304,8 +304,8 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
304
304
|
extensionType: extensionStats.type,
|
|
305
305
|
});
|
|
306
306
|
}
|
|
307
|
-
for (let
|
|
308
|
-
const { timestamp } =
|
|
307
|
+
for (let _26 of (_p = sample.customCallEvents) !== null && _p !== void 0 ? _p : []) {
|
|
308
|
+
const { timestamp } = _26, callEvent = __rest(_26, ["timestamp"]);
|
|
309
309
|
switch (callEvent.name) {
|
|
310
310
|
case CallEventType_1.CallEventType.CLIENT_JOINED: {
|
|
311
311
|
const lastJoined = this.joined;
|
|
@@ -691,8 +691,9 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
691
691
|
this.inboundVideoBitrate = 0;
|
|
692
692
|
let sumRttInMs = 0;
|
|
693
693
|
let anyPeerConnectionUsingTurn = false;
|
|
694
|
-
let minPcScore
|
|
695
|
-
let maxPcScore
|
|
694
|
+
let minPcScore;
|
|
695
|
+
let maxPcScore;
|
|
696
|
+
let numberOfScoredPeerConnections = 0;
|
|
696
697
|
for (const peerConnection of this._peerConnections.values()) {
|
|
697
698
|
if (peerConnection.closed)
|
|
698
699
|
continue;
|
|
@@ -710,14 +711,19 @@ class ObservedClient extends events_1.EventEmitter {
|
|
|
710
711
|
this.availableOutgoingBitrate += (_24 = peerConnection.availableOutgoingBitrate) !== null && _24 !== void 0 ? _24 : 0;
|
|
711
712
|
sumRttInMs += (_25 = peerConnection.avgRttInMs) !== null && _25 !== void 0 ? _25 : 0;
|
|
712
713
|
anyPeerConnectionUsingTurn || (anyPeerConnectionUsingTurn = peerConnection.usingTURN);
|
|
713
|
-
|
|
714
|
-
|
|
714
|
+
if (peerConnection.score) {
|
|
715
|
+
if (minPcScore === undefined || peerConnection.score.score < minPcScore)
|
|
716
|
+
minPcScore = peerConnection.score.score;
|
|
717
|
+
if (maxPcScore === undefined || peerConnection.score.score > maxPcScore)
|
|
718
|
+
maxPcScore = peerConnection.score.score;
|
|
719
|
+
++numberOfScoredPeerConnections;
|
|
720
|
+
}
|
|
715
721
|
}
|
|
716
722
|
this.score = {
|
|
717
|
-
score: minPcScore,
|
|
723
|
+
score: minPcScore !== null && minPcScore !== void 0 ? minPcScore : -1,
|
|
718
724
|
remarks: [{
|
|
719
725
|
severity: 'none',
|
|
720
|
-
text: `Min and max score of all peer connections: ${minPcScore}, ${maxPcScore}`,
|
|
726
|
+
text: `Min and max score of all peer connections: ${minPcScore}, ${maxPcScore}, number of PeerConnections with scores: ${numberOfScoredPeerConnections}`,
|
|
721
727
|
}],
|
|
722
728
|
timestamp: sample.timestamp,
|
|
723
729
|
};
|
|
@@ -46,6 +46,7 @@ export declare class ObservedPeerConnection extends EventEmitter {
|
|
|
46
46
|
closedTimestamp?: number;
|
|
47
47
|
private _elapsedTimeSinceLastUpdate?;
|
|
48
48
|
private _statsTimestamp?;
|
|
49
|
+
private _stabilityScores;
|
|
49
50
|
ωpendingIssuesForScores: ClientIssue[];
|
|
50
51
|
score?: CalculatedScore;
|
|
51
52
|
totalInboundPacketsLost: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedPeerConnection.d.ts","sourceRoot":"","sources":["../src/ObservedPeerConnection.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAiC,MAAM,+BAA+B,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AACxG,OAAO,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AACxG,OAAO,EAAE,0BAA0B,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAC3G,OAAO,EAAE,0BAA0B,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAC3G,OAAO,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"ObservedPeerConnection.d.ts","sourceRoot":"","sources":["../src/ObservedPeerConnection.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,7 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
16
16
|
this.client = client;
|
|
17
17
|
this.created = Date.now();
|
|
18
18
|
this.visited = true;
|
|
19
|
+
this._stabilityScores = [];
|
|
19
20
|
this.ωpendingIssuesForScores = [];
|
|
20
21
|
this.totalInboundPacketsLost = 0;
|
|
21
22
|
this.totalInboundPacketsReceived = 0;
|
|
@@ -352,31 +353,51 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
352
353
|
this._updateQualityScore(trackScores);
|
|
353
354
|
}
|
|
354
355
|
_updateQualityScore(trackScores) {
|
|
355
|
-
var _a, _b, _c, _d;
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
356
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
357
|
+
// Packet Jitter measured in seconds
|
|
358
|
+
// we use RTT and lost packets to calculate the base score for the connection
|
|
359
|
+
const rttInMs = (_a = this.avgRttInMs) !== null && _a !== void 0 ? _a : 0;
|
|
360
|
+
const latencyFactor = rttInMs < 150 ? 1.0 : (0, CalculatedScore_1.getRttScore)(rttInMs);
|
|
361
|
+
const totalPackets = Math.max(1, ((_b = this.totalInboundPacketsReceived) !== null && _b !== void 0 ? _b : 0) + ((_c = this.totalOutboundPacketsSent) !== null && _c !== void 0 ? _c : 0));
|
|
362
|
+
const lostPackets = ((_d = this.totalInboundPacketsLost) !== null && _d !== void 0 ? _d : 0) + ((_e = this.deltaOutboundPacketsSent) !== null && _e !== void 0 ? _e : 0);
|
|
363
|
+
const deliveryFactor = 1.0 - ((lostPackets) / (lostPackets + totalPackets));
|
|
364
|
+
// let's push the actual stability score
|
|
365
|
+
const stabilityScore = Math.pow(((latencyFactor * 0.5) + (deliveryFactor * 0.5)), 2);
|
|
366
|
+
this._stabilityScores.push(stabilityScore);
|
|
367
|
+
if (10 < this._stabilityScores.length) {
|
|
368
|
+
this._stabilityScores.shift();
|
|
369
|
+
}
|
|
370
|
+
else if (this._stabilityScores.length < 5) {
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
let counter = 0;
|
|
374
|
+
let weight = 0;
|
|
375
|
+
let totalScore = 0;
|
|
376
|
+
for (const score of this._stabilityScores) {
|
|
377
|
+
weight += 1;
|
|
378
|
+
counter += weight;
|
|
379
|
+
totalScore += weight * score;
|
|
380
|
+
}
|
|
381
|
+
const weightedStabilityScore = totalScore / counter;
|
|
382
|
+
let sumTrackScores = 0;
|
|
383
|
+
for (const trackScore of trackScores) {
|
|
384
|
+
sumTrackScores += trackScore.score;
|
|
385
|
+
}
|
|
386
|
+
const avgTrackScores = sumTrackScores / trackScores.length;
|
|
361
387
|
const score = {
|
|
362
388
|
remarks: [{
|
|
363
389
|
severity: 'none',
|
|
364
|
-
text: `
|
|
390
|
+
text: `Peer Connection stability score: ${weightedStabilityScore}`,
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
severity: 'none',
|
|
394
|
+
text: `Avg. Track score: ${avgTrackScores}`,
|
|
365
395
|
}],
|
|
366
|
-
score:
|
|
367
|
-
timestamp: (
|
|
396
|
+
score: Math.floor((weightedStabilityScore + avgTrackScores) * 5),
|
|
397
|
+
timestamp: (_f = this._statsTimestamp) !== null && _f !== void 0 ? _f : Date.now(),
|
|
368
398
|
};
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
sumTrackScores += trackScore.score;
|
|
372
|
-
}
|
|
373
|
-
score.score += sumTrackScores / trackScores.length;
|
|
374
|
-
score.remarks.push({
|
|
375
|
-
severity: 'none',
|
|
376
|
-
text: `Track scores: ${sumTrackScores / trackScores.length}`,
|
|
377
|
-
});
|
|
378
|
-
for (const pendingScore of this.ωpendingIssuesForScores) {
|
|
379
|
-
switch (pendingScore.severity) {
|
|
399
|
+
for (const pendingIssue of this.ωpendingIssuesForScores) {
|
|
400
|
+
switch (pendingIssue.severity) {
|
|
380
401
|
case 'critical':
|
|
381
402
|
score.score = 0.0;
|
|
382
403
|
break;
|
|
@@ -388,8 +409,8 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
388
409
|
break;
|
|
389
410
|
}
|
|
390
411
|
score.remarks.push({
|
|
391
|
-
severity:
|
|
392
|
-
text: (
|
|
412
|
+
severity: pendingIssue.severity,
|
|
413
|
+
text: (_g = pendingIssue.description) !== null && _g !== void 0 ? _g : 'Issue occurred',
|
|
393
414
|
});
|
|
394
415
|
}
|
|
395
416
|
this.ωpendingIssuesForScores = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalculatedScore.d.ts","sourceRoot":"","sources":["../../src/common/CalculatedScore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAE3E,MAAM,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;IAClD,IAAI,EAAE,MAAM,CAAC;CACb,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,CAAA;AAmBD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmBtB,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,yBAAyB,GAAG,0BAA0B,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,eAAe,GAAG,SAAS,CAiE5J;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,yBAAyB,GAAG,0BAA0B,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,eAAe,GAAG,SAAS,CA0C5J;AAED,wBAAgB,mBAAmB,CAClC,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,EACnC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACzD,MAAM,CASR"}
|
|
1
|
+
{"version":3,"file":"CalculatedScore.d.ts","sourceRoot":"","sources":["../../src/common/CalculatedScore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAE3E,MAAM,MAAM,iBAAiB,GAAG;IAC/B,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;IAClD,IAAI,EAAE,MAAM,CAAC;CACb,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,CAAA;AAmBD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmBtB,CAAC;AAEF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,yBAAyB,GAAG,0BAA0B,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,eAAe,GAAG,SAAS,CAiE5J;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,yBAAyB,GAAG,0BAA0B,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,eAAe,GAAG,SAAS,CA0C5J;AAED,wBAAgB,mBAAmB,CAClC,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,EACnC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACzD,MAAM,CASR;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM7C"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.calculateLatencyMOS = exports.calculateBaseAudioScore = exports.calculateBaseVideoScore = exports.BPP_RANGES = void 0;
|
|
3
|
+
exports.getRttScore = exports.calculateLatencyMOS = exports.calculateBaseAudioScore = exports.calculateBaseVideoScore = exports.BPP_RANGES = void 0;
|
|
4
4
|
// every track calculates its own score and stores
|
|
5
5
|
// the latest CalculatedScore in a score property also emits as an event 'score'
|
|
6
6
|
// every peer connection collects the scores and calculates its own score based on RTT, and stores it in the score property similar to track
|
|
@@ -60,21 +60,21 @@ function calculateBaseVideoScore(track, newIssues) {
|
|
|
60
60
|
// let's assume vp8 for now
|
|
61
61
|
const bppRange = exports.BPP_RANGES[track.contentType][(_a = track.codec) !== null && _a !== void 0 ? _a : 'vp8'];
|
|
62
62
|
if (bpp / 2 < bppRange.low) {
|
|
63
|
-
score.score =
|
|
63
|
+
score.score = 0.5;
|
|
64
64
|
score.remarks.push({
|
|
65
65
|
severity: 'major',
|
|
66
66
|
text: `Bitrate per pixel is too low for ${track.contentType} content`,
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
69
|
else if (bppRange.low < bpp) {
|
|
70
|
-
score.score =
|
|
70
|
+
score.score = 0.8;
|
|
71
71
|
score.remarks.push({
|
|
72
72
|
severity: 'minor',
|
|
73
73
|
text: `Bitrate per pixel is good for ${track.contentType} content`,
|
|
74
74
|
});
|
|
75
75
|
}
|
|
76
76
|
else {
|
|
77
|
-
score.score = Math.min(
|
|
77
|
+
score.score = Math.min(1.0, ((bpp - bppRange.low) / (bppRange.high - bppRange.low)));
|
|
78
78
|
score.remarks.push({
|
|
79
79
|
severity: 'none',
|
|
80
80
|
text: `Bitrate per pixel is good for ${track.contentType} content`,
|
|
@@ -106,21 +106,21 @@ function calculateBaseAudioScore(track, newIssues) {
|
|
|
106
106
|
timestamp: track.statsTimestamp,
|
|
107
107
|
};
|
|
108
108
|
if (track.bitrate < 8000) {
|
|
109
|
-
score.score =
|
|
109
|
+
score.score = 0.2;
|
|
110
110
|
score.remarks.push({
|
|
111
111
|
severity: 'none',
|
|
112
|
-
text: 'Bitrate is too low for audio',
|
|
112
|
+
text: 'Bitrate is too low for good quality audio',
|
|
113
113
|
});
|
|
114
114
|
}
|
|
115
115
|
else if (track.bitrate < 16000) {
|
|
116
|
-
score.score =
|
|
116
|
+
score.score = 0.5;
|
|
117
117
|
score.remarks.push({
|
|
118
118
|
severity: 'none',
|
|
119
119
|
text: 'Bitrate is low for audio',
|
|
120
120
|
});
|
|
121
121
|
}
|
|
122
122
|
else {
|
|
123
|
-
score.score =
|
|
123
|
+
score.score = 1.0;
|
|
124
124
|
score.remarks.push({
|
|
125
125
|
severity: 'none',
|
|
126
126
|
text: 'Bitrate is good for audio',
|
|
@@ -153,3 +153,10 @@ function calculateLatencyMOS({ avgJitter, rttInMs, packetsLoss }) {
|
|
|
153
153
|
return 1 + ((0.035) * rFactor) + ((0.000007) * rFactor * (rFactor - 60) * (100 - rFactor));
|
|
154
154
|
}
|
|
155
155
|
exports.calculateLatencyMOS = calculateLatencyMOS;
|
|
156
|
+
function getRttScore(x) {
|
|
157
|
+
// logarithmic version: 1.0 at 150 and 0.1 at 300
|
|
158
|
+
return (-1.2984 * Math.log(x)) + 7.5059;
|
|
159
|
+
// exponential version: 1.0 at 150 and 0.1 at 300
|
|
160
|
+
// return Math.exp(-0.01536 * x);
|
|
161
|
+
}
|
|
162
|
+
exports.getRttScore = getRttScore;
|
package/package.json
CHANGED
package/src/ObservedClient.ts
CHANGED
|
@@ -1044,8 +1044,9 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
1044
1044
|
let sumRttInMs = 0;
|
|
1045
1045
|
let anyPeerConnectionUsingTurn = false;
|
|
1046
1046
|
|
|
1047
|
-
let minPcScore
|
|
1048
|
-
let maxPcScore
|
|
1047
|
+
let minPcScore: number | undefined;
|
|
1048
|
+
let maxPcScore: number | undefined;
|
|
1049
|
+
let numberOfScoredPeerConnections = 0;
|
|
1049
1050
|
|
|
1050
1051
|
for (const peerConnection of this._peerConnections.values()) {
|
|
1051
1052
|
if (peerConnection.closed) continue;
|
|
@@ -1067,15 +1068,19 @@ export class ObservedClient<AppData extends Record<string, unknown> = Record<str
|
|
|
1067
1068
|
|
|
1068
1069
|
anyPeerConnectionUsingTurn ||= peerConnection.usingTURN;
|
|
1069
1070
|
|
|
1070
|
-
|
|
1071
|
-
|
|
1071
|
+
if (peerConnection.score) {
|
|
1072
|
+
if (minPcScore === undefined || peerConnection.score.score < minPcScore) minPcScore = peerConnection.score.score;
|
|
1073
|
+
if (maxPcScore === undefined || peerConnection.score.score > maxPcScore) maxPcScore = peerConnection.score.score;
|
|
1074
|
+
|
|
1075
|
+
++numberOfScoredPeerConnections;
|
|
1076
|
+
}
|
|
1072
1077
|
}
|
|
1073
1078
|
|
|
1074
1079
|
this.score = {
|
|
1075
|
-
score: minPcScore,
|
|
1080
|
+
score: minPcScore ?? -1,
|
|
1076
1081
|
remarks: [ {
|
|
1077
1082
|
severity: 'none',
|
|
1078
|
-
text: `Min and max score of all peer connections: ${minPcScore}, ${maxPcScore}`,
|
|
1083
|
+
text: `Min and max score of all peer connections: ${minPcScore}, ${maxPcScore}, number of PeerConnections with scores: ${numberOfScoredPeerConnections}`,
|
|
1079
1084
|
} ],
|
|
1080
1085
|
timestamp: sample.timestamp,
|
|
1081
1086
|
};
|
|
@@ -9,7 +9,7 @@ import { ObservedInboundAudioTrack, ObservedInboundAudioTrackModel } from './Obs
|
|
|
9
9
|
import { ObservedInboundVideoTrack, ObservedInboundVideoTrackModel } from './ObservedInboundVideoTrack';
|
|
10
10
|
import { ObservedOutboundAudioTrack, ObservedOutboundAudioTrackModel } from './ObservedOutboundAudioTrack';
|
|
11
11
|
import { ObservedOutboundVideoTrack, ObservedOutboundVideoTrackModel } from './ObservedOutboundVideoTrack';
|
|
12
|
-
import { CalculatedScore,
|
|
12
|
+
import { CalculatedScore, getRttScore } from './common/CalculatedScore';
|
|
13
13
|
import { ClientIssue } from './monitors/CallSummary';
|
|
14
14
|
|
|
15
15
|
export type ObservedPeerConnectionEvents = {
|
|
@@ -50,7 +50,8 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
50
50
|
|
|
51
51
|
private _elapsedTimeSinceLastUpdate?: number;
|
|
52
52
|
private _statsTimestamp?: number;
|
|
53
|
-
|
|
53
|
+
private _stabilityScores: number[] = [];
|
|
54
|
+
|
|
54
55
|
public ωpendingIssuesForScores: ClientIssue[] = [];
|
|
55
56
|
|
|
56
57
|
public score?: CalculatedScore;
|
|
@@ -499,34 +500,55 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
499
500
|
}
|
|
500
501
|
|
|
501
502
|
private _updateQualityScore(trackScores: CalculatedScore[]) {
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
const
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
503
|
+
// Packet Jitter measured in seconds
|
|
504
|
+
// we use RTT and lost packets to calculate the base score for the connection
|
|
505
|
+
const rttInMs = this.avgRttInMs ?? 0;
|
|
506
|
+
const latencyFactor = rttInMs < 150 ? 1.0 : getRttScore(rttInMs);
|
|
507
|
+
const totalPackets = Math.max(1, (this.totalInboundPacketsReceived ?? 0) + (this.totalOutboundPacketsSent ?? 0));
|
|
508
|
+
const lostPackets = (this.totalInboundPacketsLost ?? 0) + (this.deltaOutboundPacketsSent ?? 0);
|
|
509
|
+
const deliveryFactor = 1.0 - ((lostPackets) / (lostPackets + totalPackets));
|
|
510
|
+
// let's push the actual stability score
|
|
511
|
+
const stabilityScore = ((latencyFactor * 0.5) + (deliveryFactor * 0.5)) ** 2;
|
|
512
|
+
|
|
513
|
+
this._stabilityScores.push(stabilityScore);
|
|
514
|
+
if (10 < this._stabilityScores.length) {
|
|
515
|
+
this._stabilityScores.shift();
|
|
516
|
+
} else if (this._stabilityScores.length < 5) {
|
|
517
|
+
return;
|
|
518
|
+
}
|
|
519
|
+
let counter = 0;
|
|
520
|
+
let weight = 0;
|
|
521
|
+
let totalScore = 0;
|
|
522
|
+
|
|
523
|
+
for (const score of this._stabilityScores) {
|
|
524
|
+
weight += 1;
|
|
525
|
+
counter += weight;
|
|
526
|
+
totalScore += weight * score;
|
|
527
|
+
}
|
|
528
|
+
const weightedStabilityScore = totalScore / counter;
|
|
516
529
|
let sumTrackScores = 0;
|
|
517
530
|
|
|
518
531
|
for (const trackScore of trackScores) {
|
|
519
532
|
sumTrackScores += trackScore.score;
|
|
520
533
|
}
|
|
521
534
|
|
|
522
|
-
|
|
523
|
-
score.remarks.push({
|
|
524
|
-
severity: 'none',
|
|
525
|
-
text: `Track scores: ${sumTrackScores / trackScores.length}`,
|
|
526
|
-
});
|
|
535
|
+
const avgTrackScores = sumTrackScores / trackScores.length;
|
|
527
536
|
|
|
528
|
-
|
|
529
|
-
|
|
537
|
+
const score: CalculatedScore = {
|
|
538
|
+
remarks: [ {
|
|
539
|
+
severity: 'none',
|
|
540
|
+
text: `Peer Connection stability score: ${weightedStabilityScore}`,
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
severity: 'none',
|
|
544
|
+
text: `Avg. Track score: ${avgTrackScores}`,
|
|
545
|
+
} ],
|
|
546
|
+
score: Math.floor((weightedStabilityScore + avgTrackScores) * 5),
|
|
547
|
+
timestamp: this._statsTimestamp ?? Date.now(),
|
|
548
|
+
};
|
|
549
|
+
|
|
550
|
+
for (const pendingIssue of this.ωpendingIssuesForScores) {
|
|
551
|
+
switch (pendingIssue.severity) {
|
|
530
552
|
case 'critical':
|
|
531
553
|
score.score = 0.0;
|
|
532
554
|
break;
|
|
@@ -538,10 +560,11 @@ export class ObservedPeerConnection extends EventEmitter {
|
|
|
538
560
|
break;
|
|
539
561
|
}
|
|
540
562
|
score.remarks.push({
|
|
541
|
-
severity:
|
|
542
|
-
text:
|
|
563
|
+
severity: pendingIssue.severity,
|
|
564
|
+
text: pendingIssue.description ?? 'Issue occurred',
|
|
543
565
|
});
|
|
544
566
|
}
|
|
567
|
+
|
|
545
568
|
this.ωpendingIssuesForScores = [];
|
|
546
569
|
this.score = score;
|
|
547
570
|
|
|
@@ -85,19 +85,19 @@ export function calculateBaseVideoScore(track: ObservedInboundVideoTrack | Obser
|
|
|
85
85
|
const bppRange = BPP_RANGES[track.contentType][track.codec ?? 'vp8'];
|
|
86
86
|
|
|
87
87
|
if (bpp / 2 < bppRange.low) {
|
|
88
|
-
score.score =
|
|
88
|
+
score.score = 0.5;
|
|
89
89
|
score.remarks.push({
|
|
90
90
|
severity: 'major',
|
|
91
91
|
text: `Bitrate per pixel is too low for ${track.contentType} content`,
|
|
92
92
|
});
|
|
93
93
|
} else if (bppRange.low < bpp) {
|
|
94
|
-
score.score =
|
|
94
|
+
score.score = 0.8;
|
|
95
95
|
score.remarks.push({
|
|
96
96
|
severity: 'minor',
|
|
97
97
|
text: `Bitrate per pixel is good for ${track.contentType} content`,
|
|
98
98
|
});
|
|
99
99
|
} else {
|
|
100
|
-
score.score = Math.min(
|
|
100
|
+
score.score = Math.min(1.0, ((bpp - bppRange.low) / (bppRange.high - bppRange.low)));
|
|
101
101
|
score.remarks.push({
|
|
102
102
|
severity: 'none',
|
|
103
103
|
text: `Bitrate per pixel is good for ${track.contentType} content`,
|
|
@@ -129,19 +129,19 @@ export function calculateBaseAudioScore(track: ObservedInboundAudioTrack | Obser
|
|
|
129
129
|
};
|
|
130
130
|
|
|
131
131
|
if (track.bitrate < 8000) {
|
|
132
|
-
score.score =
|
|
132
|
+
score.score = 0.2;
|
|
133
133
|
score.remarks.push({
|
|
134
134
|
severity: 'none',
|
|
135
|
-
text: 'Bitrate is too low for audio',
|
|
135
|
+
text: 'Bitrate is too low for good quality audio',
|
|
136
136
|
});
|
|
137
137
|
} else if (track.bitrate < 16000) {
|
|
138
|
-
score.score =
|
|
138
|
+
score.score = 0.5;
|
|
139
139
|
score.remarks.push({
|
|
140
140
|
severity: 'none',
|
|
141
141
|
text: 'Bitrate is low for audio',
|
|
142
142
|
});
|
|
143
143
|
} else {
|
|
144
|
-
score.score =
|
|
144
|
+
score.score = 1.0;
|
|
145
145
|
score.remarks.push({
|
|
146
146
|
severity: 'none',
|
|
147
147
|
text: 'Bitrate is good for audio',
|
|
@@ -177,4 +177,12 @@ export function calculateLatencyMOS(
|
|
|
177
177
|
rFactor -= (packetsLoss * 2.5);
|
|
178
178
|
|
|
179
179
|
return 1 + ((0.035) * rFactor) + ((0.000007) * rFactor * (rFactor - 60) * (100 - rFactor));
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
export function getRttScore(x: number): number {
|
|
183
|
+
// logarithmic version: 1.0 at 150 and 0.1 at 300
|
|
184
|
+
return (-1.2984 * Math.log(x)) + 7.5059;
|
|
185
|
+
|
|
186
|
+
// exponential version: 1.0 at 150 and 0.1 at 300
|
|
187
|
+
// return Math.exp(-0.01536 * x);
|
|
180
188
|
}
|