@webex/plugin-meetings 3.0.0-beta.22 → 3.0.0-beta.23
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/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/constants.js +0 -3
- package/dist/constants.js.map +1 -1
- package/dist/media/properties.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -493
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/index.js +1 -4
- package/dist/meeting/index.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +4 -2
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/statsAnalyzer/global.js +1 -93
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +297 -299
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +84 -47
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/package.json +19 -19
- package/src/constants.ts +0 -3
- package/src/media/properties.ts +1 -3
- package/src/mediaQualityMetrics/config.ts +379 -377
- package/src/meeting/index.ts +1 -4
- package/src/networkQualityMonitor/index.ts +6 -6
- package/src/statsAnalyzer/global.ts +1 -94
- package/src/statsAnalyzer/index.ts +325 -373
- package/src/statsAnalyzer/mqaUtil.ts +92 -89
- package/test/integration/spec/space-meeting.js +1 -1
- package/test/unit/spec/networkQualityMonitor/index.js +4 -4
- package/test/unit/spec/stats-analyzer/index.js +63 -39
|
@@ -7,6 +7,7 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
7
7
|
value: true
|
|
8
8
|
});
|
|
9
9
|
exports.StatsAnalyzer = exports.EVENTS = void 0;
|
|
10
|
+
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
|
|
10
11
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
11
12
|
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
12
13
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
@@ -20,7 +21,7 @@ var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
|
20
21
|
var _internalMediaCore = require("@webex/internal-media-core");
|
|
21
22
|
var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
|
|
22
23
|
var _constants = require("../constants");
|
|
23
|
-
var _config =
|
|
24
|
+
var _config = require("../mediaQualityMetrics/config");
|
|
24
25
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
25
26
|
var _global = _interopRequireDefault(require("./global"));
|
|
26
27
|
var _mqaUtil = require("./mqaUtil");
|
|
@@ -33,6 +34,21 @@ var EVENTS = {
|
|
|
33
34
|
REMOTE_MEDIA_STARTED: 'REMOTE_MEDIA_STARTED',
|
|
34
35
|
REMOTE_MEDIA_STOPPED: 'REMOTE_MEDIA_STOPPED'
|
|
35
36
|
};
|
|
37
|
+
exports.EVENTS = EVENTS;
|
|
38
|
+
var emptySender = {
|
|
39
|
+
trackLabel: '',
|
|
40
|
+
maxPacketLossRatio: 0,
|
|
41
|
+
availableBandwidth: 0,
|
|
42
|
+
bytesSent: 0,
|
|
43
|
+
meanRemoteJitter: [],
|
|
44
|
+
meanRoundTripTime: []
|
|
45
|
+
};
|
|
46
|
+
var emptyReceiver = {
|
|
47
|
+
availableBandwidth: 0,
|
|
48
|
+
bytesReceived: 0,
|
|
49
|
+
meanRtpJitter: [],
|
|
50
|
+
meanRoundTripTime: []
|
|
51
|
+
};
|
|
36
52
|
|
|
37
53
|
/**
|
|
38
54
|
* Stats Analyzer class that will emit events based on detected quality
|
|
@@ -41,7 +57,6 @@ var EVENTS = {
|
|
|
41
57
|
* @class StatsAnalyzer
|
|
42
58
|
* @extends {EventsScope}
|
|
43
59
|
*/
|
|
44
|
-
exports.EVENTS = EVENTS;
|
|
45
60
|
var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
46
61
|
(0, _inherits2.default)(StatsAnalyzer, _EventsScope);
|
|
47
62
|
var _super = _createSuper(StatsAnalyzer);
|
|
@@ -64,7 +79,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
64
79
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastEmittedStartStopEvent", void 0);
|
|
65
80
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastMqaDataSent", void 0);
|
|
66
81
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastStatsResults", void 0);
|
|
67
|
-
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "localMQEStats", void 0);
|
|
68
82
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "meetingMediaStatus", void 0);
|
|
69
83
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mqaInterval", void 0);
|
|
70
84
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mqaSentCount", void 0);
|
|
@@ -82,6 +96,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
82
96
|
if (previousValue === undefined) previousValue = 0;
|
|
83
97
|
// eslint-disable-next-line no-param-reassign
|
|
84
98
|
if (currentValue === undefined) currentValue = 0;
|
|
99
|
+
if (!_this.lastEmittedStartStopEvent[mediaType]) {
|
|
100
|
+
_this.lastEmittedStartStopEvent[mediaType] = {};
|
|
101
|
+
}
|
|
85
102
|
var lastEmittedEvent = isLocal ? _this.lastEmittedStartStopEvent[mediaType].local : _this.lastEmittedStartStopEvent[mediaType].remote;
|
|
86
103
|
var newEvent;
|
|
87
104
|
if (currentValue - previousValue > 0) {
|
|
@@ -163,141 +180,31 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
163
180
|
_this.networkQualityMonitor = networkQualityMonitor;
|
|
164
181
|
_this.correlationId = config.correlationId;
|
|
165
182
|
_this.mqaSentCount = -1;
|
|
166
|
-
_this.lastMqaDataSent = {
|
|
167
|
-
|
|
168
|
-
video: {
|
|
169
|
-
send: {},
|
|
170
|
-
recv: {}
|
|
171
|
-
},
|
|
172
|
-
audio: {
|
|
173
|
-
send: {},
|
|
174
|
-
recv: {}
|
|
175
|
-
},
|
|
176
|
-
share: {
|
|
177
|
-
send: {},
|
|
178
|
-
recv: {}
|
|
179
|
-
}
|
|
180
|
-
},
|
|
181
|
-
video: {
|
|
182
|
-
send: {},
|
|
183
|
-
recv: {}
|
|
184
|
-
},
|
|
185
|
-
audio: {
|
|
186
|
-
send: {},
|
|
187
|
-
recv: {}
|
|
188
|
-
},
|
|
189
|
-
share: {
|
|
190
|
-
send: {},
|
|
191
|
-
recv: {}
|
|
192
|
-
}
|
|
193
|
-
};
|
|
194
|
-
_this.localMQEStats = {
|
|
195
|
-
audio: {
|
|
196
|
-
RX: {
|
|
197
|
-
packetsLost: [],
|
|
198
|
-
jitter: [],
|
|
199
|
-
latency: [],
|
|
200
|
-
bitRate: []
|
|
201
|
-
},
|
|
202
|
-
TX: {
|
|
203
|
-
packetsLost: [],
|
|
204
|
-
jitter: [],
|
|
205
|
-
latency: [],
|
|
206
|
-
bitRate: []
|
|
207
|
-
}
|
|
208
|
-
},
|
|
209
|
-
video: {
|
|
210
|
-
RX: {
|
|
211
|
-
packetsLost: [],
|
|
212
|
-
jitter: [],
|
|
213
|
-
latency: [],
|
|
214
|
-
bitRate: [],
|
|
215
|
-
frameRate: [],
|
|
216
|
-
resolutionWidth: [],
|
|
217
|
-
resolutionHeight: [],
|
|
218
|
-
requestedKeyFrame: [],
|
|
219
|
-
receivedKeyFrame: []
|
|
220
|
-
},
|
|
221
|
-
TX: {
|
|
222
|
-
packetsLost: [],
|
|
223
|
-
jitter: [],
|
|
224
|
-
latency: [],
|
|
225
|
-
bitRate: [],
|
|
226
|
-
frameRate: [],
|
|
227
|
-
resolutionWidth: [],
|
|
228
|
-
resolutionHeight: [],
|
|
229
|
-
requestedKeyFrame: [],
|
|
230
|
-
receivedKeyFrame: []
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
};
|
|
234
|
-
_this.lastEmittedStartStopEvent = {
|
|
235
|
-
audio: {
|
|
236
|
-
local: undefined,
|
|
237
|
-
remote: undefined
|
|
238
|
-
},
|
|
239
|
-
video: {
|
|
240
|
-
local: undefined,
|
|
241
|
-
remote: undefined
|
|
242
|
-
},
|
|
243
|
-
share: {
|
|
244
|
-
local: undefined,
|
|
245
|
-
remote: undefined
|
|
246
|
-
}
|
|
247
|
-
};
|
|
183
|
+
_this.lastMqaDataSent = {};
|
|
184
|
+
_this.lastEmittedStartStopEvent = {};
|
|
248
185
|
return _this;
|
|
249
186
|
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Resets cumulative stats arrays.
|
|
190
|
+
*
|
|
191
|
+
* @public
|
|
192
|
+
* @memberof StatsAnalyzer
|
|
193
|
+
* @returns {void}
|
|
194
|
+
*/
|
|
250
195
|
(0, _createClass2.default)(StatsAnalyzer, [{
|
|
251
|
-
key: "populateResults",
|
|
252
|
-
value: function populateResults(lastMqa) {
|
|
253
|
-
// Audio
|
|
254
|
-
|
|
255
|
-
this.localMQEStats.audio.RX.packetsLost.push(lastMqa.audioReceive[0].common.mediaHopByHopLost);
|
|
256
|
-
this.localMQEStats.audio.RX.jitter.push(lastMqa.audioReceive[0].streams[0].common.rtpJitter);
|
|
257
|
-
this.localMQEStats.audio.RX.latency.push(lastMqa.audioReceive[0].common.roundTripTime);
|
|
258
|
-
this.localMQEStats.audio.RX.bitRate.push(lastMqa.audioReceive[0].streams[0].common.receivedBitrate);
|
|
259
|
-
this.localMQEStats.audio.TX.packetsLost.push(lastMqa.audioTransmit[0].common.remoteLossRate);
|
|
260
|
-
this.localMQEStats.audio.TX.jitter.push(lastMqa.audioTransmit[0].common.remoteJitter);
|
|
261
|
-
this.localMQEStats.audio.TX.latency.push(lastMqa.audioTransmit[0].common.roundTripTime);
|
|
262
|
-
this.localMQEStats.audio.TX.bitRate.push(lastMqa.audioTransmit[0].streams[0].common.transmittedBitrate);
|
|
263
|
-
|
|
264
|
-
// Video
|
|
265
|
-
|
|
266
|
-
this.localMQEStats.video.RX.packetsLost.push(lastMqa.videoReceive[0].common.mediaHopByHopLost);
|
|
267
|
-
this.localMQEStats.video.RX.jitter.push(lastMqa.videoReceive[0].streams[0].common.rtpJitter);
|
|
268
|
-
this.localMQEStats.video.RX.latency.push(lastMqa.videoReceive[0].streams[0].common.roundTripTime);
|
|
269
|
-
this.localMQEStats.video.RX.bitRate.push(lastMqa.videoReceive[0].streams[0].common.receivedBitrate);
|
|
270
|
-
this.localMQEStats.video.RX.frameRate.push(lastMqa.videoReceive[0].streams[0].common.receivedFrameRate);
|
|
271
|
-
this.localMQEStats.video.RX.resolutionWidth.push(lastMqa.videoReceive[0].streams[0].receivedWidth);
|
|
272
|
-
this.localMQEStats.video.RX.resolutionHeight.push(lastMqa.videoReceive[0].streams[0].receivedHeight);
|
|
273
|
-
this.localMQEStats.video.RX.requestedKeyFrame.push();
|
|
274
|
-
this.localMQEStats.video.RX.receivedKeyFrame.push();
|
|
275
|
-
this.localMQEStats.video.TX.packetsLost.push(lastMqa.videoTransmit[0].common.remoteLossRate);
|
|
276
|
-
this.localMQEStats.video.TX.jitter.push(lastMqa.videoTransmit[0].common.remoteJitter);
|
|
277
|
-
this.localMQEStats.video.TX.latency.push(lastMqa.videoTransmit[0].common.roundTripTime);
|
|
278
|
-
this.localMQEStats.video.TX.bitRate.push(lastMqa.videoTransmit[0].streams[0].common.transmittedBitrate);
|
|
279
|
-
this.localMQEStats.video.TX.frameRate.push(lastMqa.videoTransmit[0].streams[0].common.transmittedFrameRate);
|
|
280
|
-
this.localMQEStats.video.TX.resolutionWidth.push(lastMqa.videoTransmit[0].streams[0].transmittedWidth);
|
|
281
|
-
this.localMQEStats.video.TX.resolutionHeight.push(lastMqa.videoTransmit[0].streams[0].transmittedHeight);
|
|
282
|
-
this.localMQEStats.video.TX.requestedKeyFrame.push(lastMqa.videoTransmit[0].streams[0].requestedKeyFrames);
|
|
283
|
-
this.localMQEStats.video.TX.receivedKeyFrame.push();
|
|
284
|
-
}
|
|
285
|
-
}, {
|
|
286
196
|
key: "resetStatsResults",
|
|
287
197
|
value: function resetStatsResults() {
|
|
288
|
-
|
|
289
|
-
this.statsResults.
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
this.statsResults.audio.send.meanRoundTripTime = [];
|
|
299
|
-
this.statsResults.video.send.meanRoundTripTime = [];
|
|
300
|
-
this.statsResults.share.send.meanRoundTripTime = [];
|
|
198
|
+
var _this2 = this;
|
|
199
|
+
(0, _keys.default)(this.statsResults).forEach(function (mediaType) {
|
|
200
|
+
if (mediaType.includes('recv')) {
|
|
201
|
+
_this2.statsResults[mediaType].recv.meanRtpJitter = [];
|
|
202
|
+
}
|
|
203
|
+
if (mediaType.includes('send')) {
|
|
204
|
+
_this2.statsResults[mediaType].send.meanRemoteJitter = [];
|
|
205
|
+
_this2.statsResults[mediaType].send.meanRoundTripTime = [];
|
|
206
|
+
}
|
|
207
|
+
});
|
|
301
208
|
}
|
|
302
209
|
|
|
303
210
|
/**
|
|
@@ -324,80 +231,80 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
324
231
|
}, {
|
|
325
232
|
key: "sendMqaData",
|
|
326
233
|
value: function sendMqaData() {
|
|
327
|
-
var
|
|
328
|
-
var
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
234
|
+
var _this3 = this;
|
|
235
|
+
var newMqa = (0, _cloneDeep2.default)(_config.emptyMqaInterval);
|
|
236
|
+
(0, _keys.default)(this.statsResults).forEach(function (mediaType) {
|
|
237
|
+
if (mediaType.includes('audio-send') || mediaType.includes('audio-share-send')) {
|
|
238
|
+
var audioSender = (0, _cloneDeep2.default)(_config.emptyAudioTransmit);
|
|
239
|
+
(0, _mqaUtil.getAudioSenderMqa)({
|
|
240
|
+
audioSender: audioSender,
|
|
241
|
+
statsResults: _this3.statsResults,
|
|
242
|
+
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
243
|
+
mediaType: mediaType
|
|
244
|
+
});
|
|
245
|
+
newMqa.audioTransmit.push(audioSender);
|
|
246
|
+
} else if (mediaType.includes('audio-recv') || mediaType.includes('audio-share-recv')) {
|
|
247
|
+
var audioReceiver = (0, _cloneDeep2.default)(_config.emptyAudioReceive);
|
|
248
|
+
(0, _mqaUtil.getAudioReceiverMqa)({
|
|
249
|
+
audioReceiver: audioReceiver,
|
|
250
|
+
statsResults: _this3.statsResults,
|
|
251
|
+
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
252
|
+
mediaType: mediaType
|
|
253
|
+
});
|
|
254
|
+
newMqa.audioReceive.push(audioReceiver);
|
|
255
|
+
} else if (mediaType.includes('video-send') || mediaType.includes('video-share-send')) {
|
|
256
|
+
var videoSender = (0, _cloneDeep2.default)(_config.emptyVideoTransmit);
|
|
257
|
+
(0, _mqaUtil.getVideoSenderMqa)({
|
|
258
|
+
videoSender: videoSender,
|
|
259
|
+
statsResults: _this3.statsResults,
|
|
260
|
+
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
261
|
+
mediaType: mediaType
|
|
262
|
+
});
|
|
263
|
+
newMqa.videoTransmit.push(videoSender);
|
|
264
|
+
} else if (mediaType.includes('video-recv') || mediaType.includes('video-share-recv')) {
|
|
265
|
+
var videoReceiver = (0, _cloneDeep2.default)(_config.emptyVideoReceive);
|
|
266
|
+
(0, _mqaUtil.getVideoReceiverMqa)({
|
|
267
|
+
videoReceiver: videoReceiver,
|
|
268
|
+
statsResults: _this3.statsResults,
|
|
269
|
+
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
270
|
+
mediaType: mediaType
|
|
271
|
+
});
|
|
272
|
+
newMqa.videoReceive.push(videoReceiver);
|
|
273
|
+
}
|
|
367
274
|
});
|
|
368
|
-
|
|
275
|
+
newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress[0];
|
|
369
276
|
|
|
370
277
|
// Adding peripheral information
|
|
371
|
-
|
|
372
|
-
|
|
278
|
+
newMqa.intervalMetadata.peripherals = [];
|
|
279
|
+
newMqa.intervalMetadata.peripherals.push({
|
|
373
280
|
information: _constants._UNKNOWN_,
|
|
374
281
|
name: _constants.MEDIA_DEVICES.SPEAKER
|
|
375
282
|
});
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
283
|
+
if (this.statsResults['audio-send']) {
|
|
284
|
+
var _this$statsResults$au;
|
|
285
|
+
newMqa.intervalMetadata.peripherals.push({
|
|
286
|
+
information: (_this$statsResults$au = this.statsResults['audio-send']) === null || _this$statsResults$au === void 0 ? void 0 : _this$statsResults$au.trackLabel,
|
|
287
|
+
name: _constants.MEDIA_DEVICES.MICROPHONE
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
if (this.statsResults['video-send']) {
|
|
291
|
+
var _this$statsResults$vi;
|
|
292
|
+
newMqa.intervalMetadata.peripherals.push({
|
|
293
|
+
information: (_this$statsResults$vi = this.statsResults['video-send']) === null || _this$statsResults$vi === void 0 ? void 0 : _this$statsResults$vi.trackLabel,
|
|
294
|
+
name: _constants.MEDIA_DEVICES.CAMERA
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
newMqa.networkType = this.statsResults.connectionType.local.networkType;
|
|
387
298
|
this.mqaSentCount += 1;
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
// DO Deep copy, for some reason it takes the reference all the time rather then old value set
|
|
391
|
-
this.lastMqaDataSent = (0, _cloneDeep2.default)(this.statsResults);
|
|
392
|
-
this.populateResults(_config.default.intervals[0]);
|
|
299
|
+
newMqa.intervalNumber = this.mqaSentCount;
|
|
393
300
|
this.resetStatsResults();
|
|
394
301
|
this.emit({
|
|
395
302
|
file: 'statsAnalyzer',
|
|
396
303
|
function: 'sendMqaData'
|
|
397
304
|
}, EVENTS.MEDIA_QUALITY, {
|
|
398
|
-
data:
|
|
305
|
+
data: newMqa,
|
|
399
306
|
// @ts-ignore
|
|
400
|
-
networkType:
|
|
307
|
+
networkType: newMqa.networkType
|
|
401
308
|
});
|
|
402
309
|
}
|
|
403
310
|
|
|
@@ -426,18 +333,18 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
426
333
|
}, {
|
|
427
334
|
key: "startAnalyzer",
|
|
428
335
|
value: function startAnalyzer(mediaConnection) {
|
|
429
|
-
var
|
|
336
|
+
var _this4 = this;
|
|
430
337
|
if (!this.statsStarted) {
|
|
431
338
|
this.statsStarted = true;
|
|
432
339
|
this.mediaConnection = mediaConnection;
|
|
433
340
|
return this.getStatsAndParse().then(function () {
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
},
|
|
341
|
+
_this4.statsInterval = setInterval(function () {
|
|
342
|
+
_this4.getStatsAndParse();
|
|
343
|
+
}, _this4.config.analyzerInterval);
|
|
437
344
|
// Trigger initial fetch
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
345
|
+
_this4.sendMqaData();
|
|
346
|
+
_this4.mqaInterval = setInterval(function () {
|
|
347
|
+
_this4.sendMqaData();
|
|
441
348
|
}, _constants.MQA_INTEVAL);
|
|
442
349
|
});
|
|
443
350
|
}
|
|
@@ -454,7 +361,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
454
361
|
}, {
|
|
455
362
|
key: "stopAnalyzer",
|
|
456
363
|
value: function stopAnalyzer() {
|
|
457
|
-
var
|
|
364
|
+
var _this5 = this;
|
|
458
365
|
var sendOneLastMqa = this.mqaInterval && this.statsInterval;
|
|
459
366
|
if (this.statsInterval) {
|
|
460
367
|
clearInterval(this.statsInterval);
|
|
@@ -466,8 +373,8 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
466
373
|
}
|
|
467
374
|
if (sendOneLastMqa) {
|
|
468
375
|
return this.getStatsAndParse().then(function () {
|
|
469
|
-
|
|
470
|
-
|
|
376
|
+
_this5.sendMqaData();
|
|
377
|
+
_this5.mediaConnection = null;
|
|
471
378
|
});
|
|
472
379
|
}
|
|
473
380
|
this.mediaConnection = null;
|
|
@@ -490,6 +397,32 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
490
397
|
if (!getStatsResult) {
|
|
491
398
|
return;
|
|
492
399
|
}
|
|
400
|
+
|
|
401
|
+
// Generate empty stats results
|
|
402
|
+
if (!this.statsResults[type]) {
|
|
403
|
+
this.statsResults[type] = {};
|
|
404
|
+
}
|
|
405
|
+
if (isSender && !this.statsResults[type].send) {
|
|
406
|
+
this.statsResults[type].send = (0, _cloneDeep2.default)(emptySender);
|
|
407
|
+
} else if (!isSender && !this.statsResults[type].recv) {
|
|
408
|
+
this.statsResults[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
|
|
409
|
+
}
|
|
410
|
+
if (!this.statsResults.resolutions[type]) {
|
|
411
|
+
this.statsResults.resolutions[type] = {};
|
|
412
|
+
}
|
|
413
|
+
if (isSender && !this.statsResults.resolutions[type].send) {
|
|
414
|
+
this.statsResults.resolutions[type].send = (0, _cloneDeep2.default)(emptySender);
|
|
415
|
+
} else if (!isSender && !this.statsResults.resolutions[type].recv) {
|
|
416
|
+
this.statsResults.resolutions[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
|
|
417
|
+
}
|
|
418
|
+
if (!this.statsResults.internal[type]) {
|
|
419
|
+
this.statsResults.internal[type] = {};
|
|
420
|
+
}
|
|
421
|
+
if (isSender && !this.statsResults.internal[type].send) {
|
|
422
|
+
this.statsResults.internal[type].send = (0, _cloneDeep2.default)(emptySender);
|
|
423
|
+
} else if (!isSender && !this.statsResults.internal[type].recv) {
|
|
424
|
+
this.statsResults.internal[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
|
|
425
|
+
}
|
|
493
426
|
switch (getStatsResult.type) {
|
|
494
427
|
case 'outbound-rtp':
|
|
495
428
|
this.processOutboundRTPResult(getStatsResult, type);
|
|
@@ -524,21 +457,26 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
524
457
|
/**
|
|
525
458
|
* Filters the get stats results for types
|
|
526
459
|
* @private
|
|
527
|
-
* @param {Array}
|
|
460
|
+
* @param {Array} statsItem
|
|
528
461
|
* @param {String} type
|
|
529
462
|
* @param {boolean} isSender
|
|
530
463
|
* @returns {void}
|
|
531
464
|
*/
|
|
532
465
|
}, {
|
|
533
466
|
key: "filterAndParseGetStatsResults",
|
|
534
|
-
value: function filterAndParseGetStatsResults(
|
|
535
|
-
var
|
|
467
|
+
value: function filterAndParseGetStatsResults(statsItem, type, isSender) {
|
|
468
|
+
var _this6 = this;
|
|
536
469
|
var types = _constants.DEFAULT_GET_STATS_FILTER.types;
|
|
537
|
-
|
|
470
|
+
statsItem.report.forEach(function (result) {
|
|
538
471
|
if (types.includes(result.type)) {
|
|
539
|
-
|
|
472
|
+
_this6.parseGetStatsResult(result, type, isSender);
|
|
540
473
|
}
|
|
541
474
|
});
|
|
475
|
+
if (this.statsResults[type]) {
|
|
476
|
+
this.statsResults[type].direction = statsItem.currentDirection;
|
|
477
|
+
this.statsResults[type].trackLabel = statsItem.localTrackLabel;
|
|
478
|
+
this.statsResults[type].csi = statsItem.csi;
|
|
479
|
+
}
|
|
542
480
|
}
|
|
543
481
|
|
|
544
482
|
/**
|
|
@@ -553,7 +491,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
553
491
|
if (!result) {
|
|
554
492
|
return;
|
|
555
493
|
}
|
|
556
|
-
if (type
|
|
494
|
+
if (type.includes('audio-send')) {
|
|
557
495
|
this.statsResults[type].send.audioLevel = result.audioLevel;
|
|
558
496
|
this.statsResults[type].send.totalAudioEnergy = result.totalAudioEnergy;
|
|
559
497
|
}
|
|
@@ -584,106 +522,145 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
584
522
|
* @returns {void}
|
|
585
523
|
*/
|
|
586
524
|
function compareLastStatsResult() {
|
|
525
|
+
var _this7 = this;
|
|
587
526
|
if (this.lastStatsResults !== null && this.meetingMediaStatus) {
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
527
|
+
var getCurrentStatsTotals = function getCurrentStatsTotals(keyPrefix, value) {
|
|
528
|
+
return (0, _keys.default)(_this7.statsResults).filter(function (key) {
|
|
529
|
+
return key.startsWith(keyPrefix);
|
|
530
|
+
}).reduce(function (prev, cur) {
|
|
531
|
+
return prev + (_this7.statsResults[cur].recv[value] || 0);
|
|
532
|
+
}, 0);
|
|
533
|
+
};
|
|
534
|
+
var getPreviousStatsTotals = function getPreviousStatsTotals(keyPrefix, value) {
|
|
535
|
+
return (0, _keys.default)(_this7.statsResults).filter(function (key) {
|
|
536
|
+
return key.startsWith(keyPrefix);
|
|
537
|
+
}).reduce(function (prev, cur) {
|
|
538
|
+
return prev + (_this7.lastStatsResults[cur].recv[value] || 0);
|
|
539
|
+
}, 0);
|
|
540
|
+
};
|
|
541
|
+
var getCurrentResolutionsStatsTotals = function getCurrentResolutionsStatsTotals(keyPrefix, value) {
|
|
542
|
+
return (0, _keys.default)(_this7.statsResults).filter(function (key) {
|
|
543
|
+
return key.startsWith(keyPrefix);
|
|
544
|
+
}).reduce(function (prev, cur) {
|
|
545
|
+
return prev + (_this7.statsResults.resolutions[cur].recv[value] || 0);
|
|
546
|
+
}, 0);
|
|
547
|
+
};
|
|
548
|
+
var getPreviousResolutionsStatsTotals = function getPreviousResolutionsStatsTotals(keyPrefix, value) {
|
|
549
|
+
return (0, _keys.default)(_this7.statsResults).filter(function (key) {
|
|
550
|
+
return key.startsWith(keyPrefix);
|
|
551
|
+
}).reduce(function (prev, cur) {
|
|
552
|
+
return prev + (_this7.lastStatsResults.resolutions[cur].recv[value] || 0);
|
|
553
|
+
}, 0);
|
|
554
|
+
};
|
|
555
|
+
if (this.meetingMediaStatus.expected.sendAudio && this.lastStatsResults['audio-send']) {
|
|
556
|
+
// compare audio stats sent
|
|
557
|
+
// NOTE: relies on there being only one sender.
|
|
558
|
+
var currentStats = this.statsResults['audio-send'].send;
|
|
559
|
+
var previousStats = this.lastStatsResults['audio-send'].send;
|
|
595
560
|
if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
|
|
596
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
561
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent");
|
|
597
562
|
} else {
|
|
598
563
|
if (currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
|
|
599
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
564
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present");
|
|
600
565
|
}
|
|
601
566
|
if (currentStats.audioLevel === 0) {
|
|
602
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult -->
|
|
567
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user");
|
|
603
568
|
}
|
|
604
569
|
}
|
|
605
|
-
this.emitStartStopEvents(
|
|
570
|
+
this.emitStartStopEvents('audio', previousStats.totalPacketsSent, currentStats.totalPacketsSent, true);
|
|
606
571
|
}
|
|
607
572
|
if (this.meetingMediaStatus.expected.receiveAudio) {
|
|
608
573
|
// compare audio stats received
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
574
|
+
var currentPacketsReceived = getCurrentStatsTotals('audio-recv', 'totalPacketsReceived');
|
|
575
|
+
var previousPacketsReceived = getPreviousStatsTotals('audio-recv', 'totalPacketsReceived');
|
|
576
|
+
var currentSamplesReceived = getCurrentStatsTotals('audio-recv', 'totalSamplesReceived');
|
|
577
|
+
var previousSamplesReceived = getPreviousStatsTotals('audio-recv', 'totalSamplesReceived');
|
|
578
|
+
if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {
|
|
579
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets received");
|
|
580
|
+
} else if (currentSamplesReceived === previousSamplesReceived || currentSamplesReceived === 0) {
|
|
581
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio samples received");
|
|
615
582
|
}
|
|
616
|
-
this.emitStartStopEvents(
|
|
583
|
+
this.emitStartStopEvents('audio', previousPacketsReceived, currentPacketsReceived, false);
|
|
617
584
|
}
|
|
618
|
-
|
|
619
|
-
if (this.meetingMediaStatus.expected.sendVideo) {
|
|
585
|
+
if (this.meetingMediaStatus.expected.sendVideo && this.lastStatsResults['video-send']) {
|
|
620
586
|
// compare video stats sent
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
if (
|
|
624
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
587
|
+
var _currentStats = this.statsResults['video-send'].send;
|
|
588
|
+
var _previousStats = this.lastStatsResults['video-send'].send;
|
|
589
|
+
if (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0) {
|
|
590
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent");
|
|
625
591
|
} else {
|
|
626
|
-
if (
|
|
627
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
592
|
+
if (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0) {
|
|
593
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded");
|
|
628
594
|
}
|
|
629
|
-
if (this.statsResults.resolutions[
|
|
630
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
595
|
+
if (this.statsResults.resolutions['video-send'].send.framesSent === this.lastStatsResults.resolutions['video-send'].send.framesSent || this.statsResults.resolutions['video-send'].send.framesSent === 0) {
|
|
596
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent");
|
|
631
597
|
}
|
|
632
598
|
}
|
|
633
|
-
this.emitStartStopEvents(
|
|
599
|
+
this.emitStartStopEvents('video', _previousStats.framesSent, _currentStats.framesSent, true);
|
|
634
600
|
}
|
|
635
601
|
if (this.meetingMediaStatus.expected.receiveVideo) {
|
|
636
|
-
// compare video stats
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
602
|
+
// compare video stats received
|
|
603
|
+
var _currentPacketsReceived = getCurrentStatsTotals('video-recv', 'totalPacketsReceived');
|
|
604
|
+
var _previousPacketsReceived = getPreviousStatsTotals('video-recv', 'totalPacketsReceived');
|
|
605
|
+
var currentFramesReceived = getCurrentResolutionsStatsTotals('video-recv', 'framesReceived');
|
|
606
|
+
var previousFramesReceived = getPreviousResolutionsStatsTotals('video-recv', 'framesReceived');
|
|
607
|
+
var currentFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');
|
|
608
|
+
var previousFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');
|
|
609
|
+
var currentFramesDropped = getCurrentResolutionsStatsTotals('video-recv', 'framesDropped');
|
|
610
|
+
var previousFramesDropped = getPreviousResolutionsStatsTotals('video-recv', 'framesDropped');
|
|
611
|
+
if (_currentPacketsReceived === _previousPacketsReceived || _currentPacketsReceived === 0) {
|
|
612
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received");
|
|
642
613
|
} else {
|
|
643
|
-
if (
|
|
644
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
614
|
+
if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {
|
|
615
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames received");
|
|
645
616
|
}
|
|
646
|
-
if (
|
|
647
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
617
|
+
if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {
|
|
618
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded");
|
|
648
619
|
}
|
|
649
|
-
if (
|
|
650
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult -->
|
|
620
|
+
if (currentFramesDropped - previousFramesDropped > 10) {
|
|
621
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped");
|
|
651
622
|
}
|
|
652
623
|
}
|
|
653
|
-
this.emitStartStopEvents(
|
|
624
|
+
this.emitStartStopEvents('video', previousFramesDecoded, currentFramesDecoded, false);
|
|
654
625
|
}
|
|
655
|
-
|
|
656
|
-
if (this.meetingMediaStatus.expected.sendShare) {
|
|
626
|
+
if (this.meetingMediaStatus.expected.sendShare && this.lastStatsResults['video-share-send']) {
|
|
657
627
|
// compare share stats sent
|
|
658
628
|
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
if (
|
|
662
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
629
|
+
var _currentStats2 = this.statsResults['video-share-send'].send;
|
|
630
|
+
var _previousStats2 = this.lastStatsResults['video-share-send'].send;
|
|
631
|
+
if (_currentStats2.totalPacketsSent === _previousStats2.totalPacketsSent || _currentStats2.totalPacketsSent === 0) {
|
|
632
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent");
|
|
663
633
|
} else {
|
|
664
|
-
if (
|
|
665
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
634
|
+
if (_currentStats2.framesEncoded === _previousStats2.framesEncoded || _currentStats2.framesEncoded === 0) {
|
|
635
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded");
|
|
666
636
|
}
|
|
667
|
-
if (this.statsResults.resolutions[
|
|
668
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
637
|
+
if (this.statsResults.resolutions['video-share-send'].send.framesSent === this.lastStatsResults.resolutions['video-share-send'].send.framesSent || this.statsResults.resolutions['video-share-send'].send.framesSent === 0) {
|
|
638
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames sent");
|
|
669
639
|
}
|
|
670
640
|
}
|
|
671
|
-
|
|
641
|
+
}
|
|
642
|
+
if (this.meetingMediaStatus.expected.sendShare) {
|
|
672
643
|
// TODO:need to check receive share value
|
|
673
|
-
// compare share stats
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
644
|
+
// compare share stats received
|
|
645
|
+
var _currentPacketsReceived2 = getCurrentStatsTotals('video-share-recv', 'totalPacketsReceived');
|
|
646
|
+
var _previousPacketsReceived2 = getPreviousStatsTotals('video-share-recv', 'totalPacketsReceived');
|
|
647
|
+
var _currentFramesReceived = getCurrentResolutionsStatsTotals('video-share-recv', 'framesReceived');
|
|
648
|
+
var _previousFramesReceived = getPreviousResolutionsStatsTotals('video-share-recv', 'framesReceived');
|
|
649
|
+
var _currentFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');
|
|
650
|
+
var _previousFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');
|
|
651
|
+
var _currentFramesDropped = getCurrentResolutionsStatsTotals('video-share-recv', 'framesDropped');
|
|
652
|
+
var _previousFramesDropped = getPreviousResolutionsStatsTotals('video-share-recv', 'framesDropped');
|
|
653
|
+
if (_currentPacketsReceived2 === _previousPacketsReceived2 || _currentPacketsReceived2 === 0) {
|
|
654
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received");
|
|
678
655
|
} else {
|
|
679
|
-
if (
|
|
680
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
656
|
+
if (_currentFramesReceived === _previousFramesReceived || _currentFramesReceived === 0) {
|
|
657
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames received");
|
|
681
658
|
}
|
|
682
|
-
if (
|
|
683
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
659
|
+
if (_currentFramesDecoded === _previousFramesDecoded || _currentFramesDecoded === 0) {
|
|
660
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded");
|
|
684
661
|
}
|
|
685
|
-
if (
|
|
686
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult -->
|
|
662
|
+
if (_currentFramesDropped - _previousFramesDropped > 10) {
|
|
663
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped");
|
|
687
664
|
}
|
|
688
665
|
}
|
|
689
666
|
|
|
@@ -704,7 +681,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
704
681
|
}, {
|
|
705
682
|
key: "getStatsAndParse",
|
|
706
683
|
value: function getStatsAndParse() {
|
|
707
|
-
var
|
|
684
|
+
var _this8 = this;
|
|
708
685
|
if (!this.mediaConnection) {
|
|
709
686
|
return _promise.default.resolve();
|
|
710
687
|
}
|
|
@@ -714,24 +691,47 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
714
691
|
}
|
|
715
692
|
_loggerProxy.default.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');
|
|
716
693
|
return this.mediaConnection.getTransceiverStats().then(function (transceiverStats) {
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
694
|
+
transceiverStats.video.receivers.forEach(function (receiver, i) {
|
|
695
|
+
return _this8.filterAndParseGetStatsResults(receiver, "video-recv-".concat(i), false);
|
|
696
|
+
});
|
|
697
|
+
transceiverStats.audio.receivers.forEach(function (receiver, i) {
|
|
698
|
+
return _this8.filterAndParseGetStatsResults(receiver, "audio-recv-".concat(i), false);
|
|
699
|
+
});
|
|
700
|
+
transceiverStats.screenShareVideo.receivers.forEach(function (receiver, i) {
|
|
701
|
+
return _this8.filterAndParseGetStatsResults(receiver, "video-share-recv-".concat(i), false);
|
|
702
|
+
});
|
|
703
|
+
transceiverStats.screenShareAudio.receivers.forEach(function (receiver, i) {
|
|
704
|
+
return _this8.filterAndParseGetStatsResults(receiver, "audio-share-recv-".concat(i), false);
|
|
705
|
+
});
|
|
706
|
+
transceiverStats.video.senders.forEach(function (sender, i) {
|
|
707
|
+
if (i > 0) {
|
|
708
|
+
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
709
|
+
}
|
|
710
|
+
_this8.filterAndParseGetStatsResults(sender, 'video-send', true);
|
|
711
|
+
});
|
|
712
|
+
transceiverStats.audio.senders.forEach(function (sender, i) {
|
|
713
|
+
if (i > 0) {
|
|
714
|
+
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
715
|
+
}
|
|
716
|
+
_this8.filterAndParseGetStatsResults(sender, 'audio-send', true);
|
|
717
|
+
});
|
|
718
|
+
transceiverStats.screenShareVideo.senders.forEach(function (sender, i) {
|
|
719
|
+
if (i > 0) {
|
|
720
|
+
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
721
|
+
}
|
|
722
|
+
_this8.filterAndParseGetStatsResults(sender, 'video-share-send', true);
|
|
723
|
+
});
|
|
724
|
+
transceiverStats.screenShareAudio.senders.forEach(function (sender, i) {
|
|
725
|
+
if (i > 0) {
|
|
726
|
+
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
727
|
+
}
|
|
728
|
+
_this8.filterAndParseGetStatsResults(sender, 'audio-share-send', true);
|
|
729
|
+
});
|
|
730
|
+
_this8.compareLastStatsResult();
|
|
731
731
|
|
|
732
732
|
// Save the last results to compare with the current
|
|
733
733
|
// DO Deep copy, for some reason it takes the reference all the time rather then old value set
|
|
734
|
-
|
|
734
|
+
_this8.lastStatsResults = JSON.parse((0, _stringify.default)(_this8.statsResults));
|
|
735
735
|
_loggerProxy.default.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats');
|
|
736
736
|
});
|
|
737
737
|
}
|
|
@@ -740,13 +740,12 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
740
740
|
* Processes OutboundRTP stats result and stores
|
|
741
741
|
* @private
|
|
742
742
|
* @param {*} result
|
|
743
|
-
* @param {*}
|
|
743
|
+
* @param {*} mediaType
|
|
744
744
|
* @returns {void}
|
|
745
745
|
*/
|
|
746
746
|
}, {
|
|
747
747
|
key: "processOutboundRTPResult",
|
|
748
|
-
value: function processOutboundRTPResult(result,
|
|
749
|
-
var mediaType = type || _constants.STATS.AUDIO_CORRELATE;
|
|
748
|
+
value: function processOutboundRTPResult(result, mediaType) {
|
|
750
749
|
var sendrecvType = _constants.STATS.SEND_DIRECTION;
|
|
751
750
|
if (result.bytesSent) {
|
|
752
751
|
var kilobytes = 0;
|
|
@@ -796,13 +795,12 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
796
795
|
* Processes InboundRTP stats result and stores
|
|
797
796
|
* @private
|
|
798
797
|
* @param {*} result
|
|
799
|
-
* @param {*}
|
|
798
|
+
* @param {*} mediaType
|
|
800
799
|
* @returns {void}
|
|
801
800
|
*/
|
|
802
801
|
}, {
|
|
803
802
|
key: "processInboundRTPResult",
|
|
804
|
-
value: function processInboundRTPResult(result,
|
|
805
|
-
var mediaType = type || _constants.STATS.AUDIO_CORRELATE;
|
|
803
|
+
value: function processInboundRTPResult(result, mediaType) {
|
|
806
804
|
var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
|
|
807
805
|
if (result.bytesReceived) {
|
|
808
806
|
var kilobytes = 0;
|
|
@@ -901,7 +899,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
901
899
|
if (!result || result.type !== 'track') {
|
|
902
900
|
return;
|
|
903
901
|
}
|
|
904
|
-
if (result.type !== 'track') return;
|
|
905
902
|
var sendrecvType = result.remoteSource === true ? _constants.STATS.RECEIVE_DIRECTION : _constants.STATS.SEND_DIRECTION;
|
|
906
903
|
if (result.frameWidth && result.frameHeight) {
|
|
907
904
|
this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
|
|
@@ -914,7 +911,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
914
911
|
this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
|
|
915
912
|
this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;
|
|
916
913
|
}
|
|
917
|
-
if (result.trackIdentifier && mediaType
|
|
914
|
+
if (result.trackIdentifier && !mediaType.includes('audio')) {
|
|
918
915
|
this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier = result.trackIdentifier;
|
|
919
916
|
var jitterBufferDelay = result && result.jitterBufferDelay;
|
|
920
917
|
var jitterBufferEmittedCount = result && result.jitterBufferEmittedCount;
|
|
@@ -937,7 +934,8 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
937
934
|
}, {
|
|
938
935
|
key: "compareSentAndReceived",
|
|
939
936
|
value: function compareSentAndReceived(result, type) {
|
|
940
|
-
|
|
937
|
+
// Don't compare on transceivers without a sender.
|
|
938
|
+
if (!type || !this.statsResults.internal[type].send) {
|
|
941
939
|
return;
|
|
942
940
|
}
|
|
943
941
|
var mediaType = type;
|