@observertc/observer-js 1.0.1-c3edea3.0 → 1.0.1-ea70eab.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 +43 -7
- package/lib/ObservedCall.d.ts.map +1 -1
- package/lib/ObservedCall.js +129 -13
- package/lib/ObservedCallEventMonitor.d.ts +104 -0
- package/lib/ObservedCallEventMonitor.d.ts.map +1 -0
- package/lib/ObservedCallEventMonitor.js +314 -0
- package/lib/ObservedCallSummary.d.ts +18 -0
- package/lib/ObservedCallSummary.d.ts.map +1 -0
- package/lib/ObservedClient.d.ts +70 -11
- package/lib/ObservedClient.d.ts.map +1 -1
- package/lib/ObservedClient.js +392 -72
- package/lib/ObservedClientEventMonitor.d.ts +89 -0
- package/lib/ObservedClientEventMonitor.d.ts.map +1 -0
- package/lib/ObservedClientEventMonitor.js +247 -0
- package/lib/ObservedClientSummary.d.ts +23 -0
- package/lib/ObservedClientSummary.d.ts.map +1 -0
- package/lib/ObservedClientSummary.js +2 -0
- package/lib/ObservedDataChannel.d.ts +6 -0
- package/lib/ObservedDataChannel.d.ts.map +1 -1
- package/lib/ObservedDataChannel.js +30 -0
- package/lib/ObservedIceCandidatePair.d.ts +6 -1
- package/lib/ObservedIceCandidatePair.d.ts.map +1 -1
- package/lib/ObservedIceCandidatePair.js +45 -1
- package/lib/ObservedIceTransport.d.ts +4 -0
- package/lib/ObservedIceTransport.d.ts.map +1 -1
- package/lib/ObservedIceTransport.js +28 -0
- package/lib/ObservedInboundTrack.d.ts +2 -0
- package/lib/ObservedInboundTrack.d.ts.map +1 -1
- package/lib/ObservedInboundTrack.js +2 -0
- package/lib/ObservedOutboundTrack.d.ts +2 -0
- package/lib/ObservedOutboundTrack.d.ts.map +1 -1
- package/lib/ObservedOutboundTrack.js +2 -0
- package/lib/ObservedPeerConnection.d.ts +29 -2
- package/lib/ObservedPeerConnection.d.ts.map +1 -1
- package/lib/ObservedPeerConnection.js +181 -29
- package/lib/ObservedTURN.d.ts +31 -0
- package/lib/ObservedTURN.d.ts.map +1 -0
- package/lib/ObservedTURN.js +58 -0
- package/lib/ObservedTurnServer.d.ts +25 -0
- package/lib/ObservedTurnServer.d.ts.map +1 -0
- package/lib/ObservedTurnServer.js +59 -0
- package/lib/Observer.d.ts +43 -22
- package/lib/Observer.d.ts.map +1 -1
- package/lib/Observer.js +126 -40
- package/lib/ObserverEventMonitor.d.ts +130 -0
- package/lib/ObserverEventMonitor.d.ts.map +1 -0
- package/lib/ObserverEventMonitor.js +404 -0
- package/lib/ObserverSummary.d.ts +13 -0
- package/lib/ObserverSummary.d.ts.map +1 -0
- package/lib/ObserverSummary.js +2 -0
- package/lib/common/utils.d.ts +2 -1
- package/lib/common/utils.d.ts.map +1 -1
- package/lib/common/utils.js +11 -3
- package/lib/index.d.ts +6 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +9 -1
- package/lib/schema/ClientEventTypes.d.ts +160 -0
- package/lib/schema/ClientEventTypes.d.ts.map +1 -0
- package/lib/schema/ClientEventTypes.js +38 -0
- package/lib/schema/{metaTypes.d.ts → ClientMetaTypes.d.ts} +2 -2
- package/lib/schema/ClientMetaTypes.d.ts.map +1 -0
- package/lib/schema/ClientMetaTypes.js +16 -0
- package/lib/schema/ClientSample.d.ts +1 -1
- package/lib/schema/ClientSample.d.ts.map +1 -1
- package/lib/updaters/CallUpdater.d.ts.map +1 -0
- package/lib/updaters/CallUpdater.js +2 -0
- package/lib/updaters/ObserverUpdater.d.ts +5 -0
- package/lib/updaters/ObserverUpdater.d.ts.map +1 -0
- package/lib/updaters/ObserverUpdater.js +2 -0
- package/lib/updaters/OnAllCallObserverUpdater.d.ts +15 -0
- package/lib/updaters/OnAllCallObserverUpdater.d.ts.map +1 -0
- package/lib/updaters/OnAllCallObserverUpdater.js +50 -0
- package/lib/updaters/OnAllClientCallUpdater.d.ts +15 -0
- package/lib/updaters/OnAllClientCallUpdater.d.ts.map +1 -0
- package/lib/updaters/OnAllClientCallUpdater.js +53 -0
- package/lib/updaters/OnAnyCallObserverUpdater.d.ts +12 -0
- package/lib/updaters/OnAnyCallObserverUpdater.d.ts.map +1 -0
- package/lib/updaters/OnAnyCallObserverUpdater.js +37 -0
- package/lib/updaters/OnAnyClientCallUpdater.d.ts +12 -0
- package/lib/updaters/OnAnyClientCallUpdater.d.ts.map +1 -0
- package/lib/updaters/OnAnyClientCallUpdater.js +36 -0
- package/lib/updaters/OnIntervalUpdater.d.ts +10 -0
- package/lib/updaters/OnIntervalUpdater.d.ts.map +1 -0
- package/lib/updaters/OnIntervalUpdater.js +17 -0
- package/lib/updaters/Updater.d.ts +6 -0
- package/lib/updaters/Updater.d.ts.map +1 -0
- package/lib/updaters/Updater.js +2 -0
- package/lib/utils/MediasoupRemoteTrackResolver.d.ts +25 -0
- package/lib/utils/MediasoupRemoteTrackResolver.d.ts.map +1 -0
- package/lib/utils/MediasoupRemoteTrackResolver.js +110 -0
- package/package.json +1 -1
- package/src/ObservedCall.ts +210 -16
- package/src/ObservedCallEventMonitor.ts +392 -0
- package/src/ObservedCallSummary.ts +22 -0
- package/src/ObservedClient.ts +490 -79
- package/src/ObservedClientEventMonitor.ts +301 -0
- package/src/ObservedClientSummary.ts +24 -0
- package/src/ObservedDataChannel.ts +32 -0
- package/src/ObservedIceCandidatePair.ts +44 -2
- package/src/ObservedIceTransport.ts +29 -0
- package/src/ObservedInboundTrack.ts +3 -0
- package/src/ObservedOutboundTrack.ts +3 -0
- package/src/ObservedPeerConnection.ts +210 -46
- package/src/ObservedTURN.ts +86 -0
- package/src/ObservedTurnServer.ts +72 -0
- package/src/Observer.ts +179 -64
- package/src/ObserverEventMonitor.ts +518 -0
- package/src/ObserverSummary.ts +15 -0
- package/src/common/utils.ts +12 -2
- package/src/index.ts +6 -0
- package/src/schema/ClientEventTypes.ts +176 -0
- package/src/schema/{metaTypes.ts → ClientMetaTypes.ts} +1 -1
- package/src/schema/ClientSample.ts +1 -1
- package/src/updaters/ObserverUpdater.ts +5 -0
- package/src/updaters/OnAllCallObserverUpdater.ts +59 -0
- package/src/updaters/OnAllClientCallUpdater.ts +61 -0
- package/src/updaters/OnAnyCallObserverUpdater.ts +41 -0
- package/src/updaters/OnAnyClientCallUpdater.ts +39 -0
- package/src/updaters/OnIntervalUpdater.ts +19 -0
- package/src/updaters/Updater.ts +5 -0
- package/src/utils/MediasoupRemoteTrackResolver.ts +155 -0
- package/tsconfig.json +1 -1
- package/lib/schema/eventTypes.d.ts +0 -33
- package/lib/schema/eventTypes.d.ts.map +0 -1
- package/lib/schema/eventTypes.js +0 -38
- package/lib/schema/metaTypes.d.ts.map +0 -1
- package/lib/schema/metaTypes.js +0 -16
- package/lib/utils/CallUpdater.d.ts.map +0 -1
- package/lib/utils/OnAllClientCallUpdater.d.ts +0 -16
- package/lib/utils/OnAllClientCallUpdater.d.ts.map +0 -1
- package/lib/utils/OnAllClientCallUpdater.js +0 -58
- package/lib/utils/onAnyClientCallUpdater.d.ts +0 -14
- package/lib/utils/onAnyClientCallUpdater.d.ts.map +0 -1
- package/lib/utils/onAnyClientCallUpdater.js +0 -51
- package/src/schema/eventTypes.ts +0 -36
- package/src/utils/OnAllClientCallUpdater.ts +0 -68
- package/src/utils/onAnyClientCallUpdater.ts +0 -59
- /package/lib/{utils/CallUpdater.js → ObservedCallSummary.js} +0 -0
- /package/lib/{utils → updaters}/CallUpdater.d.ts +0 -0
- /package/src/{utils → updaters}/CallUpdater.ts +0 -0
|
@@ -18,6 +18,7 @@ import { ObservedRemoteOutboundRtp } from './ObservedRemoteOutboundRtp';
|
|
|
18
18
|
import { ObservedInboundTrack } from './ObservedInboundTrack';
|
|
19
19
|
import { ObservedOutboundTrack } from './ObservedOutboundTrack';
|
|
20
20
|
import { CalculatedScore } from './scores/CalculatedScore';
|
|
21
|
+
import { ObservedTurnServer } from './ObservedTurnServer';
|
|
21
22
|
export type ObservedPeerConnectionEvents = {
|
|
22
23
|
iceconnectionstatechange: [
|
|
23
24
|
{
|
|
@@ -65,6 +66,22 @@ export type ObservedPeerConnectionEvents = {
|
|
|
65
66
|
'removed-peer-connection-transport': [ObservedPeerConnectionTransport];
|
|
66
67
|
'removed-remote-inbound-rtp': [ObservedRemoteInboundRtp];
|
|
67
68
|
'removed-remote-outbound-rtp': [ObservedRemoteOutboundRtp];
|
|
69
|
+
'updated-inbound-rtp': [ObservedInboundRtp];
|
|
70
|
+
'updated-outbound-rtp': [ObservedOutboundRtp];
|
|
71
|
+
'updated-inbound-track': [ObservedInboundTrack];
|
|
72
|
+
'updated-outbound-track': [ObservedOutboundTrack];
|
|
73
|
+
'updated-ice-candidate-pair': [ObservedIceCandidatePair];
|
|
74
|
+
'updated-ice-transport': [ObservedIceTransport];
|
|
75
|
+
'updated-peer-connection-transport': [ObservedPeerConnectionTransport];
|
|
76
|
+
'updated-media-source': [ObservedMediaSource];
|
|
77
|
+
'updated-media-playout': [ObservedMediaPlayout];
|
|
78
|
+
'updated-data-channel': [ObservedDataChannel];
|
|
79
|
+
'updated-ice-candidate': [ObservedIceCandidate];
|
|
80
|
+
'updated-certificate': [ObservedCertificate];
|
|
81
|
+
'updated-codec': [ObservedCodec];
|
|
82
|
+
'updated-remote-inbound-rtp': [ObservedRemoteInboundRtp];
|
|
83
|
+
'updated-remote-outbound-rtp': [ObservedRemoteOutboundRtp];
|
|
84
|
+
'update': [];
|
|
68
85
|
close: [];
|
|
69
86
|
};
|
|
70
87
|
export declare interface ObservedPeerConnection {
|
|
@@ -83,11 +100,15 @@ export declare class ObservedPeerConnection extends EventEmitter {
|
|
|
83
100
|
openedAt?: number;
|
|
84
101
|
closedAt?: number;
|
|
85
102
|
updated: number;
|
|
103
|
+
availableIncomingBitrate: number;
|
|
104
|
+
availableOutgoingBitrate: number;
|
|
86
105
|
totalInboundPacketsLost: number;
|
|
87
106
|
totalInboundPacketsReceived: number;
|
|
88
107
|
totalOutboundPacketsSent: number;
|
|
89
108
|
totalDataChannelBytesSent: number;
|
|
90
109
|
totalDataChannelBytesReceived: number;
|
|
110
|
+
totalDataChannelMessagesSent: number;
|
|
111
|
+
totalDataChannelMessagesReceived: number;
|
|
91
112
|
totalSentAudioBytes: number;
|
|
92
113
|
totalSentVideoBytes: number;
|
|
93
114
|
totalSentAudioPackets: number;
|
|
@@ -101,6 +122,8 @@ export declare class ObservedPeerConnection extends EventEmitter {
|
|
|
101
122
|
deltaOutboundPacketsSent: number;
|
|
102
123
|
deltaDataChannelBytesSent: number;
|
|
103
124
|
deltaDataChannelBytesReceived: number;
|
|
125
|
+
deltaDataChannelMessagesSent: number;
|
|
126
|
+
deltaDataChannelMessagesReceived: number;
|
|
104
127
|
deltaInboundReceivedBytes: number;
|
|
105
128
|
deltaOutboundSentBytes: number;
|
|
106
129
|
deltaReceivedAudioBytes: number;
|
|
@@ -109,16 +132,19 @@ export declare class ObservedPeerConnection extends EventEmitter {
|
|
|
109
132
|
deltaReceivedVideoPackets: number;
|
|
110
133
|
deltaSentAudioBytes: number;
|
|
111
134
|
deltaSentVideoBytes: number;
|
|
135
|
+
deltaTransportSentBytes: number;
|
|
136
|
+
deltaTransportReceivedBytes: number;
|
|
112
137
|
receivingPacketsPerSecond: number;
|
|
113
138
|
sendingPacketsPerSecond: number;
|
|
114
139
|
sendingAudioBitrate: number;
|
|
115
140
|
sendingVideoBitrate: number;
|
|
116
141
|
receivingAudioBitrate: number;
|
|
117
142
|
receivingVideoBitrate: number;
|
|
118
|
-
|
|
119
|
-
|
|
143
|
+
currentRttInMs?: number;
|
|
144
|
+
currentJitter?: number;
|
|
120
145
|
usingTCP: boolean;
|
|
121
146
|
usingTURN: boolean;
|
|
147
|
+
observedTurnServer?: ObservedTurnServer;
|
|
122
148
|
readonly observedCertificates: Map<string, ObservedCertificate>;
|
|
123
149
|
readonly observedCodecs: Map<string, ObservedCodec>;
|
|
124
150
|
readonly observedDataChannels: Map<string, ObservedDataChannel>;
|
|
@@ -151,6 +177,7 @@ export declare class ObservedPeerConnection extends EventEmitter {
|
|
|
151
177
|
get iceCandidatePairs(): ObservedIceCandidatePair[];
|
|
152
178
|
get certificates(): ObservedCertificate[];
|
|
153
179
|
get selectedIceCandidatePairs(): ObservedIceCandidatePair[];
|
|
180
|
+
get selectedIceCandiadtePairForTurn(): ObservedIceCandidatePair[];
|
|
154
181
|
close(): void;
|
|
155
182
|
accept(sample: PeerConnectionSample): void;
|
|
156
183
|
private _checkVisited;
|
|
@@ -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,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAiK,mBAAmB,EAAE,oBAAoB,EAA+E,MAAM,uBAAuB,CAAC;AAC9T,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,+BAA+B,EAAE,MAAM,mCAAmC,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"ObservedPeerConnection.d.ts","sourceRoot":"","sources":["../src/ObservedPeerConnection.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@ const ObservedRemoteInboundRtp_1 = require("./ObservedRemoteInboundRtp");
|
|
|
18
18
|
const ObservedRemoteOutboundRtp_1 = require("./ObservedRemoteOutboundRtp");
|
|
19
19
|
const ObservedInboundTrack_1 = require("./ObservedInboundTrack");
|
|
20
20
|
const ObservedOutboundTrack_1 = require("./ObservedOutboundTrack");
|
|
21
|
+
const utils_1 = require("./common/utils");
|
|
21
22
|
const logger = (0, logger_1.createLogger)('ObservedPeerConnection');
|
|
22
23
|
class ObservedPeerConnection extends events_1.EventEmitter {
|
|
23
24
|
peerConnectionId;
|
|
@@ -34,11 +35,15 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
34
35
|
// timestamp of the PEER_CONNECTION_CLOSED event
|
|
35
36
|
closedAt;
|
|
36
37
|
updated = Date.now();
|
|
38
|
+
availableIncomingBitrate = 0;
|
|
39
|
+
availableOutgoingBitrate = 0;
|
|
37
40
|
totalInboundPacketsLost = 0;
|
|
38
41
|
totalInboundPacketsReceived = 0;
|
|
39
42
|
totalOutboundPacketsSent = 0;
|
|
40
43
|
totalDataChannelBytesSent = 0;
|
|
41
44
|
totalDataChannelBytesReceived = 0;
|
|
45
|
+
totalDataChannelMessagesSent = 0;
|
|
46
|
+
totalDataChannelMessagesReceived = 0;
|
|
42
47
|
totalSentAudioBytes = 0;
|
|
43
48
|
totalSentVideoBytes = 0;
|
|
44
49
|
totalSentAudioPackets = 0;
|
|
@@ -52,6 +57,8 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
52
57
|
deltaOutboundPacketsSent = 0;
|
|
53
58
|
deltaDataChannelBytesSent = 0;
|
|
54
59
|
deltaDataChannelBytesReceived = 0;
|
|
60
|
+
deltaDataChannelMessagesSent = 0;
|
|
61
|
+
deltaDataChannelMessagesReceived = 0;
|
|
55
62
|
deltaInboundReceivedBytes = 0;
|
|
56
63
|
deltaOutboundSentBytes = 0;
|
|
57
64
|
deltaReceivedAudioBytes = 0;
|
|
@@ -60,16 +67,19 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
60
67
|
deltaReceivedVideoPackets = 0;
|
|
61
68
|
deltaSentAudioBytes = 0;
|
|
62
69
|
deltaSentVideoBytes = 0;
|
|
70
|
+
deltaTransportSentBytes = 0;
|
|
71
|
+
deltaTransportReceivedBytes = 0;
|
|
63
72
|
receivingPacketsPerSecond = 0;
|
|
64
73
|
sendingPacketsPerSecond = 0;
|
|
65
74
|
sendingAudioBitrate = 0;
|
|
66
75
|
sendingVideoBitrate = 0;
|
|
67
76
|
receivingAudioBitrate = 0;
|
|
68
77
|
receivingVideoBitrate = 0;
|
|
69
|
-
|
|
70
|
-
|
|
78
|
+
currentRttInMs;
|
|
79
|
+
currentJitter;
|
|
71
80
|
usingTCP = false;
|
|
72
81
|
usingTURN = false;
|
|
82
|
+
observedTurnServer;
|
|
73
83
|
observedCertificates = new Map();
|
|
74
84
|
observedCodecs = new Map();
|
|
75
85
|
observedDataChannels = new Map();
|
|
@@ -142,6 +152,11 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
142
152
|
return this.iceTransports.map((iceTransport) => iceTransport.getSelectedCandidatePair())
|
|
143
153
|
.filter((pair) => pair !== undefined);
|
|
144
154
|
}
|
|
155
|
+
get selectedIceCandiadtePairForTurn() {
|
|
156
|
+
return this.selectedIceCandidatePairs
|
|
157
|
+
.filter((pair) => pair.getLocalCandidate()?.candidateType === 'relay' &&
|
|
158
|
+
pair.getRemoteCandidate()?.url?.startsWith('turn:'));
|
|
159
|
+
}
|
|
145
160
|
close() {
|
|
146
161
|
if (this.closed)
|
|
147
162
|
return;
|
|
@@ -161,12 +176,17 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
161
176
|
this.observedPeerConnectionTransports.clear();
|
|
162
177
|
this.observedRemoteInboundRtps.clear();
|
|
163
178
|
this.observedRemoteOutboundRtps.clear();
|
|
179
|
+
this.client.call.observer.observedTURN.removePeerConnection(this);
|
|
180
|
+
if (!this.closedAt)
|
|
181
|
+
this.closedAt = Date.now();
|
|
164
182
|
this.emit('close');
|
|
165
183
|
}
|
|
166
184
|
accept(sample) {
|
|
167
185
|
if (this.closed)
|
|
168
186
|
return;
|
|
169
187
|
this._visited = true;
|
|
188
|
+
this.availableIncomingBitrate = 0;
|
|
189
|
+
this.availableOutgoingBitrate = 0;
|
|
170
190
|
this.deltaInboundPacketsLost = 0;
|
|
171
191
|
this.deltaInboundPacketsReceived = 0;
|
|
172
192
|
this.deltaOutboundPacketsSent = 0;
|
|
@@ -180,6 +200,8 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
180
200
|
this.deltaReceivedVideoPackets = 0;
|
|
181
201
|
this.deltaSentAudioBytes = 0;
|
|
182
202
|
this.deltaSentVideoBytes = 0;
|
|
203
|
+
this.deltaTransportReceivedBytes = 0;
|
|
204
|
+
this.deltaTransportSentBytes = 0;
|
|
183
205
|
this.sendingAudioBitrate = 0;
|
|
184
206
|
this.sendingVideoBitrate = 0;
|
|
185
207
|
this.receivingAudioBitrate = 0;
|
|
@@ -187,6 +209,8 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
187
209
|
const now = Date.now();
|
|
188
210
|
const elapsedTimeInMs = now - this.updated;
|
|
189
211
|
const elapsedTimeInSec = elapsedTimeInMs / 1000;
|
|
212
|
+
const rttMeasurementsInSec = [];
|
|
213
|
+
const jitterMeasurements = [];
|
|
190
214
|
if (sample.certificates) {
|
|
191
215
|
for (const certificate of sample.certificates) {
|
|
192
216
|
this._updateCertificateStats(certificate);
|
|
@@ -199,7 +223,13 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
199
223
|
}
|
|
200
224
|
if (sample.dataChannels) {
|
|
201
225
|
for (const dataChannel of sample.dataChannels) {
|
|
202
|
-
this._updateDataChannelStats(dataChannel);
|
|
226
|
+
const observedDataChannel = this._updateDataChannelStats(dataChannel);
|
|
227
|
+
if (!observedDataChannel)
|
|
228
|
+
continue;
|
|
229
|
+
this.deltaDataChannelBytesSent += observedDataChannel.deltaBytesSent;
|
|
230
|
+
this.deltaDataChannelBytesReceived += observedDataChannel.deltaBytesReceived;
|
|
231
|
+
this.deltaDataChannelMessagesSent += observedDataChannel.deltaMessagesSent;
|
|
232
|
+
this.deltaDataChannelMessagesReceived += observedDataChannel.deltaMessagesReceived;
|
|
203
233
|
}
|
|
204
234
|
}
|
|
205
235
|
if (sample.iceCandidates) {
|
|
@@ -209,12 +239,26 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
209
239
|
}
|
|
210
240
|
if (sample.iceCandidatePairs) {
|
|
211
241
|
for (const iceCandidatePair of sample.iceCandidatePairs) {
|
|
212
|
-
this._updateIceCandidatePairStats(iceCandidatePair);
|
|
242
|
+
const observedCandidatePair = this._updateIceCandidatePairStats(iceCandidatePair);
|
|
243
|
+
if (!observedCandidatePair)
|
|
244
|
+
continue;
|
|
245
|
+
if (observedCandidatePair.currentRoundTripTime) {
|
|
246
|
+
rttMeasurementsInSec.push(observedCandidatePair.currentRoundTripTime);
|
|
247
|
+
}
|
|
248
|
+
if (observedCandidatePair.availableIncomingBitrate) {
|
|
249
|
+
this.availableIncomingBitrate += observedCandidatePair.availableIncomingBitrate;
|
|
250
|
+
}
|
|
251
|
+
if (observedCandidatePair.availableOutgoingBitrate) {
|
|
252
|
+
this.availableOutgoingBitrate += observedCandidatePair.availableOutgoingBitrate;
|
|
253
|
+
}
|
|
213
254
|
}
|
|
214
255
|
}
|
|
215
256
|
if (sample.iceTransports) {
|
|
216
257
|
for (const iceTransport of sample.iceTransports) {
|
|
217
|
-
this._updateIceTransportStats(iceTransport);
|
|
258
|
+
const observedIceTransport = this._updateIceTransportStats(iceTransport);
|
|
259
|
+
if (!observedIceTransport)
|
|
260
|
+
return;
|
|
261
|
+
observedIceTransport.bytesReceived;
|
|
218
262
|
}
|
|
219
263
|
}
|
|
220
264
|
if (sample.inboundRtps) {
|
|
@@ -235,6 +279,9 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
235
279
|
this.deltaReceivedVideoPackets += observedInboundRtp.deltaReceivedPackets;
|
|
236
280
|
break;
|
|
237
281
|
}
|
|
282
|
+
if (observedInboundRtp.jitter) {
|
|
283
|
+
jitterMeasurements.push(observedInboundRtp.jitter);
|
|
284
|
+
}
|
|
238
285
|
}
|
|
239
286
|
}
|
|
240
287
|
if (sample.mediaPlayouts) {
|
|
@@ -268,12 +315,19 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
268
315
|
}
|
|
269
316
|
if (sample.peerConnectionTransports) {
|
|
270
317
|
for (const peerConnectionTransport of sample.peerConnectionTransports) {
|
|
271
|
-
this._updatePeerConnectionTransportStats(peerConnectionTransport);
|
|
318
|
+
const observedTransport = this._updatePeerConnectionTransportStats(peerConnectionTransport);
|
|
319
|
+
if (!observedTransport)
|
|
320
|
+
continue;
|
|
272
321
|
}
|
|
273
322
|
}
|
|
274
323
|
if (sample.remoteInboundRtps) {
|
|
275
324
|
for (const remoteInboundRtp of sample.remoteInboundRtps) {
|
|
276
|
-
this._updateRemoteInboundRtpStats(remoteInboundRtp);
|
|
325
|
+
const observedRemoteInboundRtp = this._updateRemoteInboundRtpStats(remoteInboundRtp);
|
|
326
|
+
if (!observedRemoteInboundRtp)
|
|
327
|
+
continue;
|
|
328
|
+
if (observedRemoteInboundRtp.roundTripTime) {
|
|
329
|
+
rttMeasurementsInSec.push(observedRemoteInboundRtp.roundTripTime);
|
|
330
|
+
}
|
|
277
331
|
}
|
|
278
332
|
}
|
|
279
333
|
if (sample.remoteOutboundRtps) {
|
|
@@ -300,6 +354,8 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
300
354
|
this.totalOutboundPacketsSent += this.deltaOutboundPacketsSent;
|
|
301
355
|
this.totalDataChannelBytesSent += this.deltaDataChannelBytesSent;
|
|
302
356
|
this.totalDataChannelBytesReceived += this.deltaDataChannelBytesReceived;
|
|
357
|
+
this.totalDataChannelMessagesSent += this.deltaDataChannelMessagesSent;
|
|
358
|
+
this.totalDataChannelMessagesReceived += this.deltaDataChannelMessagesReceived;
|
|
303
359
|
this.totalReceivedAudioBytes += this.deltaReceivedAudioBytes;
|
|
304
360
|
this.totalReceivedVideoBytes += this.deltaReceivedVideoBytes;
|
|
305
361
|
this.totalSentAudioBytes += this.deltaSentAudioBytes;
|
|
@@ -310,17 +366,53 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
310
366
|
this.totalSentVideoPackets += this.deltaSentVideoBytes;
|
|
311
367
|
this.receivingPacketsPerSecond = this.deltaInboundPacketsReceived / elapsedTimeInSec;
|
|
312
368
|
this.sendingPacketsPerSecond = this.deltaOutboundPacketsSent / elapsedTimeInSec;
|
|
313
|
-
this.sendingAudioBitrate = this.deltaSentAudioBytes * 8 / elapsedTimeInSec;
|
|
314
|
-
this.sendingVideoBitrate = this.deltaSentVideoBytes * 8 / elapsedTimeInSec;
|
|
315
|
-
this.receivingAudioBitrate = this.deltaReceivedAudioBytes * 8 / elapsedTimeInSec;
|
|
316
|
-
this.receivingVideoBitrate = this.deltaReceivedVideoBytes * 8 / elapsedTimeInSec;
|
|
369
|
+
this.sendingAudioBitrate = (this.deltaSentAudioBytes * 8) / elapsedTimeInSec;
|
|
370
|
+
this.sendingVideoBitrate = (this.deltaSentVideoBytes * 8) / elapsedTimeInSec;
|
|
371
|
+
this.receivingAudioBitrate = (this.deltaReceivedAudioBytes * 8) / elapsedTimeInSec;
|
|
372
|
+
this.receivingVideoBitrate = (this.deltaReceivedVideoBytes * 8) / elapsedTimeInSec;
|
|
373
|
+
if (rttMeasurementsInSec.length > 0) {
|
|
374
|
+
this.currentRttInMs = (0, utils_1.getMedian)(rttMeasurementsInSec, false) * 1000;
|
|
375
|
+
}
|
|
376
|
+
else {
|
|
377
|
+
this.currentRttInMs = undefined;
|
|
378
|
+
}
|
|
379
|
+
if (jitterMeasurements.length > 0) {
|
|
380
|
+
this.currentJitter = (0, utils_1.getMedian)(jitterMeasurements, false);
|
|
381
|
+
}
|
|
382
|
+
else {
|
|
383
|
+
this.currentJitter = undefined;
|
|
384
|
+
}
|
|
385
|
+
const wasUsingTURN = this.usingTURN;
|
|
317
386
|
const selectedIceCandidatePairs = this.selectedIceCandidatePairs;
|
|
318
|
-
|
|
319
|
-
this.
|
|
320
|
-
|
|
387
|
+
const selectedCandidatePairForTurn = [];
|
|
388
|
+
this.usingTCP = false;
|
|
389
|
+
this.usingTURN = false;
|
|
390
|
+
for (const selectedCandidatePair of selectedIceCandidatePairs) {
|
|
391
|
+
if (selectedCandidatePair.getLocalCandidate()?.protocol === 'tcp') {
|
|
392
|
+
this.usingTCP = true;
|
|
393
|
+
}
|
|
394
|
+
if (selectedCandidatePair.getLocalCandidate()?.candidateType === 'relay' && selectedCandidatePair.getRemoteCandidate()?.url?.startsWith('turn:')) {
|
|
395
|
+
selectedCandidatePairForTurn.push(selectedCandidatePair);
|
|
396
|
+
this.usingTURN = true;
|
|
397
|
+
}
|
|
398
|
+
this.deltaTransportReceivedBytes += selectedCandidatePair.deltaBytesReceived;
|
|
399
|
+
this.deltaTransportSentBytes += selectedCandidatePair.deltaBytesSent;
|
|
400
|
+
}
|
|
401
|
+
if (this.usingTURN) {
|
|
402
|
+
if (!this.observedTurnServer) {
|
|
403
|
+
this.observedTurnServer = this.client.call.observer.observedTURN.addPeerConnection(this);
|
|
404
|
+
}
|
|
405
|
+
this.observedTurnServer?.updateTurnUsage(...selectedCandidatePairForTurn);
|
|
406
|
+
}
|
|
407
|
+
else if (wasUsingTURN) {
|
|
408
|
+
if (!this.usingTURN) {
|
|
409
|
+
this.client.call.observer.observedTURN.removePeerConnection(this);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
321
412
|
this.calculatedScore.value = sample.score;
|
|
322
413
|
this.updated = now;
|
|
323
414
|
this._checkVisited();
|
|
415
|
+
this.emit('update');
|
|
324
416
|
}
|
|
325
417
|
_checkVisited() {
|
|
326
418
|
for (const certificate of [...this.observedCertificates.values()]) {
|
|
@@ -420,10 +512,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
420
512
|
return logger.warn(`ObservedPeerConnection received an invalid CertificateStats (missing timestamp OR id OR fingerprint field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
421
513
|
}
|
|
422
514
|
observedCertificate = new ObservedCertificate_1.ObservedCertificate(stats.timestamp, stats.id, this);
|
|
515
|
+
observedCertificate.update(stats);
|
|
423
516
|
this.observedCertificates.set(stats.id, observedCertificate);
|
|
424
517
|
this.emit('added-certificate', observedCertificate);
|
|
425
518
|
}
|
|
426
|
-
|
|
519
|
+
else {
|
|
520
|
+
observedCertificate.update(stats);
|
|
521
|
+
this.emit('updated-certificate', observedCertificate);
|
|
522
|
+
}
|
|
427
523
|
return observedCertificate;
|
|
428
524
|
}
|
|
429
525
|
_updateCodecStats(stats) {
|
|
@@ -433,10 +529,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
433
529
|
return logger.warn(`ObservedPeerConnection received an invalid CodecStats (missing timestamp OR id OR mimeType field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
434
530
|
}
|
|
435
531
|
observedCodec = new ObservedCodec_1.ObservedCodec(stats.timestamp, stats.id, stats.mimeType, this);
|
|
532
|
+
observedCodec.update(stats);
|
|
436
533
|
this.observedCodecs.set(stats.id, observedCodec);
|
|
437
534
|
this.emit('added-codec', observedCodec);
|
|
438
535
|
}
|
|
439
|
-
|
|
536
|
+
else {
|
|
537
|
+
observedCodec.update(stats);
|
|
538
|
+
this.emit('updated-codec', observedCodec);
|
|
539
|
+
}
|
|
440
540
|
return observedCodec;
|
|
441
541
|
}
|
|
442
542
|
_updateDataChannelStats(stats) {
|
|
@@ -446,10 +546,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
446
546
|
return logger.warn(`ObservedPeerConnection received an invalid DataChannelStats (missing timestamp OR id field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
447
547
|
}
|
|
448
548
|
observedDataChannel = new ObservedDataChannel_1.ObservedDataChannel(stats.timestamp, stats.id, this);
|
|
549
|
+
observedDataChannel.update(stats);
|
|
449
550
|
this.observedDataChannels.set(stats.id, observedDataChannel);
|
|
450
551
|
this.emit('added-data-channel', observedDataChannel);
|
|
451
552
|
}
|
|
452
|
-
|
|
553
|
+
else {
|
|
554
|
+
observedDataChannel.update(stats);
|
|
555
|
+
this.emit('updated-data-channel', observedDataChannel);
|
|
556
|
+
}
|
|
453
557
|
return observedDataChannel;
|
|
454
558
|
}
|
|
455
559
|
_updateIceCandidateStats(stats) {
|
|
@@ -459,10 +563,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
459
563
|
return logger.warn(`ObservedPeerConnection received an invalid IceCandidateStats (missing timestamp OR id field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
460
564
|
}
|
|
461
565
|
observedIceCandidate = new ObservedIceCandidate_1.ObservedIceCandidate(stats.timestamp, stats.id, this);
|
|
566
|
+
observedIceCandidate.update(stats);
|
|
462
567
|
this.observedIceCandidates.set(stats.id, observedIceCandidate);
|
|
463
568
|
this.emit('added-ice-candidate', observedIceCandidate);
|
|
464
569
|
}
|
|
465
|
-
|
|
570
|
+
else {
|
|
571
|
+
observedIceCandidate.update(stats);
|
|
572
|
+
this.emit('updated-ice-candidate', observedIceCandidate);
|
|
573
|
+
}
|
|
466
574
|
return observedIceCandidate;
|
|
467
575
|
}
|
|
468
576
|
_updateIceCandidatePairStats(stats) {
|
|
@@ -472,10 +580,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
472
580
|
return logger.warn(`ObservedPeerConnection received an invalid IceCandidateStats (missing timestamp OR id field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
473
581
|
}
|
|
474
582
|
observedIceCandidatePair = new ObservedIceCandidatePair_1.ObservedIceCandidatePair(stats.timestamp, stats.id, this);
|
|
583
|
+
observedIceCandidatePair.update(stats);
|
|
475
584
|
this.observedIceCandidatesPair.set(stats.id, observedIceCandidatePair);
|
|
476
585
|
this.emit('added-ice-candidate-pair', observedIceCandidatePair);
|
|
477
586
|
}
|
|
478
|
-
|
|
587
|
+
else {
|
|
588
|
+
observedIceCandidatePair.update(stats);
|
|
589
|
+
this.emit('updated-ice-candidate-pair', observedIceCandidatePair);
|
|
590
|
+
}
|
|
479
591
|
return observedIceCandidatePair;
|
|
480
592
|
}
|
|
481
593
|
_updateIceTransportStats(stats) {
|
|
@@ -485,10 +597,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
485
597
|
return logger.warn(`ObservedPeerConnection received an invalid IceCandidateStats (missing timestamp OR id field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
486
598
|
}
|
|
487
599
|
observedIceTransport = new ObservedIceTransport_1.ObservedIceTransport(stats.timestamp, stats.id, this);
|
|
600
|
+
observedIceTransport.update(stats);
|
|
488
601
|
this.observedIceTransports.set(stats.id, observedIceTransport);
|
|
489
602
|
this.emit('added-ice-transport', observedIceTransport);
|
|
490
603
|
}
|
|
491
|
-
|
|
604
|
+
else {
|
|
605
|
+
observedIceTransport.update(stats);
|
|
606
|
+
this.emit('updated-ice-transport', observedIceTransport);
|
|
607
|
+
}
|
|
492
608
|
return observedIceTransport;
|
|
493
609
|
}
|
|
494
610
|
_updateInboundRtpStats(stats) {
|
|
@@ -498,10 +614,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
498
614
|
return logger.warn(`ObservedPeerConnection received an invalid InboundRtpStats (missing timestamp OR id OR ssrc OR kind OR trackIdentifier field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
499
615
|
}
|
|
500
616
|
observedInboundRtp = new ObservedInboundRtp_1.ObservedInboundRtp(stats.timestamp, stats.id, stats.ssrc, stats.kind, stats.trackIdentifier, this);
|
|
617
|
+
observedInboundRtp.update(stats);
|
|
501
618
|
this.observedInboundRtps.set(stats.ssrc, observedInboundRtp);
|
|
502
619
|
this.emit('added-inbound-rtp', observedInboundRtp);
|
|
503
620
|
}
|
|
504
|
-
|
|
621
|
+
else {
|
|
622
|
+
observedInboundRtp.update(stats);
|
|
623
|
+
this.emit('updated-inbound-rtp', observedInboundRtp);
|
|
624
|
+
}
|
|
505
625
|
return observedInboundRtp;
|
|
506
626
|
}
|
|
507
627
|
_updateInboundTrackSample(stats) {
|
|
@@ -514,10 +634,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
514
634
|
const mediaPlayout = inboundRtp ?
|
|
515
635
|
[...this.observedMediaPlayouts.values()].find((mp) => mp.id === inboundRtp.playoutId) : undefined;
|
|
516
636
|
observedInboundTrack = new ObservedInboundTrack_1.ObservedInboundTrack(stats.timestamp, stats.id, stats.kind, this, inboundRtp, mediaPlayout);
|
|
637
|
+
observedInboundTrack.update(stats);
|
|
517
638
|
this.observedInboundTracks.set(stats.id, observedInboundTrack);
|
|
518
639
|
this.emit('added-inbound-track', observedInboundTrack);
|
|
519
640
|
}
|
|
520
|
-
|
|
641
|
+
else {
|
|
642
|
+
observedInboundTrack.update(stats);
|
|
643
|
+
this.emit('updated-inbound-track', observedInboundTrack);
|
|
644
|
+
}
|
|
521
645
|
return observedInboundTrack;
|
|
522
646
|
}
|
|
523
647
|
_updateMediaPlayoutStats(stats) {
|
|
@@ -527,10 +651,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
527
651
|
return logger.warn(`ObservedPeerConnection received an invalid InboundRtpStats (missing timestamp OR id OR kind OR trackIdentifier field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
528
652
|
}
|
|
529
653
|
observedMediaPlayout = new ObservedMediaPlayout_1.ObservedMediaPlayout(stats.timestamp, stats.id, stats.kind, this);
|
|
654
|
+
observedMediaPlayout.update(stats);
|
|
530
655
|
this.observedMediaPlayouts.set(stats.id, observedMediaPlayout);
|
|
531
656
|
this.emit('added-media-playout', observedMediaPlayout);
|
|
532
657
|
}
|
|
533
|
-
|
|
658
|
+
else {
|
|
659
|
+
observedMediaPlayout.update(stats);
|
|
660
|
+
this.emit('updated-media-playout', observedMediaPlayout);
|
|
661
|
+
}
|
|
534
662
|
return observedMediaPlayout;
|
|
535
663
|
}
|
|
536
664
|
_updateMediaSourceStats(stats) {
|
|
@@ -540,10 +668,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
540
668
|
return logger.warn(`ObservedPeerConnection received an invalid InboundRtpStats (missing timestamp OR id OR kind field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
541
669
|
}
|
|
542
670
|
observedMediaSource = new ObservedMediaSource_1.ObservedMediaSource(stats.timestamp, stats.id, stats.kind, this);
|
|
671
|
+
observedMediaSource.update(stats);
|
|
543
672
|
this.observedMediaSources.set(stats.id, observedMediaSource);
|
|
544
673
|
this.emit('added-media-source', observedMediaSource);
|
|
545
674
|
}
|
|
546
|
-
|
|
675
|
+
else {
|
|
676
|
+
observedMediaSource.update(stats);
|
|
677
|
+
this.emit('updated-media-source', observedMediaSource);
|
|
678
|
+
}
|
|
547
679
|
return observedMediaSource;
|
|
548
680
|
}
|
|
549
681
|
_updateOutboundRtpStats(stats) {
|
|
@@ -553,10 +685,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
553
685
|
return logger.warn(`ObservedPeerConnection received an invalid OutboundRtpStats (missing timestamp OR id OR ssrc OR kind field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
554
686
|
}
|
|
555
687
|
observedOutboundRtp = new ObservedOutboundRtp_1.ObservedOutboundRtp(stats.timestamp, stats.id, stats.ssrc, stats.kind, this);
|
|
688
|
+
observedOutboundRtp.update(stats);
|
|
556
689
|
this.observedOutboundRtps.set(stats.ssrc, observedOutboundRtp);
|
|
557
690
|
this.emit('added-outbound-rtp', observedOutboundRtp);
|
|
558
691
|
}
|
|
559
|
-
|
|
692
|
+
else {
|
|
693
|
+
observedOutboundRtp.update(stats);
|
|
694
|
+
this.emit('updated-outbound-rtp', observedOutboundRtp);
|
|
695
|
+
}
|
|
560
696
|
return observedOutboundRtp;
|
|
561
697
|
}
|
|
562
698
|
_updateOutboundTrackSample(stats) {
|
|
@@ -569,10 +705,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
569
705
|
const outboundRtps = observedMediaSource
|
|
570
706
|
? [...this.observedOutboundRtps.values()].filter((outboundRtp) => outboundRtp.mediaSourceId === observedMediaSource?.id) : undefined;
|
|
571
707
|
observedOutboundTrack = new ObservedOutboundTrack_1.ObservedOutboundTrack(stats.timestamp, stats.id, stats.kind, this, outboundRtps, observedMediaSource);
|
|
708
|
+
observedOutboundTrack.update(stats);
|
|
572
709
|
this.observedOutboundTracks.set(stats.id, observedOutboundTrack);
|
|
573
710
|
this.emit('added-outbound-track', observedOutboundTrack);
|
|
574
711
|
}
|
|
575
|
-
|
|
712
|
+
else {
|
|
713
|
+
observedOutboundTrack.update(stats);
|
|
714
|
+
this.emit('updated-outbound-track', observedOutboundTrack);
|
|
715
|
+
}
|
|
576
716
|
return observedOutboundTrack;
|
|
577
717
|
}
|
|
578
718
|
_updatePeerConnectionTransportStats(stats) {
|
|
@@ -582,10 +722,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
582
722
|
return logger.warn(`ObservedPeerConnection received an invalid PeerConnectionTransportStats (missing timestamp OR id field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
583
723
|
}
|
|
584
724
|
observedPeerConnectionTransport = new ObservedPeerConnectionTransport_1.ObservedPeerConnectionTransport(stats.timestamp, stats.id, this);
|
|
725
|
+
observedPeerConnectionTransport.update(stats);
|
|
585
726
|
this.observedPeerConnectionTransports.set(stats.id, observedPeerConnectionTransport);
|
|
586
727
|
this.emit('added-peer-connection-transport', observedPeerConnectionTransport);
|
|
587
728
|
}
|
|
588
|
-
|
|
729
|
+
else {
|
|
730
|
+
observedPeerConnectionTransport.update(stats);
|
|
731
|
+
this.emit('updated-peer-connection-transport', observedPeerConnectionTransport);
|
|
732
|
+
}
|
|
589
733
|
return observedPeerConnectionTransport;
|
|
590
734
|
}
|
|
591
735
|
_updateRemoteInboundRtpStats(stats) {
|
|
@@ -595,10 +739,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
595
739
|
return logger.warn(`ObservedPeerConnection received an invalid RemoteInboundRtpStats (missing timestamp OR id OR ssrc OR kind field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
596
740
|
}
|
|
597
741
|
observedRemoteInboundRtp = new ObservedRemoteInboundRtp_1.ObservedRemoteInboundRtp(stats.timestamp, stats.id, stats.ssrc, stats.kind, this);
|
|
742
|
+
observedRemoteInboundRtp.update(stats);
|
|
598
743
|
this.observedRemoteInboundRtps.set(stats.ssrc, observedRemoteInboundRtp);
|
|
599
744
|
this.emit('added-remote-inbound-rtp', observedRemoteInboundRtp);
|
|
600
745
|
}
|
|
601
|
-
|
|
746
|
+
else {
|
|
747
|
+
observedRemoteInboundRtp.update(stats);
|
|
748
|
+
this.emit('updated-remote-inbound-rtp', observedRemoteInboundRtp);
|
|
749
|
+
}
|
|
602
750
|
return observedRemoteInboundRtp;
|
|
603
751
|
}
|
|
604
752
|
_updateRemoteOutboundRtpStats(stats) {
|
|
@@ -608,10 +756,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
608
756
|
return logger.warn(`ObservedPeerConnection received an invalid RemoteOutboundRtpStats (missing timestamp OR id OR ssrc OR kind field). PeerConnectionId: ${this.peerConnectionId} ClientId: ${this.client.clientId}, CallId: ${this.client.call.callId}`, stats);
|
|
609
757
|
}
|
|
610
758
|
observedRemoteOutboundRtp = new ObservedRemoteOutboundRtp_1.ObservedRemoteOutboundRtp(stats.timestamp, stats.id, stats.ssrc, stats.kind, this);
|
|
759
|
+
observedRemoteOutboundRtp.update(stats);
|
|
611
760
|
this.observedRemoteOutboundRtps.set(stats.ssrc, observedRemoteOutboundRtp);
|
|
612
761
|
this.emit('added-remote-outbound-rtp', observedRemoteOutboundRtp);
|
|
613
762
|
}
|
|
614
|
-
|
|
763
|
+
else {
|
|
764
|
+
observedRemoteOutboundRtp.update(stats);
|
|
765
|
+
this.emit('updated-remote-outbound-rtp', observedRemoteOutboundRtp);
|
|
766
|
+
}
|
|
615
767
|
return observedRemoteOutboundRtp;
|
|
616
768
|
}
|
|
617
769
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|