@observertc/observer-js 1.0.1-c3edea3.0 → 1.0.1-c665f5a.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/README.md +535 -1
- package/lib/ObservedCall.d.ts +45 -7
- package/lib/ObservedCall.d.ts.map +1 -1
- package/lib/ObservedCall.js +156 -14
- 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 +78 -19
- package/lib/ObservedClient.d.ts.map +1 -1
- package/lib/ObservedClient.js +537 -80
- package/lib/ObservedClientEventMonitor.d.ts +91 -0
- package/lib/ObservedClientEventMonitor.d.ts.map +1 -0
- package/lib/ObservedClientEventMonitor.js +254 -0
- package/lib/ObservedClientSummary.d.ts +23 -0
- package/lib/ObservedClientSummary.d.ts.map +1 -0
- package/lib/ObservedClientSummary.js +2 -0
- package/lib/ObservedTURN.d.ts +31 -0
- package/lib/ObservedTURN.d.ts.map +1 -0
- package/lib/ObservedTURN.js +59 -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 +42 -22
- package/lib/Observer.d.ts.map +1 -1
- package/lib/Observer.js +115 -40
- package/lib/ObserverEventMonitor.d.ts +138 -0
- package/lib/ObserverEventMonitor.d.ts.map +1 -0
- package/lib/ObserverEventMonitor.js +433 -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 +22 -16
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +25 -17
- package/lib/mediasoup/ObservedMediasoupRouter.d.ts +7 -0
- package/lib/mediasoup/ObservedMediasoupRouter.d.ts.map +1 -0
- package/lib/mediasoup/ObservedMediasoupRouter.js +12 -0
- package/lib/schema/ClientEventTypes.d.ts +228 -0
- package/lib/schema/ClientEventTypes.d.ts.map +1 -0
- package/lib/schema/ClientEventTypes.js +41 -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/lib/utils/RemoteTrackResolver.d.ts +2 -2
- package/lib/utils/RemoteTrackResolver.d.ts.map +1 -1
- package/lib/{ObservedCertificate.d.ts → webrtc/ObservedCertificate.d.ts} +1 -1
- package/lib/webrtc/ObservedCertificate.d.ts.map +1 -0
- package/lib/{ObservedCodec.d.ts → webrtc/ObservedCodec.d.ts} +1 -1
- package/lib/webrtc/ObservedCodec.d.ts.map +1 -0
- package/lib/{ObservedDataChannel.d.ts → webrtc/ObservedDataChannel.d.ts} +7 -1
- package/lib/webrtc/ObservedDataChannel.d.ts.map +1 -0
- package/lib/{ObservedDataChannel.js → webrtc/ObservedDataChannel.js} +30 -0
- package/lib/{ObservedIceCandidate.d.ts → webrtc/ObservedIceCandidate.d.ts} +1 -1
- package/lib/webrtc/ObservedIceCandidate.d.ts.map +1 -0
- package/lib/{ObservedIceCandidatePair.d.ts → webrtc/ObservedIceCandidatePair.d.ts} +7 -2
- package/lib/webrtc/ObservedIceCandidatePair.d.ts.map +1 -0
- package/lib/{ObservedIceCandidatePair.js → webrtc/ObservedIceCandidatePair.js} +45 -1
- package/lib/{ObservedIceTransport.d.ts → webrtc/ObservedIceTransport.d.ts} +5 -1
- package/lib/webrtc/ObservedIceTransport.d.ts.map +1 -0
- package/lib/{ObservedIceTransport.js → webrtc/ObservedIceTransport.js} +28 -0
- package/lib/{ObservedInboundRtp.d.ts → webrtc/ObservedInboundRtp.d.ts} +2 -2
- package/lib/webrtc/ObservedInboundRtp.d.ts.map +1 -0
- package/lib/{ObservedInboundTrack.d.ts → webrtc/ObservedInboundTrack.d.ts} +7 -4
- package/lib/webrtc/ObservedInboundTrack.d.ts.map +1 -0
- package/lib/{ObservedInboundTrack.js → webrtc/ObservedInboundTrack.js} +4 -1
- package/lib/{ObservedMediaPlayout.d.ts → webrtc/ObservedMediaPlayout.d.ts} +2 -2
- package/lib/webrtc/ObservedMediaPlayout.d.ts.map +1 -0
- package/lib/{ObservedMediaSource.d.ts → webrtc/ObservedMediaSource.d.ts} +2 -2
- package/lib/webrtc/ObservedMediaSource.d.ts.map +1 -0
- package/lib/{ObservedOutboundRtp.d.ts → webrtc/ObservedOutboundRtp.d.ts} +2 -2
- package/lib/webrtc/ObservedOutboundRtp.d.ts.map +1 -0
- package/lib/{ObservedOutboundTrack.d.ts → webrtc/ObservedOutboundTrack.d.ts} +7 -4
- package/lib/webrtc/ObservedOutboundTrack.d.ts.map +1 -0
- package/lib/{ObservedOutboundTrack.js → webrtc/ObservedOutboundTrack.js} +4 -1
- package/lib/{ObservedPeerConnection.d.ts → webrtc/ObservedPeerConnection.d.ts} +39 -5
- package/lib/webrtc/ObservedPeerConnection.d.ts.map +1 -0
- package/lib/{ObservedPeerConnection.js → webrtc/ObservedPeerConnection.js} +185 -30
- package/lib/{ObservedPeerConnectionTransport.d.ts → webrtc/ObservedPeerConnectionTransport.d.ts} +1 -1
- package/lib/webrtc/ObservedPeerConnectionTransport.d.ts.map +1 -0
- package/lib/{ObservedRemoteInboundRtp.d.ts → webrtc/ObservedRemoteInboundRtp.d.ts} +2 -2
- package/lib/webrtc/ObservedRemoteInboundRtp.d.ts.map +1 -0
- package/lib/{ObservedRemoteOutboundRtp.d.ts → webrtc/ObservedRemoteOutboundRtp.d.ts} +2 -2
- package/lib/webrtc/ObservedRemoteOutboundRtp.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/ObservedCall.ts +233 -17
- package/src/ObservedCallEventMonitor.ts +392 -0
- package/src/ObservedCallSummary.ts +22 -0
- package/src/ObservedClient.ts +644 -92
- package/src/ObservedClientEventMonitor.ts +309 -0
- package/src/ObservedClientSummary.ts +24 -0
- package/src/ObservedTURN.ts +87 -0
- package/src/ObservedTurnServer.ts +72 -0
- package/src/Observer.ts +168 -64
- package/src/ObserverEventMonitor.ts +551 -0
- package/src/ObserverSummary.ts +15 -0
- package/src/common/utils.ts +12 -2
- package/src/index.ts +22 -17
- package/src/mediasoup/ObservedMediasoupRouter.ts +12 -0
- package/src/schema/ClientEventTypes.ts +280 -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/src/utils/RemoteTrackResolver.ts +2 -2
- package/src/{ObservedCertificate.ts → webrtc/ObservedCertificate.ts} +1 -1
- package/src/{ObservedCodec.ts → webrtc/ObservedCodec.ts} +1 -1
- package/src/{ObservedDataChannel.ts → webrtc/ObservedDataChannel.ts} +33 -1
- package/src/{ObservedIceCandidate.ts → webrtc/ObservedIceCandidate.ts} +1 -1
- package/src/{ObservedIceCandidatePair.ts → webrtc/ObservedIceCandidatePair.ts} +45 -3
- package/src/{ObservedIceTransport.ts → webrtc/ObservedIceTransport.ts} +30 -1
- package/src/{ObservedInboundRtp.ts → webrtc/ObservedInboundRtp.ts} +2 -2
- package/src/{ObservedInboundTrack.ts → webrtc/ObservedInboundTrack.ts} +9 -4
- package/src/{ObservedMediaPlayout.ts → webrtc/ObservedMediaPlayout.ts} +2 -2
- package/src/{ObservedMediaSource.ts → webrtc/ObservedMediaSource.ts} +2 -2
- package/src/{ObservedOutboundRtp.ts → webrtc/ObservedOutboundRtp.ts} +2 -2
- package/src/{ObservedOutboundTrack.ts → webrtc/ObservedOutboundTrack.ts} +9 -4
- package/src/{ObservedPeerConnection.ts → webrtc/ObservedPeerConnection.ts} +240 -51
- package/src/{ObservedPeerConnectionTransport.ts → webrtc/ObservedPeerConnectionTransport.ts} +1 -1
- package/src/{ObservedRemoteInboundRtp.ts → webrtc/ObservedRemoteInboundRtp.ts} +2 -2
- package/src/{ObservedRemoteOutboundRtp.ts → webrtc/ObservedRemoteOutboundRtp.ts} +2 -2
- package/tsconfig.json +1 -1
- package/lib/ObservedCertificate.d.ts.map +0 -1
- package/lib/ObservedCodec.d.ts.map +0 -1
- package/lib/ObservedDataChannel.d.ts.map +0 -1
- package/lib/ObservedIceCandidate.d.ts.map +0 -1
- package/lib/ObservedIceCandidatePair.d.ts.map +0 -1
- package/lib/ObservedIceTransport.d.ts.map +0 -1
- package/lib/ObservedInboundRtp.d.ts.map +0 -1
- package/lib/ObservedInboundTrack.d.ts.map +0 -1
- package/lib/ObservedMediaPlayout.d.ts.map +0 -1
- package/lib/ObservedMediaSource.d.ts.map +0 -1
- package/lib/ObservedOutboundRtp.d.ts.map +0 -1
- package/lib/ObservedOutboundTrack.d.ts.map +0 -1
- package/lib/ObservedPeerConnection.d.ts.map +0 -1
- package/lib/ObservedPeerConnectionTransport.d.ts.map +0 -1
- package/lib/ObservedRemoteInboundRtp.d.ts.map +0 -1
- package/lib/ObservedRemoteOutboundRtp.d.ts.map +0 -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/lib/{ObservedCertificate.js → webrtc/ObservedCertificate.js} +0 -0
- /package/lib/{ObservedCodec.js → webrtc/ObservedCodec.js} +0 -0
- /package/lib/{ObservedIceCandidate.js → webrtc/ObservedIceCandidate.js} +0 -0
- /package/lib/{ObservedInboundRtp.js → webrtc/ObservedInboundRtp.js} +0 -0
- /package/lib/{ObservedMediaPlayout.js → webrtc/ObservedMediaPlayout.js} +0 -0
- /package/lib/{ObservedMediaSource.js → webrtc/ObservedMediaSource.js} +0 -0
- /package/lib/{ObservedOutboundRtp.js → webrtc/ObservedOutboundRtp.js} +0 -0
- /package/lib/{ObservedPeerConnectionTransport.js → webrtc/ObservedPeerConnectionTransport.js} +0 -0
- /package/lib/{ObservedRemoteInboundRtp.js → webrtc/ObservedRemoteInboundRtp.js} +0 -0
- /package/lib/{ObservedRemoteOutboundRtp.js → webrtc/ObservedRemoteOutboundRtp.js} +0 -0
- /package/src/{utils → updaters}/CallUpdater.ts +0 -0
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ObservedPeerConnection = void 0;
|
|
4
4
|
const events_1 = require("events");
|
|
5
5
|
const ObservedInboundRtp_1 = require("./ObservedInboundRtp");
|
|
6
|
-
const logger_1 = require("
|
|
6
|
+
const logger_1 = require("../common/logger");
|
|
7
7
|
const ObservedOutboundRtp_1 = require("./ObservedOutboundRtp");
|
|
8
8
|
const ObservedCertificate_1 = require("./ObservedCertificate");
|
|
9
9
|
const ObservedCodec_1 = require("./ObservedCodec");
|
|
@@ -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,18 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
34
35
|
// timestamp of the PEER_CONNECTION_CLOSED event
|
|
35
36
|
closedAt;
|
|
36
37
|
updated = Date.now();
|
|
38
|
+
connectionState;
|
|
39
|
+
iceConnectionState;
|
|
40
|
+
iceGatheringState;
|
|
41
|
+
availableIncomingBitrate = 0;
|
|
42
|
+
availableOutgoingBitrate = 0;
|
|
37
43
|
totalInboundPacketsLost = 0;
|
|
38
44
|
totalInboundPacketsReceived = 0;
|
|
39
45
|
totalOutboundPacketsSent = 0;
|
|
40
46
|
totalDataChannelBytesSent = 0;
|
|
41
47
|
totalDataChannelBytesReceived = 0;
|
|
48
|
+
totalDataChannelMessagesSent = 0;
|
|
49
|
+
totalDataChannelMessagesReceived = 0;
|
|
42
50
|
totalSentAudioBytes = 0;
|
|
43
51
|
totalSentVideoBytes = 0;
|
|
44
52
|
totalSentAudioPackets = 0;
|
|
@@ -52,6 +60,8 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
52
60
|
deltaOutboundPacketsSent = 0;
|
|
53
61
|
deltaDataChannelBytesSent = 0;
|
|
54
62
|
deltaDataChannelBytesReceived = 0;
|
|
63
|
+
deltaDataChannelMessagesSent = 0;
|
|
64
|
+
deltaDataChannelMessagesReceived = 0;
|
|
55
65
|
deltaInboundReceivedBytes = 0;
|
|
56
66
|
deltaOutboundSentBytes = 0;
|
|
57
67
|
deltaReceivedAudioBytes = 0;
|
|
@@ -60,16 +70,19 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
60
70
|
deltaReceivedVideoPackets = 0;
|
|
61
71
|
deltaSentAudioBytes = 0;
|
|
62
72
|
deltaSentVideoBytes = 0;
|
|
73
|
+
deltaTransportSentBytes = 0;
|
|
74
|
+
deltaTransportReceivedBytes = 0;
|
|
63
75
|
receivingPacketsPerSecond = 0;
|
|
64
76
|
sendingPacketsPerSecond = 0;
|
|
65
77
|
sendingAudioBitrate = 0;
|
|
66
78
|
sendingVideoBitrate = 0;
|
|
67
79
|
receivingAudioBitrate = 0;
|
|
68
80
|
receivingVideoBitrate = 0;
|
|
69
|
-
|
|
70
|
-
|
|
81
|
+
currentRttInMs;
|
|
82
|
+
currentJitter;
|
|
71
83
|
usingTCP = false;
|
|
72
84
|
usingTURN = false;
|
|
85
|
+
observedTurnServer;
|
|
73
86
|
observedCertificates = new Map();
|
|
74
87
|
observedCodecs = new Map();
|
|
75
88
|
observedDataChannels = new Map();
|
|
@@ -142,6 +155,11 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
142
155
|
return this.iceTransports.map((iceTransport) => iceTransport.getSelectedCandidatePair())
|
|
143
156
|
.filter((pair) => pair !== undefined);
|
|
144
157
|
}
|
|
158
|
+
get selectedIceCandiadtePairForTurn() {
|
|
159
|
+
return this.selectedIceCandidatePairs
|
|
160
|
+
.filter((pair) => pair.getLocalCandidate()?.candidateType === 'relay' &&
|
|
161
|
+
pair.getRemoteCandidate()?.url?.startsWith('turn:'));
|
|
162
|
+
}
|
|
145
163
|
close() {
|
|
146
164
|
if (this.closed)
|
|
147
165
|
return;
|
|
@@ -161,12 +179,17 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
161
179
|
this.observedPeerConnectionTransports.clear();
|
|
162
180
|
this.observedRemoteInboundRtps.clear();
|
|
163
181
|
this.observedRemoteOutboundRtps.clear();
|
|
182
|
+
this.client.call.observer.observedTURN.removePeerConnection(this);
|
|
183
|
+
if (!this.closedAt)
|
|
184
|
+
this.closedAt = Date.now();
|
|
164
185
|
this.emit('close');
|
|
165
186
|
}
|
|
166
187
|
accept(sample) {
|
|
167
188
|
if (this.closed)
|
|
168
189
|
return;
|
|
169
190
|
this._visited = true;
|
|
191
|
+
this.availableIncomingBitrate = 0;
|
|
192
|
+
this.availableOutgoingBitrate = 0;
|
|
170
193
|
this.deltaInboundPacketsLost = 0;
|
|
171
194
|
this.deltaInboundPacketsReceived = 0;
|
|
172
195
|
this.deltaOutboundPacketsSent = 0;
|
|
@@ -180,6 +203,8 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
180
203
|
this.deltaReceivedVideoPackets = 0;
|
|
181
204
|
this.deltaSentAudioBytes = 0;
|
|
182
205
|
this.deltaSentVideoBytes = 0;
|
|
206
|
+
this.deltaTransportReceivedBytes = 0;
|
|
207
|
+
this.deltaTransportSentBytes = 0;
|
|
183
208
|
this.sendingAudioBitrate = 0;
|
|
184
209
|
this.sendingVideoBitrate = 0;
|
|
185
210
|
this.receivingAudioBitrate = 0;
|
|
@@ -187,6 +212,8 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
187
212
|
const now = Date.now();
|
|
188
213
|
const elapsedTimeInMs = now - this.updated;
|
|
189
214
|
const elapsedTimeInSec = elapsedTimeInMs / 1000;
|
|
215
|
+
const rttMeasurementsInSec = [];
|
|
216
|
+
const jitterMeasurements = [];
|
|
190
217
|
if (sample.certificates) {
|
|
191
218
|
for (const certificate of sample.certificates) {
|
|
192
219
|
this._updateCertificateStats(certificate);
|
|
@@ -199,7 +226,13 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
199
226
|
}
|
|
200
227
|
if (sample.dataChannels) {
|
|
201
228
|
for (const dataChannel of sample.dataChannels) {
|
|
202
|
-
this._updateDataChannelStats(dataChannel);
|
|
229
|
+
const observedDataChannel = this._updateDataChannelStats(dataChannel);
|
|
230
|
+
if (!observedDataChannel)
|
|
231
|
+
continue;
|
|
232
|
+
this.deltaDataChannelBytesSent += observedDataChannel.deltaBytesSent;
|
|
233
|
+
this.deltaDataChannelBytesReceived += observedDataChannel.deltaBytesReceived;
|
|
234
|
+
this.deltaDataChannelMessagesSent += observedDataChannel.deltaMessagesSent;
|
|
235
|
+
this.deltaDataChannelMessagesReceived += observedDataChannel.deltaMessagesReceived;
|
|
203
236
|
}
|
|
204
237
|
}
|
|
205
238
|
if (sample.iceCandidates) {
|
|
@@ -209,12 +242,26 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
209
242
|
}
|
|
210
243
|
if (sample.iceCandidatePairs) {
|
|
211
244
|
for (const iceCandidatePair of sample.iceCandidatePairs) {
|
|
212
|
-
this._updateIceCandidatePairStats(iceCandidatePair);
|
|
245
|
+
const observedCandidatePair = this._updateIceCandidatePairStats(iceCandidatePair);
|
|
246
|
+
if (!observedCandidatePair)
|
|
247
|
+
continue;
|
|
248
|
+
if (observedCandidatePair.currentRoundTripTime) {
|
|
249
|
+
rttMeasurementsInSec.push(observedCandidatePair.currentRoundTripTime);
|
|
250
|
+
}
|
|
251
|
+
if (observedCandidatePair.availableIncomingBitrate) {
|
|
252
|
+
this.availableIncomingBitrate += observedCandidatePair.availableIncomingBitrate;
|
|
253
|
+
}
|
|
254
|
+
if (observedCandidatePair.availableOutgoingBitrate) {
|
|
255
|
+
this.availableOutgoingBitrate += observedCandidatePair.availableOutgoingBitrate;
|
|
256
|
+
}
|
|
213
257
|
}
|
|
214
258
|
}
|
|
215
259
|
if (sample.iceTransports) {
|
|
216
260
|
for (const iceTransport of sample.iceTransports) {
|
|
217
|
-
this._updateIceTransportStats(iceTransport);
|
|
261
|
+
const observedIceTransport = this._updateIceTransportStats(iceTransport);
|
|
262
|
+
if (!observedIceTransport)
|
|
263
|
+
return;
|
|
264
|
+
observedIceTransport.bytesReceived;
|
|
218
265
|
}
|
|
219
266
|
}
|
|
220
267
|
if (sample.inboundRtps) {
|
|
@@ -235,6 +282,9 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
235
282
|
this.deltaReceivedVideoPackets += observedInboundRtp.deltaReceivedPackets;
|
|
236
283
|
break;
|
|
237
284
|
}
|
|
285
|
+
if (observedInboundRtp.jitter) {
|
|
286
|
+
jitterMeasurements.push(observedInboundRtp.jitter);
|
|
287
|
+
}
|
|
238
288
|
}
|
|
239
289
|
}
|
|
240
290
|
if (sample.mediaPlayouts) {
|
|
@@ -268,12 +318,19 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
268
318
|
}
|
|
269
319
|
if (sample.peerConnectionTransports) {
|
|
270
320
|
for (const peerConnectionTransport of sample.peerConnectionTransports) {
|
|
271
|
-
this._updatePeerConnectionTransportStats(peerConnectionTransport);
|
|
321
|
+
const observedTransport = this._updatePeerConnectionTransportStats(peerConnectionTransport);
|
|
322
|
+
if (!observedTransport)
|
|
323
|
+
continue;
|
|
272
324
|
}
|
|
273
325
|
}
|
|
274
326
|
if (sample.remoteInboundRtps) {
|
|
275
327
|
for (const remoteInboundRtp of sample.remoteInboundRtps) {
|
|
276
|
-
this._updateRemoteInboundRtpStats(remoteInboundRtp);
|
|
328
|
+
const observedRemoteInboundRtp = this._updateRemoteInboundRtpStats(remoteInboundRtp);
|
|
329
|
+
if (!observedRemoteInboundRtp)
|
|
330
|
+
continue;
|
|
331
|
+
if (observedRemoteInboundRtp.roundTripTime) {
|
|
332
|
+
rttMeasurementsInSec.push(observedRemoteInboundRtp.roundTripTime);
|
|
333
|
+
}
|
|
277
334
|
}
|
|
278
335
|
}
|
|
279
336
|
if (sample.remoteOutboundRtps) {
|
|
@@ -300,6 +357,8 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
300
357
|
this.totalOutboundPacketsSent += this.deltaOutboundPacketsSent;
|
|
301
358
|
this.totalDataChannelBytesSent += this.deltaDataChannelBytesSent;
|
|
302
359
|
this.totalDataChannelBytesReceived += this.deltaDataChannelBytesReceived;
|
|
360
|
+
this.totalDataChannelMessagesSent += this.deltaDataChannelMessagesSent;
|
|
361
|
+
this.totalDataChannelMessagesReceived += this.deltaDataChannelMessagesReceived;
|
|
303
362
|
this.totalReceivedAudioBytes += this.deltaReceivedAudioBytes;
|
|
304
363
|
this.totalReceivedVideoBytes += this.deltaReceivedVideoBytes;
|
|
305
364
|
this.totalSentAudioBytes += this.deltaSentAudioBytes;
|
|
@@ -310,17 +369,53 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
310
369
|
this.totalSentVideoPackets += this.deltaSentVideoBytes;
|
|
311
370
|
this.receivingPacketsPerSecond = this.deltaInboundPacketsReceived / elapsedTimeInSec;
|
|
312
371
|
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;
|
|
372
|
+
this.sendingAudioBitrate = (this.deltaSentAudioBytes * 8) / elapsedTimeInSec;
|
|
373
|
+
this.sendingVideoBitrate = (this.deltaSentVideoBytes * 8) / elapsedTimeInSec;
|
|
374
|
+
this.receivingAudioBitrate = (this.deltaReceivedAudioBytes * 8) / elapsedTimeInSec;
|
|
375
|
+
this.receivingVideoBitrate = (this.deltaReceivedVideoBytes * 8) / elapsedTimeInSec;
|
|
376
|
+
if (rttMeasurementsInSec.length > 0) {
|
|
377
|
+
this.currentRttInMs = (0, utils_1.getMedian)(rttMeasurementsInSec, false) * 1000;
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
this.currentRttInMs = undefined;
|
|
381
|
+
}
|
|
382
|
+
if (jitterMeasurements.length > 0) {
|
|
383
|
+
this.currentJitter = (0, utils_1.getMedian)(jitterMeasurements, false);
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
this.currentJitter = undefined;
|
|
387
|
+
}
|
|
388
|
+
const wasUsingTURN = this.usingTURN;
|
|
317
389
|
const selectedIceCandidatePairs = this.selectedIceCandidatePairs;
|
|
318
|
-
|
|
319
|
-
this.
|
|
320
|
-
|
|
390
|
+
const selectedCandidatePairForTurn = [];
|
|
391
|
+
this.usingTCP = false;
|
|
392
|
+
this.usingTURN = false;
|
|
393
|
+
for (const selectedCandidatePair of selectedIceCandidatePairs) {
|
|
394
|
+
if (selectedCandidatePair.getLocalCandidate()?.protocol === 'tcp') {
|
|
395
|
+
this.usingTCP = true;
|
|
396
|
+
}
|
|
397
|
+
if (selectedCandidatePair.getLocalCandidate()?.candidateType === 'relay' && selectedCandidatePair.getRemoteCandidate()?.url?.startsWith('turn:')) {
|
|
398
|
+
selectedCandidatePairForTurn.push(selectedCandidatePair);
|
|
399
|
+
this.usingTURN = true;
|
|
400
|
+
}
|
|
401
|
+
this.deltaTransportReceivedBytes += selectedCandidatePair.deltaBytesReceived;
|
|
402
|
+
this.deltaTransportSentBytes += selectedCandidatePair.deltaBytesSent;
|
|
403
|
+
}
|
|
404
|
+
if (this.usingTURN) {
|
|
405
|
+
if (!this.observedTurnServer) {
|
|
406
|
+
this.observedTurnServer = this.client.call.observer.observedTURN.addPeerConnection(this);
|
|
407
|
+
}
|
|
408
|
+
this.observedTurnServer?.updateTurnUsage(...selectedCandidatePairForTurn);
|
|
409
|
+
}
|
|
410
|
+
else if (wasUsingTURN) {
|
|
411
|
+
if (!this.usingTURN) {
|
|
412
|
+
this.client.call.observer.observedTURN.removePeerConnection(this);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
321
415
|
this.calculatedScore.value = sample.score;
|
|
322
416
|
this.updated = now;
|
|
323
417
|
this._checkVisited();
|
|
418
|
+
this.emit('update');
|
|
324
419
|
}
|
|
325
420
|
_checkVisited() {
|
|
326
421
|
for (const certificate of [...this.observedCertificates.values()]) {
|
|
@@ -420,10 +515,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
420
515
|
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
516
|
}
|
|
422
517
|
observedCertificate = new ObservedCertificate_1.ObservedCertificate(stats.timestamp, stats.id, this);
|
|
518
|
+
observedCertificate.update(stats);
|
|
423
519
|
this.observedCertificates.set(stats.id, observedCertificate);
|
|
424
520
|
this.emit('added-certificate', observedCertificate);
|
|
425
521
|
}
|
|
426
|
-
|
|
522
|
+
else {
|
|
523
|
+
observedCertificate.update(stats);
|
|
524
|
+
this.emit('updated-certificate', observedCertificate);
|
|
525
|
+
}
|
|
427
526
|
return observedCertificate;
|
|
428
527
|
}
|
|
429
528
|
_updateCodecStats(stats) {
|
|
@@ -433,10 +532,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
433
532
|
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
533
|
}
|
|
435
534
|
observedCodec = new ObservedCodec_1.ObservedCodec(stats.timestamp, stats.id, stats.mimeType, this);
|
|
535
|
+
observedCodec.update(stats);
|
|
436
536
|
this.observedCodecs.set(stats.id, observedCodec);
|
|
437
537
|
this.emit('added-codec', observedCodec);
|
|
438
538
|
}
|
|
439
|
-
|
|
539
|
+
else {
|
|
540
|
+
observedCodec.update(stats);
|
|
541
|
+
}
|
|
542
|
+
this.emit('updated-codec', observedCodec);
|
|
440
543
|
return observedCodec;
|
|
441
544
|
}
|
|
442
545
|
_updateDataChannelStats(stats) {
|
|
@@ -446,10 +549,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
446
549
|
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
550
|
}
|
|
448
551
|
observedDataChannel = new ObservedDataChannel_1.ObservedDataChannel(stats.timestamp, stats.id, this);
|
|
552
|
+
observedDataChannel.update(stats);
|
|
449
553
|
this.observedDataChannels.set(stats.id, observedDataChannel);
|
|
450
554
|
this.emit('added-data-channel', observedDataChannel);
|
|
451
555
|
}
|
|
452
|
-
|
|
556
|
+
else {
|
|
557
|
+
observedDataChannel.update(stats);
|
|
558
|
+
}
|
|
559
|
+
this.emit('updated-data-channel', observedDataChannel);
|
|
453
560
|
return observedDataChannel;
|
|
454
561
|
}
|
|
455
562
|
_updateIceCandidateStats(stats) {
|
|
@@ -459,10 +566,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
459
566
|
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
567
|
}
|
|
461
568
|
observedIceCandidate = new ObservedIceCandidate_1.ObservedIceCandidate(stats.timestamp, stats.id, this);
|
|
569
|
+
observedIceCandidate.update(stats);
|
|
462
570
|
this.observedIceCandidates.set(stats.id, observedIceCandidate);
|
|
463
571
|
this.emit('added-ice-candidate', observedIceCandidate);
|
|
464
572
|
}
|
|
465
|
-
|
|
573
|
+
else {
|
|
574
|
+
observedIceCandidate.update(stats);
|
|
575
|
+
}
|
|
576
|
+
this.emit('updated-ice-candidate', observedIceCandidate);
|
|
466
577
|
return observedIceCandidate;
|
|
467
578
|
}
|
|
468
579
|
_updateIceCandidatePairStats(stats) {
|
|
@@ -472,10 +583,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
472
583
|
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
584
|
}
|
|
474
585
|
observedIceCandidatePair = new ObservedIceCandidatePair_1.ObservedIceCandidatePair(stats.timestamp, stats.id, this);
|
|
586
|
+
observedIceCandidatePair.update(stats);
|
|
475
587
|
this.observedIceCandidatesPair.set(stats.id, observedIceCandidatePair);
|
|
476
588
|
this.emit('added-ice-candidate-pair', observedIceCandidatePair);
|
|
477
589
|
}
|
|
478
|
-
|
|
590
|
+
else {
|
|
591
|
+
observedIceCandidatePair.update(stats);
|
|
592
|
+
}
|
|
593
|
+
this.emit('updated-ice-candidate-pair', observedIceCandidatePair);
|
|
479
594
|
return observedIceCandidatePair;
|
|
480
595
|
}
|
|
481
596
|
_updateIceTransportStats(stats) {
|
|
@@ -485,10 +600,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
485
600
|
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
601
|
}
|
|
487
602
|
observedIceTransport = new ObservedIceTransport_1.ObservedIceTransport(stats.timestamp, stats.id, this);
|
|
603
|
+
observedIceTransport.update(stats);
|
|
488
604
|
this.observedIceTransports.set(stats.id, observedIceTransport);
|
|
489
605
|
this.emit('added-ice-transport', observedIceTransport);
|
|
490
606
|
}
|
|
491
|
-
|
|
607
|
+
else {
|
|
608
|
+
observedIceTransport.update(stats);
|
|
609
|
+
}
|
|
610
|
+
this.emit('updated-ice-transport', observedIceTransport);
|
|
492
611
|
return observedIceTransport;
|
|
493
612
|
}
|
|
494
613
|
_updateInboundRtpStats(stats) {
|
|
@@ -498,10 +617,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
498
617
|
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
618
|
}
|
|
500
619
|
observedInboundRtp = new ObservedInboundRtp_1.ObservedInboundRtp(stats.timestamp, stats.id, stats.ssrc, stats.kind, stats.trackIdentifier, this);
|
|
620
|
+
observedInboundRtp.update(stats);
|
|
501
621
|
this.observedInboundRtps.set(stats.ssrc, observedInboundRtp);
|
|
502
622
|
this.emit('added-inbound-rtp', observedInboundRtp);
|
|
503
623
|
}
|
|
504
|
-
|
|
624
|
+
else {
|
|
625
|
+
observedInboundRtp.update(stats);
|
|
626
|
+
}
|
|
627
|
+
this.emit('updated-inbound-rtp', observedInboundRtp);
|
|
505
628
|
return observedInboundRtp;
|
|
506
629
|
}
|
|
507
630
|
_updateInboundTrackSample(stats) {
|
|
@@ -514,10 +637,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
514
637
|
const mediaPlayout = inboundRtp ?
|
|
515
638
|
[...this.observedMediaPlayouts.values()].find((mp) => mp.id === inboundRtp.playoutId) : undefined;
|
|
516
639
|
observedInboundTrack = new ObservedInboundTrack_1.ObservedInboundTrack(stats.timestamp, stats.id, stats.kind, this, inboundRtp, mediaPlayout);
|
|
640
|
+
observedInboundTrack.update(stats);
|
|
517
641
|
this.observedInboundTracks.set(stats.id, observedInboundTrack);
|
|
518
642
|
this.emit('added-inbound-track', observedInboundTrack);
|
|
519
643
|
}
|
|
520
|
-
|
|
644
|
+
else {
|
|
645
|
+
observedInboundTrack.update(stats);
|
|
646
|
+
}
|
|
647
|
+
this.emit('updated-inbound-track', observedInboundTrack);
|
|
521
648
|
return observedInboundTrack;
|
|
522
649
|
}
|
|
523
650
|
_updateMediaPlayoutStats(stats) {
|
|
@@ -527,10 +654,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
527
654
|
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
655
|
}
|
|
529
656
|
observedMediaPlayout = new ObservedMediaPlayout_1.ObservedMediaPlayout(stats.timestamp, stats.id, stats.kind, this);
|
|
657
|
+
observedMediaPlayout.update(stats);
|
|
530
658
|
this.observedMediaPlayouts.set(stats.id, observedMediaPlayout);
|
|
531
659
|
this.emit('added-media-playout', observedMediaPlayout);
|
|
532
660
|
}
|
|
533
|
-
|
|
661
|
+
else {
|
|
662
|
+
observedMediaPlayout.update(stats);
|
|
663
|
+
}
|
|
664
|
+
this.emit('updated-media-playout', observedMediaPlayout);
|
|
534
665
|
return observedMediaPlayout;
|
|
535
666
|
}
|
|
536
667
|
_updateMediaSourceStats(stats) {
|
|
@@ -540,10 +671,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
540
671
|
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
672
|
}
|
|
542
673
|
observedMediaSource = new ObservedMediaSource_1.ObservedMediaSource(stats.timestamp, stats.id, stats.kind, this);
|
|
674
|
+
observedMediaSource.update(stats);
|
|
543
675
|
this.observedMediaSources.set(stats.id, observedMediaSource);
|
|
544
676
|
this.emit('added-media-source', observedMediaSource);
|
|
545
677
|
}
|
|
546
|
-
|
|
678
|
+
else {
|
|
679
|
+
observedMediaSource.update(stats);
|
|
680
|
+
}
|
|
681
|
+
this.emit('updated-media-source', observedMediaSource);
|
|
547
682
|
return observedMediaSource;
|
|
548
683
|
}
|
|
549
684
|
_updateOutboundRtpStats(stats) {
|
|
@@ -553,10 +688,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
553
688
|
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
689
|
}
|
|
555
690
|
observedOutboundRtp = new ObservedOutboundRtp_1.ObservedOutboundRtp(stats.timestamp, stats.id, stats.ssrc, stats.kind, this);
|
|
691
|
+
observedOutboundRtp.update(stats);
|
|
556
692
|
this.observedOutboundRtps.set(stats.ssrc, observedOutboundRtp);
|
|
557
693
|
this.emit('added-outbound-rtp', observedOutboundRtp);
|
|
558
694
|
}
|
|
559
|
-
|
|
695
|
+
else {
|
|
696
|
+
observedOutboundRtp.update(stats);
|
|
697
|
+
}
|
|
698
|
+
this.emit('updated-outbound-rtp', observedOutboundRtp);
|
|
560
699
|
return observedOutboundRtp;
|
|
561
700
|
}
|
|
562
701
|
_updateOutboundTrackSample(stats) {
|
|
@@ -569,10 +708,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
569
708
|
const outboundRtps = observedMediaSource
|
|
570
709
|
? [...this.observedOutboundRtps.values()].filter((outboundRtp) => outboundRtp.mediaSourceId === observedMediaSource?.id) : undefined;
|
|
571
710
|
observedOutboundTrack = new ObservedOutboundTrack_1.ObservedOutboundTrack(stats.timestamp, stats.id, stats.kind, this, outboundRtps, observedMediaSource);
|
|
711
|
+
observedOutboundTrack.update(stats);
|
|
572
712
|
this.observedOutboundTracks.set(stats.id, observedOutboundTrack);
|
|
573
713
|
this.emit('added-outbound-track', observedOutboundTrack);
|
|
574
714
|
}
|
|
575
|
-
|
|
715
|
+
else {
|
|
716
|
+
observedOutboundTrack.update(stats);
|
|
717
|
+
}
|
|
718
|
+
this.emit('updated-outbound-track', observedOutboundTrack);
|
|
576
719
|
return observedOutboundTrack;
|
|
577
720
|
}
|
|
578
721
|
_updatePeerConnectionTransportStats(stats) {
|
|
@@ -582,10 +725,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
582
725
|
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
726
|
}
|
|
584
727
|
observedPeerConnectionTransport = new ObservedPeerConnectionTransport_1.ObservedPeerConnectionTransport(stats.timestamp, stats.id, this);
|
|
728
|
+
observedPeerConnectionTransport.update(stats);
|
|
585
729
|
this.observedPeerConnectionTransports.set(stats.id, observedPeerConnectionTransport);
|
|
586
730
|
this.emit('added-peer-connection-transport', observedPeerConnectionTransport);
|
|
587
731
|
}
|
|
588
|
-
|
|
732
|
+
else {
|
|
733
|
+
observedPeerConnectionTransport.update(stats);
|
|
734
|
+
}
|
|
735
|
+
this.emit('updated-peer-connection-transport', observedPeerConnectionTransport);
|
|
589
736
|
return observedPeerConnectionTransport;
|
|
590
737
|
}
|
|
591
738
|
_updateRemoteInboundRtpStats(stats) {
|
|
@@ -595,10 +742,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
595
742
|
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
743
|
}
|
|
597
744
|
observedRemoteInboundRtp = new ObservedRemoteInboundRtp_1.ObservedRemoteInboundRtp(stats.timestamp, stats.id, stats.ssrc, stats.kind, this);
|
|
745
|
+
observedRemoteInboundRtp.update(stats);
|
|
598
746
|
this.observedRemoteInboundRtps.set(stats.ssrc, observedRemoteInboundRtp);
|
|
599
747
|
this.emit('added-remote-inbound-rtp', observedRemoteInboundRtp);
|
|
600
748
|
}
|
|
601
|
-
|
|
749
|
+
else {
|
|
750
|
+
observedRemoteInboundRtp.update(stats);
|
|
751
|
+
}
|
|
752
|
+
this.emit('updated-remote-inbound-rtp', observedRemoteInboundRtp);
|
|
602
753
|
return observedRemoteInboundRtp;
|
|
603
754
|
}
|
|
604
755
|
_updateRemoteOutboundRtpStats(stats) {
|
|
@@ -608,10 +759,14 @@ class ObservedPeerConnection extends events_1.EventEmitter {
|
|
|
608
759
|
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
760
|
}
|
|
610
761
|
observedRemoteOutboundRtp = new ObservedRemoteOutboundRtp_1.ObservedRemoteOutboundRtp(stats.timestamp, stats.id, stats.ssrc, stats.kind, this);
|
|
762
|
+
observedRemoteOutboundRtp.update(stats);
|
|
611
763
|
this.observedRemoteOutboundRtps.set(stats.ssrc, observedRemoteOutboundRtp);
|
|
612
764
|
this.emit('added-remote-outbound-rtp', observedRemoteOutboundRtp);
|
|
613
765
|
}
|
|
614
|
-
|
|
766
|
+
else {
|
|
767
|
+
observedRemoteOutboundRtp.update(stats);
|
|
768
|
+
}
|
|
769
|
+
this.emit('updated-remote-outbound-rtp', observedRemoteOutboundRtp);
|
|
615
770
|
return observedRemoteOutboundRtp;
|
|
616
771
|
}
|
|
617
772
|
}
|
package/lib/{ObservedPeerConnectionTransport.d.ts → webrtc/ObservedPeerConnectionTransport.d.ts}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ObservedPeerConnection } from './ObservedPeerConnection';
|
|
2
|
-
import { PeerConnectionTransportStats } from '
|
|
2
|
+
import { PeerConnectionTransportStats } from '../schema/ClientSample';
|
|
3
3
|
export declare class ObservedPeerConnectionTransport implements PeerConnectionTransportStats {
|
|
4
4
|
timestamp: number;
|
|
5
5
|
id: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservedPeerConnectionTransport.d.ts","sourceRoot":"","sources":["../../src/webrtc/ObservedPeerConnectionTransport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAEtE,qBAAa,+BAAgC,YAAW,4BAA4B;IAS3E,SAAS,EAAE,MAAM;IACjB,EAAE,EAAE,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAVjC,OAAO,CAAC,QAAQ,CAAS;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEzC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;gBAG1C,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACA,eAAe,EAAE,sBAAsB;IAGzD,IAAW,OAAO,YAMjB;IAEM,iBAAiB;IAIjB,MAAM,CAAC,KAAK,EAAE,4BAA4B;CAQjD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { MediaKind } from '
|
|
1
|
+
import { MediaKind } from '../common/types';
|
|
2
2
|
import { ObservedPeerConnection } from './ObservedPeerConnection';
|
|
3
|
-
import { RemoteInboundRtpStats } from '
|
|
3
|
+
import { RemoteInboundRtpStats } from '../schema/ClientSample';
|
|
4
4
|
export declare class ObservedRemoteInboundRtp implements RemoteInboundRtpStats {
|
|
5
5
|
timestamp: number;
|
|
6
6
|
id: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservedRemoteInboundRtp.d.ts","sourceRoot":"","sources":["../../src/webrtc/ObservedRemoteInboundRtp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,qBAAa,wBAAyB,YAAW,qBAAqB;IAgB7D,SAAS,EAAE,MAAM;IACjB,EAAE,EAAE,MAAM;IACV,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,SAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAnBjC,OAAO,CAAC,QAAQ,CAAS;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,yBAAyB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;gBAG1C,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,EACL,eAAe,EAAE,sBAAsB;IAGzD,IAAW,OAAO,YAMjB;IAEM,iBAAiB;IAIjB,cAAc;IAId,QAAQ;IAIR,MAAM,CAAC,KAAK,EAAE,qBAAqB;CAgB1C"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { MediaKind } from '
|
|
1
|
+
import { MediaKind } from '../common/types';
|
|
2
2
|
import { ObservedPeerConnection } from './ObservedPeerConnection';
|
|
3
|
-
import { RemoteOutboundRtpStats } from '
|
|
3
|
+
import { RemoteOutboundRtpStats } from '../schema/ClientSample';
|
|
4
4
|
export declare class ObservedRemoteOutboundRtp implements RemoteOutboundRtpStats {
|
|
5
5
|
timestamp: number;
|
|
6
6
|
id: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservedRemoteOutboundRtp.d.ts","sourceRoot":"","sources":["../../src/webrtc/ObservedRemoteOutboundRtp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,qBAAa,yBAA0B,YAAW,sBAAsB;IAiB/D,SAAS,EAAE,MAAM;IACjB,EAAE,EAAE,MAAM;IACV,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,SAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,eAAe;IApBjC,OAAO,CAAC,QAAQ,CAAS;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEzC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,kBAAkB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,yBAAyB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;gBAG1C,SAAS,EAAE,MAAM,EACjB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,EACL,eAAe,EAAE,sBAAsB;IAGzD,IAAW,OAAO,YAMjB;IAEM,iBAAiB;IAIjB,aAAa;IAIb,QAAQ;IAIR,MAAM,CAAC,KAAK,EAAE,sBAAsB;CAgB3C"}
|