@observertc/observer-js 0.40.31 → 0.40.32
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.
|
@@ -54,6 +54,7 @@ export declare class ObservedOutboundTrack<Kind extends MediaKind> extends Event
|
|
|
54
54
|
deltaSentBytes: number;
|
|
55
55
|
deltaSentFrames: number;
|
|
56
56
|
deltaEncodedFrames: number;
|
|
57
|
+
sendingBitrate: number;
|
|
57
58
|
private readonly _stats;
|
|
58
59
|
private _lastMaxStatsTimestamp;
|
|
59
60
|
private _closed;
|
|
@@ -76,6 +77,8 @@ export declare class ObservedOutboundTrack<Kind extends MediaKind> extends Event
|
|
|
76
77
|
get closed(): boolean;
|
|
77
78
|
close(): void;
|
|
78
79
|
connectInboundTrack(track: ObservedInboundTrack<Kind>): void;
|
|
80
|
+
private _lastUpdateMetrics?;
|
|
79
81
|
updateMetrics(): void;
|
|
82
|
+
private _assignSfuStreamId;
|
|
80
83
|
}
|
|
81
84
|
//# sourceMappingURL=ObservedOutboundTrack.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedOutboundTrack.d.ts","sourceRoot":"","sources":["../src/ObservedOutboundTrack.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,MAAM,0BAA0B,CAAC,CAAC,SAAS,SAAS,IAAI;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,CAAC,CAAC;IACR,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACzC,wBAAwB,EAAE,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,EAAE;QAAC;YACR,eAAe,EAAE,MAAM,CAAC;SACxB;KAAC,CAAC;IACH,KAAK,EAAE,EAAE,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,gCAAgC,CAAC,CAAC,SAAS,SAAS,IAAI,CAAC,SAAS,OAAO,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;AAEhI,MAAM,MAAM,0BAA0B,CAAC,CAAC,SAAS,SAAS,IAAI,gCAAgC,CAAC,CAAC,CAAC,GAAG;IACnG,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,cAAc,EAAE,MAAM,CAAC;CACvB,CAAC;AAMF,MAAM,CAAC,OAAO,WAAW,qBAAqB,CAAC,IAAI,SAAS,SAAS;IACpE,EAAE,CAAC,CAAC,SAAS,MAAM,2BAA2B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,2BAA2B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC7H,GAAG,CAAC,CAAC,SAAS,MAAM,2BAA2B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,2BAA2B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC9H,IAAI,CAAC,CAAC,SAAS,MAAM,2BAA2B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,2BAA2B,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC/H,IAAI,CAAC,CAAC,SAAS,MAAM,2BAA2B,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,2BAA2B,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAC9G,MAAM,CAAC,MAAM,EAAE,gCAAgC,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAChF;AAED,qBAAa,qBAAqB,CAAC,IAAI,SAAS,SAAS,CAAE,SAAQ,YAAY;
|
|
1
|
+
{"version":3,"file":"ObservedOutboundTrack.d.ts","sourceRoot":"","sources":["../src/ObservedOutboundTrack.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,12 +19,15 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
19
19
|
this.deltaSentBytes = 0;
|
|
20
20
|
this.deltaSentFrames = 0;
|
|
21
21
|
this.deltaEncodedFrames = 0;
|
|
22
|
+
this.sendingBitrate = 0;
|
|
22
23
|
this._stats = new Map();
|
|
23
24
|
this._lastMaxStatsTimestamp = 0;
|
|
24
25
|
this._closed = false;
|
|
25
26
|
this._updated = Date.now();
|
|
26
27
|
this._remoteInboundTracks = new Map();
|
|
27
28
|
this.setMaxListeners(Infinity);
|
|
29
|
+
if (this._model.sfuStreamId)
|
|
30
|
+
this._assignSfuStreamId(this._model.sfuStreamId);
|
|
28
31
|
}
|
|
29
32
|
get serviceId() {
|
|
30
33
|
return this.peerConnection.serviceId;
|
|
@@ -142,19 +145,7 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
142
145
|
// this.deltaSentBytes = [ ...this._stats.values() ].reduce((acc, stat) => acc + stat.deltaSentBytes, 0);
|
|
143
146
|
// setting up sfu connection as it is not always available at the first sample
|
|
144
147
|
if (sample.sfuStreamId && !this._model.sfuStreamId) {
|
|
145
|
-
this.
|
|
146
|
-
this.once('close', () => {
|
|
147
|
-
if (!this._model.sfuStreamId)
|
|
148
|
-
return;
|
|
149
|
-
if (this.kind === 'audio')
|
|
150
|
-
this.peerConnection.client.call.sfuStreamIdToOutboundAudioTrack.delete(this._model.sfuStreamId);
|
|
151
|
-
else if (this.kind === 'video')
|
|
152
|
-
this.peerConnection.client.call.sfuStreamIdToOutboundVideoTrack.delete(this._model.sfuStreamId);
|
|
153
|
-
});
|
|
154
|
-
if (this.kind === 'audio')
|
|
155
|
-
this.peerConnection.client.call.sfuStreamIdToOutboundAudioTrack.set(this._model.sfuStreamId, this);
|
|
156
|
-
else if (this.kind === 'video')
|
|
157
|
-
this.peerConnection.client.call.sfuStreamIdToOutboundVideoTrack.set(this._model.sfuStreamId, this);
|
|
148
|
+
this._assignSfuStreamId(sample.sfuStreamId);
|
|
158
149
|
}
|
|
159
150
|
this.visited = true;
|
|
160
151
|
this._updated = now;
|
|
@@ -178,6 +169,7 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
178
169
|
let size = 0;
|
|
179
170
|
this.bitrate = 0;
|
|
180
171
|
this.rttInMs = undefined;
|
|
172
|
+
this.sendingBitrate = 0;
|
|
181
173
|
this.deltaLostPackets = 0;
|
|
182
174
|
this.deltaSentPackets = 0;
|
|
183
175
|
this.deltaSentBytes = 0;
|
|
@@ -196,6 +188,11 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
196
188
|
rttInMsSum += (_f = stats.rttInMs) !== null && _f !== void 0 ? _f : 0;
|
|
197
189
|
++size;
|
|
198
190
|
}
|
|
191
|
+
const now = Date.now();
|
|
192
|
+
if (this._lastUpdateMetrics) {
|
|
193
|
+
this.sendingBitrate = (this.deltaSentBytes * 8) / ((now - this._lastUpdateMetrics) / 1000);
|
|
194
|
+
}
|
|
195
|
+
this._lastUpdateMetrics = now;
|
|
199
196
|
this.totalLostPackets += this.deltaLostPackets;
|
|
200
197
|
this.totalSentPackets += this.deltaSentPackets;
|
|
201
198
|
this.totalSentBytes += this.deltaSentBytes;
|
|
@@ -203,5 +200,20 @@ class ObservedOutboundTrack extends events_1.EventEmitter {
|
|
|
203
200
|
this.rttInMs = rttInMsSum / Math.max(size, 1);
|
|
204
201
|
this._lastMaxStatsTimestamp = maxStatsTimestamp;
|
|
205
202
|
}
|
|
203
|
+
_assignSfuStreamId(sfuStreamId) {
|
|
204
|
+
this._model.sfuStreamId = sfuStreamId;
|
|
205
|
+
this.once('close', () => {
|
|
206
|
+
if (!this._model.sfuStreamId)
|
|
207
|
+
return;
|
|
208
|
+
if (this.kind === 'audio')
|
|
209
|
+
this.peerConnection.client.call.sfuStreamIdToOutboundAudioTrack.delete(this._model.sfuStreamId);
|
|
210
|
+
else if (this.kind === 'video')
|
|
211
|
+
this.peerConnection.client.call.sfuStreamIdToOutboundVideoTrack.delete(this._model.sfuStreamId);
|
|
212
|
+
});
|
|
213
|
+
if (this.kind === 'audio')
|
|
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);
|
|
217
|
+
}
|
|
206
218
|
}
|
|
207
219
|
exports.ObservedOutboundTrack = ObservedOutboundTrack;
|
package/package.json
CHANGED
|
@@ -66,6 +66,8 @@ export class ObservedOutboundTrack<Kind extends MediaKind> extends EventEmitter
|
|
|
66
66
|
public deltaSentFrames = 0;
|
|
67
67
|
public deltaEncodedFrames = 0;
|
|
68
68
|
|
|
69
|
+
public sendingBitrate = 0;
|
|
70
|
+
|
|
69
71
|
private readonly _stats = new Map<number, ObservedOutboundTrackStats<Kind>>();
|
|
70
72
|
private _lastMaxStatsTimestamp = 0;
|
|
71
73
|
|
|
@@ -79,6 +81,8 @@ export class ObservedOutboundTrack<Kind extends MediaKind> extends EventEmitter
|
|
|
79
81
|
) {
|
|
80
82
|
super();
|
|
81
83
|
this.setMaxListeners(Infinity);
|
|
84
|
+
|
|
85
|
+
if (this._model.sfuStreamId) this._assignSfuStreamId(this._model.sfuStreamId);
|
|
82
86
|
}
|
|
83
87
|
|
|
84
88
|
public get serviceId() {
|
|
@@ -241,16 +245,7 @@ export class ObservedOutboundTrack<Kind extends MediaKind> extends EventEmitter
|
|
|
241
245
|
|
|
242
246
|
// setting up sfu connection as it is not always available at the first sample
|
|
243
247
|
if (sample.sfuStreamId && !this._model.sfuStreamId) {
|
|
244
|
-
this.
|
|
245
|
-
|
|
246
|
-
this.once('close', () => {
|
|
247
|
-
if (!this._model.sfuStreamId) return;
|
|
248
|
-
if (this.kind === 'audio') this.peerConnection.client.call.sfuStreamIdToOutboundAudioTrack.delete(this._model.sfuStreamId);
|
|
249
|
-
else if (this.kind === 'video') this.peerConnection.client.call.sfuStreamIdToOutboundVideoTrack.delete(this._model.sfuStreamId);
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
if (this.kind === 'audio') this.peerConnection.client.call.sfuStreamIdToOutboundAudioTrack.set(this._model.sfuStreamId, this as ObservedOutboundTrack<'audio'>);
|
|
253
|
-
else if (this.kind === 'video') this.peerConnection.client.call.sfuStreamIdToOutboundVideoTrack.set(this._model.sfuStreamId, this as ObservedOutboundTrack<'video'>);
|
|
248
|
+
this._assignSfuStreamId(sample.sfuStreamId);
|
|
254
249
|
}
|
|
255
250
|
|
|
256
251
|
this.visited = true;
|
|
@@ -270,6 +265,7 @@ export class ObservedOutboundTrack<Kind extends MediaKind> extends EventEmitter
|
|
|
270
265
|
|
|
271
266
|
this._remoteInboundTracks.set(track.trackId, track);
|
|
272
267
|
}
|
|
268
|
+
private _lastUpdateMetrics?: number;
|
|
273
269
|
|
|
274
270
|
public updateMetrics() {
|
|
275
271
|
let maxStatsTimestamp = 0;
|
|
@@ -279,6 +275,7 @@ export class ObservedOutboundTrack<Kind extends MediaKind> extends EventEmitter
|
|
|
279
275
|
this.bitrate = 0;
|
|
280
276
|
this.rttInMs = undefined;
|
|
281
277
|
|
|
278
|
+
this.sendingBitrate = 0;
|
|
282
279
|
this.deltaLostPackets = 0;
|
|
283
280
|
this.deltaSentPackets = 0;
|
|
284
281
|
this.deltaSentBytes = 0;
|
|
@@ -300,6 +297,13 @@ export class ObservedOutboundTrack<Kind extends MediaKind> extends EventEmitter
|
|
|
300
297
|
rttInMsSum += stats.rttInMs ?? 0;
|
|
301
298
|
++size;
|
|
302
299
|
}
|
|
300
|
+
|
|
301
|
+
const now = Date.now();
|
|
302
|
+
|
|
303
|
+
if (this._lastUpdateMetrics) {
|
|
304
|
+
this.sendingBitrate = (this.deltaSentBytes * 8) / ((now - this._lastUpdateMetrics) / 1000);
|
|
305
|
+
}
|
|
306
|
+
this._lastUpdateMetrics = now;
|
|
303
307
|
|
|
304
308
|
this.totalLostPackets += this.deltaLostPackets;
|
|
305
309
|
this.totalSentPackets += this.deltaSentPackets;
|
|
@@ -310,4 +314,17 @@ export class ObservedOutboundTrack<Kind extends MediaKind> extends EventEmitter
|
|
|
310
314
|
|
|
311
315
|
this._lastMaxStatsTimestamp = maxStatsTimestamp;
|
|
312
316
|
}
|
|
317
|
+
|
|
318
|
+
private _assignSfuStreamId(sfuStreamId: string) {
|
|
319
|
+
this._model.sfuStreamId = sfuStreamId;
|
|
320
|
+
|
|
321
|
+
this.once('close', () => {
|
|
322
|
+
if (!this._model.sfuStreamId) return;
|
|
323
|
+
if (this.kind === 'audio') this.peerConnection.client.call.sfuStreamIdToOutboundAudioTrack.delete(this._model.sfuStreamId);
|
|
324
|
+
else if (this.kind === 'video') this.peerConnection.client.call.sfuStreamIdToOutboundVideoTrack.delete(this._model.sfuStreamId);
|
|
325
|
+
});
|
|
326
|
+
|
|
327
|
+
if (this.kind === 'audio') this.peerConnection.client.call.sfuStreamIdToOutboundAudioTrack.set(this._model.sfuStreamId, this as ObservedOutboundTrack<'audio'>);
|
|
328
|
+
else if (this.kind === 'video') this.peerConnection.client.call.sfuStreamIdToOutboundVideoTrack.set(this._model.sfuStreamId, this as ObservedOutboundTrack<'video'>);
|
|
329
|
+
}
|
|
313
330
|
}
|