@observertc/observer-js 1.0.1-57a1811.0 → 1.0.1-c3edea3.0
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 +0 -13
- package/lib/ObservedCall.d.ts.map +1 -1
- package/lib/ObservedCall.js +1 -37
- package/lib/ObservedClient.d.ts +7 -39
- package/lib/ObservedClient.d.ts.map +1 -1
- package/lib/ObservedClient.js +58 -110
- package/lib/ObservedDataChannel.d.ts +0 -4
- package/lib/ObservedDataChannel.d.ts.map +1 -1
- package/lib/ObservedDataChannel.js +0 -28
- package/lib/ObservedIceCandidatePair.d.ts +0 -4
- package/lib/ObservedIceCandidatePair.d.ts.map +1 -1
- package/lib/ObservedIceCandidatePair.js +0 -28
- package/lib/ObservedPeerConnection.d.ts +0 -10
- package/lib/ObservedPeerConnection.d.ts.map +1 -1
- package/lib/ObservedPeerConnection.js +9 -79
- package/lib/Observer.d.ts +21 -27
- package/lib/Observer.d.ts.map +1 -1
- package/lib/Observer.js +40 -59
- package/lib/index.d.ts +0 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -5
- package/lib/schema/{ClientEventTypes.d.ts → eventTypes.d.ts} +2 -2
- package/lib/schema/eventTypes.d.ts.map +1 -0
- package/lib/schema/eventTypes.js +38 -0
- package/lib/schema/{ClientMetaTypes.d.ts → metaTypes.d.ts} +2 -2
- package/lib/schema/metaTypes.d.ts.map +1 -0
- package/lib/schema/metaTypes.js +16 -0
- package/package.json +1 -1
- package/src/ObservedCall.ts +1 -44
- package/src/ObservedClient.ts +60 -125
- package/src/ObservedDataChannel.ts +0 -29
- package/src/ObservedIceCandidatePair.ts +0 -26
- package/src/ObservedPeerConnection.ts +10 -90
- package/src/Observer.ts +68 -81
- package/src/index.ts +0 -4
- package/src/schema/{ClientEventTypes.ts → eventTypes.ts} +1 -1
- package/src/schema/{ClientMetaTypes.ts → metaTypes.ts} +1 -1
- package/lib/ObservedTURN.d.ts +0 -31
- package/lib/ObservedTURN.d.ts.map +0 -1
- package/lib/ObservedTURN.js +0 -58
- package/lib/ObservedTurnServer.d.ts +0 -25
- package/lib/ObservedTurnServer.d.ts.map +0 -1
- package/lib/ObservedTurnServer.js +0 -59
- package/lib/schema/ClientEventTypes.d.ts.map +0 -1
- package/lib/schema/ClientEventTypes.js +0 -38
- package/lib/schema/ClientMetaTypes.d.ts.map +0 -1
- package/lib/schema/ClientMetaTypes.js +0 -16
- package/src/ObservedTURN.ts +0 -86
- package/src/ObservedTurnServer.ts +0 -72
package/src/Observer.ts
CHANGED
|
@@ -1,24 +1,21 @@
|
|
|
1
1
|
import { createLogger } from './common/logger';
|
|
2
|
+
import { Middleware, MiddlewareProcessor } from './common/Middleware';
|
|
2
3
|
import { ObservedCall, ObservedCallSettings } from './ObservedCall';
|
|
3
4
|
import { EventEmitter } from 'events';
|
|
4
|
-
import { ClientEvent, ClientMetaData, ClientIssue, ExtensionStat
|
|
5
|
+
import { ClientEvent, ClientMetaData, ClientIssue, ExtensionStat } from './schema/ClientSample';
|
|
5
6
|
import { ObservedClient } from './ObservedClient';
|
|
6
|
-
import { ObservedTURN } from './ObservedTURN';
|
|
7
7
|
|
|
8
8
|
const logger = createLogger('Observer');
|
|
9
9
|
|
|
10
10
|
export type ObserverEvents = {
|
|
11
|
-
'client-event': [ObservedClient, ClientEvent];
|
|
12
|
-
'call-updated': [ObservedCall],
|
|
13
|
-
'client-issue': [ObservedClient, ClientIssue],
|
|
14
|
-
'client-metadata': [ObservedClient, ClientMetaData],
|
|
15
|
-
'client-extension-stats': [ObservedClient, ExtensionStat],
|
|
16
11
|
'newcall': [ObservedCall],
|
|
17
12
|
'close': [],
|
|
18
13
|
}
|
|
19
14
|
|
|
20
|
-
export type
|
|
21
|
-
|
|
15
|
+
export type ProcessorInputContext<T> = {
|
|
16
|
+
call: ObservedCall;
|
|
17
|
+
client: ObservedClient;
|
|
18
|
+
data: T;
|
|
22
19
|
}
|
|
23
20
|
|
|
24
21
|
export declare interface Observer {
|
|
@@ -28,40 +25,21 @@ export declare interface Observer {
|
|
|
28
25
|
emit<U extends keyof ObserverEvents>(event: U, ...args: ObserverEvents[U]): boolean;
|
|
29
26
|
}
|
|
30
27
|
|
|
31
|
-
export type ObserverSummary = {
|
|
32
|
-
rttlt50: number;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
28
|
export class Observer extends EventEmitter {
|
|
36
|
-
public readonly
|
|
29
|
+
public readonly processors = {
|
|
30
|
+
events: new MiddlewareProcessor<ProcessorInputContext<ClientEvent>>(),
|
|
31
|
+
metaData: new MiddlewareProcessor<ProcessorInputContext<ClientMetaData>>(),
|
|
32
|
+
issues: new MiddlewareProcessor<ProcessorInputContext<ClientIssue>>(),
|
|
33
|
+
extensionStats: new MiddlewareProcessor<ProcessorInputContext<ExtensionStat>>(),
|
|
34
|
+
};
|
|
35
|
+
|
|
37
36
|
public readonly observedCalls = new Map<string, ObservedCall>();
|
|
38
|
-
public readonly config: ObserverConfig;
|
|
39
|
-
|
|
40
37
|
public closed = false;
|
|
41
38
|
|
|
42
|
-
public
|
|
43
|
-
|
|
44
|
-
public numberOfOutboundRtpStreams = 0;
|
|
45
|
-
public numberOfDataChannels = 0;
|
|
46
|
-
public numberOfPeerConnections = 0;
|
|
47
|
-
|
|
48
|
-
public get numberOfCalls() {
|
|
49
|
-
return this.observedCalls.size;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
private _timer?: ReturnType<typeof setInterval>;
|
|
53
|
-
|
|
54
|
-
public constructor(config: ObserverConfig = {
|
|
55
|
-
updateIntervalInMs: 10000,
|
|
56
|
-
}) {
|
|
39
|
+
public constructor(
|
|
40
|
+
) {
|
|
57
41
|
super();
|
|
58
42
|
this.setMaxListeners(Infinity);
|
|
59
|
-
this.config = config;
|
|
60
|
-
this.update = this.update.bind(this);
|
|
61
|
-
|
|
62
|
-
if (this.config.updateIntervalInMs) {
|
|
63
|
-
this._timer = setInterval(this.update.bind(this), this.config.updateIntervalInMs);
|
|
64
|
-
}
|
|
65
43
|
}
|
|
66
44
|
|
|
67
45
|
public getObservedCall<T extends Record<string, unknown> = Record<string, unknown>>(callId: string): ObservedCall<T> | undefined {
|
|
@@ -83,70 +61,79 @@ export class Observer extends EventEmitter {
|
|
|
83
61
|
|
|
84
62
|
observedCall.once('close', () => {
|
|
85
63
|
this.observedCalls.delete(observedCall.callId);
|
|
86
|
-
observedCall.off('update', this.update);
|
|
87
64
|
});
|
|
88
65
|
|
|
89
66
|
this.observedCalls.set(observedCall.callId, observedCall);
|
|
90
|
-
observedCall.on('update', this.update);
|
|
91
67
|
|
|
92
68
|
this.emit('newcall', observedCall);
|
|
93
69
|
|
|
94
70
|
return observedCall;
|
|
95
71
|
}
|
|
96
72
|
|
|
97
|
-
public
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
this
|
|
102
|
-
clearInterval(this._timer);
|
|
103
|
-
this._timer = undefined;
|
|
104
|
-
|
|
105
|
-
this.observedCalls.forEach((call) => call.close());
|
|
106
|
-
|
|
107
|
-
this.emit('close');
|
|
73
|
+
public addClientEventMiddleware(...middlewares: Middleware<ProcessorInputContext<ClientEvent>>[]): Observer {
|
|
74
|
+
|
|
75
|
+
this.processors.events.addMiddleware(...middlewares);
|
|
76
|
+
|
|
77
|
+
return this;
|
|
108
78
|
}
|
|
109
79
|
|
|
110
|
-
public
|
|
111
|
-
if (this.closed) return;
|
|
112
|
-
if (!sample.callId) return logger.warn('Received sample without callId. %o', sample);
|
|
113
|
-
if (!sample.clientId) return logger.warn('Received sample without clientId %o', sample);
|
|
80
|
+
public removeClientEventMiddleware(...middlewares: Middleware<ProcessorInputContext<ClientEvent>>[]): Observer {
|
|
114
81
|
|
|
115
|
-
|
|
82
|
+
this.processors.events.removeMiddleware(...middlewares);
|
|
116
83
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}
|
|
84
|
+
return this;
|
|
85
|
+
}
|
|
120
86
|
|
|
121
|
-
|
|
87
|
+
public addClientMetaDataMiddleware(...middlewares: Middleware<ProcessorInputContext<ClientMetaData>>[]): Observer {
|
|
122
88
|
|
|
123
|
-
|
|
124
|
-
return logger.warn(`Received sample for unknown client ${sample.clientId} in call ${sample.callId}. %o`, sample);
|
|
125
|
-
}
|
|
89
|
+
this.processors.metaData.addMiddleware(...middlewares);
|
|
126
90
|
|
|
127
|
-
|
|
91
|
+
return this;
|
|
128
92
|
}
|
|
129
93
|
|
|
130
|
-
public
|
|
131
|
-
if (this.closed) {
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
94
|
+
public removeClientMetaDataMiddleware(...middlewares: Middleware<ProcessorInputContext<ClientMetaData>>[]): Observer {
|
|
134
95
|
|
|
135
|
-
this.
|
|
136
|
-
this.numberOfOutboundRtpStreams = 0;
|
|
137
|
-
this.numberOfPeerConnections = 0;
|
|
138
|
-
this.numberOfDataChannels = 0;
|
|
139
|
-
this.numberOfClients = 0;
|
|
140
|
-
|
|
141
|
-
for (const call of this.observedCalls.values()) {
|
|
142
|
-
this.numberOfInboundRtpStreams += call.numberOfInboundRtpStreams;
|
|
143
|
-
this.numberOfOutboundRtpStreams += call.numberOfOutboundRtpStreams;
|
|
144
|
-
this.numberOfPeerConnections += call.numberOfPeerConnections;
|
|
145
|
-
this.numberOfDataChannels += call.numberOfDataChannels;
|
|
146
|
-
this.numberOfClients += call.numberOfClients;
|
|
147
|
-
}
|
|
96
|
+
this.processors.metaData.removeMiddleware(...middlewares);
|
|
148
97
|
|
|
149
|
-
this
|
|
98
|
+
return this;
|
|
150
99
|
}
|
|
151
100
|
|
|
101
|
+
public addClientIssueMiddleware(...middlewares: Middleware<ProcessorInputContext<ClientIssue>>[]): Observer {
|
|
102
|
+
|
|
103
|
+
this.processors.issues.addMiddleware(...middlewares);
|
|
104
|
+
|
|
105
|
+
return this;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
public removeClientIssueMiddleware(...middlewares: Middleware<ProcessorInputContext<ClientIssue>>[]): Observer {
|
|
109
|
+
|
|
110
|
+
this.processors.issues.removeMiddleware(...middlewares);
|
|
111
|
+
|
|
112
|
+
return this;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
public addExtensionStatMiddleware(...middlewares: Middleware<ProcessorInputContext<ExtensionStat>>[]): Observer {
|
|
116
|
+
|
|
117
|
+
this.processors.extensionStats.addMiddleware(...middlewares);
|
|
118
|
+
|
|
119
|
+
return this;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
public removeExtensionStatMiddleware(...middlewares: Middleware<ProcessorInputContext<ExtensionStat>>[]): Observer {
|
|
123
|
+
|
|
124
|
+
this.processors.extensionStats.removeMiddleware(...middlewares);
|
|
125
|
+
|
|
126
|
+
return this;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
public close() {
|
|
130
|
+
if (this.closed) {
|
|
131
|
+
return logger.debug('Attempted to close twice');
|
|
132
|
+
}
|
|
133
|
+
this.closed = true;
|
|
134
|
+
|
|
135
|
+
this.observedCalls.forEach((call) => call.close());
|
|
136
|
+
|
|
137
|
+
this.emit('close');
|
|
138
|
+
}
|
|
152
139
|
}
|
package/src/index.ts
CHANGED
|
@@ -19,9 +19,5 @@ export { ObservedIceCandidatePair } from './ObservedIceCandidatePair';
|
|
|
19
19
|
export { ObservedIceCandidate } from './ObservedIceCandidate';
|
|
20
20
|
export { ObservedIceTransport } from './ObservedIceTransport';
|
|
21
21
|
export { ObservedPeerConnectionTransport } from './ObservedPeerConnectionTransport';
|
|
22
|
-
export { ClientEventTypes } from './schema/ClientEventTypes';
|
|
23
|
-
export { ClientMetaTypes } from './schema/ClientMetaTypes';
|
|
24
|
-
export { ClientSample } from './schema/ClientSample';
|
|
25
|
-
export { ScoreCalculator } from './scores/ScoreCalculator';
|
|
26
22
|
|
|
27
23
|
export { Middleware } from './common/Middleware';
|
package/lib/ObservedTURN.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { EventEmitter } from 'stream';
|
|
3
|
-
import { ObservedPeerConnection } from './ObservedPeerConnection';
|
|
4
|
-
import { ObservedTurnServer } from './ObservedTurnServer';
|
|
5
|
-
export type ObservedTURNEventMap = {
|
|
6
|
-
'update': [ObservedTURN];
|
|
7
|
-
'close': [];
|
|
8
|
-
};
|
|
9
|
-
export declare interface ObservedTURN {
|
|
10
|
-
on<U extends keyof ObservedTURNEventMap>(event: U, listener: (...args: ObservedTURNEventMap[U]) => void): this;
|
|
11
|
-
off<U extends keyof ObservedTURNEventMap>(event: U, listener: (...args: ObservedTURNEventMap[U]) => void): this;
|
|
12
|
-
once<U extends keyof ObservedTURNEventMap>(event: U, listener: (...args: ObservedTURNEventMap[U]) => void): this;
|
|
13
|
-
emit<U extends keyof ObservedTURNEventMap>(event: U, ...args: ObservedTURNEventMap[U]): boolean;
|
|
14
|
-
}
|
|
15
|
-
export declare class ObservedTURN extends EventEmitter {
|
|
16
|
-
totalBytesSent: number;
|
|
17
|
-
totalBytesReceived: number;
|
|
18
|
-
totalPacketsSent: number;
|
|
19
|
-
totalPacketsReceived: number;
|
|
20
|
-
packetsSentPerSecond: number;
|
|
21
|
-
packetsReceivedPerSecond: number;
|
|
22
|
-
outboundBitrate: number;
|
|
23
|
-
inboundBitrate: number;
|
|
24
|
-
numberOfClients: number;
|
|
25
|
-
readonly servers: Map<string, ObservedTurnServer>;
|
|
26
|
-
constructor();
|
|
27
|
-
update(): void;
|
|
28
|
-
addPeerConnection(peerConnection: ObservedPeerConnection): ObservedTurnServer | undefined;
|
|
29
|
-
removePeerConnection(peerConnection: ObservedPeerConnection): void;
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=ObservedTURN.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedTURN.d.ts","sourceRoot":"","sources":["../src/ObservedTURN.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAK1D,MAAM,MAAM,oBAAoB,GAAG;IAClC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAC;IACzB,OAAO,EAAE,EAAE,CAAC;CACZ,CAAA;AAED,MAAM,CAAC,OAAO,WAAW,YAAY;IACpC,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;CAChG;AAED,qBAAa,YAAa,SAAQ,YAAY;IACtC,cAAc,SAAK;IACnB,kBAAkB,SAAK;IACvB,gBAAgB,SAAK;IACrB,oBAAoB,SAAK;IAEzB,oBAAoB,SAAK;IACzB,wBAAwB,SAAK;IAC7B,eAAe,SAAK;IACpB,cAAc,SAAK;IACnB,eAAe,SAAK;IAE3B,SAAgB,OAAO,kCAAyC;;IAOzD,MAAM;IAgBN,iBAAiB,CAAC,cAAc,EAAE,sBAAsB;IAyBxD,oBAAoB,CAAC,cAAc,EAAE,sBAAsB;CAMlE"}
|
package/lib/ObservedTURN.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ObservedTURN = void 0;
|
|
4
|
-
const stream_1 = require("stream");
|
|
5
|
-
const ObservedTurnServer_1 = require("./ObservedTurnServer");
|
|
6
|
-
const logger_1 = require("./common/logger");
|
|
7
|
-
const logger = (0, logger_1.createLogger)('ObservedTURN');
|
|
8
|
-
class ObservedTURN extends stream_1.EventEmitter {
|
|
9
|
-
totalBytesSent = 0;
|
|
10
|
-
totalBytesReceived = 0;
|
|
11
|
-
totalPacketsSent = 0;
|
|
12
|
-
totalPacketsReceived = 0;
|
|
13
|
-
packetsSentPerSecond = 0;
|
|
14
|
-
packetsReceivedPerSecond = 0;
|
|
15
|
-
outboundBitrate = 0;
|
|
16
|
-
inboundBitrate = 0;
|
|
17
|
-
numberOfClients = 0;
|
|
18
|
-
servers = new Map();
|
|
19
|
-
constructor() {
|
|
20
|
-
super();
|
|
21
|
-
}
|
|
22
|
-
update() {
|
|
23
|
-
const clientIds = new Set();
|
|
24
|
-
this.packetsReceivedPerSecond = 0;
|
|
25
|
-
this.packetsSentPerSecond = 0;
|
|
26
|
-
this.outboundBitrate = 0;
|
|
27
|
-
this.inboundBitrate = 0;
|
|
28
|
-
for (const server of this.servers.values()) {
|
|
29
|
-
server.update();
|
|
30
|
-
server.observedPeerConnections.forEach((pc) => clientIds.add(pc.client.clientId));
|
|
31
|
-
}
|
|
32
|
-
this.numberOfClients = clientIds.size;
|
|
33
|
-
}
|
|
34
|
-
addPeerConnection(peerConnection) {
|
|
35
|
-
const turnPairs = peerConnection.selectedIceCandidatePairs.filter((pair) => pair.getLocalCandidate()?.candidateType === 'relay' && pair.getRemoteCandidate()?.url?.startsWith('turn:'));
|
|
36
|
-
if (turnPairs.length !== 1) {
|
|
37
|
-
return (logger.warn(`Expected exactly one TURN pair, but found for peerconnection ${peerConnection.peerConnectionId}`, turnPairs.length), undefined);
|
|
38
|
-
}
|
|
39
|
-
const candidatePair = turnPairs[0];
|
|
40
|
-
const rawUrl = candidatePair.getRemoteCandidate()?.url;
|
|
41
|
-
if (!rawUrl) {
|
|
42
|
-
return (logger.warn(`No remote candidate URL found for peerconnection ${peerConnection.peerConnectionId}`), undefined);
|
|
43
|
-
}
|
|
44
|
-
const turnUrl = new URL(rawUrl);
|
|
45
|
-
const turnServerUrl = `${turnUrl.protocol}//${turnUrl.hostname}:${turnUrl.port}`;
|
|
46
|
-
let turnServer = this.servers.get(turnServerUrl);
|
|
47
|
-
if (!turnServer) {
|
|
48
|
-
turnServer = new ObservedTurnServer_1.ObservedTurnServer(turnServerUrl, this);
|
|
49
|
-
}
|
|
50
|
-
return turnServer;
|
|
51
|
-
}
|
|
52
|
-
removePeerConnection(peerConnection) {
|
|
53
|
-
for (const turnServer of this.servers.values()) {
|
|
54
|
-
turnServer.observedPeerConnections.delete(peerConnection.peerConnectionId);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
exports.ObservedTURN = ObservedTURN;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { ObservedIceCandidatePair } from './ObservedIceCandidatePair';
|
|
2
|
-
import { ObservedPeerConnection } from './ObservedPeerConnection';
|
|
3
|
-
import { ObservedTURN } from './ObservedTURN';
|
|
4
|
-
export declare class ObservedTurnServer {
|
|
5
|
-
readonly url: string;
|
|
6
|
-
readonly observedTURN: ObservedTURN;
|
|
7
|
-
totalBytesSent: number;
|
|
8
|
-
totalBytesReceived: number;
|
|
9
|
-
totalPacketsSent: number;
|
|
10
|
-
totalPacketsReceived: number;
|
|
11
|
-
packetsSentPerSecond: number;
|
|
12
|
-
packetsReceivedPerSecond: number;
|
|
13
|
-
outboundBitrate: number;
|
|
14
|
-
inboundBitrate: number;
|
|
15
|
-
deltaBytesSent: number;
|
|
16
|
-
deltaBytesReceived: number;
|
|
17
|
-
deltaPacketsSent: number;
|
|
18
|
-
deltaPacketsReceived: number;
|
|
19
|
-
readonly observedPeerConnections: Map<string, ObservedPeerConnection>;
|
|
20
|
-
updated: number;
|
|
21
|
-
constructor(url: string, observedTURN: ObservedTURN);
|
|
22
|
-
updateTurnUsage(...selectedcandidatepairs: ObservedIceCandidatePair[]): void;
|
|
23
|
-
update(): void;
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=ObservedTurnServer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ObservedTurnServer.d.ts","sourceRoot":"","sources":["../src/ObservedTurnServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBAAa,kBAAkB;aAqBb,GAAG,EAAE,MAAM;aACX,YAAY,EAAE,YAAY;IArBpC,cAAc,SAAK;IACnB,kBAAkB,SAAK;IACvB,gBAAgB,SAAK;IACrB,oBAAoB,SAAK;IAEzB,oBAAoB,SAAK;IACzB,wBAAwB,SAAK;IAC7B,eAAe,SAAK;IACpB,cAAc,SAAK;IAEnB,cAAc,SAAK;IACnB,kBAAkB,SAAK;IACvB,gBAAgB,SAAK;IACrB,oBAAoB,SAAK;IAEhC,SAAgB,uBAAuB,sCAA6C;IAE7E,OAAO,SAAc;gBAGX,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,YAAY;IAKpC,eAAe,CAAC,GAAG,sBAAsB,EAAE,wBAAwB,EAAE;IASrE,MAAM;CA+Bb"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ObservedTurnServer = void 0;
|
|
4
|
-
class ObservedTurnServer {
|
|
5
|
-
url;
|
|
6
|
-
observedTURN;
|
|
7
|
-
totalBytesSent = 0;
|
|
8
|
-
totalBytesReceived = 0;
|
|
9
|
-
totalPacketsSent = 0;
|
|
10
|
-
totalPacketsReceived = 0;
|
|
11
|
-
packetsSentPerSecond = 0;
|
|
12
|
-
packetsReceivedPerSecond = 0;
|
|
13
|
-
outboundBitrate = 0;
|
|
14
|
-
inboundBitrate = 0;
|
|
15
|
-
deltaBytesSent = 0;
|
|
16
|
-
deltaBytesReceived = 0;
|
|
17
|
-
deltaPacketsSent = 0;
|
|
18
|
-
deltaPacketsReceived = 0;
|
|
19
|
-
observedPeerConnections = new Map();
|
|
20
|
-
updated = Date.now();
|
|
21
|
-
constructor(url, observedTURN) {
|
|
22
|
-
this.url = url;
|
|
23
|
-
this.observedTURN = observedTURN;
|
|
24
|
-
}
|
|
25
|
-
updateTurnUsage(...selectedcandidatepairs) {
|
|
26
|
-
for (const selectedcandidatepair of selectedcandidatepairs) {
|
|
27
|
-
this.deltaBytesReceived += selectedcandidatepair.deltaBytesReceived;
|
|
28
|
-
this.deltaBytesSent += selectedcandidatepair.deltaBytesSent;
|
|
29
|
-
this.deltaPacketsReceived += selectedcandidatepair.deltaPacketsReceived;
|
|
30
|
-
this.deltaPacketsSent += selectedcandidatepair.deltaPacketsSent;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
update() {
|
|
34
|
-
const now = Date.now();
|
|
35
|
-
const deltaInS = (now - this.updated) / 1000;
|
|
36
|
-
this.packetsSentPerSecond = this.deltaPacketsSent / deltaInS;
|
|
37
|
-
this.packetsReceivedPerSecond = this.deltaPacketsReceived / deltaInS;
|
|
38
|
-
this.outboundBitrate = (this.deltaBytesReceived * 8) / deltaInS;
|
|
39
|
-
this.inboundBitrate = (this.deltaBytesSent * 8) / deltaInS;
|
|
40
|
-
this.totalBytesSent += this.deltaBytesSent;
|
|
41
|
-
this.totalBytesReceived += this.deltaBytesReceived;
|
|
42
|
-
this.totalPacketsSent += this.deltaPacketsSent;
|
|
43
|
-
this.totalPacketsReceived += this.deltaPacketsReceived;
|
|
44
|
-
this.observedTURN.totalBytesSent += this.deltaBytesSent;
|
|
45
|
-
this.observedTURN.totalBytesReceived += this.deltaBytesReceived;
|
|
46
|
-
this.observedTURN.totalPacketsSent += this.deltaPacketsSent;
|
|
47
|
-
this.observedTURN.totalPacketsReceived += this.deltaPacketsReceived;
|
|
48
|
-
this.observedTURN.inboundBitrate += this.inboundBitrate;
|
|
49
|
-
this.observedTURN.outboundBitrate += this.outboundBitrate;
|
|
50
|
-
this.observedTURN.packetsReceivedPerSecond += this.packetsReceivedPerSecond;
|
|
51
|
-
this.observedTURN.packetsSentPerSecond += this.packetsSentPerSecond;
|
|
52
|
-
this.deltaBytesSent = 0;
|
|
53
|
-
this.deltaBytesReceived = 0;
|
|
54
|
-
this.deltaPacketsSent = 0;
|
|
55
|
-
this.deltaPacketsReceived = 0;
|
|
56
|
-
this.updated = now;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
exports.ObservedTurnServer = ObservedTurnServer;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ClientEventTypes.d.ts","sourceRoot":"","sources":["../../src/schema/ClientEventTypes.ts"],"names":[],"mappings":"AAEA,oBAAY,gBAAgB;IAC3B,YAAY,iBAAiB;IAC7B,UAAU,eAAe;IACzB,aAAa,kBAAkB;IAC/B,WAAW,gBAAgB;IAC3B,sBAAsB,2BAA2B;IACjD,sBAAsB,2BAA2B;IACjD,iBAAiB,sBAAsB;IACvC,mBAAmB,wBAAwB;IAC3C,mBAAmB,wBAAwB;IAC3C,iBAAiB,sBAAsB;IACvC,mBAAmB,wBAAwB;IAC3C,2BAA2B,gCAAgC;IAC3D,6BAA6B,kCAAkC;IAC/D,4BAA4B,iCAAiC;IAC7D,iBAAiB,sBAAsB;IACvC,mBAAmB,wBAAwB;IAC3C,kBAAkB,uBAAuB;IACzC,kBAAkB,uBAAuB;IACzC,sBAAsB,2BAA2B;IACjD,0BAA0B,+BAA+B;IACzD,2BAA2B,gCAAgC;IAC3D,aAAa,kBAAkB;IAG/B,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,qBAAqB,0BAA0B;IAC/C,oBAAoB,yBAAyB;IAC7C,qBAAqB,0BAA0B;IAC/C,oBAAoB,yBAAyB;CAC7C"}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/* eslint-disable no-shadow */
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.ClientEventTypes = void 0;
|
|
5
|
-
var ClientEventTypes;
|
|
6
|
-
(function (ClientEventTypes) {
|
|
7
|
-
ClientEventTypes["CALL_STARTED"] = "CALL_STARTED";
|
|
8
|
-
ClientEventTypes["CALL_ENDED"] = "CALL_ENDED";
|
|
9
|
-
ClientEventTypes["CLIENT_JOINED"] = "CLIENT_JOINED";
|
|
10
|
-
ClientEventTypes["CLIENT_LEFT"] = "CLIENT_LEFT";
|
|
11
|
-
ClientEventTypes["PEER_CONNECTION_OPENED"] = "PEER_CONNECTION_OPENED";
|
|
12
|
-
ClientEventTypes["PEER_CONNECTION_CLOSED"] = "PEER_CONNECTION_CLOSED";
|
|
13
|
-
ClientEventTypes["MEDIA_TRACK_ADDED"] = "MEDIA_TRACK_ADDED";
|
|
14
|
-
ClientEventTypes["MEDIA_TRACK_REMOVED"] = "MEDIA_TRACK_REMOVED";
|
|
15
|
-
ClientEventTypes["MEDIA_TRACK_RESUMED"] = "MEDIA_TRACK_RESUMED";
|
|
16
|
-
ClientEventTypes["MEDIA_TRACK_MUTED"] = "MEDIA_TRACK_MUTED";
|
|
17
|
-
ClientEventTypes["MEDIA_TRACK_UNMUTED"] = "MEDIA_TRACK_UNMUTED";
|
|
18
|
-
ClientEventTypes["ICE_GATHERING_STATE_CHANGED"] = "ICE_GATHERING_STATE_CHANGED";
|
|
19
|
-
ClientEventTypes["PEER_CONNECTION_STATE_CHANGED"] = "PEER_CONNECTION_STATE_CHANGED";
|
|
20
|
-
ClientEventTypes["ICE_CONNECTION_STATE_CHANGED"] = "ICE_CONNECTION_STATE_CHANGED";
|
|
21
|
-
ClientEventTypes["DATA_CHANNEL_OPEN"] = "DATA_CHANNEL_OPEN";
|
|
22
|
-
ClientEventTypes["DATA_CHANNEL_CLOSED"] = "DATA_CHANNEL_CLOSED";
|
|
23
|
-
ClientEventTypes["DATA_CHANNEL_ERROR"] = "DATA_CHANNEL_ERROR";
|
|
24
|
-
ClientEventTypes["NEGOTIATION_NEEDED"] = "NEGOTIATION_NEEDED";
|
|
25
|
-
ClientEventTypes["SIGNALING_STATE_CHANGE"] = "SIGNALING_STATE_CHANGE";
|
|
26
|
-
ClientEventTypes["ICE_GATHERING_STATE_CHANGE"] = "ICE_GATHERING_STATE_CHANGE";
|
|
27
|
-
ClientEventTypes["ICE_CONNECTION_STATE_CHANGE"] = "ICE_CONNECTION_STATE_CHANGE";
|
|
28
|
-
ClientEventTypes["ICE_CANDIDATE"] = "ICE_CANDIDATE";
|
|
29
|
-
// mediasoup events
|
|
30
|
-
ClientEventTypes["PRODUCER_ADDED"] = "PRODUCER_ADDED";
|
|
31
|
-
ClientEventTypes["PRODUCER_REMOVED"] = "PRODUCER_REMOVED";
|
|
32
|
-
ClientEventTypes["CONSUMER_ADDED"] = "CONSUMER_ADDED";
|
|
33
|
-
ClientEventTypes["CONSUMER_REMOVED"] = "CONSUMER_REMOVED";
|
|
34
|
-
ClientEventTypes["DATA_PRODUCER_CREATED"] = "DATA_PRODUCER_CREATED";
|
|
35
|
-
ClientEventTypes["DATA_PRODUCER_CLOSED"] = "DATA_PRODUCER_CLOSED";
|
|
36
|
-
ClientEventTypes["DATA_CONSUMER_CREATED"] = "DATA_CONSUMER_CREATED";
|
|
37
|
-
ClientEventTypes["DATA_CONSUMER_CLOSED"] = "DATA_CONSUMER_CLOSED";
|
|
38
|
-
})(ClientEventTypes = exports.ClientEventTypes || (exports.ClientEventTypes = {}));
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ClientMetaTypes.d.ts","sourceRoot":"","sources":["../../src/schema/ClientMetaTypes.ts"],"names":[],"mappings":"AAEA,oBAAY,eAAe;IAC1B,gBAAgB,qBAAqB;IACrC,YAAY,iBAAiB;IAC7B,mCAAmC,wCAAwC;IAC3E,gBAAgB,qBAAqB;IACrC,SAAS,cAAc;IAEvB,gBAAgB,qBAAqB;IACrC,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,OAAO,YAAY;CACnB;AAED,MAAM,MAAM,eAAe,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB,CAAA;AAED,MAAM,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB,CAAA"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/* eslint-disable no-shadow */
|
|
3
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.ClientMetaTypes = void 0;
|
|
5
|
-
var ClientMetaTypes;
|
|
6
|
-
(function (ClientMetaTypes) {
|
|
7
|
-
ClientMetaTypes["MEDIA_CONSTRAINT"] = "MEDIA_CONSTRAINT";
|
|
8
|
-
ClientMetaTypes["MEDIA_DEVICE"] = "MEDIA_DEVICE";
|
|
9
|
-
ClientMetaTypes["MEDIA_DEVICES_SUPPORTED_CONSTRAINTS"] = "MEDIA_DEVICES_SUPPORTED_CONSTRAINTS";
|
|
10
|
-
ClientMetaTypes["USER_MEDIA_ERROR"] = "USER_MEDIA_ERROR";
|
|
11
|
-
ClientMetaTypes["LOCAL_SDP"] = "LOCAL_SDP";
|
|
12
|
-
ClientMetaTypes["OPERATION_SYSTEM"] = "OPERATION_SYSTEM";
|
|
13
|
-
ClientMetaTypes["ENGINE"] = "ENGINE";
|
|
14
|
-
ClientMetaTypes["PLATFORM"] = "PLATFORM";
|
|
15
|
-
ClientMetaTypes["BROWSER"] = "BROWSER";
|
|
16
|
-
})(ClientMetaTypes = exports.ClientMetaTypes || (exports.ClientMetaTypes = {}));
|
package/src/ObservedTURN.ts
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from 'stream';
|
|
2
|
-
import { ObservedPeerConnection } from './ObservedPeerConnection';
|
|
3
|
-
import { ObservedTurnServer } from './ObservedTurnServer';
|
|
4
|
-
import { createLogger } from './common/logger';
|
|
5
|
-
|
|
6
|
-
const logger = createLogger('ObservedTURN');
|
|
7
|
-
|
|
8
|
-
export type ObservedTURNEventMap = {
|
|
9
|
-
'update': [ObservedTURN];
|
|
10
|
-
'close': [];
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export declare interface ObservedTURN {
|
|
14
|
-
on<U extends keyof ObservedTURNEventMap>(event: U, listener: (...args: ObservedTURNEventMap[U]) => void): this;
|
|
15
|
-
off<U extends keyof ObservedTURNEventMap>(event: U, listener: (...args: ObservedTURNEventMap[U]) => void): this;
|
|
16
|
-
once<U extends keyof ObservedTURNEventMap>(event: U, listener: (...args: ObservedTURNEventMap[U]) => void): this;
|
|
17
|
-
emit<U extends keyof ObservedTURNEventMap>(event: U, ...args: ObservedTURNEventMap[U]): boolean;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export class ObservedTURN extends EventEmitter {
|
|
21
|
-
public totalBytesSent = 0;
|
|
22
|
-
public totalBytesReceived = 0;
|
|
23
|
-
public totalPacketsSent = 0;
|
|
24
|
-
public totalPacketsReceived = 0;
|
|
25
|
-
|
|
26
|
-
public packetsSentPerSecond = 0;
|
|
27
|
-
public packetsReceivedPerSecond = 0;
|
|
28
|
-
public outboundBitrate = 0;
|
|
29
|
-
public inboundBitrate = 0;
|
|
30
|
-
public numberOfClients = 0;
|
|
31
|
-
|
|
32
|
-
public readonly servers = new Map<string, ObservedTurnServer>();
|
|
33
|
-
|
|
34
|
-
public constructor(
|
|
35
|
-
) {
|
|
36
|
-
super();
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
public update() {
|
|
40
|
-
const clientIds = new Set<string>();
|
|
41
|
-
|
|
42
|
-
this.packetsReceivedPerSecond = 0;
|
|
43
|
-
this.packetsSentPerSecond = 0;
|
|
44
|
-
this.outboundBitrate = 0;
|
|
45
|
-
this.inboundBitrate = 0;
|
|
46
|
-
|
|
47
|
-
for (const server of this.servers.values()) {
|
|
48
|
-
server.update();
|
|
49
|
-
server.observedPeerConnections.forEach((pc) => clientIds.add(pc.client.clientId));
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
this.numberOfClients = clientIds.size;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
public addPeerConnection(peerConnection: ObservedPeerConnection) {
|
|
56
|
-
const turnPairs = peerConnection.selectedIceCandidatePairs.filter((pair) => pair.getLocalCandidate()?.candidateType === 'relay' && pair.getRemoteCandidate()?.url?.startsWith('turn:'));
|
|
57
|
-
|
|
58
|
-
if (turnPairs.length !== 1) {
|
|
59
|
-
return (logger.warn(`Expected exactly one TURN pair, but found for peerconnection ${peerConnection.peerConnectionId}`, turnPairs.length), undefined);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const candidatePair = turnPairs[0];
|
|
63
|
-
const rawUrl = candidatePair.getRemoteCandidate()?.url;
|
|
64
|
-
|
|
65
|
-
if (!rawUrl) {
|
|
66
|
-
return (logger.warn(`No remote candidate URL found for peerconnection ${peerConnection.peerConnectionId}`), undefined);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const turnUrl = new URL(rawUrl);
|
|
70
|
-
const turnServerUrl = `${turnUrl.protocol}//${turnUrl.hostname}:${turnUrl.port}`;
|
|
71
|
-
let turnServer = this.servers.get(turnServerUrl);
|
|
72
|
-
|
|
73
|
-
if (!turnServer) {
|
|
74
|
-
turnServer = new ObservedTurnServer(turnServerUrl, this);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return turnServer;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
public removePeerConnection(peerConnection: ObservedPeerConnection) {
|
|
81
|
-
for (const turnServer of this.servers.values()) {
|
|
82
|
-
turnServer.observedPeerConnections.delete(peerConnection.peerConnectionId);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { ObservedIceCandidatePair } from './ObservedIceCandidatePair';
|
|
2
|
-
import { ObservedPeerConnection } from './ObservedPeerConnection';
|
|
3
|
-
import { ObservedTURN } from './ObservedTURN';
|
|
4
|
-
|
|
5
|
-
export class ObservedTurnServer {
|
|
6
|
-
public totalBytesSent = 0;
|
|
7
|
-
public totalBytesReceived = 0;
|
|
8
|
-
public totalPacketsSent = 0;
|
|
9
|
-
public totalPacketsReceived = 0;
|
|
10
|
-
|
|
11
|
-
public packetsSentPerSecond = 0;
|
|
12
|
-
public packetsReceivedPerSecond = 0;
|
|
13
|
-
public outboundBitrate = 0;
|
|
14
|
-
public inboundBitrate = 0;
|
|
15
|
-
|
|
16
|
-
public deltaBytesSent = 0;
|
|
17
|
-
public deltaBytesReceived = 0;
|
|
18
|
-
public deltaPacketsSent = 0;
|
|
19
|
-
public deltaPacketsReceived = 0;
|
|
20
|
-
|
|
21
|
-
public readonly observedPeerConnections = new Map<string, ObservedPeerConnection>();
|
|
22
|
-
|
|
23
|
-
public updated = Date.now();
|
|
24
|
-
|
|
25
|
-
public constructor(
|
|
26
|
-
public readonly url: string,
|
|
27
|
-
public readonly observedTURN: ObservedTURN,
|
|
28
|
-
) {
|
|
29
|
-
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
public updateTurnUsage(...selectedcandidatepairs: ObservedIceCandidatePair[]) {
|
|
33
|
-
for (const selectedcandidatepair of selectedcandidatepairs) {
|
|
34
|
-
this.deltaBytesReceived += selectedcandidatepair.deltaBytesReceived;
|
|
35
|
-
this.deltaBytesSent += selectedcandidatepair.deltaBytesSent;
|
|
36
|
-
this.deltaPacketsReceived += selectedcandidatepair.deltaPacketsReceived;
|
|
37
|
-
this.deltaPacketsSent += selectedcandidatepair.deltaPacketsSent;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
public update() {
|
|
42
|
-
const now = Date.now();
|
|
43
|
-
const deltaInS = (now - this.updated) / 1000;
|
|
44
|
-
|
|
45
|
-
this.packetsSentPerSecond = this.deltaPacketsSent / deltaInS;
|
|
46
|
-
this.packetsReceivedPerSecond = this.deltaPacketsReceived / deltaInS;
|
|
47
|
-
this.outboundBitrate = (this.deltaBytesReceived * 8) / deltaInS;
|
|
48
|
-
this.inboundBitrate = (this.deltaBytesSent * 8) / deltaInS;
|
|
49
|
-
|
|
50
|
-
this.totalBytesSent += this.deltaBytesSent;
|
|
51
|
-
this.totalBytesReceived += this.deltaBytesReceived;
|
|
52
|
-
this.totalPacketsSent += this.deltaPacketsSent;
|
|
53
|
-
this.totalPacketsReceived += this.deltaPacketsReceived;
|
|
54
|
-
|
|
55
|
-
this.observedTURN.totalBytesSent += this.deltaBytesSent;
|
|
56
|
-
this.observedTURN.totalBytesReceived += this.deltaBytesReceived;
|
|
57
|
-
this.observedTURN.totalPacketsSent += this.deltaPacketsSent;
|
|
58
|
-
this.observedTURN.totalPacketsReceived += this.deltaPacketsReceived;
|
|
59
|
-
|
|
60
|
-
this.observedTURN.inboundBitrate += this.inboundBitrate;
|
|
61
|
-
this.observedTURN.outboundBitrate += this.outboundBitrate;
|
|
62
|
-
this.observedTURN.packetsReceivedPerSecond += this.packetsReceivedPerSecond;
|
|
63
|
-
this.observedTURN.packetsSentPerSecond += this.packetsSentPerSecond;
|
|
64
|
-
|
|
65
|
-
this.deltaBytesSent = 0;
|
|
66
|
-
this.deltaBytesReceived = 0;
|
|
67
|
-
this.deltaPacketsSent = 0;
|
|
68
|
-
this.deltaPacketsReceived = 0;
|
|
69
|
-
|
|
70
|
-
this.updated = now;
|
|
71
|
-
}
|
|
72
|
-
}
|