@observertc/observer-js 0.41.7 → 0.42.1
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 +10 -3
- package/lib/ObservedCall.d.ts.map +1 -1
- package/lib/ObservedCall.js +28 -0
- package/lib/ObservedClient.d.ts +5 -0
- package/lib/ObservedClient.d.ts.map +1 -1
- package/lib/ObservedClient.js +83 -32
- package/lib/ObservedInboundAudioTrack.d.ts +94 -0
- package/lib/ObservedInboundAudioTrack.d.ts.map +1 -0
- package/lib/ObservedInboundAudioTrack.js +215 -0
- package/lib/ObservedInboundVideoTrack.d.ts +98 -0
- package/lib/ObservedInboundVideoTrack.d.ts.map +1 -0
- package/lib/{ObservedInboundTrack.js → ObservedInboundVideoTrack.js} +53 -44
- package/lib/ObservedOutboundAudioTrack.d.ts +85 -0
- package/lib/ObservedOutboundAudioTrack.d.ts.map +1 -0
- package/lib/{ObservedOutboundTrack.js → ObservedOutboundAudioTrack.js} +35 -58
- package/lib/ObservedOutboundVideoTrack.d.ts +88 -0
- package/lib/ObservedOutboundVideoTrack.d.ts.map +1 -0
- package/lib/ObservedOutboundVideoTrack.js +204 -0
- package/lib/ObservedPeerConnection.d.ts +26 -16
- package/lib/ObservedPeerConnection.d.ts.map +1 -1
- package/lib/ObservedPeerConnection.js +157 -86
- package/lib/Observer.d.ts +1 -0
- package/lib/Observer.d.ts.map +1 -1
- package/lib/Observer.js +2 -2
- package/lib/RemoteTrackAssigner.d.ts +14 -0
- package/lib/RemoteTrackAssigner.d.ts.map +1 -0
- package/lib/RemoteTrackAssigner.js +52 -0
- package/lib/common/CalculatedScore.d.ts +79 -0
- package/lib/common/CalculatedScore.d.ts.map +1 -0
- package/lib/common/CalculatedScore.js +155 -0
- package/lib/common/QualityScoreUtils.d.ts +1 -0
- package/lib/common/QualityScoreUtils.d.ts.map +1 -0
- package/lib/common/QualityScoreUtils.js +1 -0
- package/lib/common/utils.d.ts +1 -0
- package/lib/common/utils.d.ts.map +1 -1
- package/lib/common/utils.js +14 -1
- package/lib/index.d.ts +4 -2
- package/lib/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/ObservedCall.ts +40 -4
- package/src/ObservedClient.ts +79 -17
- package/src/ObservedInboundAudioTrack.ts +336 -0
- package/src/{ObservedInboundTrack.ts → ObservedInboundVideoTrack.ts} +85 -66
- package/src/{ObservedOutboundTrack.ts → ObservedOutboundAudioTrack.ts} +59 -74
- package/src/ObservedOutboundVideoTrack.ts +326 -0
- package/src/ObservedPeerConnection.ts +205 -131
- package/src/Observer.ts +3 -2
- package/src/RemoteTrackAssigner.ts +68 -0
- package/src/common/CalculatedScore.ts +180 -0
- package/src/common/QualityScoreUtils.ts +0 -0
- package/src/common/utils.ts +17 -1
- package/src/index.ts +4 -2
- package/src/monitors/CallSummaryMonitor.ts +3 -3
- package/lib/ObservedInboundTrack.d.ts +0 -96
- package/lib/ObservedInboundTrack.d.ts.map +0 -1
- package/lib/ObservedOutboundTrack.d.ts +0 -84
- package/lib/ObservedOutboundTrack.d.ts.map +0 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.ObservedOutboundAudioTrack = void 0;
|
|
4
4
|
const events_1 = require("events");
|
|
5
|
-
|
|
5
|
+
const CalculatedScore_1 = require("./common/CalculatedScore");
|
|
6
|
+
class ObservedOutboundAudioTrack extends events_1.EventEmitter {
|
|
6
7
|
constructor(_model, peerConnection) {
|
|
7
8
|
super();
|
|
8
9
|
this._model = _model;
|
|
@@ -24,10 +25,9 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
24
25
|
this._lastMaxStatsTimestamp = 0;
|
|
25
26
|
this._closed = false;
|
|
26
27
|
this._updated = Date.now();
|
|
27
|
-
this
|
|
28
|
+
this.ωpendingIssuesForScores = [];
|
|
29
|
+
this.remoteInboundTracks = new Map();
|
|
28
30
|
this.setMaxListeners(Infinity);
|
|
29
|
-
if (this._model.sfuStreamId)
|
|
30
|
-
this._assignSfuStreamId(this._model.sfuStreamId);
|
|
31
31
|
}
|
|
32
32
|
get serviceId() {
|
|
33
33
|
return this.peerConnection.serviceId;
|
|
@@ -47,21 +47,18 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
47
47
|
get peerConnectionId() {
|
|
48
48
|
return this.peerConnection.peerConnectionId;
|
|
49
49
|
}
|
|
50
|
-
get kind() {
|
|
51
|
-
return this._model.kind;
|
|
52
|
-
}
|
|
53
50
|
get trackId() {
|
|
54
51
|
return this._model.trackId;
|
|
55
52
|
}
|
|
56
53
|
get sfuStreamId() {
|
|
57
54
|
return this._model.sfuStreamId;
|
|
58
55
|
}
|
|
59
|
-
get remoteInboundTracks() {
|
|
60
|
-
return this._remoteInboundTracks;
|
|
61
|
-
}
|
|
62
56
|
get reports() {
|
|
63
57
|
return this.peerConnection.reports;
|
|
64
58
|
}
|
|
59
|
+
get statsTimestamp() {
|
|
60
|
+
return this._lastMaxStatsTimestamp;
|
|
61
|
+
}
|
|
65
62
|
get updated() {
|
|
66
63
|
return this._updated;
|
|
67
64
|
}
|
|
@@ -82,10 +79,7 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
82
79
|
return;
|
|
83
80
|
const now = Date.now();
|
|
84
81
|
const report = Object.assign(Object.assign({ serviceId: this.peerConnection.client.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: statsTimestamp, sampleSeq: -1, marker: this.marker });
|
|
85
|
-
|
|
86
|
-
this.reports.addOutboundAudioTrackReport(report);
|
|
87
|
-
else if (this.kind === 'video')
|
|
88
|
-
this.reports.addOutboundVideoTrackReport(report);
|
|
82
|
+
this.reports.addOutboundAudioTrackReport(report);
|
|
89
83
|
const elapsedTimeInMs = Math.max(1, now - this._updated);
|
|
90
84
|
const lastStat = this._stats.get(sample.ssrc);
|
|
91
85
|
const rttInMs = sample.roundTripTime ? sample.roundTripTime * 1000 : undefined;
|
|
@@ -107,22 +101,16 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
107
101
|
}
|
|
108
102
|
let deltaEncodedFrames;
|
|
109
103
|
let deltaSentFrames;
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
deltaEncodedFrames = videoSample.framesEncoded - lastVideoStats.framesEncoded;
|
|
115
|
-
}
|
|
116
|
-
if ((videoSample === null || videoSample === void 0 ? void 0 : videoSample.framesSent) && (lastVideoStats === null || lastVideoStats === void 0 ? void 0 : lastVideoStats.framesSent) && lastVideoStats.framesSent < videoSample.framesSent) {
|
|
117
|
-
deltaSentFrames = videoSample.framesSent - lastVideoStats.framesSent;
|
|
118
|
-
}
|
|
119
|
-
if (videoSample.qualityLimitationReason && (lastVideoStats === null || lastVideoStats === void 0 ? void 0 : lastVideoStats.qualityLimitationReason) !== videoSample.qualityLimitationReason) {
|
|
120
|
-
this.emit('qualitylimitationchanged', videoSample.qualityLimitationReason);
|
|
121
|
-
}
|
|
104
|
+
const videoSample = sample;
|
|
105
|
+
const lastVideoStats = lastStat;
|
|
106
|
+
if ((videoSample === null || videoSample === void 0 ? void 0 : videoSample.framesEncoded) && (lastVideoStats === null || lastVideoStats === void 0 ? void 0 : lastVideoStats.framesEncoded) && lastVideoStats.framesEncoded < videoSample.framesEncoded) {
|
|
107
|
+
deltaEncodedFrames = videoSample.framesEncoded - lastVideoStats.framesEncoded;
|
|
122
108
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
109
|
+
if ((videoSample === null || videoSample === void 0 ? void 0 : videoSample.framesSent) && (lastVideoStats === null || lastVideoStats === void 0 ? void 0 : lastVideoStats.framesSent) && lastVideoStats.framesSent < videoSample.framesSent) {
|
|
110
|
+
deltaSentFrames = videoSample.framesSent - lastVideoStats.framesSent;
|
|
111
|
+
}
|
|
112
|
+
if (videoSample.qualityLimitationReason && (lastVideoStats === null || lastVideoStats === void 0 ? void 0 : lastVideoStats.qualityLimitationReason) !== videoSample.qualityLimitationReason) {
|
|
113
|
+
this.emit('qualitylimitationchanged', videoSample.qualityLimitationReason);
|
|
126
114
|
}
|
|
127
115
|
const stats = Object.assign(Object.assign({}, sample), { rttInMs,
|
|
128
116
|
bitrate, ssrc: sample.ssrc, deltaLostPackets,
|
|
@@ -144,28 +132,17 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
144
132
|
// this.deltaSentPackets = [ ...this._stats.values() ].reduce((acc, stat) => acc + stat.deltaSentPackets, 0);
|
|
145
133
|
// this.deltaSentBytes = [ ...this._stats.values() ].reduce((acc, stat) => acc + stat.deltaSentBytes, 0);
|
|
146
134
|
// setting up sfu connection as it is not always available at the first sample
|
|
147
|
-
if (sample.sfuStreamId && !this._model.sfuStreamId) {
|
|
148
|
-
this._assignSfuStreamId(sample.sfuStreamId);
|
|
149
|
-
}
|
|
150
135
|
this.visited = true;
|
|
151
136
|
this._updated = now;
|
|
152
137
|
this.emit('update', {
|
|
153
138
|
elapsedTimeInMs,
|
|
154
139
|
});
|
|
155
140
|
}
|
|
156
|
-
connectInboundTrack(track) {
|
|
157
|
-
if (this._closed)
|
|
158
|
-
return;
|
|
159
|
-
track.remoteOutboundTrack = this;
|
|
160
|
-
track.once('close', () => {
|
|
161
|
-
this._remoteInboundTracks.delete(track.trackId);
|
|
162
|
-
});
|
|
163
|
-
this._remoteInboundTracks.set(track.trackId, track);
|
|
164
|
-
}
|
|
165
141
|
updateMetrics() {
|
|
166
|
-
var _a, _b, _c, _d, _e, _f;
|
|
142
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
167
143
|
let maxStatsTimestamp = 0;
|
|
168
144
|
let rttInMsSum = 0;
|
|
145
|
+
let jitterSum = 0;
|
|
169
146
|
let size = 0;
|
|
170
147
|
this.bitrate = 0;
|
|
171
148
|
this.rttInMs = undefined;
|
|
@@ -186,6 +163,7 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
186
163
|
this.bitrate += stats.bitrate;
|
|
187
164
|
maxStatsTimestamp = Math.max(maxStatsTimestamp, stats.statsTimestamp);
|
|
188
165
|
rttInMsSum += (_f = stats.rttInMs) !== null && _f !== void 0 ? _f : 0;
|
|
166
|
+
jitterSum += (_g = stats.jitter) !== null && _g !== void 0 ? _g : 0;
|
|
189
167
|
++size;
|
|
190
168
|
}
|
|
191
169
|
const now = Date.now();
|
|
@@ -198,22 +176,21 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
198
176
|
this.totalSentBytes += this.deltaSentBytes;
|
|
199
177
|
this.totalSentFrames += this.deltaSentFrames;
|
|
200
178
|
this.rttInMs = rttInMsSum / Math.max(size, 1);
|
|
179
|
+
this.jitter = jitterSum / Math.max(size, 1);
|
|
201
180
|
this._lastMaxStatsTimestamp = maxStatsTimestamp;
|
|
181
|
+
this._updateQualityScore(maxStatsTimestamp);
|
|
202
182
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
this.peerConnection.client.call.sfuStreamIdToOutboundAudioTrack.set(this._model.sfuStreamId, this);
|
|
215
|
-
else if (this.kind === 'video')
|
|
216
|
-
this.peerConnection.client.call.sfuStreamIdToOutboundVideoTrack.set(this._model.sfuStreamId, this);
|
|
183
|
+
_updateQualityScore(timestamp) {
|
|
184
|
+
const newIssues = this.ωpendingIssuesForScores;
|
|
185
|
+
const score = (0, CalculatedScore_1.calculateBaseAudioScore)(this, newIssues);
|
|
186
|
+
if (0 < newIssues.length) {
|
|
187
|
+
this.ωpendingIssuesForScores = [];
|
|
188
|
+
}
|
|
189
|
+
if (!score)
|
|
190
|
+
return (this.score = undefined);
|
|
191
|
+
score.timestamp = timestamp;
|
|
192
|
+
this.score = score;
|
|
193
|
+
this.emit('score', this.score);
|
|
217
194
|
}
|
|
218
195
|
}
|
|
219
|
-
exports.
|
|
196
|
+
exports.ObservedOutboundAudioTrack = ObservedOutboundAudioTrack;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { EventEmitter } from 'events';
|
|
3
|
+
import { ObservedPeerConnection } from './ObservedPeerConnection';
|
|
4
|
+
import { OutboundVideoTrack } from '@observertc/sample-schemas-js';
|
|
5
|
+
import { ObservedInboundVideoTrack } from './ObservedInboundVideoTrack';
|
|
6
|
+
import { CalculatedScore } from './common/CalculatedScore';
|
|
7
|
+
import { ClientIssue } from './monitors/CallSummary';
|
|
8
|
+
export type ObservedOutboundVideoTrackModel = {
|
|
9
|
+
trackId: string;
|
|
10
|
+
sfuStreamId?: string;
|
|
11
|
+
};
|
|
12
|
+
export type ObservedOutboundVideoTrackEvents = {
|
|
13
|
+
qualitylimitationchanged: [string];
|
|
14
|
+
update: [
|
|
15
|
+
{
|
|
16
|
+
elapsedTimeInMs: number;
|
|
17
|
+
}
|
|
18
|
+
];
|
|
19
|
+
score: [CalculatedScore];
|
|
20
|
+
close: [];
|
|
21
|
+
};
|
|
22
|
+
export type ObservedOutboundVideoTrackStats = OutboundVideoTrack & {
|
|
23
|
+
ssrc: number;
|
|
24
|
+
bitrate: number;
|
|
25
|
+
rttInMs?: number;
|
|
26
|
+
deltaLostPackets: number;
|
|
27
|
+
deltaSentPackets: number;
|
|
28
|
+
deltaSentBytes: number;
|
|
29
|
+
deltaSentFrames?: number;
|
|
30
|
+
deltaEncodedFrames?: number;
|
|
31
|
+
statsTimestamp: number;
|
|
32
|
+
};
|
|
33
|
+
export declare interface ObservedOutboundVideoTrack {
|
|
34
|
+
on<U extends keyof ObservedOutboundVideoTrackEvents>(event: U, listener: (...args: ObservedOutboundVideoTrackEvents[U]) => void): this;
|
|
35
|
+
off<U extends keyof ObservedOutboundVideoTrackEvents>(event: U, listener: (...args: ObservedOutboundVideoTrackEvents[U]) => void): this;
|
|
36
|
+
once<U extends keyof ObservedOutboundVideoTrackEvents>(event: U, listener: (...args: ObservedOutboundVideoTrackEvents[U]) => void): this;
|
|
37
|
+
emit<U extends keyof ObservedOutboundVideoTrackEvents>(event: U, ...args: ObservedOutboundVideoTrackEvents[U]): boolean;
|
|
38
|
+
update(sample: OutboundVideoTrack, timestamp: number): void;
|
|
39
|
+
}
|
|
40
|
+
export declare class ObservedOutboundVideoTrack extends EventEmitter {
|
|
41
|
+
private readonly _model;
|
|
42
|
+
readonly peerConnection: ObservedPeerConnection;
|
|
43
|
+
readonly created: number;
|
|
44
|
+
visited: boolean;
|
|
45
|
+
contentType: 'lowmotion' | 'standard' | 'highmotion';
|
|
46
|
+
codec: 'vp8' | 'vp9' | 'h264';
|
|
47
|
+
highestLayer?: ObservedOutboundVideoTrackStats;
|
|
48
|
+
bitrate: number;
|
|
49
|
+
jitter?: number;
|
|
50
|
+
rttInMs?: number;
|
|
51
|
+
marker?: string;
|
|
52
|
+
totalLostPackets: number;
|
|
53
|
+
totalSentPackets: number;
|
|
54
|
+
totalSentBytes: number;
|
|
55
|
+
totalSentFrames: number;
|
|
56
|
+
deltaLostPackets: number;
|
|
57
|
+
deltaSentPackets: number;
|
|
58
|
+
deltaSentBytes: number;
|
|
59
|
+
deltaSentFrames: number;
|
|
60
|
+
deltaEncodedFrames: number;
|
|
61
|
+
sendingBitrate: number;
|
|
62
|
+
private readonly _stats;
|
|
63
|
+
private _lastMaxStatsTimestamp;
|
|
64
|
+
private _closed;
|
|
65
|
+
private _updated;
|
|
66
|
+
readonly remoteInboundTracks: Map<string, ObservedInboundVideoTrack>;
|
|
67
|
+
score?: CalculatedScore;
|
|
68
|
+
ωpendingIssuesForScores: ClientIssue[];
|
|
69
|
+
constructor(_model: ObservedOutboundVideoTrackModel, peerConnection: ObservedPeerConnection);
|
|
70
|
+
get serviceId(): string;
|
|
71
|
+
get roomId(): string;
|
|
72
|
+
get callId(): string;
|
|
73
|
+
get clientId(): string;
|
|
74
|
+
get mediaUnitId(): string;
|
|
75
|
+
get peerConnectionId(): string;
|
|
76
|
+
get trackId(): string;
|
|
77
|
+
get sfuStreamId(): string | undefined;
|
|
78
|
+
get reports(): import("./ReportsCollector").ReportsCollector;
|
|
79
|
+
get updated(): number;
|
|
80
|
+
get statsTimestamp(): number;
|
|
81
|
+
get stats(): ReadonlyMap<number, ObservedOutboundVideoTrackStats>;
|
|
82
|
+
get closed(): boolean;
|
|
83
|
+
close(): void;
|
|
84
|
+
private _lastUpdateMetrics?;
|
|
85
|
+
updateMetrics(): void;
|
|
86
|
+
private _updateQualityScore;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=ObservedOutboundVideoTrack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservedOutboundVideoTrack.d.ts","sourceRoot":"","sources":["../src/ObservedOutboundVideoTrack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ObservedOutboundVideoTrack = void 0;
|
|
4
|
+
const events_1 = require("events");
|
|
5
|
+
const CalculatedScore_1 = require("./common/CalculatedScore");
|
|
6
|
+
class ObservedOutboundVideoTrack extends events_1.EventEmitter {
|
|
7
|
+
constructor(_model, peerConnection) {
|
|
8
|
+
super();
|
|
9
|
+
this._model = _model;
|
|
10
|
+
this.peerConnection = peerConnection;
|
|
11
|
+
this.created = Date.now();
|
|
12
|
+
this.visited = false;
|
|
13
|
+
this.contentType = 'standard';
|
|
14
|
+
this.codec = 'vp8';
|
|
15
|
+
this.bitrate = 0;
|
|
16
|
+
this.totalLostPackets = 0;
|
|
17
|
+
this.totalSentPackets = 0;
|
|
18
|
+
this.totalSentBytes = 0;
|
|
19
|
+
this.totalSentFrames = 0;
|
|
20
|
+
this.deltaLostPackets = 0;
|
|
21
|
+
this.deltaSentPackets = 0;
|
|
22
|
+
this.deltaSentBytes = 0;
|
|
23
|
+
this.deltaSentFrames = 0;
|
|
24
|
+
this.deltaEncodedFrames = 0;
|
|
25
|
+
this.sendingBitrate = 0;
|
|
26
|
+
this._stats = new Map();
|
|
27
|
+
this._lastMaxStatsTimestamp = 0;
|
|
28
|
+
this._closed = false;
|
|
29
|
+
this._updated = Date.now();
|
|
30
|
+
this.remoteInboundTracks = new Map();
|
|
31
|
+
this.ωpendingIssuesForScores = [];
|
|
32
|
+
this.setMaxListeners(Infinity);
|
|
33
|
+
}
|
|
34
|
+
get serviceId() {
|
|
35
|
+
return this.peerConnection.serviceId;
|
|
36
|
+
}
|
|
37
|
+
get roomId() {
|
|
38
|
+
return this.peerConnection.roomId;
|
|
39
|
+
}
|
|
40
|
+
get callId() {
|
|
41
|
+
return this.peerConnection.callId;
|
|
42
|
+
}
|
|
43
|
+
get clientId() {
|
|
44
|
+
return this.peerConnection.clientId;
|
|
45
|
+
}
|
|
46
|
+
get mediaUnitId() {
|
|
47
|
+
return this.peerConnection.mediaUnitId;
|
|
48
|
+
}
|
|
49
|
+
get peerConnectionId() {
|
|
50
|
+
return this.peerConnection.peerConnectionId;
|
|
51
|
+
}
|
|
52
|
+
get trackId() {
|
|
53
|
+
return this._model.trackId;
|
|
54
|
+
}
|
|
55
|
+
get sfuStreamId() {
|
|
56
|
+
return this._model.sfuStreamId;
|
|
57
|
+
}
|
|
58
|
+
get reports() {
|
|
59
|
+
return this.peerConnection.reports;
|
|
60
|
+
}
|
|
61
|
+
get updated() {
|
|
62
|
+
return this._updated;
|
|
63
|
+
}
|
|
64
|
+
get statsTimestamp() {
|
|
65
|
+
return this._lastMaxStatsTimestamp;
|
|
66
|
+
}
|
|
67
|
+
get stats() {
|
|
68
|
+
return this._stats;
|
|
69
|
+
}
|
|
70
|
+
get closed() {
|
|
71
|
+
return this._closed;
|
|
72
|
+
}
|
|
73
|
+
close() {
|
|
74
|
+
if (this._closed)
|
|
75
|
+
return;
|
|
76
|
+
this._closed = true;
|
|
77
|
+
this.emit('close');
|
|
78
|
+
}
|
|
79
|
+
update(sample, statsTimestamp) {
|
|
80
|
+
if (this._closed)
|
|
81
|
+
return;
|
|
82
|
+
const now = Date.now();
|
|
83
|
+
const report = Object.assign(Object.assign({ serviceId: this.peerConnection.client.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: statsTimestamp, sampleSeq: -1, marker: this.marker });
|
|
84
|
+
this.reports.addOutboundVideoTrackReport(report);
|
|
85
|
+
const elapsedTimeInMs = Math.max(1, now - this._updated);
|
|
86
|
+
const lastStat = this._stats.get(sample.ssrc);
|
|
87
|
+
const rttInMs = sample.roundTripTime ? sample.roundTripTime * 1000 : undefined;
|
|
88
|
+
let bitrate = 0;
|
|
89
|
+
let deltaLostPackets = 0;
|
|
90
|
+
let deltaSentPackets = 0;
|
|
91
|
+
let deltaSentBytes = 0;
|
|
92
|
+
if (sample.bytesSent && (lastStat === null || lastStat === void 0 ? void 0 : lastStat.bytesSent) && lastStat.bytesSent < sample.bytesSent) {
|
|
93
|
+
bitrate = (sample.bytesSent - lastStat.bytesSent) * 8 / (elapsedTimeInMs / 1000);
|
|
94
|
+
}
|
|
95
|
+
if (sample.packetsLost && (lastStat === null || lastStat === void 0 ? void 0 : lastStat.packetsLost) && lastStat.packetsLost < sample.packetsLost) {
|
|
96
|
+
deltaLostPackets = sample.packetsLost - lastStat.packetsLost;
|
|
97
|
+
}
|
|
98
|
+
if (sample.packetsSent && (lastStat === null || lastStat === void 0 ? void 0 : lastStat.packetsSent) && lastStat.packetsSent < sample.packetsSent) {
|
|
99
|
+
deltaSentPackets = sample.packetsSent - lastStat.packetsSent;
|
|
100
|
+
}
|
|
101
|
+
if (sample.bytesSent && (lastStat === null || lastStat === void 0 ? void 0 : lastStat.bytesSent) && lastStat.bytesSent < sample.bytesSent) {
|
|
102
|
+
deltaSentBytes = sample.bytesSent - lastStat.bytesSent;
|
|
103
|
+
}
|
|
104
|
+
let deltaEncodedFrames;
|
|
105
|
+
let deltaSentFrames;
|
|
106
|
+
const videoSample = sample;
|
|
107
|
+
const lastVideoStats = lastStat;
|
|
108
|
+
if ((videoSample === null || videoSample === void 0 ? void 0 : videoSample.framesEncoded) && (lastVideoStats === null || lastVideoStats === void 0 ? void 0 : lastVideoStats.framesEncoded) && lastVideoStats.framesEncoded < videoSample.framesEncoded) {
|
|
109
|
+
deltaEncodedFrames = videoSample.framesEncoded - lastVideoStats.framesEncoded;
|
|
110
|
+
}
|
|
111
|
+
if ((videoSample === null || videoSample === void 0 ? void 0 : videoSample.framesSent) && (lastVideoStats === null || lastVideoStats === void 0 ? void 0 : lastVideoStats.framesSent) && lastVideoStats.framesSent < videoSample.framesSent) {
|
|
112
|
+
deltaSentFrames = videoSample.framesSent - lastVideoStats.framesSent;
|
|
113
|
+
}
|
|
114
|
+
if (videoSample.qualityLimitationReason && (lastVideoStats === null || lastVideoStats === void 0 ? void 0 : lastVideoStats.qualityLimitationReason) !== videoSample.qualityLimitationReason) {
|
|
115
|
+
this.emit('qualitylimitationchanged', videoSample.qualityLimitationReason);
|
|
116
|
+
}
|
|
117
|
+
const stats = Object.assign(Object.assign({}, sample), { rttInMs,
|
|
118
|
+
bitrate, ssrc: sample.ssrc, deltaLostPackets,
|
|
119
|
+
deltaSentPackets,
|
|
120
|
+
deltaSentBytes,
|
|
121
|
+
deltaEncodedFrames,
|
|
122
|
+
deltaSentFrames,
|
|
123
|
+
statsTimestamp });
|
|
124
|
+
this._stats.set(sample.ssrc, stats);
|
|
125
|
+
// this.bitrate = [ ...this._stats.values() ].reduce((acc, stat) => acc + stat.bitrate, 0);
|
|
126
|
+
// this.rttInMs = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.rttInMs ?? 0), 0) / (this._stats.size || 1);
|
|
127
|
+
// this.totalLostPackets = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.packetsLost ?? 0), 0);
|
|
128
|
+
// this.totalSentPackets = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.packetsSent ?? 0), 0);
|
|
129
|
+
// this.totalSentBytes = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.bytesSent ?? 0), 0);
|
|
130
|
+
// this.totalSentFrames = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.deltaSentPackets ?? 0), 0);
|
|
131
|
+
// this.deltaEncodedFrames = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.deltaEncodedFrames ?? 0), 0);
|
|
132
|
+
// this.deltaSentFrames = [ ...this._stats.values() ].reduce((acc, stat) => acc + (stat.deltaSentFrames ?? 0), 0);
|
|
133
|
+
// this.deltaLostPackets = [ ...this._stats.values() ].reduce((acc, stat) => acc + stat.deltaLostPackets, 0);
|
|
134
|
+
// this.deltaSentPackets = [ ...this._stats.values() ].reduce((acc, stat) => acc + stat.deltaSentPackets, 0);
|
|
135
|
+
// this.deltaSentBytes = [ ...this._stats.values() ].reduce((acc, stat) => acc + stat.deltaSentBytes, 0);
|
|
136
|
+
// setting up sfu connection as it is not always available at the first sample
|
|
137
|
+
this.visited = true;
|
|
138
|
+
this._updated = now;
|
|
139
|
+
this.emit('update', {
|
|
140
|
+
elapsedTimeInMs,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
updateMetrics() {
|
|
144
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
145
|
+
let maxStatsTimestamp = 0;
|
|
146
|
+
let rttInMsSum = 0;
|
|
147
|
+
let jitterSum = 0;
|
|
148
|
+
let size = 0;
|
|
149
|
+
this.bitrate = 0;
|
|
150
|
+
this.rttInMs = undefined;
|
|
151
|
+
this.sendingBitrate = 0;
|
|
152
|
+
this.deltaLostPackets = 0;
|
|
153
|
+
this.deltaSentPackets = 0;
|
|
154
|
+
this.deltaSentBytes = 0;
|
|
155
|
+
this.deltaSentFrames = 0;
|
|
156
|
+
this.deltaEncodedFrames = 0;
|
|
157
|
+
const highestLayer = { ssrc: 0, bitrate: -1 };
|
|
158
|
+
for (const [ssrc, stats] of this._stats) {
|
|
159
|
+
if (stats.statsTimestamp <= this._lastMaxStatsTimestamp)
|
|
160
|
+
continue;
|
|
161
|
+
this.deltaLostPackets += (_a = stats.deltaLostPackets) !== null && _a !== void 0 ? _a : 0;
|
|
162
|
+
this.deltaSentPackets += (_b = stats.deltaSentPackets) !== null && _b !== void 0 ? _b : 0;
|
|
163
|
+
this.deltaSentBytes += (_c = stats.deltaSentBytes) !== null && _c !== void 0 ? _c : 0;
|
|
164
|
+
this.deltaSentFrames += (_d = stats.deltaSentFrames) !== null && _d !== void 0 ? _d : 0;
|
|
165
|
+
this.deltaEncodedFrames += (_e = stats.deltaEncodedFrames) !== null && _e !== void 0 ? _e : 0;
|
|
166
|
+
this.bitrate += stats.bitrate;
|
|
167
|
+
maxStatsTimestamp = Math.max(maxStatsTimestamp, stats.statsTimestamp);
|
|
168
|
+
rttInMsSum += (_f = stats.rttInMs) !== null && _f !== void 0 ? _f : 0;
|
|
169
|
+
jitterSum += (_g = stats.jitter) !== null && _g !== void 0 ? _g : 0;
|
|
170
|
+
++size;
|
|
171
|
+
if (stats.bitrate > highestLayer.bitrate) {
|
|
172
|
+
highestLayer.ssrc = ssrc;
|
|
173
|
+
highestLayer.bitrate = stats.bitrate;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
const now = Date.now();
|
|
177
|
+
if (this._lastUpdateMetrics) {
|
|
178
|
+
this.sendingBitrate = (this.deltaSentBytes * 8) / ((now - this._lastUpdateMetrics) / 1000);
|
|
179
|
+
}
|
|
180
|
+
this._lastUpdateMetrics = now;
|
|
181
|
+
this.highestLayer = this._stats.get(highestLayer.ssrc);
|
|
182
|
+
this.totalLostPackets += this.deltaLostPackets;
|
|
183
|
+
this.totalSentPackets += this.deltaSentPackets;
|
|
184
|
+
this.totalSentBytes += this.deltaSentBytes;
|
|
185
|
+
this.totalSentFrames += this.deltaSentFrames;
|
|
186
|
+
this.rttInMs = rttInMsSum / Math.max(size, 1);
|
|
187
|
+
this.jitter = jitterSum / Math.max(size, 1);
|
|
188
|
+
this._lastMaxStatsTimestamp = maxStatsTimestamp;
|
|
189
|
+
this._updateQualityScore(maxStatsTimestamp);
|
|
190
|
+
}
|
|
191
|
+
_updateQualityScore(timestamp) {
|
|
192
|
+
const newIssues = this.ωpendingIssuesForScores;
|
|
193
|
+
const score = (0, CalculatedScore_1.calculateBaseVideoScore)(this, newIssues);
|
|
194
|
+
if (0 < newIssues.length) {
|
|
195
|
+
this.ωpendingIssuesForScores = [];
|
|
196
|
+
}
|
|
197
|
+
if (!score)
|
|
198
|
+
return (this.score = undefined);
|
|
199
|
+
score.timestamp = timestamp;
|
|
200
|
+
this.score = score;
|
|
201
|
+
this.emit('score', this.score);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
exports.ObservedOutboundVideoTrack = ObservedOutboundVideoTrack;
|
|
@@ -2,12 +2,16 @@
|
|
|
2
2
|
import { EventEmitter } from 'events';
|
|
3
3
|
import { PeerConnectionTransport } from '@observertc/sample-schemas-js';
|
|
4
4
|
import { ObservedClient } from './ObservedClient';
|
|
5
|
-
import { ObservedInboundTrack, ObservedInboundTrackModel } from './ObservedInboundTrack';
|
|
6
|
-
import { ObservedOutboundTrack, ObservedOutboundTrackModel } from './ObservedOutboundTrack';
|
|
7
5
|
import { CallEventReport } from '@observertc/report-schemas-js';
|
|
8
6
|
import { ObservedICE } from './ObservedICE';
|
|
9
7
|
import { ObservedDataChannel } from './ObservedDataChannel';
|
|
10
8
|
import { PartialBy } from './common/utils';
|
|
9
|
+
import { ObservedInboundAudioTrack, ObservedInboundAudioTrackModel } from './ObservedInboundAudioTrack';
|
|
10
|
+
import { ObservedInboundVideoTrack, ObservedInboundVideoTrackModel } from './ObservedInboundVideoTrack';
|
|
11
|
+
import { ObservedOutboundAudioTrack, ObservedOutboundAudioTrackModel } from './ObservedOutboundAudioTrack';
|
|
12
|
+
import { ObservedOutboundVideoTrack, ObservedOutboundVideoTrackModel } from './ObservedOutboundVideoTrack';
|
|
13
|
+
import { CalculatedScore } from './common/CalculatedScore';
|
|
14
|
+
import { ClientIssue } from './monitors/CallSummary';
|
|
11
15
|
export type ObservedPeerConnectionEvents = {
|
|
12
16
|
update: [
|
|
13
17
|
{
|
|
@@ -15,10 +19,11 @@ export type ObservedPeerConnectionEvents = {
|
|
|
15
19
|
}
|
|
16
20
|
];
|
|
17
21
|
close: [];
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
+
score: [CalculatedScore];
|
|
23
|
+
newinboudaudiotrack: [ObservedInboundAudioTrack];
|
|
24
|
+
newinboudvideotrack: [ObservedInboundVideoTrack];
|
|
25
|
+
newoutboundaudiotrack: [ObservedOutboundAudioTrack];
|
|
26
|
+
newoutboundvideotrack: [ObservedOutboundVideoTrack];
|
|
22
27
|
newdatachannel: [ObservedDataChannel];
|
|
23
28
|
};
|
|
24
29
|
export type ObservedPeerConnectionModel = {
|
|
@@ -38,6 +43,9 @@ export declare class ObservedPeerConnection extends EventEmitter {
|
|
|
38
43
|
readonly created: number;
|
|
39
44
|
visited: boolean;
|
|
40
45
|
private _elapsedTimeSinceLastUpdate?;
|
|
46
|
+
private _statsTimestamp?;
|
|
47
|
+
ωpendingIssuesForScores: ClientIssue[];
|
|
48
|
+
score?: CalculatedScore;
|
|
41
49
|
totalInboundPacketsLost: number;
|
|
42
50
|
totalInboundPacketsReceived: number;
|
|
43
51
|
totalOutboundPacketsSent: number;
|
|
@@ -71,6 +79,7 @@ export declare class ObservedPeerConnection extends EventEmitter {
|
|
|
71
79
|
receivingAudioBitrate: number;
|
|
72
80
|
receivingVideoBitrate: number;
|
|
73
81
|
avgRttInMs?: number;
|
|
82
|
+
avgJitter?: number;
|
|
74
83
|
private _closed;
|
|
75
84
|
private _updated;
|
|
76
85
|
private _sample?;
|
|
@@ -96,10 +105,10 @@ export declare class ObservedPeerConnection extends EventEmitter {
|
|
|
96
105
|
get reports(): import("./ReportsCollector").ReportsCollector;
|
|
97
106
|
get stats(): ObservedPeerConnectionStats | undefined;
|
|
98
107
|
get updated(): number;
|
|
99
|
-
get inboundAudioTracks(): ReadonlyMap<string,
|
|
100
|
-
get inboundVideoTracks(): ReadonlyMap<string,
|
|
101
|
-
get outboundAudioTracks(): ReadonlyMap<string,
|
|
102
|
-
get outboundVideoTracks(): ReadonlyMap<string,
|
|
108
|
+
get inboundAudioTracks(): ReadonlyMap<string, ObservedInboundAudioTrack>;
|
|
109
|
+
get inboundVideoTracks(): ReadonlyMap<string, ObservedInboundVideoTrack>;
|
|
110
|
+
get outboundAudioTracks(): ReadonlyMap<string, ObservedOutboundAudioTrack>;
|
|
111
|
+
get outboundVideoTracks(): ReadonlyMap<string, ObservedOutboundVideoTrack>;
|
|
103
112
|
get dataChannels(): ReadonlyMap<number, ObservedDataChannel>;
|
|
104
113
|
get uptimeInMs(): number;
|
|
105
114
|
get marker(): string | undefined;
|
|
@@ -107,14 +116,15 @@ export declare class ObservedPeerConnection extends EventEmitter {
|
|
|
107
116
|
addEventReport(params: PartialBy<Omit<CallEventReport, 'serviceId' | 'roomId' | 'callId' | 'clientId' | 'userId' | 'peerConnectionId' | 'marker'>, 'timestamp'>): void;
|
|
108
117
|
get closed(): boolean;
|
|
109
118
|
close(): void;
|
|
110
|
-
getTrack(trackId: string):
|
|
119
|
+
getTrack(trackId: string): ObservedInboundAudioTrack | ObservedInboundVideoTrack | ObservedOutboundAudioTrack | ObservedOutboundVideoTrack | undefined;
|
|
111
120
|
resetMetrics(): void;
|
|
112
|
-
updateMetrics(): void;
|
|
113
121
|
update(sample: PeerConnectionTransport, timestamp: number): void;
|
|
114
|
-
createInboundAudioTrack(config:
|
|
115
|
-
createInboundVideoTrack(config:
|
|
116
|
-
createOutboundAudioTrack(config:
|
|
117
|
-
createOutboundVideoTrack(config:
|
|
122
|
+
createInboundAudioTrack(config: ObservedInboundAudioTrackModel): ObservedInboundAudioTrack;
|
|
123
|
+
createInboundVideoTrack(config: ObservedInboundVideoTrackModel): ObservedInboundVideoTrack;
|
|
124
|
+
createOutboundAudioTrack(config: ObservedOutboundAudioTrackModel): ObservedOutboundAudioTrack;
|
|
125
|
+
createOutboundVideoTrack(config: ObservedOutboundVideoTrackModel): ObservedOutboundVideoTrack;
|
|
118
126
|
createDataChannel(channelId: number): ObservedDataChannel;
|
|
127
|
+
updateMetrics(): void;
|
|
128
|
+
private _updateQualityScore;
|
|
119
129
|
}
|
|
120
130
|
//# sourceMappingURL=ObservedPeerConnection.d.ts.map
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"ObservedPeerConnection.d.ts","sourceRoot":"","sources":["../src/ObservedPeerConnection.ts"],"names":[],"mappings":"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"}
|