@webex/internal-media-core 2.15.0 → 2.16.1

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.
Files changed (37) hide show
  1. package/dist/cjs/index.js +1425 -1489
  2. package/dist/esm/index.js +1425 -1489
  3. package/dist/types/StatsAnalyzer/MqeBuilder.d.ts +30 -0
  4. package/dist/types/StatsAnalyzer/MqeBuilder.d.ts.map +1 -0
  5. package/dist/types/StatsAnalyzer/MqeIntervalSessionReceiveAudioBuilder.d.ts +10 -0
  6. package/dist/types/StatsAnalyzer/MqeIntervalSessionReceiveAudioBuilder.d.ts.map +1 -0
  7. package/dist/types/StatsAnalyzer/MqeIntervalSessionReceiveAudioBuilder.test.d.ts +2 -0
  8. package/dist/types/StatsAnalyzer/MqeIntervalSessionReceiveAudioBuilder.test.d.ts.map +1 -0
  9. package/dist/types/StatsAnalyzer/MqeIntervalSessionReceiveVideoBuilder.d.ts +10 -0
  10. package/dist/types/StatsAnalyzer/MqeIntervalSessionReceiveVideoBuilder.d.ts.map +1 -0
  11. package/dist/types/StatsAnalyzer/MqeIntervalSessionReceiveVideoBuilder.test.d.ts +2 -0
  12. package/dist/types/StatsAnalyzer/MqeIntervalSessionReceiveVideoBuilder.test.d.ts.map +1 -0
  13. package/dist/types/StatsAnalyzer/MqeIntervalSessionTransmitAudioBuilder.d.ts +10 -0
  14. package/dist/types/StatsAnalyzer/MqeIntervalSessionTransmitAudioBuilder.d.ts.map +1 -0
  15. package/dist/types/StatsAnalyzer/MqeIntervalSessionTransmitAudioBuilder.test.d.ts +2 -0
  16. package/dist/types/StatsAnalyzer/MqeIntervalSessionTransmitAudioBuilder.test.d.ts.map +1 -0
  17. package/dist/types/StatsAnalyzer/MqeIntervalSessionTransmitVideoBuilder.d.ts +10 -0
  18. package/dist/types/StatsAnalyzer/MqeIntervalSessionTransmitVideoBuilder.d.ts.map +1 -0
  19. package/dist/types/StatsAnalyzer/MqeIntervalSessionTransmitVideoBuilder.test.d.ts +2 -0
  20. package/dist/types/StatsAnalyzer/MqeIntervalSessionTransmitVideoBuilder.test.d.ts.map +1 -0
  21. package/dist/types/StatsAnalyzer/NetworkQualityMonitor.d.ts +6 -5
  22. package/dist/types/StatsAnalyzer/NetworkQualityMonitor.d.ts.map +1 -1
  23. package/dist/types/StatsAnalyzer/StatsAnalyzer.d.ts +30 -35
  24. package/dist/types/StatsAnalyzer/StatsAnalyzer.d.ts.map +1 -1
  25. package/dist/types/StatsAnalyzer/constants.d.ts +13 -311
  26. package/dist/types/StatsAnalyzer/constants.d.ts.map +1 -1
  27. package/dist/types/StatsAnalyzer/eventTypes.d.ts +3 -2
  28. package/dist/types/StatsAnalyzer/eventTypes.d.ts.map +1 -1
  29. package/dist/types/StatsAnalyzer/mqeTypes.d.ts +26 -0
  30. package/dist/types/StatsAnalyzer/mqeTypes.d.ts.map +1 -0
  31. package/dist/types/StatsAnalyzer/types.d.ts +11 -27
  32. package/dist/types/StatsAnalyzer/types.d.ts.map +1 -1
  33. package/dist/types/StatsAnalyzer/utils.d.ts +21 -64
  34. package/dist/types/StatsAnalyzer/utils.d.ts.map +1 -1
  35. package/dist/types/StatsAnalyzer/utils.test.d.ts +2 -0
  36. package/dist/types/StatsAnalyzer/utils.test.d.ts.map +1 -0
  37. package/package.json +5 -3
package/dist/esm/index.js CHANGED
@@ -1450,60 +1450,60 @@ class MediaConnectionError extends Error {
1450
1450
  }
1451
1451
  }
1452
1452
 
1453
- function ownKeys$9(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1454
- function _objectSpread$9(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$9(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$9(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1453
+ function ownKeys$d(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1454
+ function _objectSpread$d(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$d(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$d(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1455
1455
  class SdpError extends MediaConnectionError {
1456
1456
  constructor(message) {
1457
1457
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1458
- super(message, _objectSpread$9({
1458
+ super(message, _objectSpread$d({
1459
1459
  code: ErrorCode.SdpError,
1460
1460
  name: 'SdpError'
1461
1461
  }, options));
1462
1462
  }
1463
1463
  }
1464
1464
 
1465
- function ownKeys$8(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1466
- function _objectSpread$8(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$8(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$8(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1465
+ function ownKeys$c(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1466
+ function _objectSpread$c(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$c(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$c(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1467
1467
  class IceGatheringError extends SdpError {
1468
1468
  constructor(message) {
1469
1469
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1470
- super(message, _objectSpread$8({
1470
+ super(message, _objectSpread$c({
1471
1471
  code: ErrorCode.IceGatheringError,
1472
1472
  name: 'IceGatheringError'
1473
1473
  }, options));
1474
1474
  }
1475
1475
  }
1476
1476
 
1477
- function ownKeys$7(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1478
- function _objectSpread$7(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$7(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$7(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1477
+ function ownKeys$b(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1478
+ function _objectSpread$b(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$b(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$b(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1479
1479
  class SdpAnswerHandlingError extends SdpError {
1480
1480
  constructor(message) {
1481
1481
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1482
- super(message, _objectSpread$7({
1482
+ super(message, _objectSpread$b({
1483
1483
  code: ErrorCode.SdpAnswerHandlingError,
1484
1484
  name: 'SdpAnswerHandlingError'
1485
1485
  }, options));
1486
1486
  }
1487
1487
  }
1488
1488
 
1489
- function ownKeys$6(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1490
- function _objectSpread$6(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$6(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$6(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1489
+ function ownKeys$a(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1490
+ function _objectSpread$a(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$a(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$a(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1491
1491
  class SdpOfferCreationError extends SdpError {
1492
1492
  constructor(message) {
1493
1493
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1494
- super(message, _objectSpread$6({
1494
+ super(message, _objectSpread$a({
1495
1495
  code: ErrorCode.SdpOfferCreationError,
1496
1496
  name: 'SdpOfferCreationError'
1497
1497
  }, options));
1498
1498
  }
1499
1499
  }
1500
1500
 
1501
- function ownKeys$5(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1502
- function _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$5(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$5(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1501
+ function ownKeys$9(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
1502
+ function _objectSpread$9(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$9(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$9(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1503
1503
  class SdpOfferHandlingError extends SdpError {
1504
1504
  constructor(message) {
1505
1505
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1506
- super(message, _objectSpread$5({
1506
+ super(message, _objectSpread$9({
1507
1507
  code: ErrorCode.SdpOfferHandlingError,
1508
1508
  name: 'SdpOfferHandlingError'
1509
1509
  }, options));
@@ -7212,8 +7212,8 @@ var ErrorType;
7212
7212
  ErrorType["TIMEOUT"] = "TIMEOUT";
7213
7213
  })(ErrorType || (ErrorType = {}));
7214
7214
 
7215
- function ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
7216
- function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7215
+ function ownKeys$8(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
7216
+ function _objectSpread$8(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$8(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$8(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
7217
7217
  var localTrackTypes = [{
7218
7218
  type: 'audio',
7219
7219
  kind: 'audio'
@@ -7240,8 +7240,8 @@ class MediaConnection extends EventEmitter$5 {
7240
7240
  _defineProperty(this, "forceStatsReport", void 0);
7241
7241
  this.config = mediaConnectionConfig;
7242
7242
  this.metricsCallback = metricsCallback;
7243
- this.mediaDirection = _objectSpread$4({}, options.direction);
7244
- this.localTracks = _objectSpread$4({}, options.localTracks);
7243
+ this.mediaDirection = _objectSpread$8({}, options.direction);
7244
+ this.localTracks = _objectSpread$8({}, options.localTracks);
7245
7245
  this.remoteQualityLevel = options.remoteQualityLevel;
7246
7246
  this.id = debugId || 'MediaConnection';
7247
7247
  this.transceivers = {};
@@ -7366,7 +7366,7 @@ class MediaConnection extends EventEmitter$5 {
7366
7366
  updateLocalTracks(tracks) {
7367
7367
  return this.updateTransceivers({
7368
7368
  localTracks: tracks,
7369
- direction: _objectSpread$4({}, this.mediaDirection)
7369
+ direction: _objectSpread$8({}, this.mediaDirection)
7370
7370
  });
7371
7371
  }
7372
7372
  updateDirection(direction) {
@@ -7599,7 +7599,7 @@ class MediaConnection extends EventEmitter$5 {
7599
7599
  if (this.config.sdpMunging.h264MaxFs) {
7600
7600
  this.warn('createSdpMungingConfig', 'conflict: both config.sdpMunging.h264MaxFs and receiveOptions.remoteQualityLevel are set, remoteQualityLevel will override the config');
7601
7601
  }
7602
- return _objectSpread$4(_objectSpread$4({}, this.config.sdpMunging), {}, {
7602
+ return _objectSpread$8(_objectSpread$8({}, this.config.sdpMunging), {}, {
7603
7603
  h264MaxFs: maxFsValues[this.remoteQualityLevel]
7604
7604
  });
7605
7605
  }
@@ -15150,8 +15150,8 @@ function createMachine(config, options) {
15150
15150
 
15151
15151
  var assign = assign$1;
15152
15152
 
15153
- function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
15154
- function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15153
+ function ownKeys$7(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
15154
+ function _objectSpread$7(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$7(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$7(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15155
15155
  var WEB_TIEBREAKER_VALUE = 0xfffffffe;
15156
15156
  var MAX_RETRIES = 2;
15157
15157
  var DEFAULT_IS_OK_IN_TRANSACTION = true;
@@ -15419,28 +15419,28 @@ class Roap extends EventEmitter$5 {
15419
15419
  handleRemoteOffer: (_context, event) => this.handleRemoteOfferCallback(event.sdp)
15420
15420
  },
15421
15421
  actions: {
15422
- enqueueNewOfferCreation: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
15422
+ enqueueNewOfferCreation: assign(context => _objectSpread$7(_objectSpread$7({}, context), {}, {
15423
15423
  pendingLocalOffer: true
15424
15424
  })),
15425
- resetPendingLocalOffer: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
15425
+ resetPendingLocalOffer: assign(context => _objectSpread$7(_objectSpread$7({}, context), {}, {
15426
15426
  pendingLocalOffer: false
15427
15427
  })),
15428
- increaseSeq: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
15428
+ increaseSeq: assign(context => _objectSpread$7(_objectSpread$7({}, context), {}, {
15429
15429
  seq: context.seq + 1
15430
15430
  })),
15431
- updateSeq: assign((context, event) => _objectSpread$3(_objectSpread$3({}, context), {}, {
15431
+ updateSeq: assign((context, event) => _objectSpread$7(_objectSpread$7({}, context), {}, {
15432
15432
  seq: event.seq
15433
15433
  })),
15434
- increaseRetryCounter: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
15434
+ increaseRetryCounter: assign(context => _objectSpread$7(_objectSpread$7({}, context), {}, {
15435
15435
  retryCounter: context.retryCounter + 1
15436
15436
  })),
15437
- resetRetryCounter: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
15437
+ resetRetryCounter: assign(context => _objectSpread$7(_objectSpread$7({}, context), {}, {
15438
15438
  retryCounter: 0
15439
15439
  })),
15440
- setOfferRequestFlag: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
15440
+ setOfferRequestFlag: assign(context => _objectSpread$7(_objectSpread$7({}, context), {}, {
15441
15441
  isHandlingOfferRequest: true
15442
15442
  })),
15443
- resetOfferRequestFlag: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
15443
+ resetOfferRequestFlag: assign(context => _objectSpread$7(_objectSpread$7({}, context), {}, {
15444
15444
  isHandlingOfferRequest: false
15445
15445
  })),
15446
15446
  handleGlare: (_context, event) => {
@@ -15468,11 +15468,11 @@ class Roap extends EventEmitter$5 {
15468
15468
  rejectPendingInitiateOfferPromises: (_context, event) => this.rejectPendingInitiateOfferPromises(event.data),
15469
15469
  updateIsOkInTransaction: assign((context, event) => {
15470
15470
  var _event$headers;
15471
- return _objectSpread$3(_objectSpread$3({}, context), {}, {
15471
+ return _objectSpread$7(_objectSpread$7({}, context), {}, {
15472
15472
  isOkInTransaction: !((_event$headers = event.headers) !== null && _event$headers !== void 0 && _event$headers.includes(HEADER_NO_OK_IN_TRANSACTION))
15473
15473
  });
15474
15474
  }),
15475
- resetOkInTransaction: assign(context => _objectSpread$3(_objectSpread$3({}, context), {}, {
15475
+ resetOkInTransaction: assign(context => _objectSpread$7(_objectSpread$7({}, context), {}, {
15476
15476
  isOkInTransaction: DEFAULT_IS_OK_IN_TRANSACTION
15477
15477
  }))
15478
15478
  },
@@ -15694,8 +15694,8 @@ class Roap extends EventEmitter$5 {
15694
15694
  }
15695
15695
  }
15696
15696
 
15697
- function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
15698
- function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15697
+ function ownKeys$6(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
15698
+ function _objectSpread$6(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$6(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$6(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15699
15699
  class RoapMediaConnection extends EventEmitter$5 {
15700
15700
  constructor(mediaConnectionConfig, options, debugId) {
15701
15701
  var metricsCallback = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : () => {};
@@ -15803,7 +15803,7 @@ class RoapMediaConnection extends EventEmitter$5 {
15803
15803
  reconnect(iceServers) {
15804
15804
  var initiateOffer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
15805
15805
  this.log('reconnect()', "iceServers: ".concat(JSON.stringify(iceServers)));
15806
- var config = _objectSpread$2(_objectSpread$2({}, this.mediaConnection.getConfig()), {}, {
15806
+ var config = _objectSpread$6(_objectSpread$6({}, this.mediaConnection.getConfig()), {}, {
15807
15807
  iceServers
15808
15808
  });
15809
15809
  var options = this.mediaConnection.getSendReceiveOptions();
@@ -15910,8 +15910,8 @@ class RoapMediaConnection extends EventEmitter$5 {
15910
15910
  }
15911
15911
  }
15912
15912
 
15913
- function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
15914
- function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15913
+ function ownKeys$5(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
15914
+ function _objectSpread$5(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$5(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$5(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
15915
15915
  class MultistreamRoapMediaConnection extends EventEmitter$5 {
15916
15916
  constructor(mediaConnectionConfig, debugId) {
15917
15917
  var metricsCallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : () => {};
@@ -15945,7 +15945,7 @@ class MultistreamRoapMediaConnection extends EventEmitter$5 {
15945
15945
  }
15946
15946
  createMultistreamConnection(mediaConnectionConfig, metricsCallback) {
15947
15947
  this.log('createMultistreamConnection()', 'called');
15948
- var multistreamConnection = new MultistreamConnection(_objectSpread$1(_objectSpread$1({}, mediaConnectionConfig), {}, {
15948
+ var multistreamConnection = new MultistreamConnection(_objectSpread$5(_objectSpread$5({}, mediaConnectionConfig), {}, {
15949
15949
  metricsCallback
15950
15950
  }));
15951
15951
  multistreamConnection.on(MultistreamConnectionEventNames.ActiveSpeakerNotification, csis => {
@@ -16162,6 +16162,272 @@ class MultistreamRoapMediaConnection extends EventEmitter$5 {
16162
16162
 
16163
16163
  var Errors = Error$1;
16164
16164
 
16165
+ var isIPv4 = function isIPv4(ipString) {
16166
+ if (!ipString.match(/^([0-9]{1,3}\.){3}[0-9]{1,3}$/)) {
16167
+ return false;
16168
+ }
16169
+ var octets = ipString.split('.');
16170
+ for (var octet of octets) {
16171
+ var number = Number(octet);
16172
+ if (number > 255) {
16173
+ return false;
16174
+ }
16175
+ }
16176
+ return true;
16177
+ };
16178
+ var isIPv6 = function isIPv6(ipString) {
16179
+ var chunks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 8;
16180
+ ipString = ipString.toLowerCase();
16181
+ if (ipString === '::') {
16182
+ return true;
16183
+ }
16184
+ if (!ipString.match(/^([0-9a-f]{0,4}:?){2,8}$/)) {
16185
+ return false;
16186
+ }
16187
+
16188
+ // If there is a colon at the end, it must be a double colon
16189
+ if (ipString[ipString.length - 1] === ':') {
16190
+ if (ipString[ipString.length - 2] !== ':') {
16191
+ return false;
16192
+ }
16193
+ }
16194
+
16195
+ // No more than one double colon
16196
+ if (ipString.split('::').length > 2) {
16197
+ return false;
16198
+ }
16199
+
16200
+ // If no double colon, then exactly `chunks` chunks
16201
+ if (ipString.split('::').length === 1) {
16202
+ if (ipString.split(':').length !== chunks) {
16203
+ return false;
16204
+ }
16205
+ }
16206
+ if (ipString.split('::').length === 2) {
16207
+ var right = ipString.split('::')[1];
16208
+ right = right.split(':');
16209
+ for (var i = 0; i < right.length - 1; i++) {
16210
+ if (right[i] === '') {
16211
+ return false;
16212
+ }
16213
+ }
16214
+ }
16215
+ return true;
16216
+ };
16217
+ var isIPv64 = function isIPv64(ipString) {
16218
+ var [v6, v4] = splitIPv64(ipString);
16219
+ return isIPv6(v6, 6) && isIPv4(v4);
16220
+ };
16221
+
16222
+ // Reference: https://web.archive.org/web/20181019071947/http://www.tcpipguide.com/free/t_IPv6IPv4AddressEmbedding-2.htm
16223
+ // Either starts with 96 0s or 80 0s followed by 16 1s
16224
+ var isIPv4MappedIPv6 = function isIPv4MappedIPv6(ipString) {
16225
+ return isIPv64(ipString) && (!binaryIPv64(ipString).substring(0, 96).includes('1') || !binaryIPv64(ipString).substring(0, 80).includes('1') && !binaryIPv64(ipString).substring(80, 96).includes('0'));
16226
+ };
16227
+ var ipType = function ipType(ipString) {
16228
+ if (isIPv4(ipString)) {
16229
+ return 'IPv4';
16230
+ }
16231
+ if (isIPv6(ipString)) {
16232
+ return 'IPv6';
16233
+ }
16234
+ if (isIPv64(ipString)) {
16235
+ return 'IPv6_4';
16236
+ }
16237
+ return 'None';
16238
+ };
16239
+ var padRight = function padRight(str, length) {
16240
+ var char = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '0';
16241
+ while (str.length < length) {
16242
+ str += char;
16243
+ }
16244
+ return str;
16245
+ };
16246
+ var padLeft = function padLeft(str, length) {
16247
+ var char = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '0';
16248
+ while (str.length < length) {
16249
+ str = char + str;
16250
+ }
16251
+ return str;
16252
+ };
16253
+ var split = function split(str, length) {
16254
+ var chunks = [];
16255
+ while (str.length > 0) {
16256
+ var chunk = str.substring(0, length);
16257
+ chunks.push(chunk);
16258
+ str = str.substring(length);
16259
+ }
16260
+ return chunks;
16261
+ };
16262
+ var toBinary = function toBinary(n) {
16263
+ return Number(n).toString(2);
16264
+ };
16265
+ var fromBinary = function fromBinary(binaryString) {
16266
+ return parseInt(binaryString, 2);
16267
+ };
16268
+ var binaryIPv4 = function binaryIPv4(ipString) {
16269
+ var octetStrings = ipString.split('.');
16270
+ return octetStrings.map(str => padLeft(toBinary(str), 8)).join('');
16271
+ };
16272
+ var toHex = function toHex(n) {
16273
+ return n.toString(16);
16274
+ };
16275
+ var binaryIPv6 = function binaryIPv6(ipString) {
16276
+ var [left, right] = ipString.split('::');
16277
+ left = left.split(':');
16278
+ if (right !== undefined) {
16279
+ right = right.split(':');
16280
+ } else {
16281
+ right = [];
16282
+ }
16283
+ while (left.length + right.length < 8) {
16284
+ left.push('0');
16285
+ }
16286
+ var chunkStrings = left.concat(right);
16287
+ for (var i = 0; i < chunkStrings.length; i++) {
16288
+ if (chunkStrings[i].length === 0) {
16289
+ chunkStrings[i] = '0';
16290
+ }
16291
+ }
16292
+ var chunks = chunkStrings.map(str => parseInt(str, 16));
16293
+ var binaryChunks = chunks.map(n => padLeft(toBinary(n), 16));
16294
+ return binaryChunks.join('');
16295
+ };
16296
+ var splitIPv64 = function splitIPv64(ipString) {
16297
+ var separatorIndex = ipString.lastIndexOf(':');
16298
+ var v6 = ipString.substring(0, separatorIndex);
16299
+ var v4 = ipString.substring(separatorIndex + 1);
16300
+ if (v6[v6.length - 1] === ':') {
16301
+ v6 = v6 + ':';
16302
+ }
16303
+ return [v6, v4];
16304
+ };
16305
+ var binaryIPv64 = function binaryIPv64(ipString) {
16306
+ var [v6, v4] = splitIPv64(ipString);
16307
+ var [left, right] = v6.split('::');
16308
+ left = left.split(':');
16309
+ if (right !== undefined) {
16310
+ right = right.split(':');
16311
+ } else {
16312
+ right = [];
16313
+ }
16314
+ while (left.length + right.length < 6) {
16315
+ left.push('0');
16316
+ }
16317
+ var chunkStrings = left.concat(right);
16318
+ for (var i = 0; i < chunkStrings.length; i++) {
16319
+ if (chunkStrings[i].length === 0) {
16320
+ chunkStrings[i] = '0';
16321
+ }
16322
+ }
16323
+ var chunks = chunkStrings.map(str => parseInt(str, 16));
16324
+ var binaryChunks = chunks.map(n => padLeft(toBinary(n), 16));
16325
+ return binaryChunks.join('') + binaryIPv4(v4);
16326
+ };
16327
+ var fromBinaryIPv4 = function fromBinaryIPv4(binaryString) {
16328
+ var octets = split(binaryString, 8);
16329
+ return octets.map(fromBinary).join('.');
16330
+ };
16331
+ var compressIPv6 = function compressIPv6(ipString) {
16332
+ var chunks = ipString.split(':');
16333
+ var bestRunLength = 0;
16334
+ var bestRunStart = null;
16335
+ var currentlyRun = false;
16336
+ var runLength = 0;
16337
+ var runStart = null;
16338
+ for (var i = 0; i < chunks.length; i++) {
16339
+ if (currentlyRun) {
16340
+ if (chunks[i] === '0') {
16341
+ runLength++;
16342
+ } else {
16343
+ if (runLength > bestRunLength) {
16344
+ bestRunLength = runLength;
16345
+ bestRunStart = runStart;
16346
+ }
16347
+ currentlyRun = false;
16348
+ runLength = 0;
16349
+ runStart = null;
16350
+ }
16351
+ } else {
16352
+ if (chunks[i] === '0') {
16353
+ currentlyRun = true;
16354
+ runLength = 1;
16355
+ runStart = i;
16356
+ }
16357
+ }
16358
+ }
16359
+ if (runStart !== null && runLength > bestRunLength) {
16360
+ bestRunLength = runLength;
16361
+ bestRunStart = runStart;
16362
+ }
16363
+ if (bestRunLength < 2) {
16364
+ return ipString;
16365
+ }
16366
+ var left = chunks.slice(0, bestRunStart).join(':');
16367
+ var right = chunks.slice(bestRunStart + bestRunLength).join(':');
16368
+ var result = left + '::' + right;
16369
+ return result;
16370
+ };
16371
+ var fromBinaryIPv6 = function fromBinaryIPv6(binaryString) {
16372
+ var chunks = split(binaryString, 16);
16373
+ var hexChunks = chunks.map(fromBinary).map(toHex);
16374
+ var compressedChunks = compressIPv6(hexChunks.join(':'));
16375
+ return compressedChunks;
16376
+ };
16377
+ var fromBinaryIPv64 = function fromBinaryIPv64(binaryString) {
16378
+ var v6 = binaryString.substring(0, 96);
16379
+ var v4 = binaryString.substring(96);
16380
+ var left = fromBinaryIPv6(v6);
16381
+ var right = fromBinaryIPv4(v4);
16382
+ var compressedChunks = left;
16383
+ if (compressedChunks[compressedChunks.length - 1] !== ':') {
16384
+ compressedChunks += ':';
16385
+ }
16386
+ return compressedChunks + right;
16387
+ };
16388
+ var anonymizeIPv4 = function anonymizeIPv4(ipString, maskLength) {
16389
+ var binary = binaryIPv4(ipString);
16390
+ var segment = binary.substring(0, maskLength);
16391
+ var anonymizedBinary = padRight(segment, 32);
16392
+ return fromBinaryIPv4(anonymizedBinary);
16393
+ };
16394
+ var anonymizeIPv6 = function anonymizeIPv6(ipString, maskLength) {
16395
+ var binary = binaryIPv6(ipString);
16396
+ var segment = binary.substring(0, maskLength);
16397
+ var anonymizedBinary = padRight(segment, 128);
16398
+ return fromBinaryIPv6(anonymizedBinary);
16399
+ };
16400
+ var anonymizeIPv64 = function anonymizeIPv64(ipString, maskLength) {
16401
+ var binary = binaryIPv64(ipString);
16402
+ var segment = binary.substring(0, maskLength);
16403
+ var anonymizedBinary = padRight(segment, 128);
16404
+ return fromBinaryIPv64(anonymizedBinary);
16405
+ };
16406
+ var anonymizeIP = function anonymizeIP(ipString) {
16407
+ var v4MaskLength = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 24;
16408
+ var v6MaskLength = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 24;
16409
+ if (typeof ipString !== 'string') {
16410
+ return null;
16411
+ }
16412
+ ipString = ipString.trim().toLowerCase();
16413
+ var type = ipType(ipString);
16414
+ if (type === 'IPv4') {
16415
+ return anonymizeIPv4(ipString, v4MaskLength);
16416
+ }
16417
+ if (type === 'IPv6') {
16418
+ return anonymizeIPv6(ipString, v6MaskLength);
16419
+ }
16420
+ if (type === 'IPv6_4') {
16421
+ if (isIPv4MappedIPv6(ipString)) {
16422
+ return anonymizeIPv64(ipString, v4MaskLength + 96);
16423
+ } else {
16424
+ return anonymizeIPv64(ipString, v6MaskLength);
16425
+ }
16426
+ }
16427
+ return null;
16428
+ };
16429
+ var ipAnonymize = anonymizeIP;
16430
+
16165
16431
  var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global$1 !== 'undefined' ? global$1 : typeof self !== 'undefined' ? self : {};
16166
16432
  function getDefaultExportFromCjs(x) {
16167
16433
  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
@@ -17512,371 +17778,120 @@ var CapabilityState;
17512
17778
  CapabilityState["UNKNOWN"] = "unknown";
17513
17779
  })(CapabilityState || (CapabilityState = {}));
17514
17780
 
17515
- var NetworkType;
17516
- (function (NetworkType) {
17517
- NetworkType["VPN"] = "vpn";
17518
- NetworkType["UNKNOWN"] = "unknown";
17519
- NetworkType["WIFI"] = "wifi";
17520
- NetworkType["ETHERNET"] = "ethernet";
17521
- })(NetworkType || (NetworkType = {}));
17522
- var MediaDevices;
17523
- (function (MediaDevices) {
17524
- MediaDevices["MICROPHONE"] = "microphone";
17525
- MediaDevices["SPEAKER"] = "speaker";
17526
- MediaDevices["CAMERA"] = "camera";
17527
- })(MediaDevices || (MediaDevices = {}));
17528
- var MediaDirection;
17529
- (function (MediaDirection) {
17530
- MediaDirection["SEND"] = "send";
17531
- MediaDirection["RECEIVE"] = "recv";
17532
- })(MediaDirection || (MediaDirection = {}));
17533
- var IpType;
17534
- (function (IpType) {
17535
- IpType["REMOTE"] = "remote";
17536
- IpType["LOCAL"] = "local";
17537
- })(IpType || (IpType = {}));
17538
-
17539
- var STATS_DEFAULT = {
17540
- encryption: 'sha-256',
17541
- bandwidth: {
17542
- systemBandwidth: 0,
17543
- sentPerSecond: 0,
17544
- encodedPerSecond: 0,
17545
- helper: {
17546
- audioBytesSent: 0,
17547
- videoBytesSent: 0
17548
- },
17549
- speed: 0
17550
- },
17551
- results: {},
17552
- connectionType: {
17553
- systemNetworkType: 'unknown',
17554
- systemIpAddress: '0.0.0.0',
17555
- local: {
17556
- candidateType: 'host',
17557
- transport: 'UDP',
17558
- networkType: NetworkType.UNKNOWN
17559
- },
17560
- remote: {
17561
- candidateType: 'host',
17562
- transport: 'UDP',
17563
- networkType: NetworkType.UNKNOWN
17564
- }
17565
- },
17566
- resolutions: {},
17567
- internal: {
17568
- remote: {},
17569
- candidates: {}
17570
- }
17781
+ var MQE_INTERVAL = 60000;
17782
+ var DEFAULT_IP = '0.0.0.0';
17783
+ var UNKNOWN = 'unknown';
17784
+ var NOISE_REDUCTION_MODE;
17785
+ (function (NOISE_REDUCTION_MODE) {
17786
+ NOISE_REDUCTION_MODE["NONE"] = "AUDIO_BACKGROUND_NOISE_REDUCTION_NONE";
17787
+ NOISE_REDUCTION_MODE["LOW_POWER"] = "AUDIO_BACKGROUND_NOISE_REDUCTION_LOW_POWER";
17788
+ })(NOISE_REDUCTION_MODE || (NOISE_REDUCTION_MODE = {}));
17789
+ var VIRTUAL_BACKGROUND_MODE;
17790
+ (function (VIRTUAL_BACKGROUND_MODE) {
17791
+ VIRTUAL_BACKGROUND_MODE["NONE"] = "VIDEO_BACKGROUND_AUGMENT_NONE";
17792
+ VIRTUAL_BACKGROUND_MODE["BLUR"] = "VIDEO_BACKGROUND_AUGMENT_BLUR";
17793
+ VIRTUAL_BACKGROUND_MODE["REPLACE_IMAGE"] = "VIDEO_BACKGROUND_AUGMENT_REPLACE_IMAGE";
17794
+ VIRTUAL_BACKGROUND_MODE["REPLACE_VIDEO"] = "VIDEO_BACKGROUND_AUGMENT_REPLACE_VIDEO";
17795
+ })(VIRTUAL_BACKGROUND_MODE || (VIRTUAL_BACKGROUND_MODE = {}));
17796
+
17797
+ var initialMqeInterval = {
17798
+ intervalNumber: 0,
17799
+ intervalMetadata: {},
17800
+ audioTransmit: [],
17801
+ audioReceive: [],
17802
+ videoTransmit: [],
17803
+ videoReceive: []
17571
17804
  };
17572
- var DEFAULT_GET_STATS_FILTER = {
17573
- types: ['codec', 'track', 'transport', 'candidate-pair', 'outbound-rtp', 'outboundrtp', 'inbound-rtp', 'inboundrtp', 'remote-inbound-rtp', 'remote-outbound-rtp', 'remote-candidate', 'local-candidate', 'media-source']
17805
+ var initialMqeIntervalSessionCommon = {
17806
+ isMain: true,
17807
+ mariFecEnabled: false,
17808
+ mariQosEnabled: false,
17809
+ multistreamEnabled: true,
17810
+ direction: 'inactive'
17574
17811
  };
17575
- var MQA_INTERVAL = 60000;
17576
- var _UNKNOWN_ = 'UNKNOWN';
17577
- var emptyMqaInterval = {
17578
- audioReceive: [],
17579
- audioTransmit: [],
17580
- intervalMetadata: {
17581
- peerReflexiveIP: '0.0.0.0',
17582
- peripherals: [],
17583
- cpuInfo: {
17584
- numberOfCores: 1,
17585
- description: 'NA',
17586
- architecture: 'unknown'
17587
- },
17588
- processAverageCPU: 0,
17589
- processMaximumCPU: 0,
17590
- systemAverageCPU: 0,
17591
- systemMaximumCPU: 0,
17592
- screenWidth: 0,
17593
- screenHeight: 0,
17594
- screenResolution: 0,
17595
- appWindowWidth: 0,
17596
- appWindowHeight: 0,
17597
- appWindowSize: 0
17598
- },
17599
- networkType: '',
17600
- intervalNumber: 0,
17601
- videoReceive: [],
17602
- videoTransmit: []
17812
+ var initialMqeIntervalSessionReceive = {
17813
+ common: initialMqeIntervalSessionCommon,
17814
+ fecPackets: 0,
17815
+ fecBitrate: 0,
17816
+ rtpPackets: 0,
17817
+ rtpBitrate: 0,
17818
+ rtpHopByHopLost: 0,
17819
+ mediaHopByHopLost: 0,
17820
+ rtpRecovered: 0,
17821
+ rtcpPackets: 0,
17822
+ rtcpBitrate: 0,
17823
+ stunPackets: 0,
17824
+ stunBitrate: 0,
17825
+ dtlsPackets: 0,
17826
+ dtlsBitrate: 0,
17827
+ transportType: 'UDP',
17828
+ maxBitrate: 0,
17829
+ srtpUnprotectErrors: 0
17603
17830
  };
17604
- var emptyAudioReceive = {
17605
- common: {
17606
- common: {
17607
- direction: 'inactive',
17608
- isMain: true,
17609
- mariFecEnabled: false,
17610
- mariRtxEnabled: false,
17611
- mariQosEnabled: false,
17612
- mariLiteEnabled: false,
17613
- multistreamEnabled: false
17614
- },
17615
- dtlsBitrate: 0,
17616
- dtlsPackets: 0,
17617
- fecBitrate: 0,
17618
- fecPackets: 0,
17619
- maxBitrate: 0,
17620
- mediaHopByHopLost: 0,
17621
- rtcpBitrate: 0,
17622
- rtcpPackets: 0,
17623
- rtpBitrate: 0,
17624
- rtpHopByHopLost: 0,
17625
- rtpPackets: 0,
17626
- rtpRecovered: 0,
17627
- rtxBitrate: 0,
17628
- rtxPackets: 0,
17629
- srtcpUnprotectErrors: 0,
17630
- srtpUnprotectErrors: 0,
17631
- stunBitrate: 0,
17632
- stunPackets: 0,
17633
- transportType: 'UDP',
17634
- mediaPacketSize: {
17635
- meanRtpPacketSize: 0,
17636
- maxRtpPacketSize: 0,
17637
- minRtpPacketSize: 0
17638
- }
17639
- },
17640
- streams: []
17831
+ var initialMqeIntervalStreamReceiveCommon = {
17832
+ ssci: 0,
17833
+ rtpPackets: 0,
17834
+ rtpEndToEndLost: 0,
17835
+ concealedFrames: 0,
17836
+ maxConcealRunLength: 0,
17837
+ receivedBitrate: 0,
17838
+ requestedBitrate: 0,
17839
+ optimalBitrate: 0,
17840
+ csi: [],
17841
+ codec: ''
17641
17842
  };
17642
- var emptyAudioReceiveStream = {
17643
- common: {
17644
- codec: 'opus',
17645
- concealedFrames: 0,
17646
- csi: [],
17647
- maxConcealRunLength: 0,
17648
- optimalBitrate: 0,
17649
- optimalFrameRate: 0,
17650
- receivedBitrate: 0,
17651
- receivedFrameRate: 0,
17652
- renderedFrameRate: 0,
17653
- requestedBitrate: 0,
17654
- requestedFrameRate: 0,
17655
- rtpEndToEndLost: 0,
17656
- maxRtpJitter: 0,
17657
- meanRtpJitter: 0,
17658
- rtpPackets: 0,
17659
- ssci: 0
17660
- }
17843
+ var initialMqeIntervalStreamReceiveAudio = {
17844
+ common: initialMqeIntervalStreamReceiveCommon
17661
17845
  };
17662
- var emptyAudioTransmit = {
17663
- common: {
17664
- availableBitrate: 0,
17665
- common: {
17666
- direction: 'inactive',
17667
- isMain: true,
17668
- mariFecEnabled: false,
17669
- mariRtxEnabled: false,
17670
- mariQosEnabled: false,
17671
- mariLiteEnabled: false,
17672
- multistreamEnabled: false
17673
- },
17674
- dtlsBitrate: 0,
17675
- dtlsPackets: 0,
17676
- fecBitrate: 0,
17677
- fecPackets: 0,
17678
- maxBitrate: 0,
17679
- queueDelay: 0,
17680
- remoteJitter: 0,
17681
- remoteLossRate: 0,
17682
- roundTripTime: 0,
17683
- rtcpBitrate: 0,
17684
- rtcpPackets: 0,
17685
- rtpBitrate: 0,
17686
- rtpPackets: 0,
17687
- rtxBitrate: 0,
17688
- rtxPackets: 0,
17689
- stunBitrate: 0,
17690
- stunPackets: 0,
17691
- transportType: 'UDP',
17692
- mediaPacketSize: {
17693
- meanRtpPacketSize: 0,
17694
- maxRtpPacketSize: 0,
17695
- minRtpPacketSize: 0
17696
- }
17697
- },
17698
- streams: []
17846
+ var initialMqeIntervalSessionTransmit = {
17847
+ common: initialMqeIntervalSessionCommon,
17848
+ fecPackets: 0,
17849
+ fecBitrate: 0,
17850
+ rtpPackets: 0,
17851
+ rtpBitrate: 0,
17852
+ rtcpPackets: 0,
17853
+ rtcpBitrate: 0,
17854
+ stunPackets: 0,
17855
+ stunBitrate: 0,
17856
+ dtlsPackets: 0,
17857
+ dtlsBitrate: 0,
17858
+ transportType: 'UDP',
17859
+ maxBitrate: 0,
17860
+ availableBitrate: 0,
17861
+ queueDelay: 0
17699
17862
  };
17700
- var emptyAudioTransmitStream = {
17701
- common: {
17702
- codec: 'opus',
17703
- csi: [],
17704
- requestedBitrate: 0,
17705
- requestedFrames: 0,
17706
- rtpPackets: 0,
17707
- ssci: 0,
17708
- transmittedBitrate: 0,
17709
- transmittedFrameRate: 0
17710
- }
17863
+ var initialMqeIntervalStreamTransmitCommon = {
17864
+ ssci: 0,
17865
+ rtpPackets: 0,
17866
+ transmittedBitrate: 0,
17867
+ requestedBitrate: 0,
17868
+ codec: ''
17711
17869
  };
17712
- var emptyVideoReceive = {
17713
- common: {
17714
- common: {
17715
- direction: 'inactive',
17716
- isMain: true,
17717
- mariFecEnabled: false,
17718
- mariRtxEnabled: false,
17719
- mariQosEnabled: false,
17720
- mariLiteEnabled: false,
17721
- multistreamEnabled: false
17722
- },
17723
- dtlsBitrate: 0,
17724
- dtlsPackets: 0,
17725
- fecBitrate: 0,
17726
- fecPackets: 0,
17727
- maxBitrate: 0,
17728
- mediaHopByHopLost: 0,
17729
- rtcpBitrate: 0,
17730
- rtcpPackets: 0,
17731
- rtpBitrate: 0,
17732
- rtpHopByHopLost: 0,
17733
- rtpPackets: 0,
17734
- rtpRecovered: 0,
17735
- rtxBitrate: 0,
17736
- rtxPackets: 0,
17737
- srtcpUnprotectErrors: 0,
17738
- srtpUnprotectErrors: 0,
17739
- stunBitrate: 0,
17740
- stunPackets: 0,
17741
- transportType: 'UDP',
17742
- mediaPacketSize: {
17743
- meanRtpPacketSize: 0,
17744
- maxRtpPacketSize: 0,
17745
- minRtpPacketSize: 0
17746
- }
17747
- },
17748
- streams: []
17870
+ var initialMqeIntervalStreamTransmitAudio = {
17871
+ common: initialMqeIntervalStreamTransmitCommon
17749
17872
  };
17750
- var emptyVideoReceiveStream = {
17751
- common: {
17752
- codec: 'H264',
17753
- concealedFrames: 0,
17754
- csi: [],
17755
- maxConcealRunLength: 0,
17756
- optimalBitrate: 0,
17757
- optimalFrameRate: 0,
17758
- receivedBitrate: 0,
17759
- receivedFrameRate: 0,
17760
- renderedFrameRate: 0,
17761
- requestedBitrate: 0,
17762
- requestedFrameRate: 0,
17763
- rtpEndToEndLost: 0,
17764
- maxRtpJitter: 0,
17765
- meanRtpJitter: 0,
17766
- rtpPackets: 0,
17767
- ssci: 0
17768
- },
17769
- h264CodecProfile: 'BP',
17770
- isActiveSpeaker: false,
17771
- optimalFrameSize: 0,
17873
+ var initialMqeIntervalStreamReceiveVideo = {
17874
+ common: initialMqeIntervalStreamReceiveCommon,
17772
17875
  receivedFrameSize: 0,
17876
+ requestedFrameSize: 0,
17877
+ optimalFrameSize: 0,
17773
17878
  receivedHeight: 0,
17774
- receivedKeyFrames: 0,
17775
- receivedKeyFramesForRequest: 0,
17776
- receivedKeyFramesSourceChange: 0,
17777
- receivedKeyFramesUnknown: 0,
17778
17879
  receivedWidth: 0,
17779
- requestedFrameSize: 0,
17780
- requestedKeyFrames: 0
17781
- };
17782
- var emptyVideoTransmit = {
17783
- common: {
17784
- availableBitrate: 0,
17785
- common: {
17786
- direction: 'inactive',
17787
- isMain: true,
17788
- mariFecEnabled: false,
17789
- mariRtxEnabled: false,
17790
- mariQosEnabled: false,
17791
- mariLiteEnabled: false,
17792
- multistreamEnabled: false
17793
- },
17794
- dtlsBitrate: 0,
17795
- dtlsPackets: 0,
17796
- fecBitrate: 0,
17797
- fecPackets: 0,
17798
- maxBitrate: 0,
17799
- queueDelay: 0,
17800
- remoteJitter: 0,
17801
- remoteLossRate: 0,
17802
- roundTripTime: 0,
17803
- rtcpBitrate: 0,
17804
- rtcpPackets: 0,
17805
- rtpBitrate: 0,
17806
- rtpPackets: 0,
17807
- rtxBitrate: 0,
17808
- rtxPackets: 0,
17809
- stunBitrate: 0,
17810
- stunPackets: 0,
17811
- transportType: 'UDP',
17812
- mediaPacketSize: {
17813
- meanRtpPacketSize: 0,
17814
- maxRtpPacketSize: 0,
17815
- minRtpPacketSize: 0
17816
- }
17817
- },
17818
- streams: []
17819
- };
17820
- var emptyVideoTransmitStream = {
17821
- common: {
17822
- codec: 'H264',
17823
- csi: [],
17824
- duplicateSsci: 0,
17825
- requestedBitrate: 0,
17826
- requestedFrames: 0,
17827
- rtpPackets: 0,
17828
- ssci: 0,
17829
- transmittedBitrate: 0,
17830
- transmittedFrameRate: 0
17831
- },
17832
- h264CodecProfile: 'BP',
17833
- isAvatar: false,
17834
- isHardwareEncoded: false,
17835
- localConfigurationChanges: 2,
17836
- maxFrameQp: 0,
17837
- maxNoiseLevel: 0,
17838
- minRegionQp: 0,
17839
- remoteConfigurationChanges: 0,
17840
- requestedFrameSize: 0,
17880
+ receivedKeyFrames: 0,
17841
17881
  requestedKeyFrames: 0,
17882
+ h264CodecProfile: 'BP'
17883
+ };
17884
+ var initialMqeIntervalStreamTransmitVideo = {
17885
+ common: initialMqeIntervalStreamTransmitCommon,
17842
17886
  transmittedFrameSize: 0,
17887
+ requestedFrameSize: 0,
17843
17888
  transmittedHeight: 0,
17889
+ transmittedWidth: 0,
17844
17890
  transmittedKeyFrames: 0,
17845
- transmittedKeyFramesClient: 0,
17846
- transmittedKeyFramesConfigurationChange: 0,
17847
- transmittedKeyFramesFeedback: 0,
17848
- transmittedKeyFramesLocalDrop: 0,
17849
- transmittedKeyFramesOtherLayer: 0,
17850
- transmittedKeyFramesPeriodic: 0,
17851
- transmittedKeyFramesSceneChange: 0,
17852
- transmittedKeyFramesStartup: 0,
17853
- transmittedKeyFramesUnknown: 0,
17854
- transmittedWidth: 0
17855
- };
17856
- var emptySender = {
17857
- trackLabel: '',
17858
- maxPacketLossRatio: 0,
17859
- availableBandwidth: 0,
17860
- bytesSent: 0,
17861
- meanRemoteJitter: [],
17862
- meanRoundTripTime: []
17863
- };
17864
- var emptyReceiver = {
17865
- availableBandwidth: 0,
17866
- bytesReceived: 0,
17867
- meanRtpJitter: [],
17868
- meanRoundTripTime: []
17869
- };
17870
- var VIDEO_FRAME_RATE_MULTIPLIER = 100;
17871
- var NOISE_REDUCTION_MODE = {
17872
- NONE: 'AUDIO_BACKGROUND_NOISE_REDUCTION_NONE',
17873
- LOW_POWER: 'AUDIO_BACKGROUND_NOISE_REDUCTION_LOW_POWER'
17874
- };
17875
- var VIRTUAL_BACKGROUND_MODE = {
17876
- NONE: 'VIDEO_BACKGROUND_AUGMENT_NONE',
17877
- BLUR: 'VIDEO_BACKGROUND_AUGMENT_BLUR',
17878
- REPLACE_IMAGE: 'VIDEO_BACKGROUND_AUGMENT_REPLACE_IMAGE',
17879
- REPLACE_VIDEO: 'VIDEO_BACKGROUND_AUGMENT_REPLACE_VIDEO'
17891
+ requestedKeyFrames: 0,
17892
+ localConfigurationChanges: 0,
17893
+ remoteConfigurationChanges: 0,
17894
+ h264CodecProfile: 'BP'
17880
17895
  };
17881
17896
 
17882
17897
  var max = array => {
@@ -17897,384 +17912,705 @@ var mean = array => {
17897
17912
  }
17898
17913
  return array.reduce((a, b) => a + b) / array.length;
17899
17914
  };
17900
- var getTotalValueFromBaseType = (stats, sendrecvType, baseMediaType, value) => Object.keys(stats).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => {
17901
- var _stats$mt, _stats$mt$sendrecvTyp;
17902
- return acc + (((_stats$mt = stats[mt]) === null || _stats$mt === void 0 ? void 0 : (_stats$mt$sendrecvTyp = _stats$mt[sendrecvType]) === null || _stats$mt$sendrecvTyp === void 0 ? void 0 : _stats$mt$sendrecvTyp[value]) || 0);
17903
- }, 0);
17915
+ var bytesToBitrate = (bytes, timeElapsed) => {
17916
+ if (timeElapsed === 0) {
17917
+ return 0;
17918
+ }
17919
+ return bytes * 8 / (timeElapsed / 1000);
17920
+ };
17904
17921
  var samplesToMilliseconds = (samples, clockRate) => {
17922
+ if (clockRate < 0) {
17923
+ throw new Error("Clock rate cannot be negative: ".concat(clockRate));
17924
+ }
17925
+ if (clockRate === 0) {
17926
+ return 0;
17927
+ }
17905
17928
  return samples / clockRate * 1000;
17906
17929
  };
17907
- var calculateAudioReceiverConcealedFrames = (statsResults, mediaType, lastConcealedSamples, lastSilentConcealedSamples) => {
17908
- var {
17909
- concealedSamples,
17910
- silentConcealedSamples
17911
- } = statsResults[mediaType][MediaDirection.RECEIVE];
17912
- var clockRate = statsResults[mediaType][MediaDirection.RECEIVE].clockRate;
17913
- var concealedSamplesDelta = concealedSamples - lastConcealedSamples;
17914
- var silentConcealedSamplesDelta = silentConcealedSamples - lastSilentConcealedSamples;
17915
- return samplesToMilliseconds(concealedSamplesDelta - silentConcealedSamplesDelta, clockRate);
17930
+ var framesToFrameRate = (frames, timeElapsed) => {
17931
+ if (timeElapsed === 0) {
17932
+ return 0;
17933
+ }
17934
+ return frames * 100 / (timeElapsed / 1000);
17916
17935
  };
17917
- var getMediaPacketSizeInfo = meanRtpPacketSize => {
17918
- meanRtpPacketSize = meanRtpPacketSize.filter(size => size > 0);
17919
- return {
17920
- meanRtpPacketSize: Math.round(mean(meanRtpPacketSize)),
17921
- maxRtpPacketSize: Math.round(max(meanRtpPacketSize)),
17922
- minRtpPacketSize: Math.round(min(meanRtpPacketSize))
17923
- };
17936
+ var convertToStatsMap = statsItems => {
17937
+ var statsMap = new Map();
17938
+ statsItems.forEach(statsItem => {
17939
+ statsItem.report.forEach((stats, key) => statsMap.set(key, stats));
17940
+ });
17941
+ return statsMap;
17924
17942
  };
17925
- var getAudioReceiverMqa = _ref => {
17926
- var {
17927
- audioReceiver,
17928
- statsResults,
17929
- lastMqaDataSent,
17930
- baseMediaType,
17931
- isMultistream
17932
- } = _ref;
17933
- var sendrecvType = MediaDirection.RECEIVE;
17934
- var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
17935
- var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
17936
- var lastPacketsReceived = getLastTotalValue('totalPacketsReceived');
17937
- var lastPacketsLost = getLastTotalValue('totalPacketsLost');
17938
- var lastBytesReceived = getLastTotalValue('totalBytesReceived');
17939
- var lastFecPacketsReceived = getLastTotalValue('fecPacketsReceived');
17940
- var lastFecPacketsDiscarded = getLastTotalValue('fecPacketsDiscarded');
17941
- var totalPacketsReceived = getTotalValue('totalPacketsReceived');
17942
- var packetsLost = getTotalValue('totalPacketsLost');
17943
- var totalBytesReceived = getTotalValue('totalBytesReceived');
17944
- var totalFecPacketsReceived = getTotalValue('fecPacketsReceived');
17945
- var totalFecPacketsDiscarded = getTotalValue('fecPacketsDiscarded');
17946
- var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));
17947
- if (mediaTypeKey) {
17948
- var _statsResults$mediaTy;
17949
- audioReceiver.common.common.direction = ((_statsResults$mediaTy = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy === void 0 ? void 0 : _statsResults$mediaTy.direction) || 'inactive';
17950
- } else {
17951
- audioReceiver.common.common.direction = 'inactive';
17952
- }
17953
- audioReceiver.common.common.isMain = !baseMediaType.includes('-share');
17954
- audioReceiver.common.common.multistreamEnabled = isMultistream;
17955
- audioReceiver.common.transportType = statsResults.connectionType.local.transport;
17956
- audioReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived;
17957
- var totalPacketsLost = packetsLost - lastPacketsLost;
17958
- audioReceiver.common.mediaHopByHopLost = totalPacketsLost;
17959
- audioReceiver.common.rtpHopByHopLost = totalPacketsLost;
17960
- var fecRecovered = totalFecPacketsReceived - lastFecPacketsReceived - (totalFecPacketsDiscarded - lastFecPacketsDiscarded);
17961
- audioReceiver.common.fecPackets = totalFecPacketsReceived - lastFecPacketsReceived;
17962
- audioReceiver.common.rtpRecovered = fecRecovered;
17963
- audioReceiver.common.rtpBitrate = (totalBytesReceived - lastBytesReceived) * 8 / 60 || 0;
17964
- if (mediaTypeKey) {
17965
- var _statsResults$mediaTy2;
17966
- audioReceiver.common.mediaPacketSize = getMediaPacketSizeInfo(((_statsResults$mediaTy2 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy2 === void 0 ? void 0 : _statsResults$mediaTy2[sendrecvType].meanRtpPacketSize) || []);
17967
- }
17943
+ var getPropertyFromStatsById = (intervalStats, statsId, property) => {
17944
+ var _intervalStats$get;
17945
+ return (_intervalStats$get = intervalStats.get(statsId)) === null || _intervalStats$get === void 0 ? void 0 : _intervalStats$get[property];
17968
17946
  };
17969
- var getAudioReceiverStreamMqa = _ref2 => {
17970
- var _lastMqaDataSent$medi, _lastMqaDataSent$medi2, _lastMqaDataSent$medi3, _lastMqaDataSent$medi4, _lastMqaDataSent$medi5, _lastMqaDataSent$medi6, _lastMqaDataSent$medi7, _lastMqaDataSent$medi8, _lastMqaDataSent$medi9, _statsResults$mediaTy3, _statsResults$mediaTy4;
17971
- var {
17972
- audioReceiverStream,
17973
- statsResults,
17974
- lastMqaDataSent,
17975
- mediaType
17976
- } = _ref2;
17977
- var sendrecvType = MediaDirection.RECEIVE;
17978
- var lastPacketsDecoded = ((_lastMqaDataSent$medi = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi === void 0 ? void 0 : _lastMqaDataSent$medi[sendrecvType].totalSamplesDecoded) || 0;
17979
- var lastSamplesReceived = ((_lastMqaDataSent$medi2 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi2 === void 0 ? void 0 : _lastMqaDataSent$medi2[sendrecvType].totalSamplesReceived) || 0;
17980
- var lastConcealedSamples = ((_lastMqaDataSent$medi3 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi3 === void 0 ? void 0 : _lastMqaDataSent$medi3[sendrecvType].concealedSamples) || 0;
17981
- var lastSilentConcealedSamples = ((_lastMqaDataSent$medi4 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi4 === void 0 ? void 0 : _lastMqaDataSent$medi4[sendrecvType].silentConcealedSamples) || 0;
17982
- var lastBytesReceived = ((_lastMqaDataSent$medi5 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi5 === void 0 ? void 0 : _lastMqaDataSent$medi5[sendrecvType].totalBytesReceived) || 0;
17983
- var lastFecPacketsReceived = ((_lastMqaDataSent$medi6 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi6 === void 0 ? void 0 : _lastMqaDataSent$medi6[sendrecvType].fecPacketsReceived) || 0;
17984
- var lastFecPacketsDiscarded = ((_lastMqaDataSent$medi7 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi7 === void 0 ? void 0 : _lastMqaDataSent$medi7[sendrecvType].fecPacketsDiscarded) || 0;
17985
- var lastPacketsReceived = ((_lastMqaDataSent$medi8 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi8 === void 0 ? void 0 : _lastMqaDataSent$medi8[sendrecvType].totalPacketsReceived) || 0;
17986
- var lastPacketsLost = ((_lastMqaDataSent$medi9 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi9 === void 0 ? void 0 : _lastMqaDataSent$medi9[sendrecvType].totalPacketsLost) || 0;
17987
- var {
17988
- csi
17989
- } = statsResults[mediaType];
17990
- if (csi && !audioReceiverStream.common.csi.includes(csi)) {
17991
- audioReceiverStream.common.csi.push(csi);
17992
- }
17993
- audioReceiverStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;
17994
- audioReceiverStream.common.maxRtpJitter = max(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;
17995
- audioReceiverStream.common.meanRtpJitter = mean(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;
17996
- var fecRecovered = statsResults[mediaType][sendrecvType].fecPacketsReceived - lastFecPacketsReceived - (statsResults[mediaType][sendrecvType].fecPacketsDiscarded - lastFecPacketsDiscarded);
17997
- audioReceiverStream.common.rtpEndToEndLost = statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost - fecRecovered || 0;
17998
- audioReceiverStream.common.framesDropped = statsResults[mediaType][sendrecvType].totalSamplesDecoded - lastPacketsDecoded || 0;
17999
- audioReceiverStream.common.renderedFrameRate = audioReceiverStream.common.framesDropped * 100 / 60 || 0;
18000
- audioReceiverStream.common.framesReceived = statsResults[mediaType][sendrecvType].totalSamplesReceived - lastSamplesReceived || 0;
18001
- audioReceiverStream.common.concealedFrames = calculateAudioReceiverConcealedFrames(statsResults, mediaType, lastConcealedSamples, lastSilentConcealedSamples);
18002
- audioReceiverStream.common.receivedBitrate = (statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived) * 8 / 60 || 0;
18003
- audioReceiverStream.common.requestedBitrate = (_statsResults$mediaTy3 = statsResults[mediaType][sendrecvType].requestedBitrate) !== null && _statsResults$mediaTy3 !== void 0 ? _statsResults$mediaTy3 : -1;
18004
- audioReceiverStream.common.requestedFrameRate = (_statsResults$mediaTy4 = statsResults[mediaType][sendrecvType].requestedFrameRate) !== null && _statsResults$mediaTy4 !== void 0 ? _statsResults$mediaTy4 : -1;
17947
+ var getPropertyFromStatsByType = (intervalStats, statsType, property) => {
17948
+ var value;
17949
+ intervalStats.forEach(stats => {
17950
+ if (stats.type === statsType && stats[property] !== undefined) {
17951
+ value = stats[property];
17952
+ }
17953
+ });
17954
+ return value;
18005
17955
  };
18006
- var getAudioSenderMqa = _ref3 => {
18007
- var {
18008
- audioSender,
18009
- statsResults,
18010
- lastMqaDataSent,
18011
- baseMediaType,
18012
- isMultistream
18013
- } = _ref3;
18014
- var sendrecvType = MediaDirection.SEND;
18015
- var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
18016
- var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
18017
- var lastPacketsSent = getLastTotalValue('totalPacketsSent');
18018
- var lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');
18019
- var totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');
18020
- var totalPacketsSent = getTotalValue('totalPacketsSent');
18021
- var meanRemoteJitter = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);
18022
- var meanRoundTripTime = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);
18023
- var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));
18024
- if (mediaTypeKey) {
18025
- var _statsResults$mediaTy5;
18026
- audioSender.common.common.direction = ((_statsResults$mediaTy5 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy5 === void 0 ? void 0 : _statsResults$mediaTy5.direction) || 'inactive';
18027
- } else {
18028
- audioSender.common.common.direction = 'inactive';
18029
- }
18030
- audioSender.common.common.isMain = !baseMediaType.includes('-share');
18031
- audioSender.common.common.multistreamEnabled = isMultistream;
18032
- audioSender.common.transportType = statsResults.connectionType.local.transport;
18033
- audioSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000;
18034
- audioSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000;
18035
- audioSender.common.rtpPackets = totalPacketsSent - lastPacketsSent || 0;
18036
- audioSender.common.availableBitrate = statsResults.availableOutgoingBitrate;
18037
- var totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;
18038
- audioSender.common.maxRemoteLossRate = totalPacketsSent - lastPacketsSent > 0 ? totalPacketsLostForaMin * 100 / (totalPacketsSent - lastPacketsSent) : 0;
18039
- audioSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000;
18040
- audioSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000;
18041
- audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;
18042
- var totalBytesSentInaMin = getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, 'totalBytesSent') - getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, 'totalBytesSent');
18043
- audioSender.common.rtpBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
18044
- if (mediaTypeKey) {
18045
- var _statsResults$mediaTy6;
18046
- audioSender.common.mediaPacketSize = getMediaPacketSizeInfo(((_statsResults$mediaTy6 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy6 === void 0 ? void 0 : _statsResults$mediaTy6[sendrecvType].meanRtpPacketSize) || []);
18047
- }
17956
+ var getPropertyFromStatsByTypeInArray = (intervalStats, statsType, property) => {
17957
+ var values = [];
17958
+ intervalStats.forEach(stats => {
17959
+ if (stats.type === statsType && stats[property] !== undefined) {
17960
+ values.push(stats[property]);
17961
+ }
17962
+ });
17963
+ return values;
18048
17964
  };
18049
- var getAudioSenderStreamMqa = _ref4 => {
18050
- var _lastMqaDataSent$medi10, _lastMqaDataSent$medi11, _lastMqaDataSent$medi12, _lastMqaDataSent$medi13, _statsResults$mediaTy7, _statsResults$mediaTy8;
18051
- var {
18052
- audioSenderStream,
18053
- statsResults,
18054
- lastMqaDataSent,
18055
- mediaType
18056
- } = _ref4;
18057
- var sendrecvType = MediaDirection.SEND;
18058
- var lastBytesSent = ((_lastMqaDataSent$medi10 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi10 === void 0 ? void 0 : _lastMqaDataSent$medi10[sendrecvType].totalBytesSent) || 0;
18059
- var lastFramesEncoded = ((_lastMqaDataSent$medi11 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi11 === void 0 ? void 0 : _lastMqaDataSent$medi11[sendrecvType].totalKeyFramesEncoded) || 0;
18060
- var lastFirCount = ((_lastMqaDataSent$medi12 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi12 === void 0 ? void 0 : _lastMqaDataSent$medi12[sendrecvType].totalFirCount) || 0;
18061
- var lastPacketsSent = ((_lastMqaDataSent$medi13 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi13 === void 0 ? void 0 : _lastMqaDataSent$medi13[sendrecvType].totalPacketsSent) || 0;
18062
- var {
18063
- csi
18064
- } = statsResults[mediaType];
18065
- if (csi && !audioSenderStream.common.csi.includes(csi)) {
18066
- audioSenderStream.common.csi.push(csi);
18067
- }
18068
- audioSenderStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;
18069
- var totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;
18070
- audioSenderStream.common.transmittedBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
18071
- audioSenderStream.transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastFramesEncoded || 0;
18072
- audioSenderStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;
18073
- audioSenderStream.common.requestedBitrate = (_statsResults$mediaTy7 = statsResults[mediaType][sendrecvType].requestedBitrate) !== null && _statsResults$mediaTy7 !== void 0 ? _statsResults$mediaTy7 : -1;
18074
- var lastUsedEffect = (_statsResults$mediaTy8 = statsResults[mediaType][sendrecvType]) === null || _statsResults$mediaTy8 === void 0 ? void 0 : _statsResults$mediaTy8.effect;
18075
- var mode = NOISE_REDUCTION_MODE.NONE;
18076
- if ((lastUsedEffect === null || lastUsedEffect === void 0 ? void 0 : lastUsedEffect.noiseReductionMode) in NOISE_REDUCTION_MODE) {
18077
- mode = NOISE_REDUCTION_MODE[lastUsedEffect.noiseReductionMode];
18078
- }
18079
- audioSenderStream.backgroundNoiseReductionMode = mode;
17965
+ var getSumFromStatsByType = (intervalStats, statsType, property) => {
17966
+ var sum = 0;
17967
+ intervalStats.forEach(stats => {
17968
+ if (stats.type === statsType && stats[property] !== undefined) {
17969
+ var value = stats[property];
17970
+ if (typeof value !== 'number') {
17971
+ throw Error("Attempted to get sum of property ".concat(property, " which is not a number"));
17972
+ }
17973
+ sum += value;
17974
+ }
17975
+ });
17976
+ return sum;
18080
17977
  };
18081
- var getVideoReceiverMqa = _ref5 => {
18082
- var {
18083
- videoReceiver,
18084
- statsResults,
18085
- lastMqaDataSent,
18086
- baseMediaType,
18087
- isMultistream
18088
- } = _ref5;
18089
- var sendrecvType = MediaDirection.RECEIVE;
18090
- var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
18091
- var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
18092
- var lastPacketsReceived = getLastTotalValue('totalPacketsReceived');
18093
- var lastPacketsLost = getLastTotalValue('totalPacketsLost');
18094
- var lastBytesReceived = getLastTotalValue('totalBytesReceived');
18095
- var lastRtxPacketsReceived = getLastTotalValue('totalRtxPacketsReceived');
18096
- var lastRtxBytesReceived = getLastTotalValue('totalRtxBytesReceived');
18097
- var packetsLost = getTotalValue('totalPacketsLost');
18098
- var totalPacketsReceived = getTotalValue('totalPacketsReceived');
18099
- var totalBytesReceived = getTotalValue('totalBytesReceived');
18100
- var totalRtxPacketsReceived = getTotalValue('totalRtxPacketsReceived');
18101
- var totalRtxBytesReceived = getTotalValue('totalRtxBytesReceived');
18102
- var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));
18103
- if (mediaTypeKey) {
18104
- var _statsResults$mediaTy9;
18105
- videoReceiver.common.common.direction = ((_statsResults$mediaTy9 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy9 === void 0 ? void 0 : _statsResults$mediaTy9.direction) || 'inactive';
18106
- } else {
18107
- videoReceiver.common.common.direction = 'inactive';
18108
- }
18109
- videoReceiver.common.common.isMain = !baseMediaType.includes('-share');
18110
- videoReceiver.common.common.multistreamEnabled = isMultistream;
18111
- videoReceiver.common.transportType = statsResults.connectionType.local.transport;
18112
- videoReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived || 0;
18113
- var totalPacketsLost = packetsLost - lastPacketsLost;
18114
- videoReceiver.common.mediaHopByHopLost = totalPacketsLost;
18115
- videoReceiver.common.rtpHopByHopLost = totalPacketsLost;
18116
- var totalBytesReceivedInaMin = totalBytesReceived - lastBytesReceived;
18117
- var totalRtxBytesReceivedInaMin = totalRtxBytesReceived - lastRtxBytesReceived;
18118
- videoReceiver.common.rtpBitrate = totalBytesReceivedInaMin ? totalBytesReceivedInaMin * 8 / 60 : 0;
18119
- videoReceiver.common.rtxPackets = totalRtxPacketsReceived - lastRtxPacketsReceived;
18120
- videoReceiver.common.rtxBitrate = totalRtxBytesReceivedInaMin ? totalRtxBytesReceivedInaMin * 8 / 60 : 0;
18121
- if (mediaTypeKey) {
18122
- var _statsResults$mediaTy10;
18123
- videoReceiver.common.mediaPacketSize = getMediaPacketSizeInfo(((_statsResults$mediaTy10 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy10 === void 0 ? void 0 : _statsResults$mediaTy10[sendrecvType].meanRtpPacketSize) || []);
17978
+ var getSelectedCandidatePairIdFromStats = intervalStats => {
17979
+ var _getPropertyFromStats;
17980
+ var transportId = (_getPropertyFromStats = getPropertyFromStatsByType(intervalStats, 'inbound-rtp', 'transportId')) !== null && _getPropertyFromStats !== void 0 ? _getPropertyFromStats : getPropertyFromStatsByType(intervalStats, 'outbound-rtp', 'transportId');
17981
+ if (transportId) {
17982
+ var selectedCandidatePairId = getPropertyFromStatsById(intervalStats, transportId, 'selectedCandidatePairId');
17983
+ if (selectedCandidatePairId) {
17984
+ return selectedCandidatePairId;
17985
+ }
17986
+ }
17987
+ for (var [id, stats] of intervalStats) {
17988
+ if (stats.type === 'candidate-pair' && stats.selected) {
17989
+ return id;
17990
+ }
18124
17991
  }
17992
+ return undefined;
18125
17993
  };
18126
- var getVideoReceiverStreamMqa = _ref6 => {
18127
- var _lastMqaDataSent$medi14, _lastMqaDataSent$medi15, _lastMqaDataSent$medi16, _lastMqaDataSent$medi17, _lastMqaDataSent$medi18, _lastMqaDataSent$medi19, _lastMqaDataSent$medi20, _lastMqaDataSent$medi21, _statsResults$mediaTy11, _statsResults$mediaTy12, _statsResults$mediaTy13, _statsResults$mediaTy14, _statsResults$mediaTy15;
18128
- var {
18129
- videoReceiverStream,
18130
- statsResults,
18131
- lastMqaDataSent,
18132
- mediaType
18133
- } = _ref6;
18134
- var sendrecvType = MediaDirection.RECEIVE;
18135
- var lastPacketsReceived = ((_lastMqaDataSent$medi14 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi14 === void 0 ? void 0 : _lastMqaDataSent$medi14[sendrecvType].totalPacketsReceived) || 0;
18136
- var lastPacketsLost = ((_lastMqaDataSent$medi15 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi15 === void 0 ? void 0 : _lastMqaDataSent$medi15[sendrecvType].totalPacketsLost) || 0;
18137
- var lastBytesReceived = ((_lastMqaDataSent$medi16 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi16 === void 0 ? void 0 : _lastMqaDataSent$medi16[sendrecvType].totalBytesReceived) || 0;
18138
- var lastFramesReceived = ((_lastMqaDataSent$medi17 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi17 === void 0 ? void 0 : _lastMqaDataSent$medi17[sendrecvType].framesReceived) || 0;
18139
- var lastFramesDecoded = ((_lastMqaDataSent$medi18 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi18 === void 0 ? void 0 : _lastMqaDataSent$medi18[sendrecvType].framesDecoded) || 0;
18140
- var lastFramesDropped = ((_lastMqaDataSent$medi19 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi19 === void 0 ? void 0 : _lastMqaDataSent$medi19[sendrecvType].framesDropped) || 0;
18141
- var lastKeyFramesDecoded = ((_lastMqaDataSent$medi20 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi20 === void 0 ? void 0 : _lastMqaDataSent$medi20[sendrecvType].keyFramesDecoded) || 0;
18142
- var lastPliCount = ((_lastMqaDataSent$medi21 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi21 === void 0 ? void 0 : _lastMqaDataSent$medi21[sendrecvType].totalPliCount) || 0;
18143
- var {
18144
- csi
18145
- } = statsResults[mediaType];
18146
- if (csi && !videoReceiverStream.common.csi.includes(csi)) {
18147
- videoReceiverStream.common.csi.push(csi);
18148
- }
18149
- videoReceiverStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;
18150
- var totalPacketLoss = statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;
18151
- videoReceiverStream.common.rtpEndToEndLost = totalPacketLoss;
18152
- videoReceiverStream.common.maxRtpJitter = max(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;
18153
- videoReceiverStream.common.meanRtpJitter = mean(statsResults[mediaType][sendrecvType].meanRtpJitter || []) * 1000;
18154
- var totalBytesReceivedInaMin = statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived;
18155
- videoReceiverStream.common.receivedBitrate = totalBytesReceivedInaMin ? totalBytesReceivedInaMin * 8 / 60 : 0;
18156
- var totalFrameReceivedInaMin = statsResults[mediaType][sendrecvType].framesReceived - lastFramesReceived;
18157
- var totalFrameDecodedInaMin = statsResults[mediaType][sendrecvType].framesDecoded - lastFramesDecoded;
18158
- videoReceiverStream.common.receivedFrameRate = Math.round(totalFrameReceivedInaMin ? totalFrameReceivedInaMin * VIDEO_FRAME_RATE_MULTIPLIER / 60 : 0);
18159
- videoReceiverStream.common.renderedFrameRate = Math.round(totalFrameDecodedInaMin ? totalFrameDecodedInaMin * VIDEO_FRAME_RATE_MULTIPLIER / 60 : 0);
18160
- videoReceiverStream.common.framesDropped = statsResults[mediaType][sendrecvType].framesDropped - lastFramesDropped || 0;
18161
- videoReceiverStream.receivedHeight = statsResults[mediaType][sendrecvType].height || 0;
18162
- videoReceiverStream.receivedWidth = statsResults[mediaType][sendrecvType].width || 0;
18163
- videoReceiverStream.receivedFrameSize = videoReceiverStream.receivedHeight * videoReceiverStream.receivedWidth / 256;
18164
- videoReceiverStream.receivedKeyFrames = statsResults[mediaType][sendrecvType].keyFramesDecoded - lastKeyFramesDecoded || 0;
18165
- videoReceiverStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalPliCount - lastPliCount || 0;
18166
- videoReceiverStream.isActiveSpeaker = statsResults[mediaType][sendrecvType].isActiveSpeaker || ((_statsResults$mediaTy11 = statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp) !== null && _statsResults$mediaTy11 !== void 0 ? _statsResults$mediaTy11 : 0) > 0 && performance.now() + performance.timeOrigin - ((_statsResults$mediaTy12 = statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp) !== null && _statsResults$mediaTy12 !== void 0 ? _statsResults$mediaTy12 : 0) < MQA_INTERVAL;
18167
- videoReceiverStream.common.requestedBitrate = (_statsResults$mediaTy13 = statsResults[mediaType][sendrecvType].requestedBitrate) !== null && _statsResults$mediaTy13 !== void 0 ? _statsResults$mediaTy13 : -1;
18168
- videoReceiverStream.requestedFrameSize = (_statsResults$mediaTy14 = statsResults[mediaType][sendrecvType].requestedFrameSize) !== null && _statsResults$mediaTy14 !== void 0 ? _statsResults$mediaTy14 : -1;
18169
- videoReceiverStream.common.requestedFrameRate = (_statsResults$mediaTy15 = statsResults[mediaType][sendrecvType].requestedFrameRate) !== null && _statsResults$mediaTy15 !== void 0 ? _statsResults$mediaTy15 : -1;
17994
+ var getSelectedCandidateIdFromStats = (intervalStats, candidateOrigin) => {
17995
+ var selectedCandidatePairId = getSelectedCandidatePairIdFromStats(intervalStats);
17996
+ if (selectedCandidatePairId) {
17997
+ var selectedCandidateId = getPropertyFromStatsById(intervalStats, selectedCandidatePairId, candidateOrigin === 'local' ? 'localCandidateId' : 'remoteCandidateId');
17998
+ return selectedCandidateId;
17999
+ }
18000
+ return undefined;
18170
18001
  };
18171
- var getVideoSenderMqa = _ref7 => {
18172
- var {
18173
- videoSender,
18174
- statsResults,
18175
- lastMqaDataSent,
18176
- baseMediaType,
18177
- isMultistream
18178
- } = _ref7;
18179
- var sendrecvType = MediaDirection.SEND;
18180
- var getLastTotalValue = value => getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
18181
- var getTotalValue = value => getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
18182
- var lastPacketsSent = getLastTotalValue('totalPacketsSent');
18183
- var lastBytesSent = getLastTotalValue('totalBytesSent');
18184
- var lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');
18185
- var lastRtxPacketsSent = getLastTotalValue('totalRtxPacketsSent');
18186
- var lastRtxBytesSent = getLastTotalValue('totalRtxBytesSent');
18187
- var totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');
18188
- var totalPacketsSent = getTotalValue('totalPacketsSent');
18189
- var totalBytesSent = getTotalValue('totalBytesSent');
18190
- var totalRtxPacketsSent = getTotalValue('totalRtxPacketsSent');
18191
- var totalRtxBytesSent = getTotalValue('totalRtxBytesSent');
18192
- var mediaTypeKey = Object.keys(statsResults).find(mediaType => mediaType.includes(baseMediaType));
18193
- if (mediaTypeKey) {
18194
- var _statsResults$mediaTy16;
18195
- videoSender.common.common.direction = ((_statsResults$mediaTy16 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy16 === void 0 ? void 0 : _statsResults$mediaTy16.direction) || 'inactive';
18196
- } else {
18197
- videoSender.common.common.direction = 'inactive';
18198
- }
18199
- videoSender.common.common.isMain = !baseMediaType.includes('-share');
18200
- videoSender.common.common.multistreamEnabled = isMultistream;
18201
- videoSender.common.transportType = statsResults.connectionType.local.transport;
18202
- var meanRemoteJitter = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);
18203
- var meanRoundTripTime = Object.keys(statsResults).filter(mt => mt.includes(baseMediaType)).reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);
18204
- videoSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000;
18205
- videoSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000;
18206
- videoSender.common.rtpPackets = totalPacketsSent - lastPacketsSent;
18207
- videoSender.common.availableBitrate = statsResults.availableOutgoingBitrate;
18208
- var totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;
18209
- videoSender.common.maxRemoteLossRate = totalPacketsSent - lastPacketsSent > 0 ? totalPacketsLostForaMin * 100 / (totalPacketsSent - lastPacketsSent) : 0;
18210
- videoSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000;
18211
- videoSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000;
18212
- videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;
18213
- var totalBytesSentInaMin = totalBytesSent - lastBytesSent;
18214
- var totalRtxBytesSentInaMin = totalRtxBytesSent - lastRtxBytesSent;
18215
- videoSender.common.rtpBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
18216
- videoSender.common.rtxPackets = totalRtxPacketsSent - lastRtxPacketsSent;
18217
- videoSender.common.rtxBitrate = totalRtxBytesSentInaMin ? totalRtxBytesSentInaMin * 8 / 60 : 0;
18218
- if (mediaTypeKey) {
18219
- var _statsResults$mediaTy17;
18220
- videoSender.common.mediaPacketSize = getMediaPacketSizeInfo(((_statsResults$mediaTy17 = statsResults[mediaTypeKey]) === null || _statsResults$mediaTy17 === void 0 ? void 0 : _statsResults$mediaTy17[sendrecvType].meanRtpPacketSize) || []);
18002
+ var getTransportTypeFromStats = intervalStats => {
18003
+ var selectedLocalCandidateId = getSelectedCandidateIdFromStats(intervalStats, 'local');
18004
+ if (selectedLocalCandidateId) {
18005
+ var relayProtocol = getPropertyFromStatsById(intervalStats, selectedLocalCandidateId, 'relayProtocol');
18006
+ if (relayProtocol) {
18007
+ return relayProtocol.toUpperCase();
18008
+ }
18009
+ var protocol = getPropertyFromStatsById(intervalStats, selectedLocalCandidateId, 'protocol');
18010
+ if (protocol) {
18011
+ return protocol.toUpperCase();
18012
+ }
18221
18013
  }
18014
+ return undefined;
18222
18015
  };
18223
- var getVideoSenderStreamMqa = _ref8 => {
18224
- var _lastMqaDataSent$medi22, _lastMqaDataSent$medi23, _lastMqaDataSent$medi24, _lastMqaDataSent$medi25, _lastMqaDataSent$medi26, _statsResults$mediaTy18, _statsResults$mediaTy19, _statsResults$mediaTy20;
18225
- var {
18226
- videoSenderStream,
18227
- statsResults,
18228
- lastMqaDataSent,
18229
- mediaType
18230
- } = _ref8;
18231
- var sendrecvType = MediaDirection.SEND;
18232
- var lastPacketsSent = ((_lastMqaDataSent$medi22 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi22 === void 0 ? void 0 : _lastMqaDataSent$medi22[sendrecvType].totalPacketsSent) || 0;
18233
- var lastBytesSent = ((_lastMqaDataSent$medi23 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi23 === void 0 ? void 0 : _lastMqaDataSent$medi23[sendrecvType].totalBytesSent) || 0;
18234
- var lastKeyFramesEncoded = ((_lastMqaDataSent$medi24 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi24 === void 0 ? void 0 : _lastMqaDataSent$medi24[sendrecvType].totalKeyFramesEncoded) || 0;
18235
- var lastFirCount = ((_lastMqaDataSent$medi25 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi25 === void 0 ? void 0 : _lastMqaDataSent$medi25[sendrecvType].totalFirCount) || 0;
18236
- var lastFramesSent = ((_lastMqaDataSent$medi26 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi26 === void 0 ? void 0 : _lastMqaDataSent$medi26[sendrecvType].framesSent) || 0;
18237
- var {
18238
- csi
18239
- } = statsResults[mediaType];
18240
- if (csi && !videoSenderStream.common.csi.includes(csi)) {
18241
- videoSenderStream.common.csi.push(csi);
18242
- }
18243
- videoSenderStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;
18244
- var totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;
18245
- videoSenderStream.common.transmittedBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
18246
- videoSenderStream.transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastKeyFramesEncoded || 0;
18247
- videoSenderStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;
18248
- var totalFrameSentInaMin = statsResults[mediaType][sendrecvType].framesSent - (lastFramesSent || 0);
18249
- videoSenderStream.common.transmittedFrameRate = Math.round(totalFrameSentInaMin ? totalFrameSentInaMin * VIDEO_FRAME_RATE_MULTIPLIER / 60 : 0);
18250
- videoSenderStream.transmittedHeight = statsResults[mediaType][sendrecvType].height || 0;
18251
- videoSenderStream.transmittedWidth = statsResults[mediaType][sendrecvType].width || 0;
18252
- videoSenderStream.transmittedFrameSize = videoSenderStream.transmittedHeight * videoSenderStream.transmittedWidth / 256;
18253
- videoSenderStream.common.requestedBitrate = (_statsResults$mediaTy18 = statsResults[mediaType][sendrecvType].requestedBitrate) !== null && _statsResults$mediaTy18 !== void 0 ? _statsResults$mediaTy18 : -1;
18254
- videoSenderStream.requestedFrameSize = (_statsResults$mediaTy19 = statsResults[mediaType][sendrecvType].requestedFrameSize) !== null && _statsResults$mediaTy19 !== void 0 ? _statsResults$mediaTy19 : -1;
18255
- var lastUsedEffect = (_statsResults$mediaTy20 = statsResults[mediaType][sendrecvType]) === null || _statsResults$mediaTy20 === void 0 ? void 0 : _statsResults$mediaTy20.effect;
18256
- var mode = VIRTUAL_BACKGROUND_MODE.NONE;
18257
- if ((lastUsedEffect === null || lastUsedEffect === void 0 ? void 0 : lastUsedEffect.virtualBackgroundMode) in VIRTUAL_BACKGROUND_MODE) {
18258
- mode = VIRTUAL_BACKGROUND_MODE[lastUsedEffect.virtualBackgroundMode];
18259
- }
18260
- videoSenderStream.backgroundAugmentationType = mode;
18016
+ var getAvailableOutgoingBitrateArrayFromStats = intervalStats => {
18017
+ var selectedCandidatePairId = getSelectedCandidatePairIdFromStats(intervalStats);
18018
+ if (selectedCandidatePairId) {
18019
+ var availableOutgoingBitrateArray = getPropertyFromStatsById(intervalStats, selectedCandidatePairId, 'availableOutgoingBitrateArray');
18020
+ return availableOutgoingBitrateArray;
18021
+ }
18022
+ return undefined;
18261
18023
  };
18262
- var isStreamRequested = _ref9 => {
18263
- var _statsResults$mediaTy21, _statsResults$mediaTy22;
18264
- var {
18265
- isMultistream,
18266
- statsResults,
18267
- mediaType,
18268
- direction
18269
- } = _ref9;
18270
- if (!isMultistream) {
18271
- return true;
18024
+ var getMediaSourceTrackLabelFromStats = intervalStats => {
18025
+ var latestTrackLabel;
18026
+ var latestTrackTimestamp = 0;
18027
+ intervalStats.forEach(stats => {
18028
+ if (stats.type === 'media-source' && stats.trackLabel && stats.timestamp > latestTrackTimestamp) {
18029
+ latestTrackLabel = stats.trackLabel;
18030
+ latestTrackTimestamp = stats.timestamp;
18031
+ }
18032
+ });
18033
+ return latestTrackLabel;
18034
+ };
18035
+ var getCodecFromStatsByStreamStatsId = (intervalStats, streamStatsId) => {
18036
+ var codecId = getPropertyFromStatsById(intervalStats, streamStatsId, 'codecId');
18037
+ if (codecId) {
18038
+ var mimeType = getPropertyFromStatsById(intervalStats, codecId, 'mimeType');
18039
+ if (mimeType) {
18040
+ return mimeType.split('/')[1];
18041
+ }
18272
18042
  }
18043
+ return undefined;
18044
+ };
18045
+ var getH264ProfileFromStatsByStreamStatsId = (intervalStats, streamStatsId) => {
18046
+ var codecId = getPropertyFromStatsById(intervalStats, streamStatsId, 'codecId');
18047
+ if (codecId) {
18048
+ var sdpFmtpLine = getPropertyFromStatsById(intervalStats, codecId, 'sdpFmtpLine');
18049
+ if (sdpFmtpLine) {
18050
+ var _sdpFmtpLine$match;
18051
+ var profileLevelId = (_sdpFmtpLine$match = sdpFmtpLine.match(/profile-level-id=([0-9A-Fa-f]{6})/)) === null || _sdpFmtpLine$match === void 0 ? void 0 : _sdpFmtpLine$match[1];
18052
+ if (profileLevelId) {
18053
+ var profile = profileLevelId.substring(0, 2);
18054
+ if (profile === '42') {
18055
+ return 'BP';
18056
+ }
18057
+ if (profile === '64') {
18058
+ return 'CHP';
18059
+ }
18060
+ }
18061
+ }
18062
+ }
18063
+ return undefined;
18064
+ };
18065
+ var isStreamRequested = stats => {
18273
18066
  var now = performance.timeOrigin + performance.now();
18274
- var lastUpdateTimestamp = (_statsResults$mediaTy21 = statsResults[mediaType][direction]) === null || _statsResults$mediaTy21 === void 0 ? void 0 : _statsResults$mediaTy21.lastRequestedUpdateTimestamp;
18275
- var isRequested = (_statsResults$mediaTy22 = statsResults[mediaType][direction]) === null || _statsResults$mediaTy22 === void 0 ? void 0 : _statsResults$mediaTy22.isRequested;
18276
- return isRequested || lastUpdateTimestamp && now - lastUpdateTimestamp < MQA_INTERVAL;
18067
+ var lastRequestedUpdateTimestamp = stats.lastRequestedUpdateTimestamp;
18068
+ var isCurrentlyRequested = stats.isRequested;
18069
+ return isCurrentlyRequested || !!(lastRequestedUpdateTimestamp && now - lastRequestedUpdateTimestamp < MQE_INTERVAL);
18277
18070
  };
18071
+ var pixelsToFrameSize = (width, height) => {
18072
+ var round16 = n => Math.ceil(n / 16) * 16;
18073
+ return round16(width) * round16(height) / 256;
18074
+ };
18075
+
18076
+ class MqeBuilder {
18077
+ constructor(params) {
18078
+ _defineProperty(this, "currentIntervalStats", new Map());
18079
+ _defineProperty(this, "previousIntervalStats", new Map());
18080
+ _defineProperty(this, "isMain", void 0);
18081
+ _defineProperty(this, "multistreamEnabled", void 0);
18082
+ _defineProperty(this, "direction", void 0);
18083
+ _defineProperty(this, "mediaKind", void 0);
18084
+ this.isMain = params.isMain;
18085
+ this.multistreamEnabled = params.multistreamEnabled;
18086
+ this.direction = params.direction;
18087
+ this.mediaKind = params.mediaKind;
18088
+ }
18089
+ updateCurrentIntervalStats(newStats) {
18090
+ if (newStats.size === 0) {
18091
+ getLogger().debug("MqeBuilder#updateCurrentIntervalStats --> Stats map is empty, nothing to update for ".concat(this.direction, " ").concat(this.mediaKind, " ").concat(this.isMain ? 'main' : 'slides', "."));
18092
+ return;
18093
+ }
18094
+ newStats.forEach((stats, key) => {
18095
+ var current = this.currentIntervalStats.get(key);
18096
+ var storeValueInArray = (arrayProperty, valueToStore) => {
18097
+ var _current$arrayPropert;
18098
+ var array = (_current$arrayPropert = current === null || current === void 0 ? void 0 : current[arrayProperty]) !== null && _current$arrayPropert !== void 0 ? _current$arrayPropert : [];
18099
+ if (valueToStore !== undefined) {
18100
+ array.push(valueToStore);
18101
+ }
18102
+ if (array.length > 0) {
18103
+ stats[arrayProperty] = array;
18104
+ }
18105
+ };
18106
+ if (stats.type === 'inbound-rtp') {
18107
+ var _current$rtpPacketSiz, _stats$bytesReceived, _stats$packetsReceive;
18108
+ storeValueInArray('jitterArray', stats.jitter);
18109
+ storeValueInArray('requestedBitrateArray', stats.requestedBitrate);
18110
+ storeValueInArray('csiArray', stats.csi);
18111
+ var rtpPacketSizeArray = (_current$rtpPacketSiz = current === null || current === void 0 ? void 0 : current.rtpPacketSizeArray) !== null && _current$rtpPacketSiz !== void 0 ? _current$rtpPacketSiz : [];
18112
+ var bytesReceived = (_stats$bytesReceived = stats.bytesReceived) !== null && _stats$bytesReceived !== void 0 ? _stats$bytesReceived : 0;
18113
+ var packetsReceived = (_stats$packetsReceive = stats.packetsReceived) !== null && _stats$packetsReceive !== void 0 ? _stats$packetsReceive : 0;
18114
+ if (packetsReceived > 0) {
18115
+ var rtpPacketSize = Math.round(bytesReceived / packetsReceived);
18116
+ rtpPacketSizeArray.push(rtpPacketSize);
18117
+ }
18118
+ stats.rtpPacketSizeArray = rtpPacketSizeArray;
18119
+ if (this.mediaKind === 'video') {
18120
+ var _stats$requestedFrame, _current$maxRequested, _stats$requestedBitra, _current$maxRequested2, _current$bytesReceive, _current$maxBitrateFo, _stats$requestedFrame2, _current$maxRequested3, _stats$framesReceived, _current$framesReceiv, _current$maxReceivedF, _stats$framesDecoded, _current$framesDecode, _current$maxDecodedFr, _stats$frameHeight, _stats$frameWidth, _current$maxFrameSize, _current$maxFrameSize2;
18121
+ var requestedFrameSize = (_stats$requestedFrame = stats.requestedFrameSize) !== null && _stats$requestedFrame !== void 0 ? _stats$requestedFrame : 0;
18122
+ var maxRequestedFrameSize = (_current$maxRequested = current === null || current === void 0 ? void 0 : current.maxRequestedFrameSize) !== null && _current$maxRequested !== void 0 ? _current$maxRequested : 0;
18123
+ var isRequestedFrameSizeGreaterOrEqual = requestedFrameSize >= maxRequestedFrameSize;
18124
+ stats.maxRequestedFrameSize = isRequestedFrameSizeGreaterOrEqual ? requestedFrameSize : maxRequestedFrameSize;
18125
+ stats.maxRequestedBitrateForMaxRequestedFrameSize = isRequestedFrameSizeGreaterOrEqual ? Math.max((_stats$requestedBitra = stats.requestedBitrate) !== null && _stats$requestedBitra !== void 0 ? _stats$requestedBitra : 0, (_current$maxRequested2 = current === null || current === void 0 ? void 0 : current.maxRequestedBitrateForMaxRequestedFrameSize) !== null && _current$maxRequested2 !== void 0 ? _current$maxRequested2 : 0) : current === null || current === void 0 ? void 0 : current.maxRequestedBitrateForMaxRequestedFrameSize;
18126
+ var lastBytesReceived = (_current$bytesReceive = current === null || current === void 0 ? void 0 : current.bytesReceived) !== null && _current$bytesReceive !== void 0 ? _current$bytesReceive : 0;
18127
+ stats.maxBitrateForMaxRequestedFrameSize = isRequestedFrameSizeGreaterOrEqual ? Math.max(bytesToBitrate(bytesReceived - lastBytesReceived, 5000), (_current$maxBitrateFo = current === null || current === void 0 ? void 0 : current.maxBitrateForMaxRequestedFrameSize) !== null && _current$maxBitrateFo !== void 0 ? _current$maxBitrateFo : 0) : current === null || current === void 0 ? void 0 : current.maxBitrateForMaxRequestedFrameSize;
18128
+ stats.maxRequestedFrameRateForMaxRequestedFrameSize = isRequestedFrameSizeGreaterOrEqual ? Math.max((_stats$requestedFrame2 = stats.requestedFrameRate) !== null && _stats$requestedFrame2 !== void 0 ? _stats$requestedFrame2 : 0, (_current$maxRequested3 = current === null || current === void 0 ? void 0 : current.maxRequestedFrameRateForMaxRequestedFrameSize) !== null && _current$maxRequested3 !== void 0 ? _current$maxRequested3 : 0) : current === null || current === void 0 ? void 0 : current.maxRequestedFrameRateForMaxRequestedFrameSize;
18129
+ var framesReceived = (_stats$framesReceived = stats.framesReceived) !== null && _stats$framesReceived !== void 0 ? _stats$framesReceived : 0;
18130
+ var lastFramesReceived = (_current$framesReceiv = current === null || current === void 0 ? void 0 : current.framesReceived) !== null && _current$framesReceiv !== void 0 ? _current$framesReceiv : 0;
18131
+ stats.maxReceivedFrameRateForMaxRequestedFrameSize = isRequestedFrameSizeGreaterOrEqual ? Math.max(framesToFrameRate(framesReceived - lastFramesReceived, 5000), (_current$maxReceivedF = current === null || current === void 0 ? void 0 : current.maxReceivedFrameRateForMaxRequestedFrameSize) !== null && _current$maxReceivedF !== void 0 ? _current$maxReceivedF : 0) : current === null || current === void 0 ? void 0 : current.maxReceivedFrameRateForMaxRequestedFrameSize;
18132
+ var framesDecoded = (_stats$framesDecoded = stats.framesDecoded) !== null && _stats$framesDecoded !== void 0 ? _stats$framesDecoded : 0;
18133
+ var lastFramesDecoded = (_current$framesDecode = current === null || current === void 0 ? void 0 : current.framesDecoded) !== null && _current$framesDecode !== void 0 ? _current$framesDecode : 0;
18134
+ stats.maxDecodedFrameRateForMaxRequestedFrameSize = isRequestedFrameSizeGreaterOrEqual ? Math.max(framesToFrameRate(framesDecoded - lastFramesDecoded, 5000), (_current$maxDecodedFr = current === null || current === void 0 ? void 0 : current.maxDecodedFrameRateForMaxRequestedFrameSize) !== null && _current$maxDecodedFr !== void 0 ? _current$maxDecodedFr : 0) : current === null || current === void 0 ? void 0 : current.maxDecodedFrameRateForMaxRequestedFrameSize;
18135
+ var frameHeight = (_stats$frameHeight = stats.frameHeight) !== null && _stats$frameHeight !== void 0 ? _stats$frameHeight : 0;
18136
+ var frameWidth = (_stats$frameWidth = stats.frameWidth) !== null && _stats$frameWidth !== void 0 ? _stats$frameWidth : 0;
18137
+ var frameSize = pixelsToFrameSize(frameWidth, frameHeight);
18138
+ var maxFrameHeight = (_current$maxFrameSize = current === null || current === void 0 ? void 0 : current.maxFrameSizeHeightForMaxRequestedFrameSize) !== null && _current$maxFrameSize !== void 0 ? _current$maxFrameSize : 0;
18139
+ var maxFrameWidth = (_current$maxFrameSize2 = current === null || current === void 0 ? void 0 : current.maxFrameSizeWidthForMaxRequestedFrameSize) !== null && _current$maxFrameSize2 !== void 0 ? _current$maxFrameSize2 : 0;
18140
+ var maxFrameSize = pixelsToFrameSize(maxFrameWidth, maxFrameHeight);
18141
+ if (isRequestedFrameSizeGreaterOrEqual && frameSize >= maxFrameSize) {
18142
+ stats.maxFrameSizeHeightForMaxRequestedFrameSize = frameHeight;
18143
+ stats.maxFrameSizeWidthForMaxRequestedFrameSize = frameWidth;
18144
+ } else {
18145
+ stats.maxFrameSizeHeightForMaxRequestedFrameSize = current === null || current === void 0 ? void 0 : current.maxFrameSizeHeightForMaxRequestedFrameSize;
18146
+ stats.maxFrameSizeWidthForMaxRequestedFrameSize = current === null || current === void 0 ? void 0 : current.maxFrameSizeWidthForMaxRequestedFrameSize;
18147
+ }
18148
+ }
18149
+ } else if (stats.type === 'outbound-rtp') {
18150
+ var _current$rtpPacketSiz2, _stats$bytesSent, _stats$packetsSent;
18151
+ storeValueInArray('requestedBitrateArray', stats.requestedBitrate);
18152
+ var lastUsedEffect = current === null || current === void 0 ? void 0 : current.lastUsedEffect;
18153
+ var effect = stats === null || stats === void 0 ? void 0 : stats.effect;
18154
+ stats.lastUsedEffect = effect !== null && effect !== void 0 ? effect : lastUsedEffect;
18155
+ var _rtpPacketSizeArray = (_current$rtpPacketSiz2 = current === null || current === void 0 ? void 0 : current.rtpPacketSizeArray) !== null && _current$rtpPacketSiz2 !== void 0 ? _current$rtpPacketSiz2 : [];
18156
+ var bytesSent = (_stats$bytesSent = stats.bytesSent) !== null && _stats$bytesSent !== void 0 ? _stats$bytesSent : 0;
18157
+ var packetsSent = (_stats$packetsSent = stats.packetsSent) !== null && _stats$packetsSent !== void 0 ? _stats$packetsSent : 0;
18158
+ if (packetsSent > 0) {
18159
+ var _rtpPacketSize = Math.round(bytesSent / packetsSent);
18160
+ _rtpPacketSizeArray.push(_rtpPacketSize);
18161
+ }
18162
+ stats.rtpPacketSizeArray = _rtpPacketSizeArray;
18163
+ if (this.mediaKind === 'video') {
18164
+ var _stats$requestedFrame3, _current$maxRequested4, _stats$requestedBitra2, _current$maxRequested5, _current$bytesSent, _current$maxBitrateFo2, _stats$requestedFrame4, _current$maxRequested6, _stats$framesSent, _current$framesSent, _current$maxTransmitt, _stats$frameHeight2, _stats$frameWidth2, _current$maxFrameSize3, _current$maxFrameSize4;
18165
+ var _requestedFrameSize = (_stats$requestedFrame3 = stats.requestedFrameSize) !== null && _stats$requestedFrame3 !== void 0 ? _stats$requestedFrame3 : 0;
18166
+ var _maxRequestedFrameSize = (_current$maxRequested4 = current === null || current === void 0 ? void 0 : current.maxRequestedFrameSize) !== null && _current$maxRequested4 !== void 0 ? _current$maxRequested4 : 0;
18167
+ var _isRequestedFrameSizeGreaterOrEqual = _requestedFrameSize >= _maxRequestedFrameSize;
18168
+ stats.maxRequestedFrameSize = _isRequestedFrameSizeGreaterOrEqual ? _requestedFrameSize : _maxRequestedFrameSize;
18169
+ stats.maxRequestedBitrateForMaxRequestedFrameSize = _isRequestedFrameSizeGreaterOrEqual ? Math.max((_stats$requestedBitra2 = stats.requestedBitrate) !== null && _stats$requestedBitra2 !== void 0 ? _stats$requestedBitra2 : 0, (_current$maxRequested5 = current === null || current === void 0 ? void 0 : current.maxRequestedBitrateForMaxRequestedFrameSize) !== null && _current$maxRequested5 !== void 0 ? _current$maxRequested5 : 0) : current === null || current === void 0 ? void 0 : current.maxRequestedBitrateForMaxRequestedFrameSize;
18170
+ var lastBytesSent = (_current$bytesSent = current === null || current === void 0 ? void 0 : current.bytesSent) !== null && _current$bytesSent !== void 0 ? _current$bytesSent : 0;
18171
+ stats.maxBitrateForMaxRequestedFrameSize = _isRequestedFrameSizeGreaterOrEqual ? Math.max(bytesToBitrate(bytesSent - lastBytesSent, 5000), (_current$maxBitrateFo2 = current === null || current === void 0 ? void 0 : current.maxBitrateForMaxRequestedFrameSize) !== null && _current$maxBitrateFo2 !== void 0 ? _current$maxBitrateFo2 : 0) : current === null || current === void 0 ? void 0 : current.maxBitrateForMaxRequestedFrameSize;
18172
+ stats.maxRequestedFrameRateForMaxRequestedFrameSize = _isRequestedFrameSizeGreaterOrEqual ? Math.max((_stats$requestedFrame4 = stats.requestedFrameRate) !== null && _stats$requestedFrame4 !== void 0 ? _stats$requestedFrame4 : 0, (_current$maxRequested6 = current === null || current === void 0 ? void 0 : current.maxRequestedFrameRateForMaxRequestedFrameSize) !== null && _current$maxRequested6 !== void 0 ? _current$maxRequested6 : 0) : current === null || current === void 0 ? void 0 : current.maxRequestedFrameRateForMaxRequestedFrameSize;
18173
+ var framesSent = (_stats$framesSent = stats.framesSent) !== null && _stats$framesSent !== void 0 ? _stats$framesSent : 0;
18174
+ var lastFramesSent = (_current$framesSent = current === null || current === void 0 ? void 0 : current.framesSent) !== null && _current$framesSent !== void 0 ? _current$framesSent : 0;
18175
+ stats.maxTransmittedFrameRateForMaxRequestedFrameSize = _isRequestedFrameSizeGreaterOrEqual ? Math.max(framesToFrameRate(framesSent - lastFramesSent, 5000), (_current$maxTransmitt = current === null || current === void 0 ? void 0 : current.maxTransmittedFrameRateForMaxRequestedFrameSize) !== null && _current$maxTransmitt !== void 0 ? _current$maxTransmitt : 0) : current === null || current === void 0 ? void 0 : current.maxTransmittedFrameRateForMaxRequestedFrameSize;
18176
+ var _frameHeight = (_stats$frameHeight2 = stats.frameHeight) !== null && _stats$frameHeight2 !== void 0 ? _stats$frameHeight2 : 0;
18177
+ var _frameWidth = (_stats$frameWidth2 = stats.frameWidth) !== null && _stats$frameWidth2 !== void 0 ? _stats$frameWidth2 : 0;
18178
+ var _frameSize = pixelsToFrameSize(_frameWidth, _frameHeight);
18179
+ var _maxFrameHeight = (_current$maxFrameSize3 = current === null || current === void 0 ? void 0 : current.maxFrameSizeHeightForMaxRequestedFrameSize) !== null && _current$maxFrameSize3 !== void 0 ? _current$maxFrameSize3 : 0;
18180
+ var _maxFrameWidth = (_current$maxFrameSize4 = current === null || current === void 0 ? void 0 : current.maxFrameSizeWidthForMaxRequestedFrameSize) !== null && _current$maxFrameSize4 !== void 0 ? _current$maxFrameSize4 : 0;
18181
+ var _maxFrameSize = pixelsToFrameSize(_maxFrameWidth, _maxFrameHeight);
18182
+ if (_isRequestedFrameSizeGreaterOrEqual && _frameSize >= _maxFrameSize) {
18183
+ stats.maxFrameSizeHeightForMaxRequestedFrameSize = _frameHeight;
18184
+ stats.maxFrameSizeWidthForMaxRequestedFrameSize = _frameWidth;
18185
+ } else {
18186
+ stats.maxFrameSizeHeightForMaxRequestedFrameSize = current === null || current === void 0 ? void 0 : current.maxFrameSizeHeightForMaxRequestedFrameSize;
18187
+ stats.maxFrameSizeWidthForMaxRequestedFrameSize = current === null || current === void 0 ? void 0 : current.maxFrameSizeWidthForMaxRequestedFrameSize;
18188
+ }
18189
+ }
18190
+ } else if (stats.type === 'remote-inbound-rtp') {
18191
+ storeValueInArray('roundTripTimeArray', stats.roundTripTime);
18192
+ storeValueInArray('fractionLostArray', stats.fractionLost);
18193
+ storeValueInArray('jitterArray', stats.jitter);
18194
+ } else if (stats.type === 'candidate-pair') {
18195
+ storeValueInArray('availableOutgoingBitrateArray', stats.availableOutgoingBitrate);
18196
+ }
18197
+ });
18198
+ this.currentIntervalStats = newStats;
18199
+ }
18200
+ reset() {
18201
+ this.previousIntervalStats = new Map();
18202
+ this.currentIntervalStats = new Map();
18203
+ }
18204
+ resetForNextInterval() {
18205
+ this.previousIntervalStats = new Map(this.currentIntervalStats);
18206
+ this.currentIntervalStats.forEach(stats => {
18207
+ if (stats.type === 'inbound-rtp') {
18208
+ delete stats.jitterArray;
18209
+ delete stats.requestedBitrateArray;
18210
+ delete stats.csiArray;
18211
+ delete stats.maxRequestedFrameSize;
18212
+ delete stats.maxRequestedBitrateForMaxRequestedFrameSize;
18213
+ delete stats.maxBitrateForMaxRequestedFrameSize;
18214
+ delete stats.maxRequestedFrameRateForMaxRequestedFrameSize;
18215
+ delete stats.maxReceivedFrameRateForMaxRequestedFrameSize;
18216
+ delete stats.maxDecodedFrameRateForMaxRequestedFrameSize;
18217
+ delete stats.maxFrameSizeHeightForMaxRequestedFrameSize;
18218
+ delete stats.maxFrameSizeWidthForMaxRequestedFrameSize;
18219
+ delete stats.isRequested;
18220
+ delete stats.rtpPacketSizeArray;
18221
+ } else if (stats.type === 'outbound-rtp') {
18222
+ delete stats.requestedBitrateArray;
18223
+ delete stats.lastUsedEffect;
18224
+ delete stats.maxRequestedFrameSize;
18225
+ delete stats.maxRequestedBitrateForMaxRequestedFrameSize;
18226
+ delete stats.maxBitrateForMaxRequestedFrameSize;
18227
+ delete stats.maxRequestedFrameRateForMaxRequestedFrameSize;
18228
+ delete stats.maxTransmittedFrameRateForMaxRequestedFrameSize;
18229
+ delete stats.maxFrameSizeHeightForMaxRequestedFrameSize;
18230
+ delete stats.maxFrameSizeWidthForMaxRequestedFrameSize;
18231
+ delete stats.isRequested;
18232
+ delete stats.rtpPacketSizeArray;
18233
+ } else if (stats.type === 'remote-inbound-rtp') {
18234
+ delete stats.roundTripTimeArray;
18235
+ delete stats.fractionLostArray;
18236
+ delete stats.jitterArray;
18237
+ } else if (stats.type === 'candidate-pair') {
18238
+ delete stats.availableOutgoingBitrateArray;
18239
+ }
18240
+ });
18241
+ }
18242
+ buildMqeIntervalSessionCommon() {
18243
+ var result = structuredClone(initialMqeIntervalSessionCommon);
18244
+ result.isMain = this.isMain;
18245
+ result.mariFecEnabled = false;
18246
+ result.mariRtxEnabled = false;
18247
+ result.mariQosEnabled = false;
18248
+ result.mariLiteEnabled = false;
18249
+ result.multistreamEnabled = this.multistreamEnabled;
18250
+ result.direction = this.direction;
18251
+ return result;
18252
+ }
18253
+ buildMqeIntervalSessionReceive() {
18254
+ var _getTransportTypeFrom;
18255
+ var result = structuredClone(initialMqeIntervalSessionReceive);
18256
+ result.common = this.buildMqeIntervalSessionCommon();
18257
+ var current = this.currentIntervalStats;
18258
+ var previous = this.previousIntervalStats;
18259
+ var currentFecPacketsReceived = getSumFromStatsByType(current, 'inbound-rtp', 'fecPacketsReceived');
18260
+ var previousFecPacketsReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'fecPacketsReceived');
18261
+ result.fecPackets = currentFecPacketsReceived - previousFecPacketsReceived;
18262
+ var currentRetransmittedPacketsReceived = getSumFromStatsByType(current, 'inbound-rtp', 'retransmittedPacketsReceived');
18263
+ var previousRetransmittedPacketsReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'retransmittedPacketsReceived');
18264
+ result.rtxPackets = currentRetransmittedPacketsReceived - previousRetransmittedPacketsReceived;
18265
+ var currentRetransmittedBytesReceived = getSumFromStatsByType(current, 'inbound-rtp', 'retransmittedBytesReceived');
18266
+ var previousRetransmittedBytesReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'retransmittedBytesReceived');
18267
+ result.rtxBitrate = bytesToBitrate(currentRetransmittedBytesReceived - previousRetransmittedBytesReceived, MQE_INTERVAL);
18268
+ var currentPacketsReceived = getSumFromStatsByType(current, 'inbound-rtp', 'packetsReceived');
18269
+ var previousPacketsReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'packetsReceived');
18270
+ result.rtpPackets = currentPacketsReceived - previousPacketsReceived - result.rtxPackets;
18271
+ var currentBytesReceived = getSumFromStatsByType(current, 'inbound-rtp', 'bytesReceived');
18272
+ var previousBytesReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'bytesReceived');
18273
+ result.rtpBitrate = bytesToBitrate(currentBytesReceived - previousBytesReceived, MQE_INTERVAL) - result.rtxBitrate;
18274
+ var currentPacketsLost = getSumFromStatsByType(current, 'inbound-rtp', 'packetsLost');
18275
+ var previousPacketsLost = getSumFromStatsByType(previous, 'inbound-rtp', 'packetsLost');
18276
+ result.rtpHopByHopLost = currentPacketsLost - previousPacketsLost;
18277
+ result.mediaHopByHopLost = currentPacketsLost - previousPacketsLost;
18278
+ var currentFecPacketsDiscarded = getSumFromStatsByType(current, 'inbound-rtp', 'fecPacketsDiscarded');
18279
+ var previousFecPacketsDiscarded = getSumFromStatsByType(previous, 'inbound-rtp', 'fecPacketsDiscarded');
18280
+ result.rtpRecovered = result.fecPackets - (currentFecPacketsDiscarded - previousFecPacketsDiscarded);
18281
+ var currentTransportType = (_getTransportTypeFrom = getTransportTypeFromStats(current)) !== null && _getTransportTypeFrom !== void 0 ? _getTransportTypeFrom : 'UDP';
18282
+ result.transportType = currentTransportType;
18283
+ var currentRtpPacketSizeArray = getPropertyFromStatsByTypeInArray(current, 'inbound-rtp', 'rtpPacketSizeArray').flat();
18284
+ result.mediaPacketSize = {
18285
+ meanRtpPacketSize: Math.round(mean(currentRtpPacketSizeArray)),
18286
+ maxRtpPacketSize: Math.round(max(currentRtpPacketSizeArray)),
18287
+ minRtpPacketSize: Math.round(min(currentRtpPacketSizeArray))
18288
+ };
18289
+ return result;
18290
+ }
18291
+ buildMqeIntervalStreamReceiveAudio(id) {
18292
+ var result = structuredClone(initialMqeIntervalStreamReceiveAudio);
18293
+ result.common = this.buildMqeIntervalStreamReceiveCommon(id);
18294
+ return result;
18295
+ }
18296
+ buildMqeIntervalStreamReceiveVideo(id) {
18297
+ var _getPropertyFromStats, _getPropertyFromStats2, _getPropertyFromStats3, _getPropertyFromStats4, _getPropertyFromStats5, _getPropertyFromStats6, _getPropertyFromStats7, _getPropertyFromStats8, _getPropertyFromStats9, _getH264ProfileFromSt;
18298
+ var result = structuredClone(initialMqeIntervalStreamReceiveVideo);
18299
+ result.common = this.buildMqeIntervalStreamReceiveCommon(id);
18300
+ var current = this.currentIntervalStats;
18301
+ var previous = this.previousIntervalStats;
18302
+ var currentMaxFrameSizeHeightForMaxRequestedFrameSize = (_getPropertyFromStats = getPropertyFromStatsById(current, id, 'maxFrameSizeHeightForMaxRequestedFrameSize')) !== null && _getPropertyFromStats !== void 0 ? _getPropertyFromStats : 0;
18303
+ var currentMaxFrameSizeWidthForMaxRequestedFrameSize = (_getPropertyFromStats2 = getPropertyFromStatsById(current, id, 'maxFrameSizeWidthForMaxRequestedFrameSize')) !== null && _getPropertyFromStats2 !== void 0 ? _getPropertyFromStats2 : 0;
18304
+ result.receivedFrameSize = pixelsToFrameSize(currentMaxFrameSizeWidthForMaxRequestedFrameSize, currentMaxFrameSizeHeightForMaxRequestedFrameSize);
18305
+ var currentMaxRequestedFrameSize = (_getPropertyFromStats3 = getPropertyFromStatsById(current, id, 'maxRequestedFrameSize')) !== null && _getPropertyFromStats3 !== void 0 ? _getPropertyFromStats3 : 0;
18306
+ result.requestedFrameSize = currentMaxRequestedFrameSize;
18307
+ result.optimalFrameSize = currentMaxRequestedFrameSize;
18308
+ result.receivedHeight = currentMaxFrameSizeHeightForMaxRequestedFrameSize;
18309
+ result.receivedWidth = currentMaxFrameSizeWidthForMaxRequestedFrameSize;
18310
+ var currentKeyFramesDecoded = (_getPropertyFromStats4 = getPropertyFromStatsById(current, id, 'keyFramesDecoded')) !== null && _getPropertyFromStats4 !== void 0 ? _getPropertyFromStats4 : 0;
18311
+ var previousKeyFramesDecoded = (_getPropertyFromStats5 = getPropertyFromStatsById(previous, id, 'keyFramesDecoded')) !== null && _getPropertyFromStats5 !== void 0 ? _getPropertyFromStats5 : 0;
18312
+ result.receivedKeyFrames = currentKeyFramesDecoded - previousKeyFramesDecoded;
18313
+ var currentFirCount = (_getPropertyFromStats6 = getPropertyFromStatsById(current, id, 'firCount')) !== null && _getPropertyFromStats6 !== void 0 ? _getPropertyFromStats6 : 0;
18314
+ var previousFirCount = (_getPropertyFromStats7 = getPropertyFromStatsById(previous, id, 'firCount')) !== null && _getPropertyFromStats7 !== void 0 ? _getPropertyFromStats7 : 0;
18315
+ var currentPliCount = (_getPropertyFromStats8 = getPropertyFromStatsById(current, id, 'pliCount')) !== null && _getPropertyFromStats8 !== void 0 ? _getPropertyFromStats8 : 0;
18316
+ var previousPliCount = (_getPropertyFromStats9 = getPropertyFromStatsById(previous, id, 'pliCount')) !== null && _getPropertyFromStats9 !== void 0 ? _getPropertyFromStats9 : 0;
18317
+ result.requestedKeyFrames = currentFirCount - previousFirCount + (currentPliCount - previousPliCount);
18318
+ if (this.multistreamEnabled) {
18319
+ var _getPropertyFromStats10, _getPropertyFromStats11;
18320
+ var currentIsActiveSpeaker = (_getPropertyFromStats10 = getPropertyFromStatsById(current, id, 'isActiveSpeaker')) !== null && _getPropertyFromStats10 !== void 0 ? _getPropertyFromStats10 : false;
18321
+ var currentLastActiveSpeakerUpdateTimestamp = (_getPropertyFromStats11 = getPropertyFromStatsById(current, id, 'lastActiveSpeakerUpdateTimestamp')) !== null && _getPropertyFromStats11 !== void 0 ? _getPropertyFromStats11 : 0;
18322
+ result.isActiveSpeaker = currentIsActiveSpeaker || currentLastActiveSpeakerUpdateTimestamp > performance.timeOrigin + performance.now() - MQE_INTERVAL;
18323
+ }
18324
+ var currentH264CodecProfile = (_getH264ProfileFromSt = getH264ProfileFromStatsByStreamStatsId(current, id)) !== null && _getH264ProfileFromSt !== void 0 ? _getH264ProfileFromSt : 'BP';
18325
+ result.h264CodecProfile = currentH264CodecProfile;
18326
+ return result;
18327
+ }
18328
+ buildMqeIntervalStreamReceiveCommon(id) {
18329
+ var _getPropertyFromStats12, _getPropertyFromStats13, _getPropertyFromStats14, _getPropertyFromStats15, _getPropertyFromStats16, _getPropertyFromStats17, _getPropertyFromStats28, _getPropertyFromStats29, _getPropertyFromStats30, _getPropertyFromStats31, _getPropertyFromStats32, _getCodecFromStatsByS;
18330
+ var result = structuredClone(initialMqeIntervalStreamReceiveCommon);
18331
+ var current = this.currentIntervalStats;
18332
+ var previous = this.previousIntervalStats;
18333
+ var currentPacketsReceived = (_getPropertyFromStats12 = getPropertyFromStatsById(current, id, 'packetsReceived')) !== null && _getPropertyFromStats12 !== void 0 ? _getPropertyFromStats12 : 0;
18334
+ var previousPacketsReceived = (_getPropertyFromStats13 = getPropertyFromStatsById(previous, id, 'packetsReceived')) !== null && _getPropertyFromStats13 !== void 0 ? _getPropertyFromStats13 : 0;
18335
+ var currentRetransmittedPacketsReceived = (_getPropertyFromStats14 = getPropertyFromStatsById(current, id, 'retransmittedPacketsReceived')) !== null && _getPropertyFromStats14 !== void 0 ? _getPropertyFromStats14 : 0;
18336
+ var previousRetransmittedPacketsReceived = (_getPropertyFromStats15 = getPropertyFromStatsById(previous, id, 'retransmittedPacketsReceived')) !== null && _getPropertyFromStats15 !== void 0 ? _getPropertyFromStats15 : 0;
18337
+ result.rtpPackets = currentPacketsReceived - previousPacketsReceived - (currentRetransmittedPacketsReceived - previousRetransmittedPacketsReceived);
18338
+ var currentPacketsLost = (_getPropertyFromStats16 = getPropertyFromStatsById(current, id, 'packetsLost')) !== null && _getPropertyFromStats16 !== void 0 ? _getPropertyFromStats16 : 0;
18339
+ var previousPacketsLost = (_getPropertyFromStats17 = getPropertyFromStatsById(previous, id, 'packetsLost')) !== null && _getPropertyFromStats17 !== void 0 ? _getPropertyFromStats17 : 0;
18340
+ result.rtpEndToEndLost = currentPacketsLost - previousPacketsLost;
18341
+ if (this.mediaKind === 'audio') {
18342
+ var _getPropertyFromStats18, _getPropertyFromStats19, _getPropertyFromStats20, _getPropertyFromStats21, _getPropertyFromStats22;
18343
+ var currentConcealedSamples = (_getPropertyFromStats18 = getPropertyFromStatsById(current, id, 'concealedSamples')) !== null && _getPropertyFromStats18 !== void 0 ? _getPropertyFromStats18 : 0;
18344
+ var previousConcealedSamples = (_getPropertyFromStats19 = getPropertyFromStatsById(previous, id, 'concealedSamples')) !== null && _getPropertyFromStats19 !== void 0 ? _getPropertyFromStats19 : 0;
18345
+ var currentSilentConcealedSamples = (_getPropertyFromStats20 = getPropertyFromStatsById(current, id, 'silentConcealedSamples')) !== null && _getPropertyFromStats20 !== void 0 ? _getPropertyFromStats20 : 0;
18346
+ var previousSilentConcealedSamples = (_getPropertyFromStats21 = getPropertyFromStatsById(previous, id, 'silentConcealedSamples')) !== null && _getPropertyFromStats21 !== void 0 ? _getPropertyFromStats21 : 0;
18347
+ var currentClockRate = (_getPropertyFromStats22 = getPropertyFromStatsByType(current, 'codec', 'clockRate')) !== null && _getPropertyFromStats22 !== void 0 ? _getPropertyFromStats22 : 0;
18348
+ result.concealedFrames = samplesToMilliseconds(currentConcealedSamples - previousConcealedSamples - (currentSilentConcealedSamples - previousSilentConcealedSamples), currentClockRate);
18349
+ }
18350
+ if (this.mediaKind === 'video') {
18351
+ var _getPropertyFromStats23, _getPropertyFromStats24, _getPropertyFromStats25, _getPropertyFromStats26, _getPropertyFromStats27;
18352
+ var currentTotalFreezesDuration = (_getPropertyFromStats23 = getPropertyFromStatsById(current, id, 'totalFreezesDuration')) !== null && _getPropertyFromStats23 !== void 0 ? _getPropertyFromStats23 : 0;
18353
+ var previousTotalFreezesDuration = (_getPropertyFromStats24 = getPropertyFromStatsById(previous, id, 'totalFreezesDuration')) !== null && _getPropertyFromStats24 !== void 0 ? _getPropertyFromStats24 : 0;
18354
+ result.concealedFrames = (currentTotalFreezesDuration - previousTotalFreezesDuration) * 1000;
18355
+ var currentMaxReceivedFrameRateForMaxRequestedFrameSize = (_getPropertyFromStats25 = getPropertyFromStatsById(current, id, 'maxReceivedFrameRateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats25 !== void 0 ? _getPropertyFromStats25 : 0;
18356
+ result.receivedFrameRate = currentMaxReceivedFrameRateForMaxRequestedFrameSize;
18357
+ var currentMaxDecodedFrameRateForMaxRequestedFrameSize = (_getPropertyFromStats26 = getPropertyFromStatsById(current, id, 'maxDecodedFrameRateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats26 !== void 0 ? _getPropertyFromStats26 : 0;
18358
+ result.renderedFrameRate = currentMaxDecodedFrameRateForMaxRequestedFrameSize;
18359
+ var currentMaxRequestedFrameRateForMaxRequestedFrameSize = (_getPropertyFromStats27 = getPropertyFromStatsById(current, id, 'maxRequestedFrameRateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats27 !== void 0 ? _getPropertyFromStats27 : 0;
18360
+ result.requestedFrameRate = currentMaxRequestedFrameRateForMaxRequestedFrameSize;
18361
+ result.optimalFrameRate = currentMaxRequestedFrameRateForMaxRequestedFrameSize;
18362
+ }
18363
+ var currentJitterArray = (_getPropertyFromStats28 = getPropertyFromStatsById(current, id, 'jitterArray')) !== null && _getPropertyFromStats28 !== void 0 ? _getPropertyFromStats28 : [];
18364
+ result.meanRtpJitter = mean(currentJitterArray) * 1000;
18365
+ result.maxRtpJitter = max(currentJitterArray) * 1000;
18366
+ var currentBytesReceived = (_getPropertyFromStats29 = getPropertyFromStatsById(current, id, 'bytesReceived')) !== null && _getPropertyFromStats29 !== void 0 ? _getPropertyFromStats29 : 0;
18367
+ var previousBytesReceived = (_getPropertyFromStats30 = getPropertyFromStatsById(previous, id, 'bytesReceived')) !== null && _getPropertyFromStats30 !== void 0 ? _getPropertyFromStats30 : 0;
18368
+ var currentRetransmittedBytesReceived = (_getPropertyFromStats31 = getPropertyFromStatsById(current, id, 'retransmittedBytesReceived')) !== null && _getPropertyFromStats31 !== void 0 ? _getPropertyFromStats31 : 0;
18369
+ var previousRetransmittedBytesReceived = (_getPropertyFromStats32 = getPropertyFromStatsById(previous, id, 'retransmittedBytesReceived')) !== null && _getPropertyFromStats32 !== void 0 ? _getPropertyFromStats32 : 0;
18370
+ result.receivedBitrate = bytesToBitrate(currentBytesReceived - previousBytesReceived - (currentRetransmittedBytesReceived - previousRetransmittedBytesReceived), MQE_INTERVAL);
18371
+ if (this.mediaKind === 'audio') {
18372
+ var _getPropertyFromStats33;
18373
+ var currentRequestedBitrateArray = (_getPropertyFromStats33 = getPropertyFromStatsById(current, id, 'requestedBitrateArray')) !== null && _getPropertyFromStats33 !== void 0 ? _getPropertyFromStats33 : [];
18374
+ result.requestedBitrate = max(currentRequestedBitrateArray);
18375
+ result.optimalBitrate = max(currentRequestedBitrateArray);
18376
+ } else {
18377
+ var _getPropertyFromStats34;
18378
+ var currentMaxRequestedBitrateForMaxRequestedFrameSize = (_getPropertyFromStats34 = getPropertyFromStatsById(current, id, 'maxRequestedBitrateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats34 !== void 0 ? _getPropertyFromStats34 : 0;
18379
+ result.requestedBitrate = currentMaxRequestedBitrateForMaxRequestedFrameSize;
18380
+ result.optimalBitrate = currentMaxRequestedBitrateForMaxRequestedFrameSize;
18381
+ }
18382
+ var currentCsiArray = getPropertyFromStatsById(current, id, 'csiArray');
18383
+ if (currentCsiArray && currentCsiArray.length > 0) {
18384
+ result.csi = currentCsiArray.filter((csi, index) => currentCsiArray.indexOf(csi) === index);
18385
+ }
18386
+ var currentCodec = (_getCodecFromStatsByS = getCodecFromStatsByStreamStatsId(current, id)) !== null && _getCodecFromStatsByS !== void 0 ? _getCodecFromStatsByS : this.mediaKind === 'audio' ? 'opus' : 'H264';
18387
+ result.codec = currentCodec;
18388
+ return result;
18389
+ }
18390
+ buildMqeIntervalSessionTransmit() {
18391
+ var _getTransportTypeFrom2, _getAvailableOutgoing;
18392
+ var result = structuredClone(initialMqeIntervalSessionTransmit);
18393
+ result.common = this.buildMqeIntervalSessionCommon();
18394
+ var current = this.currentIntervalStats;
18395
+ var previous = this.previousIntervalStats;
18396
+ var currentRetransmittedPacketsSent = getSumFromStatsByType(current, 'outbound-rtp', 'retransmittedPacketsSent');
18397
+ var previousRetransmittedPacketsSent = getSumFromStatsByType(previous, 'outbound-rtp', 'retransmittedPacketsSent');
18398
+ result.rtxPackets = currentRetransmittedPacketsSent - previousRetransmittedPacketsSent;
18399
+ var currentRetransmittedBytesSent = getSumFromStatsByType(current, 'outbound-rtp', 'retransmittedBytesSent');
18400
+ var previousRetransmittedBytesSent = getSumFromStatsByType(previous, 'outbound-rtp', 'retransmittedBytesSent');
18401
+ result.rtxBitrate = bytesToBitrate(currentRetransmittedBytesSent - previousRetransmittedBytesSent, MQE_INTERVAL);
18402
+ var currentPacketsSent = getSumFromStatsByType(current, 'outbound-rtp', 'packetsSent');
18403
+ var previousPacketsSent = getSumFromStatsByType(previous, 'outbound-rtp', 'packetsSent');
18404
+ result.rtpPackets = currentPacketsSent - previousPacketsSent - result.rtxPackets;
18405
+ var currentBytesSent = getSumFromStatsByType(current, 'outbound-rtp', 'bytesSent');
18406
+ var previousBytesSent = getSumFromStatsByType(previous, 'outbound-rtp', 'bytesSent');
18407
+ result.rtpBitrate = bytesToBitrate(currentBytesSent - previousBytesSent, MQE_INTERVAL) - result.rtxBitrate;
18408
+ var currentTransportType = (_getTransportTypeFrom2 = getTransportTypeFromStats(current)) !== null && _getTransportTypeFrom2 !== void 0 ? _getTransportTypeFrom2 : 'UDP';
18409
+ result.transportType = currentTransportType;
18410
+ var currentAvailableOutgoingBitrate = (_getAvailableOutgoing = getAvailableOutgoingBitrateArrayFromStats(current)) !== null && _getAvailableOutgoing !== void 0 ? _getAvailableOutgoing : [];
18411
+ result.availableBitrate = min(currentAvailableOutgoingBitrate);
18412
+ result.queueDelay = 0;
18413
+ var currentRoundTripTimeArray = getPropertyFromStatsByTypeInArray(current, 'remote-inbound-rtp', 'roundTripTimeArray').flat();
18414
+ result.meanRoundTripTime = mean(currentRoundTripTimeArray) * 1000;
18415
+ result.maxRoundTripTime = max(currentRoundTripTimeArray) * 1000;
18416
+ var currentFractionLostArray = getPropertyFromStatsByTypeInArray(current, 'remote-inbound-rtp', 'fractionLostArray').flat();
18417
+ result.maxRemoteLossRate = max(currentFractionLostArray) * 100;
18418
+ result.meanRemoteLossRate = mean(currentFractionLostArray) * 100;
18419
+ var currentJitterArray = getPropertyFromStatsByTypeInArray(current, 'remote-inbound-rtp', 'jitterArray').flat();
18420
+ result.maxRemoteJitter = max(currentJitterArray) * 1000;
18421
+ result.meanRemoteJitter = mean(currentJitterArray) * 1000;
18422
+ var currentRtpPacketSizeArray = getPropertyFromStatsByTypeInArray(current, 'outbound-rtp', 'rtpPacketSizeArray').flat();
18423
+ result.mediaPacketSize = {
18424
+ meanRtpPacketSize: Math.round(mean(currentRtpPacketSizeArray)),
18425
+ maxRtpPacketSize: Math.round(max(currentRtpPacketSizeArray)),
18426
+ minRtpPacketSize: Math.round(min(currentRtpPacketSizeArray))
18427
+ };
18428
+ return result;
18429
+ }
18430
+ buildMqeIntervalStreamTransmitAudio(id) {
18431
+ var result = structuredClone(initialMqeIntervalStreamTransmitAudio);
18432
+ result.common = this.buildMqeIntervalStreamTransmitCommon(id);
18433
+ var current = this.currentIntervalStats;
18434
+ var currentLastUsedEffect = getPropertyFromStatsById(current, id, 'lastUsedEffect');
18435
+ if ((currentLastUsedEffect === null || currentLastUsedEffect === void 0 ? void 0 : currentLastUsedEffect.kind) === 'noise-reduction-effect') {
18436
+ result.backgroundNoiseReductionMode = NOISE_REDUCTION_MODE.LOW_POWER;
18437
+ } else {
18438
+ result.backgroundNoiseReductionMode = NOISE_REDUCTION_MODE.NONE;
18439
+ }
18440
+ return result;
18441
+ }
18442
+ buildMqeIntervalStreamTransmitVideo(id) {
18443
+ var _getPropertyFromStats35, _getPropertyFromStats36, _getPropertyFromStats37, _getPropertyFromStats38, _getPropertyFromStats39, _getPropertyFromStats40, _getPropertyFromStats41, _getPropertyFromStats42, _getPropertyFromStats43, _getH264ProfileFromSt2;
18444
+ var result = structuredClone(initialMqeIntervalStreamTransmitVideo);
18445
+ result.common = this.buildMqeIntervalStreamTransmitCommon(id);
18446
+ var current = this.currentIntervalStats;
18447
+ var previous = this.previousIntervalStats;
18448
+ var currentMaxFrameSizeHeightForMaxRequestedFrameSize = (_getPropertyFromStats35 = getPropertyFromStatsById(current, id, 'maxFrameSizeHeightForMaxRequestedFrameSize')) !== null && _getPropertyFromStats35 !== void 0 ? _getPropertyFromStats35 : 0;
18449
+ var currentMaxFrameSizeWidthForMaxRequestedFrameSize = (_getPropertyFromStats36 = getPropertyFromStatsById(current, id, 'maxFrameSizeWidthForMaxRequestedFrameSize')) !== null && _getPropertyFromStats36 !== void 0 ? _getPropertyFromStats36 : 0;
18450
+ result.transmittedFrameSize = pixelsToFrameSize(currentMaxFrameSizeWidthForMaxRequestedFrameSize, currentMaxFrameSizeHeightForMaxRequestedFrameSize);
18451
+ var currentMaxRequestedFrameSize = (_getPropertyFromStats37 = getPropertyFromStatsById(current, id, 'maxRequestedFrameSize')) !== null && _getPropertyFromStats37 !== void 0 ? _getPropertyFromStats37 : 0;
18452
+ result.requestedFrameSize = currentMaxRequestedFrameSize;
18453
+ result.transmittedHeight = currentMaxFrameSizeHeightForMaxRequestedFrameSize;
18454
+ result.transmittedWidth = currentMaxFrameSizeWidthForMaxRequestedFrameSize;
18455
+ var currentKeyFramesEncoded = (_getPropertyFromStats38 = getPropertyFromStatsById(current, id, 'keyFramesEncoded')) !== null && _getPropertyFromStats38 !== void 0 ? _getPropertyFromStats38 : 0;
18456
+ var previousKeyFramesEncoded = (_getPropertyFromStats39 = getPropertyFromStatsById(previous, id, 'keyFramesEncoded')) !== null && _getPropertyFromStats39 !== void 0 ? _getPropertyFromStats39 : 0;
18457
+ result.transmittedKeyFrames = currentKeyFramesEncoded - previousKeyFramesEncoded;
18458
+ var currentFirCount = (_getPropertyFromStats40 = getPropertyFromStatsById(current, id, 'firCount')) !== null && _getPropertyFromStats40 !== void 0 ? _getPropertyFromStats40 : 0;
18459
+ var previousFirCount = (_getPropertyFromStats41 = getPropertyFromStatsById(previous, id, 'firCount')) !== null && _getPropertyFromStats41 !== void 0 ? _getPropertyFromStats41 : 0;
18460
+ var currentPliCount = (_getPropertyFromStats42 = getPropertyFromStatsById(current, id, 'pliCount')) !== null && _getPropertyFromStats42 !== void 0 ? _getPropertyFromStats42 : 0;
18461
+ var previousPliCount = (_getPropertyFromStats43 = getPropertyFromStatsById(previous, id, 'pliCount')) !== null && _getPropertyFromStats43 !== void 0 ? _getPropertyFromStats43 : 0;
18462
+ result.requestedKeyFrames = currentFirCount - previousFirCount + (currentPliCount - previousPliCount);
18463
+ result.localConfigurationChanges = 0;
18464
+ var currentH264CodecProfile = (_getH264ProfileFromSt2 = getH264ProfileFromStatsByStreamStatsId(current, id)) !== null && _getH264ProfileFromSt2 !== void 0 ? _getH264ProfileFromSt2 : 'BP';
18465
+ result.h264CodecProfile = currentH264CodecProfile;
18466
+ var currentLastUsedEffect = getPropertyFromStatsById(current, id, 'lastUsedEffect');
18467
+ if ((currentLastUsedEffect === null || currentLastUsedEffect === void 0 ? void 0 : currentLastUsedEffect.kind) === 'virtual-background-effect' && 'virtualBackgroundMode' in currentLastUsedEffect) {
18468
+ if (currentLastUsedEffect.virtualBackgroundMode === 'BLUR') {
18469
+ result.backgroundAugmentationType = VIRTUAL_BACKGROUND_MODE.BLUR;
18470
+ } else if (currentLastUsedEffect.virtualBackgroundMode === 'IMAGE') {
18471
+ result.backgroundAugmentationType = VIRTUAL_BACKGROUND_MODE.REPLACE_IMAGE;
18472
+ } else if (currentLastUsedEffect.virtualBackgroundMode === 'VIDEO') {
18473
+ result.backgroundAugmentationType = VIRTUAL_BACKGROUND_MODE.REPLACE_VIDEO;
18474
+ } else {
18475
+ result.backgroundAugmentationType = VIRTUAL_BACKGROUND_MODE.NONE;
18476
+ }
18477
+ } else {
18478
+ result.backgroundAugmentationType = VIRTUAL_BACKGROUND_MODE.NONE;
18479
+ }
18480
+ return result;
18481
+ }
18482
+ buildMqeIntervalStreamTransmitCommon(id) {
18483
+ var _getPropertyFromStats44, _getPropertyFromStats45, _getPropertyFromStats46, _getPropertyFromStats47, _getPropertyFromStats50, _getPropertyFromStats51, _getPropertyFromStats52, _getPropertyFromStats53, _getCodecFromStatsByS2;
18484
+ var result = structuredClone(initialMqeIntervalStreamTransmitCommon);
18485
+ var current = this.currentIntervalStats;
18486
+ var previous = this.previousIntervalStats;
18487
+ var currentPacketsSent = (_getPropertyFromStats44 = getPropertyFromStatsById(current, id, 'packetsSent')) !== null && _getPropertyFromStats44 !== void 0 ? _getPropertyFromStats44 : 0;
18488
+ var previousPacketsSent = (_getPropertyFromStats45 = getPropertyFromStatsById(previous, id, 'packetsSent')) !== null && _getPropertyFromStats45 !== void 0 ? _getPropertyFromStats45 : 0;
18489
+ var currentRetransmittedPacketsSent = (_getPropertyFromStats46 = getPropertyFromStatsById(current, id, 'retransmittedPacketsSent')) !== null && _getPropertyFromStats46 !== void 0 ? _getPropertyFromStats46 : 0;
18490
+ var previousRetransmittedPacketsSent = (_getPropertyFromStats47 = getPropertyFromStatsById(previous, id, 'retransmittedPacketsSent')) !== null && _getPropertyFromStats47 !== void 0 ? _getPropertyFromStats47 : 0;
18491
+ result.rtpPackets = currentPacketsSent - previousPacketsSent - (currentRetransmittedPacketsSent - previousRetransmittedPacketsSent);
18492
+ if (this.mediaKind === 'video') {
18493
+ var _getPropertyFromStats48, _getPropertyFromStats49;
18494
+ var currentMaxTransmittedFrameRateForMaxRequestedFrameSize = (_getPropertyFromStats48 = getPropertyFromStatsById(current, id, 'maxTransmittedFrameRateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats48 !== void 0 ? _getPropertyFromStats48 : 0;
18495
+ result.transmittedFrameRate = currentMaxTransmittedFrameRateForMaxRequestedFrameSize;
18496
+ var currentMaxRequestedFrameRateForMaxRequestedFrameSize = (_getPropertyFromStats49 = getPropertyFromStatsById(current, id, 'maxRequestedFrameRateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats49 !== void 0 ? _getPropertyFromStats49 : 0;
18497
+ result.requestedFrames = currentMaxRequestedFrameRateForMaxRequestedFrameSize;
18498
+ }
18499
+ var currentBytesSent = (_getPropertyFromStats50 = getPropertyFromStatsById(current, id, 'bytesSent')) !== null && _getPropertyFromStats50 !== void 0 ? _getPropertyFromStats50 : 0;
18500
+ var previousBytesSent = (_getPropertyFromStats51 = getPropertyFromStatsById(previous, id, 'bytesSent')) !== null && _getPropertyFromStats51 !== void 0 ? _getPropertyFromStats51 : 0;
18501
+ var currentRetransmittedBytesSent = (_getPropertyFromStats52 = getPropertyFromStatsById(current, id, 'retransmittedBytesSent')) !== null && _getPropertyFromStats52 !== void 0 ? _getPropertyFromStats52 : 0;
18502
+ var previousRetransmittedBytesSent = (_getPropertyFromStats53 = getPropertyFromStatsById(previous, id, 'retransmittedBytesSent')) !== null && _getPropertyFromStats53 !== void 0 ? _getPropertyFromStats53 : 0;
18503
+ result.transmittedBitrate = bytesToBitrate(currentBytesSent - previousBytesSent - (currentRetransmittedBytesSent - previousRetransmittedBytesSent), MQE_INTERVAL);
18504
+ if (this.mediaKind === 'audio') {
18505
+ var _getPropertyFromStats54;
18506
+ var currentRequestedBitrateArray = (_getPropertyFromStats54 = getPropertyFromStatsById(current, id, 'requestedBitrateArray')) !== null && _getPropertyFromStats54 !== void 0 ? _getPropertyFromStats54 : [];
18507
+ result.requestedBitrate = max(currentRequestedBitrateArray);
18508
+ } else {
18509
+ var _getPropertyFromStats55;
18510
+ var currentMaxRequestedBitrateForMaxRequestedFrameSize = (_getPropertyFromStats55 = getPropertyFromStatsById(current, id, 'maxRequestedBitrateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats55 !== void 0 ? _getPropertyFromStats55 : 0;
18511
+ result.requestedBitrate = currentMaxRequestedBitrateForMaxRequestedFrameSize;
18512
+ }
18513
+ var currentCodec = (_getCodecFromStatsByS2 = getCodecFromStatsByStreamStatsId(current, id)) !== null && _getCodecFromStatsByS2 !== void 0 ? _getCodecFromStatsByS2 : this.mediaKind === 'audio' ? 'opus' : 'H264';
18514
+ result.codec = currentCodec;
18515
+ var currentCsi = getPropertyFromStatsById(current, id, 'csi');
18516
+ if (currentCsi) {
18517
+ result.csi = [currentCsi];
18518
+ }
18519
+ return result;
18520
+ }
18521
+ }
18522
+
18523
+ function ownKeys$4(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
18524
+ function _objectSpread$4(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$4(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$4(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
18525
+ class MqeIntervalSessionReceiveAudioBuilder extends MqeBuilder {
18526
+ constructor(params) {
18527
+ super(_objectSpread$4(_objectSpread$4({}, params), {}, {
18528
+ direction: 'recvonly',
18529
+ mediaKind: 'audio'
18530
+ }));
18531
+ }
18532
+ buildMqe() {
18533
+ var result = {
18534
+ common: this.buildMqeIntervalSessionReceive(),
18535
+ streams: []
18536
+ };
18537
+ this.currentIntervalStats.forEach((stats, key) => {
18538
+ if (stats.type === 'inbound-rtp' && (!this.multistreamEnabled || isStreamRequested(stats))) {
18539
+ result.streams.push(this.buildMqeIntervalStreamReceiveAudio(key));
18540
+ }
18541
+ });
18542
+ return result;
18543
+ }
18544
+ }
18545
+
18546
+ function ownKeys$3(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
18547
+ function _objectSpread$3(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$3(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$3(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
18548
+ class MqeIntervalSessionReceiveVideoBuilder extends MqeBuilder {
18549
+ constructor(params) {
18550
+ super(_objectSpread$3(_objectSpread$3({}, params), {}, {
18551
+ direction: 'recvonly',
18552
+ mediaKind: 'video'
18553
+ }));
18554
+ }
18555
+ buildMqe() {
18556
+ var result = {
18557
+ common: this.buildMqeIntervalSessionReceive(),
18558
+ streams: []
18559
+ };
18560
+ this.currentIntervalStats.forEach((stats, key) => {
18561
+ if (stats.type === 'inbound-rtp' && (!this.multistreamEnabled || isStreamRequested(stats))) {
18562
+ result.streams.push(this.buildMqeIntervalStreamReceiveVideo(key));
18563
+ }
18564
+ });
18565
+ return result;
18566
+ }
18567
+ }
18568
+
18569
+ function ownKeys$2(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
18570
+ function _objectSpread$2(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$2(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$2(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
18571
+ class MqeIntervalSessionTransmitAudioBuilder extends MqeBuilder {
18572
+ constructor(params) {
18573
+ super(_objectSpread$2(_objectSpread$2({}, params), {}, {
18574
+ direction: 'sendonly',
18575
+ mediaKind: 'audio'
18576
+ }));
18577
+ }
18578
+ buildMqe() {
18579
+ var result = {
18580
+ common: this.buildMqeIntervalSessionTransmit(),
18581
+ streams: []
18582
+ };
18583
+ this.currentIntervalStats.forEach((stats, key) => {
18584
+ if (stats.type === 'outbound-rtp' && (!this.multistreamEnabled || isStreamRequested(stats))) {
18585
+ result.streams.push(this.buildMqeIntervalStreamTransmitAudio(key));
18586
+ }
18587
+ });
18588
+ return result;
18589
+ }
18590
+ }
18591
+
18592
+ function ownKeys$1(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
18593
+ function _objectSpread$1(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys$1(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys$1(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
18594
+ class MqeIntervalSessionTransmitVideoBuilder extends MqeBuilder {
18595
+ constructor(params) {
18596
+ super(_objectSpread$1(_objectSpread$1({}, params), {}, {
18597
+ direction: 'sendonly',
18598
+ mediaKind: 'video'
18599
+ }));
18600
+ }
18601
+ buildMqe() {
18602
+ var result = {
18603
+ common: this.buildMqeIntervalSessionTransmit(),
18604
+ streams: []
18605
+ };
18606
+ this.currentIntervalStats.forEach((stats, key) => {
18607
+ if (stats.type === 'outbound-rtp' && (!this.multistreamEnabled || isStreamRequested(stats))) {
18608
+ result.streams.push(this.buildMqeIntervalStreamTransmitVideo(key));
18609
+ }
18610
+ });
18611
+ return result;
18612
+ }
18613
+ }
18278
18614
 
18279
18615
  var StatsAnalyzerEventNames;
18280
18616
  (function (StatsAnalyzerEventNames) {
@@ -18296,32 +18632,29 @@ class StatsAnalyzer extends EventEmitter$5 {
18296
18632
  var {
18297
18633
  config,
18298
18634
  networkQualityMonitor,
18299
- statsResults = STATS_DEFAULT,
18300
18635
  isMultistream = false
18301
18636
  } = _ref;
18302
18637
  super();
18303
18638
  _defineProperty(this, "config", void 0);
18304
- _defineProperty(this, "correlationId", void 0);
18305
- _defineProperty(this, "lastEmittedStartStopEvents", void 0);
18306
- _defineProperty(this, "lastMqaDataSent", void 0);
18307
- _defineProperty(this, "lastStatsResults", void 0);
18639
+ _defineProperty(this, "lastEmittedStartStopEvents", {});
18640
+ _defineProperty(this, "previousTransceiverStats", void 0);
18308
18641
  _defineProperty(this, "meetingMediaStatus", void 0);
18309
- _defineProperty(this, "mqaInterval", void 0);
18310
- _defineProperty(this, "mqaSentCount", void 0);
18311
- _defineProperty(this, "networkQualityMonitor", void 0);
18312
- _defineProperty(this, "mediaConnection", void 0);
18313
18642
  _defineProperty(this, "statsInterval", void 0);
18314
- _defineProperty(this, "statsResults", void 0);
18315
- _defineProperty(this, "statsStarted", void 0);
18316
- _defineProperty(this, "successfulCandidatePair", void 0);
18317
- _defineProperty(this, "localIpAddress", void 0);
18318
- _defineProperty(this, "shareVideoEncoderImplementation", void 0);
18319
- _defineProperty(this, "isMultistream", void 0);
18643
+ _defineProperty(this, "mqeInterval", void 0);
18644
+ _defineProperty(this, "mqeSentCount", 0);
18645
+ _defineProperty(this, "networkQualityMonitor", void 0);
18646
+ _defineProperty(this, "mediaConnection", null);
18647
+ _defineProperty(this, "statsStarted", false);
18648
+ _defineProperty(this, "mqeIntervalSessionReceiveAudioMainBuilder", void 0);
18649
+ _defineProperty(this, "mqeIntervalSessionReceiveAudioSlidesBuilder", void 0);
18650
+ _defineProperty(this, "mqeIntervalSessionTransmitAudioMainBuilder", void 0);
18651
+ _defineProperty(this, "mqeIntervalSessionTransmitAudioSlidesBuilder", void 0);
18652
+ _defineProperty(this, "mqeIntervalSessionReceiveVideoMainBuilder", void 0);
18653
+ _defineProperty(this, "mqeIntervalSessionReceiveVideoSlidesBuilder", void 0);
18654
+ _defineProperty(this, "mqeIntervalSessionTransmitVideoMainBuilder", void 0);
18655
+ _defineProperty(this, "mqeIntervalSessionTransmitVideoSlidesBuilder", void 0);
18320
18656
  _defineProperty(this, "emitStartStopEvents", (mediaType, previousValue, currentValue, isLocal) => {
18321
18657
  var _this$lastEmittedStar, _this$lastEmittedStar2;
18322
- if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {
18323
- throw new Error("Unsupported mediaType: ".concat(mediaType));
18324
- }
18325
18658
  if (previousValue === undefined) previousValue = 0;
18326
18659
  if (currentValue === undefined) currentValue = 0;
18327
18660
  if (!this.lastEmittedStartStopEvents[mediaType]) {
@@ -18331,7 +18664,7 @@ class StatsAnalyzer extends EventEmitter$5 {
18331
18664
  var newEvent;
18332
18665
  if (currentValue - previousValue > 0) {
18333
18666
  newEvent = isLocal ? StatsAnalyzerEventNames.LOCAL_MEDIA_STARTED : StatsAnalyzerEventNames.REMOTE_MEDIA_STARTED;
18334
- } else if (currentValue === previousValue && currentValue > 0) {
18667
+ } else if (currentValue === previousValue && (lastEmittedEvent === StatsAnalyzerEventNames.LOCAL_MEDIA_STARTED || lastEmittedEvent === StatsAnalyzerEventNames.REMOTE_MEDIA_STARTED)) {
18335
18668
  newEvent = isLocal ? StatsAnalyzerEventNames.LOCAL_MEDIA_STOPPED : StatsAnalyzerEventNames.REMOTE_MEDIA_STOPPED;
18336
18669
  }
18337
18670
  if (newEvent && lastEmittedEvent !== newEvent) {
@@ -18346,761 +18679,365 @@ class StatsAnalyzer extends EventEmitter$5 {
18346
18679
  });
18347
18680
  }
18348
18681
  });
18349
- _defineProperty(this, "extractAndSetLocalIpAddressInfoForDiagnostics", (successfulCandidatePairId, candidates) => {
18350
- var newIpAddress = '';
18351
- if (successfulCandidatePairId && Object.keys(candidates).length > 0) {
18352
- var localCandidate = candidates[successfulCandidatePairId];
18353
- if (localCandidate) {
18354
- if (localCandidate.candidateType === 'host') {
18355
- newIpAddress = "".concat(localCandidate.address);
18356
- } else if (localCandidate.candidateType === 'prflx') {
18357
- if (!localCandidate.relayProtocol) {
18358
- newIpAddress = "".concat(localCandidate.relatedAddress);
18359
- } else {
18360
- newIpAddress = "".concat(localCandidate.address);
18361
- }
18362
- }
18363
- }
18364
- }
18365
- this.localIpAddress = newIpAddress;
18366
- });
18367
- _defineProperty(this, "parseCandidate", (result, type, isSender, isRemote) => {
18368
- var _this$successfulCandi;
18369
- if (!result || !result.id) {
18370
- return;
18371
- }
18372
- if (((_this$successfulCandi = this.successfulCandidatePair) === null || _this$successfulCandi === void 0 ? void 0 : _this$successfulCandi.localCandidateId) !== result.id) {
18373
- return;
18374
- }
18375
- var transport;
18376
- if (result.relayProtocol) {
18377
- transport = result.relayProtocol.toUpperCase();
18378
- } else if (result.protocol) {
18379
- transport = result.protocol.toUpperCase();
18380
- }
18381
- var sendRecvType = isSender ? MediaDirection.SEND : MediaDirection.RECEIVE;
18382
- var ipType = isRemote ? IpType.REMOTE : IpType.LOCAL;
18383
- if (!this.statsResults.candidates) {
18384
- this.statsResults.candidates = {};
18385
- }
18386
- this.statsResults.candidates[result.id] = {
18387
- candidateType: result.candidateType,
18388
- ipAddress: result.ip,
18389
- relatedAddress: result.relatedAddress,
18390
- relatedPort: result.relatedPort,
18391
- relayProtocol: result.relayProtocol,
18392
- protocol: result.protocol,
18393
- address: result.address,
18394
- portNumber: result.port,
18395
- networkType: result.networkType,
18396
- priority: result.priority,
18397
- transport,
18398
- timestamp: result.time,
18399
- id: result.id,
18400
- type: result.type
18401
- };
18402
- this.statsResults.connectionType[ipType].candidateType = result.candidateType;
18403
- this.statsResults.connectionType[ipType].ipAddress = result.ipAddress;
18404
- this.statsResults.connectionType[ipType].networkType = result.networkType === NetworkType.VPN ? NetworkType.UNKNOWN : result.networkType;
18405
- this.statsResults.connectionType[ipType].transport = transport;
18406
- this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;
18407
- });
18408
- this.statsStarted = false;
18409
- this.statsResults = statsResults;
18410
- this.lastStatsResults = null;
18411
18682
  this.config = config;
18412
18683
  this.networkQualityMonitor = networkQualityMonitor;
18413
- this.correlationId = config.correlationId;
18414
- this.mqaSentCount = -1;
18415
- this.lastMqaDataSent = {};
18416
- this.mediaConnection = null;
18417
- this.lastEmittedStartStopEvents = {};
18418
- this.successfulCandidatePair = {};
18419
- this.localIpAddress = '';
18420
- this.isMultistream = isMultistream;
18421
- }
18422
- resetStatsResults() {
18423
- Object.keys(this.statsResults).forEach(mediaType => {
18424
- if (mediaType.includes('recv')) {
18425
- this.statsResults[mediaType].recv.meanRtpJitter = [];
18426
- this.statsResults[mediaType].recv.meanRtpPacketSize = [];
18427
- }
18428
- if (mediaType.includes('send')) {
18429
- this.statsResults[mediaType].send.meanRemoteJitter = [];
18430
- this.statsResults[mediaType].send.meanRoundTripTime = [];
18431
- this.statsResults[mediaType].send.effect = undefined;
18432
- this.statsResults[mediaType].send.meanRtpPacketSize = [];
18433
- }
18434
- });
18435
- }
18436
- updateMediaStatus(status) {
18437
- var _this$meetingMediaSta, _this$meetingMediaSta2;
18438
- this.meetingMediaStatus = {
18439
- actual: _objectSpread(_objectSpread({}, (_this$meetingMediaSta = this.meetingMediaStatus) === null || _this$meetingMediaSta === void 0 ? void 0 : _this$meetingMediaSta.actual), status === null || status === void 0 ? void 0 : status.actual),
18440
- expected: _objectSpread(_objectSpread({}, (_this$meetingMediaSta2 = this.meetingMediaStatus) === null || _this$meetingMediaSta2 === void 0 ? void 0 : _this$meetingMediaSta2.expected), status === null || status === void 0 ? void 0 : status.expected)
18441
- };
18442
- getLogger().info("StatsAnalyzer:index#updateMediaStatus --> Meeting Media Status: ", JSON.stringify(this.meetingMediaStatus));
18443
- }
18444
- sendMqaData() {
18445
- var newMqa = structuredClone(emptyMqaInterval);
18446
- Object.keys(this.statsResults).forEach(mediaType => {
18447
- if (!this.lastMqaDataSent[mediaType]) {
18448
- this.lastMqaDataSent[mediaType] = {};
18449
- }
18450
- if (!this.lastMqaDataSent[mediaType].send && mediaType.includes('-send')) {
18451
- this.lastMqaDataSent[mediaType].send = {};
18452
- }
18453
- if (!this.lastMqaDataSent[mediaType].recv && mediaType.includes('-recv')) {
18454
- this.lastMqaDataSent[mediaType].recv = {};
18455
- }
18456
- });
18457
- var audioSender = structuredClone(emptyAudioTransmit);
18458
- var audioShareSender = structuredClone(emptyAudioTransmit);
18459
- var audioReceiver = structuredClone(emptyAudioReceive);
18460
- var audioShareReceiver = structuredClone(emptyAudioReceive);
18461
- var videoSender = structuredClone(emptyVideoTransmit);
18462
- var videoShareSender = structuredClone(emptyVideoTransmit);
18463
- var videoReceiver = structuredClone(emptyVideoReceive);
18464
- var videoShareReceiver = structuredClone(emptyVideoReceive);
18465
- getAudioSenderMqa({
18466
- audioSender,
18467
- statsResults: this.statsResults,
18468
- lastMqaDataSent: this.lastMqaDataSent,
18469
- baseMediaType: 'audio-send',
18470
- isMultistream: this.isMultistream
18684
+ this.mqeIntervalSessionReceiveAudioMainBuilder = new MqeIntervalSessionReceiveAudioBuilder({
18685
+ isMain: true,
18686
+ multistreamEnabled: isMultistream
18471
18687
  });
18472
- newMqa.audioTransmit.push(audioSender);
18473
- getAudioSenderMqa({
18474
- audioSender: audioShareSender,
18475
- statsResults: this.statsResults,
18476
- lastMqaDataSent: this.lastMqaDataSent,
18477
- baseMediaType: 'audio-share-send',
18478
- isMultistream: this.isMultistream
18688
+ this.mqeIntervalSessionReceiveAudioSlidesBuilder = new MqeIntervalSessionReceiveAudioBuilder({
18689
+ isMain: false,
18690
+ multistreamEnabled: isMultistream
18479
18691
  });
18480
- newMqa.audioTransmit.push(audioShareSender);
18481
- getAudioReceiverMqa({
18482
- audioReceiver,
18483
- statsResults: this.statsResults,
18484
- lastMqaDataSent: this.lastMqaDataSent,
18485
- baseMediaType: 'audio-recv',
18486
- isMultistream: this.isMultistream
18692
+ this.mqeIntervalSessionTransmitAudioMainBuilder = new MqeIntervalSessionTransmitAudioBuilder({
18693
+ isMain: true,
18694
+ multistreamEnabled: isMultistream
18487
18695
  });
18488
- newMqa.audioReceive.push(audioReceiver);
18489
- getAudioReceiverMqa({
18490
- audioReceiver: audioShareReceiver,
18491
- statsResults: this.statsResults,
18492
- lastMqaDataSent: this.lastMqaDataSent,
18493
- baseMediaType: 'audio-share-recv',
18494
- isMultistream: this.isMultistream
18696
+ this.mqeIntervalSessionTransmitAudioSlidesBuilder = new MqeIntervalSessionTransmitAudioBuilder({
18697
+ isMain: false,
18698
+ multistreamEnabled: isMultistream
18495
18699
  });
18496
- newMqa.audioReceive.push(audioShareReceiver);
18497
- getVideoSenderMqa({
18498
- videoSender,
18499
- statsResults: this.statsResults,
18500
- lastMqaDataSent: this.lastMqaDataSent,
18501
- baseMediaType: 'video-send',
18502
- isMultistream: this.isMultistream
18700
+ this.mqeIntervalSessionReceiveVideoMainBuilder = new MqeIntervalSessionReceiveVideoBuilder({
18701
+ isMain: true,
18702
+ multistreamEnabled: isMultistream
18503
18703
  });
18504
- newMqa.videoTransmit.push(videoSender);
18505
- getVideoSenderMqa({
18506
- videoSender: videoShareSender,
18507
- statsResults: this.statsResults,
18508
- lastMqaDataSent: this.lastMqaDataSent,
18509
- baseMediaType: 'video-share-send',
18510
- isMultistream: this.isMultistream
18704
+ this.mqeIntervalSessionReceiveVideoSlidesBuilder = new MqeIntervalSessionReceiveVideoBuilder({
18705
+ isMain: false,
18706
+ multistreamEnabled: isMultistream
18511
18707
  });
18512
- newMqa.videoTransmit.push(videoShareSender);
18513
- getVideoReceiverMqa({
18514
- videoReceiver,
18515
- statsResults: this.statsResults,
18516
- lastMqaDataSent: this.lastMqaDataSent,
18517
- baseMediaType: 'video-recv',
18518
- isMultistream: this.isMultistream
18708
+ this.mqeIntervalSessionTransmitVideoMainBuilder = new MqeIntervalSessionTransmitVideoBuilder({
18709
+ isMain: true,
18710
+ multistreamEnabled: isMultistream
18519
18711
  });
18520
- newMqa.videoReceive.push(videoReceiver);
18521
- getVideoReceiverMqa({
18522
- videoReceiver: videoShareReceiver,
18523
- statsResults: this.statsResults,
18524
- lastMqaDataSent: this.lastMqaDataSent,
18525
- baseMediaType: 'video-share-recv',
18526
- isMultistream: this.isMultistream
18712
+ this.mqeIntervalSessionTransmitVideoSlidesBuilder = new MqeIntervalSessionTransmitVideoBuilder({
18713
+ isMain: false,
18714
+ multistreamEnabled: isMultistream
18527
18715
  });
18528
- newMqa.videoReceive.push(videoShareReceiver);
18529
- Object.keys(this.statsResults).forEach(mediaType => {
18530
- if (mediaType.startsWith('audio-send')) {
18531
- var audioSenderStream = structuredClone(emptyAudioTransmitStream);
18532
- getAudioSenderStreamMqa({
18533
- audioSenderStream,
18534
- statsResults: this.statsResults,
18535
- lastMqaDataSent: this.lastMqaDataSent,
18536
- mediaType
18537
- });
18538
- if (isStreamRequested({
18539
- isMultistream: this.isMultistream,
18540
- statsResults: this.statsResults,
18541
- mediaType,
18542
- direction: MediaDirection.SEND
18543
- })) {
18544
- newMqa.audioTransmit[0].streams.push(audioSenderStream);
18545
- }
18546
- this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);
18547
- } else if (mediaType.startsWith('audio-share-send')) {
18548
- var _audioSenderStream = structuredClone(emptyAudioTransmitStream);
18549
- getAudioSenderStreamMqa({
18550
- audioSenderStream: _audioSenderStream,
18551
- statsResults: this.statsResults,
18552
- lastMqaDataSent: this.lastMqaDataSent,
18553
- mediaType
18554
- });
18555
- if (isStreamRequested({
18556
- isMultistream: this.isMultistream,
18557
- statsResults: this.statsResults,
18558
- mediaType,
18559
- direction: MediaDirection.SEND
18560
- })) {
18561
- newMqa.audioTransmit[1].streams.push(_audioSenderStream);
18562
- }
18563
- this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);
18564
- } else if (mediaType.startsWith('audio-recv')) {
18565
- var audioReceiverStream = structuredClone(emptyAudioReceiveStream);
18566
- getAudioReceiverStreamMqa({
18567
- audioReceiverStream,
18568
- statsResults: this.statsResults,
18569
- lastMqaDataSent: this.lastMqaDataSent,
18570
- mediaType
18571
- });
18572
- if (isStreamRequested({
18573
- isMultistream: this.isMultistream,
18574
- statsResults: this.statsResults,
18575
- mediaType,
18576
- direction: MediaDirection.RECEIVE
18577
- })) {
18578
- newMqa.audioReceive[0].streams.push(audioReceiverStream);
18579
- }
18580
- this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);
18581
- } else if (mediaType.startsWith('audio-share-recv')) {
18582
- var _audioReceiverStream = structuredClone(emptyAudioReceiveStream);
18583
- getAudioReceiverStreamMqa({
18584
- audioReceiverStream: _audioReceiverStream,
18585
- statsResults: this.statsResults,
18586
- lastMqaDataSent: this.lastMqaDataSent,
18587
- mediaType
18588
- });
18589
- if (isStreamRequested({
18590
- isMultistream: this.isMultistream,
18591
- statsResults: this.statsResults,
18592
- mediaType,
18593
- direction: MediaDirection.RECEIVE
18594
- })) {
18595
- newMqa.audioReceive[1].streams.push(_audioReceiverStream);
18596
- }
18597
- this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);
18598
- } else if (mediaType.startsWith('video-send-layer')) {
18599
- var videoSenderStream = structuredClone(emptyVideoTransmitStream);
18600
- getVideoSenderStreamMqa({
18601
- videoSenderStream,
18602
- statsResults: this.statsResults,
18603
- lastMqaDataSent: this.lastMqaDataSent,
18604
- mediaType
18605
- });
18606
- if (isStreamRequested({
18607
- isMultistream: this.isMultistream,
18608
- statsResults: this.statsResults,
18609
- mediaType,
18610
- direction: MediaDirection.SEND
18611
- })) {
18612
- newMqa.videoTransmit[0].streams.push(videoSenderStream);
18613
- }
18614
- this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);
18615
- } else if (mediaType.startsWith('video-share-send')) {
18616
- var _videoSenderStream = structuredClone(emptyVideoTransmitStream);
18617
- getVideoSenderStreamMqa({
18618
- videoSenderStream: _videoSenderStream,
18619
- statsResults: this.statsResults,
18620
- lastMqaDataSent: this.lastMqaDataSent,
18621
- mediaType
18622
- });
18623
- if (isStreamRequested({
18624
- isMultistream: this.isMultistream,
18625
- statsResults: this.statsResults,
18626
- mediaType,
18627
- direction: MediaDirection.SEND
18628
- })) {
18629
- newMqa.videoTransmit[1].streams.push(_videoSenderStream);
18630
- }
18631
- this.lastMqaDataSent[mediaType].send = structuredClone(this.statsResults[mediaType].send);
18632
- } else if (mediaType.startsWith('video-recv')) {
18633
- var videoReceiverStream = structuredClone(emptyVideoReceiveStream);
18634
- getVideoReceiverStreamMqa({
18635
- videoReceiverStream,
18636
- statsResults: this.statsResults,
18637
- lastMqaDataSent: this.lastMqaDataSent,
18638
- mediaType
18639
- });
18640
- if (isStreamRequested({
18641
- isMultistream: this.isMultistream,
18642
- statsResults: this.statsResults,
18643
- mediaType,
18644
- direction: MediaDirection.RECEIVE
18645
- })) {
18646
- newMqa.videoReceive[0].streams.push(videoReceiverStream);
18716
+ }
18717
+ get builders() {
18718
+ return [this.mqeIntervalSessionReceiveAudioMainBuilder, this.mqeIntervalSessionReceiveAudioSlidesBuilder, this.mqeIntervalSessionTransmitAudioMainBuilder, this.mqeIntervalSessionTransmitAudioSlidesBuilder, this.mqeIntervalSessionReceiveVideoMainBuilder, this.mqeIntervalSessionReceiveVideoSlidesBuilder, this.mqeIntervalSessionTransmitVideoMainBuilder, this.mqeIntervalSessionTransmitVideoSlidesBuilder];
18719
+ }
18720
+ getLocalIpAddress() {
18721
+ for (var builder of this.builders) {
18722
+ var selectedLocalCandidateId = getSelectedCandidateIdFromStats(builder.currentIntervalStats, 'local');
18723
+ if (selectedLocalCandidateId) {
18724
+ var candidateType = getPropertyFromStatsById(builder.currentIntervalStats, selectedLocalCandidateId, 'candidateType');
18725
+ var address = getPropertyFromStatsById(builder.currentIntervalStats, selectedLocalCandidateId, 'address');
18726
+ if (candidateType === 'host') {
18727
+ return address;
18647
18728
  }
18648
- this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);
18649
- } else if (mediaType.startsWith('video-share-recv')) {
18650
- var _videoReceiverStream = structuredClone(emptyVideoReceiveStream);
18651
- getVideoReceiverStreamMqa({
18652
- videoReceiverStream: _videoReceiverStream,
18653
- statsResults: this.statsResults,
18654
- lastMqaDataSent: this.lastMqaDataSent,
18655
- mediaType
18656
- });
18657
- if (isStreamRequested({
18658
- isMultistream: this.isMultistream,
18659
- statsResults: this.statsResults,
18660
- mediaType,
18661
- direction: MediaDirection.RECEIVE
18662
- })) {
18663
- newMqa.videoReceive[1].streams.push(_videoReceiverStream);
18729
+ if (candidateType === 'prflx') {
18730
+ var relayProtocol = getPropertyFromStatsById(builder.currentIntervalStats, selectedLocalCandidateId, 'relayProtocol');
18731
+ if (!relayProtocol) {
18732
+ var relatedAddress = getPropertyFromStatsById(builder.currentIntervalStats, selectedLocalCandidateId, 'relatedAddress');
18733
+ return relatedAddress;
18734
+ }
18735
+ return address;
18664
18736
  }
18665
- this.lastMqaDataSent[mediaType].recv = structuredClone(this.statsResults[mediaType].recv);
18666
18737
  }
18667
- });
18668
- newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;
18669
- newMqa.intervalMetadata.cpuInfo.numberOfCores = CpuInfo.getNumLogicalCores() || 1;
18670
- newMqa.intervalMetadata.peripherals.push({
18671
- information: _UNKNOWN_,
18672
- name: MediaDevices.SPEAKER
18673
- });
18674
- if (this.statsResults['audio-send']) {
18675
- newMqa.intervalMetadata.peripherals.push({
18676
- information: this.statsResults['audio-send'].trackLabel || _UNKNOWN_,
18677
- name: MediaDevices.MICROPHONE
18678
- });
18679
18738
  }
18680
- var existingVideoSender = Object.keys(this.statsResults).find(item => item.includes('video-send'));
18681
- if (existingVideoSender) {
18682
- newMqa.intervalMetadata.peripherals.push({
18683
- information: this.statsResults[existingVideoSender].trackLabel || _UNKNOWN_,
18684
- name: MediaDevices.CAMERA
18685
- });
18739
+ return undefined;
18740
+ }
18741
+ getNetworkType() {
18742
+ for (var builder of this.builders) {
18743
+ var selectedLocalCandidateId = getSelectedCandidateIdFromStats(builder.currentIntervalStats, 'local');
18744
+ if (selectedLocalCandidateId) {
18745
+ var networkType = getPropertyFromStatsById(builder.currentIntervalStats, selectedLocalCandidateId, 'networkType');
18746
+ return networkType;
18747
+ }
18686
18748
  }
18687
- newMqa.networkType = this.statsResults.connectionType.local.networkType;
18688
- newMqa.intervalMetadata.screenWidth = window.screen.width;
18689
- newMqa.intervalMetadata.screenHeight = window.screen.height;
18690
- newMqa.intervalMetadata.screenResolution = Math.round(window.screen.width * window.screen.height / 256);
18691
- newMqa.intervalMetadata.appWindowWidth = window.innerWidth;
18692
- newMqa.intervalMetadata.appWindowHeight = window.innerHeight;
18693
- newMqa.intervalMetadata.appWindowSize = Math.round(window.innerWidth * window.innerHeight / 256);
18694
- this.mqaSentCount += 1;
18695
- newMqa.intervalNumber = this.mqaSentCount;
18696
- this.resetStatsResults();
18697
- this.emit(StatsAnalyzerEventNames.MEDIA_QUALITY, {
18698
- data: newMqa
18699
- });
18749
+ return undefined;
18700
18750
  }
18701
- getLocalIpAddress() {
18702
- return this.localIpAddress;
18751
+ get shareVideoEncoderImplementation() {
18752
+ var encoderImplementation = getPropertyFromStatsByType(this.mqeIntervalSessionTransmitVideoSlidesBuilder.currentIntervalStats, 'outbound-rtp', 'encoderImplementation');
18753
+ return encoderImplementation;
18703
18754
  }
18704
- startAnalyzer(mediaConnection) {
18705
- if (!this.statsStarted) {
18706
- this.statsStarted = true;
18707
- this.mediaConnection = mediaConnection;
18708
- return this.getStatsAndParse().then(() => {
18709
- this.statsInterval = setInterval(() => {
18710
- this.getStatsAndParse();
18711
- }, this.config.analyzerInterval);
18712
- this.sendMqaData();
18713
- this.mqaInterval = setInterval(() => {
18714
- this.sendMqaData();
18715
- }, MQA_INTERVAL);
18716
- });
18755
+ get peerReflexiveIp() {
18756
+ for (var builder of this.builders) {
18757
+ var peerReflexiveCandidateStats = Array.from(builder.currentIntervalStats.values()).find(stats => stats.type === 'local-candidate' && stats.candidateType === 'prflx');
18758
+ if (peerReflexiveCandidateStats) {
18759
+ return peerReflexiveCandidateStats.address;
18760
+ }
18717
18761
  }
18718
- return Promise.resolve();
18762
+ return undefined;
18719
18763
  }
18720
- stopAnalyzer() {
18721
- var sendOneLastMqa = this.mqaInterval && this.statsInterval;
18722
- if (this.statsInterval) {
18723
- clearInterval(this.statsInterval);
18724
- this.statsInterval = undefined;
18725
- }
18726
- if (this.mqaInterval) {
18727
- clearInterval(this.mqaInterval);
18728
- this.mqaInterval = undefined;
18729
- }
18730
- this.statsStarted = false;
18731
- if (sendOneLastMqa) {
18732
- return this.getStatsAndParse().then(() => {
18733
- this.sendMqaData();
18734
- this.mediaConnection = null;
18735
- });
18764
+ get remoteMediaIp() {
18765
+ for (var builder of this.builders) {
18766
+ var selectedRemoteCandidateId = getSelectedCandidateIdFromStats(builder.currentIntervalStats, 'remote');
18767
+ if (selectedRemoteCandidateId) {
18768
+ var remoteMediaIp = getPropertyFromStatsById(builder.currentIntervalStats, selectedRemoteCandidateId, 'address');
18769
+ return remoteMediaIp;
18770
+ }
18736
18771
  }
18737
- return Promise.resolve();
18772
+ return undefined;
18738
18773
  }
18739
- parseGetStatsResult(getStatsResult, type, isSender) {
18740
- if (!getStatsResult) {
18741
- return;
18742
- }
18743
- if (!this.statsResults[type]) {
18744
- this.statsResults[type] = {};
18745
- }
18746
- if (isSender && !this.statsResults[type].send) {
18747
- this.statsResults[type].send = structuredClone(emptySender);
18748
- } else if (!isSender && !this.statsResults[type].recv) {
18749
- this.statsResults[type].recv = structuredClone(emptyReceiver);
18750
- }
18751
- switch (getStatsResult.type) {
18752
- case 'outbound-rtp':
18753
- this.processOutboundRTPResult(getStatsResult, type);
18754
- break;
18755
- case 'inbound-rtp':
18756
- this.processInboundRTPResult(getStatsResult, type);
18757
- break;
18758
- case 'remote-inbound-rtp':
18759
- case 'remote-outbound-rtp':
18760
- this.compareSentAndReceived(getStatsResult, type);
18761
- break;
18762
- case 'remotecandidate':
18763
- case 'remote-candidate':
18764
- this.parseCandidate(getStatsResult, type, isSender, true);
18765
- break;
18766
- case 'local-candidate':
18767
- this.parseCandidate(getStatsResult, type, isSender, false);
18768
- break;
18769
- case 'media-source':
18770
- this.parseAudioSource(getStatsResult, type);
18771
- break;
18772
- case 'codec':
18773
- this.parseCodec(getStatsResult, type);
18774
- break;
18775
- }
18774
+ updateMediaStatus(status) {
18775
+ var _this$meetingMediaSta, _this$meetingMediaSta2;
18776
+ this.meetingMediaStatus = {
18777
+ actual: _objectSpread(_objectSpread({}, (_this$meetingMediaSta = this.meetingMediaStatus) === null || _this$meetingMediaSta === void 0 ? void 0 : _this$meetingMediaSta.actual), status === null || status === void 0 ? void 0 : status.actual),
18778
+ expected: _objectSpread(_objectSpread({}, (_this$meetingMediaSta2 = this.meetingMediaStatus) === null || _this$meetingMediaSta2 === void 0 ? void 0 : _this$meetingMediaSta2.expected), status === null || status === void 0 ? void 0 : status.expected)
18779
+ };
18780
+ getLogger().info("StatsAnalyzer#updateMediaStatus --> Meeting media status: ".concat(JSON.stringify(this.meetingMediaStatus)));
18781
+ }
18782
+ sendMqeData() {
18783
+ var _anonymizeIP, _this$peerReflexiveIp, _this$remoteMediaIp, _getMediaSourceTrackL, _getMediaSourceTrackL2;
18784
+ getLogger().debug('StatsAnalyzer#sendMqeData --> Building MQE...');
18785
+ var mqeInterval = structuredClone(initialMqeInterval);
18786
+ mqeInterval.intervalMetadata = {
18787
+ maskedPeerReflexiveIP: (_anonymizeIP = ipAnonymize((_this$peerReflexiveIp = this.peerReflexiveIp) !== null && _this$peerReflexiveIp !== void 0 ? _this$peerReflexiveIp : DEFAULT_IP, 28, 96)) !== null && _anonymizeIP !== void 0 ? _anonymizeIP : DEFAULT_IP,
18788
+ remoteMediaIP: (_this$remoteMediaIp = this.remoteMediaIp) !== null && _this$remoteMediaIp !== void 0 ? _this$remoteMediaIp : DEFAULT_IP,
18789
+ peripherals: [{
18790
+ name: 'speaker',
18791
+ information: UNKNOWN
18792
+ }, {
18793
+ name: 'microphone',
18794
+ information: (_getMediaSourceTrackL = getMediaSourceTrackLabelFromStats(this.mqeIntervalSessionTransmitAudioMainBuilder.currentIntervalStats)) !== null && _getMediaSourceTrackL !== void 0 ? _getMediaSourceTrackL : UNKNOWN
18795
+ }, {
18796
+ name: 'camera',
18797
+ information: (_getMediaSourceTrackL2 = getMediaSourceTrackLabelFromStats(this.mqeIntervalSessionTransmitVideoMainBuilder.currentIntervalStats)) !== null && _getMediaSourceTrackL2 !== void 0 ? _getMediaSourceTrackL2 : UNKNOWN
18798
+ }],
18799
+ cpuInfo: {
18800
+ description: 'NA',
18801
+ numberOfCores: CpuInfo.getNumLogicalCores() || 1,
18802
+ architecture: UNKNOWN
18803
+ },
18804
+ screenResolution: window.screen.width * window.screen.height / 256,
18805
+ screenWidth: window.screen.width,
18806
+ screenHeight: window.screen.height,
18807
+ appWindowSize: window.innerWidth * window.innerHeight / 256,
18808
+ appWindowWidth: window.innerWidth,
18809
+ appWindowHeight: window.innerHeight
18810
+ };
18811
+ mqeInterval.audioReceive.push(this.mqeIntervalSessionReceiveAudioMainBuilder.buildMqe());
18812
+ mqeInterval.audioReceive.push(this.mqeIntervalSessionReceiveAudioSlidesBuilder.buildMqe());
18813
+ mqeInterval.audioTransmit.push(this.mqeIntervalSessionTransmitAudioMainBuilder.buildMqe());
18814
+ mqeInterval.audioTransmit.push(this.mqeIntervalSessionTransmitAudioSlidesBuilder.buildMqe());
18815
+ mqeInterval.videoReceive.push(this.mqeIntervalSessionReceiveVideoMainBuilder.buildMqe());
18816
+ mqeInterval.videoReceive.push(this.mqeIntervalSessionReceiveVideoSlidesBuilder.buildMqe());
18817
+ mqeInterval.videoTransmit.push(this.mqeIntervalSessionTransmitVideoMainBuilder.buildMqe());
18818
+ mqeInterval.videoTransmit.push(this.mqeIntervalSessionTransmitVideoSlidesBuilder.buildMqe());
18819
+ this.builders.forEach(builder => builder.resetForNextInterval());
18820
+ mqeInterval.intervalNumber = this.mqeSentCount;
18821
+ this.mqeSentCount += 1;
18822
+ getLogger().debug('StatsAnalyzer#sendMqeData --> Sending MQE...');
18823
+ this.emit(StatsAnalyzerEventNames.MEDIA_QUALITY, {
18824
+ data: mqeInterval
18825
+ });
18776
18826
  }
18777
- filterAndParseGetStatsResults(statsItem, type, isSender) {
18778
- var _this$successfulCandi2;
18779
- var {
18780
- types
18781
- } = DEFAULT_GET_STATS_FILTER;
18782
- statsItem.report.forEach(report => {
18783
- if (report.type === 'candidate-pair' && report.state === 'succeeded') {
18784
- this.successfulCandidatePair = report;
18827
+ startAnalyzer(mediaConnection) {
18828
+ var _this = this;
18829
+ return _asyncToGenerator(function* () {
18830
+ if (_this.statsStarted) {
18831
+ getLogger().info('StatsAnalyzer#startAnalyzer --> StatsAnalyzer already started.');
18832
+ return;
18785
18833
  }
18786
- });
18787
- this.statsResults.availableOutgoingBitrate = ((_this$successfulCandi2 = this.successfulCandidatePair) === null || _this$successfulCandi2 === void 0 ? void 0 : _this$successfulCandi2.availableOutgoingBitrate) || 0;
18788
- var videoSenderIndex = 0;
18789
- statsItem.report.forEach(result => {
18790
- if (types.includes(result.type)) {
18791
- if (type === 'video-send' && result.type === 'outbound-rtp') {
18792
- var newType = "video-send-layer-".concat(videoSenderIndex);
18793
- this.parseGetStatsResult(result, newType, isSender);
18794
- videoSenderIndex += 1;
18795
- this.statsResults[newType].direction = statsItem.currentDirection;
18796
- this.statsResults[newType].trackLabel = statsItem.localTrackLabel;
18797
- this.statsResults[newType].csi = statsItem.csi;
18798
- } else if (type === 'video-share-send' && result.type === 'outbound-rtp') {
18799
- this.shareVideoEncoderImplementation = result.encoderImplementation;
18800
- this.parseGetStatsResult(result, type, isSender);
18801
- } else {
18802
- this.parseGetStatsResult(result, type, isSender);
18803
- }
18834
+ _this.statsStarted = true;
18835
+ _this.mediaConnection = mediaConnection;
18836
+ yield _this.getStatsAndUpdate();
18837
+ _this.sendMqeData();
18838
+ _this.statsInterval = setInterval(() => {
18839
+ _this.getStatsAndUpdate();
18840
+ }, _this.config.analyzerInterval);
18841
+ _this.mqeInterval = setInterval(() => {
18842
+ _this.sendMqeData();
18843
+ }, MQE_INTERVAL);
18844
+ })();
18845
+ }
18846
+ stopAnalyzer() {
18847
+ var _this2 = this;
18848
+ return _asyncToGenerator(function* () {
18849
+ var sendOneLastMqe = _this2.mqeInterval && _this2.statsInterval;
18850
+ if (_this2.statsInterval) {
18851
+ clearInterval(_this2.statsInterval);
18852
+ _this2.statsInterval = undefined;
18853
+ }
18854
+ if (_this2.mqeInterval) {
18855
+ clearInterval(_this2.mqeInterval);
18856
+ _this2.mqeInterval = undefined;
18857
+ }
18858
+ _this2.statsStarted = false;
18859
+ if (sendOneLastMqe) {
18860
+ getLogger().info('StatsAnalyzer#stopAnalyzer --> Sending one last MQE...');
18861
+ yield _this2.getStatsAndUpdate();
18862
+ _this2.sendMqeData();
18863
+ _this2.mediaConnection = null;
18864
+ _this2.builders.forEach(builder => builder.reset());
18804
18865
  }
18805
- });
18806
- if (this.statsResults[type]) {
18807
- var _this$successfulCandi3, _this$statsResults;
18808
- this.statsResults[type].direction = statsItem.currentDirection;
18809
- this.statsResults[type].trackLabel = statsItem.localTrackLabel;
18810
- this.statsResults[type].csi = statsItem.csi;
18811
- this.extractAndSetLocalIpAddressInfoForDiagnostics((_this$successfulCandi3 = this.successfulCandidatePair) === null || _this$successfulCandi3 === void 0 ? void 0 : _this$successfulCandi3.localCandidateId, (_this$statsResults = this.statsResults) === null || _this$statsResults === void 0 ? void 0 : _this$statsResults.candidates);
18812
- this.successfulCandidatePair = {};
18813
- }
18866
+ })();
18814
18867
  }
18815
- parseAudioSource(result, type) {
18816
- if (!result) {
18817
- return;
18818
- }
18819
- if (type.includes('audio-send')) {
18820
- this.statsResults[type].send.audioLevel = result.audioLevel;
18821
- this.statsResults[type].send.totalAudioEnergy = result.totalAudioEnergy;
18822
- }
18823
- }
18824
- parseCodec(result, type) {
18825
- var sendRecvType = MediaDirection.RECEIVE;
18826
- var isAudioRecvType = type.includes('audio-recv') || type.includes('audio-share-recv');
18827
- if (isAudioRecvType) {
18828
- this.statsResults[type][sendRecvType].clockRate = result.clockRate;
18829
- }
18830
- }
18831
- compareLastStatsResult() {
18832
- if (this.lastStatsResults !== null && this.meetingMediaStatus) {
18833
- var getCurrentStatsTotals = (keyPrefix, value) => Object.keys(this.statsResults).filter(key => key.startsWith(keyPrefix)).reduce((prev, cur) => {
18834
- var _this$statsResults$cu;
18835
- return prev + (((_this$statsResults$cu = this.statsResults[cur]) === null || _this$statsResults$cu === void 0 ? void 0 : _this$statsResults$cu[keyPrefix.includes('send') ? 'send' : 'recv'][value]) || 0);
18836
- }, 0);
18837
- var getPreviousStatsTotals = (keyPrefix, value) => Object.keys(this.statsResults).filter(key => key.startsWith(keyPrefix)).reduce((prev, cur) => {
18838
- var _this$lastStatsResult, _this$lastStatsResult2;
18839
- return prev + (((_this$lastStatsResult = this.lastStatsResults) === null || _this$lastStatsResult === void 0 ? void 0 : (_this$lastStatsResult2 = _this$lastStatsResult[cur]) === null || _this$lastStatsResult2 === void 0 ? void 0 : _this$lastStatsResult2[keyPrefix.includes('send') ? 'send' : 'recv'][value]) || 0);
18840
- }, 0);
18841
- if (this.lastStatsResults['audio-send']) {
18842
- var currentStats = this.statsResults['audio-send'].send;
18843
- var previousStats = this.lastStatsResults['audio-send'].send;
18844
- if (this.meetingMediaStatus.expected.sendAudio && currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
18845
- getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent", currentStats.totalPacketsSent);
18846
- } else {
18847
- if (this.meetingMediaStatus.expected.sendAudio && currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
18848
- getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present", currentStats.totalAudioEnergy);
18868
+ getStatsAndUpdate() {
18869
+ var _this3 = this;
18870
+ return _asyncToGenerator(function* () {
18871
+ if (!_this3.mediaConnection) {
18872
+ return;
18873
+ }
18874
+ if (_this3.mediaConnection && _this3.mediaConnection.getConnectionState() === ConnectionState.Failed) {
18875
+ getLogger().info('StatsAnalyzer#getStatsAndUpdate --> Media connection is in failed state.');
18876
+ return;
18877
+ }
18878
+ getLogger().debug('StatsAnalyzer#getStatsAndUpdate --> Collecting stats...');
18879
+ var transceiverStats = yield _this3.mediaConnection.getTransceiverStats();
18880
+ _this3.mqeIntervalSessionReceiveAudioMainBuilder.updateCurrentIntervalStats(convertToStatsMap(transceiverStats.audio.receivers));
18881
+ _this3.mqeIntervalSessionReceiveAudioSlidesBuilder.updateCurrentIntervalStats(convertToStatsMap(transceiverStats.screenShareAudio.receivers));
18882
+ _this3.mqeIntervalSessionTransmitAudioMainBuilder.updateCurrentIntervalStats(convertToStatsMap(transceiverStats.audio.senders));
18883
+ _this3.mqeIntervalSessionTransmitAudioSlidesBuilder.updateCurrentIntervalStats(convertToStatsMap(transceiverStats.screenShareAudio.senders));
18884
+ _this3.mqeIntervalSessionReceiveVideoMainBuilder.updateCurrentIntervalStats(convertToStatsMap(transceiverStats.video.receivers));
18885
+ _this3.mqeIntervalSessionReceiveVideoSlidesBuilder.updateCurrentIntervalStats(convertToStatsMap(transceiverStats.screenShareVideo.receivers));
18886
+ _this3.mqeIntervalSessionTransmitVideoMainBuilder.updateCurrentIntervalStats(convertToStatsMap(transceiverStats.video.senders));
18887
+ _this3.mqeIntervalSessionTransmitVideoSlidesBuilder.updateCurrentIntervalStats(convertToStatsMap(transceiverStats.screenShareVideo.senders));
18888
+ _this3.monitorStats(transceiverStats);
18889
+ getLogger().debug('StatsAnalyzer#getStatsAndUpdate --> Finished collecting stats.');
18890
+ })();
18891
+ }
18892
+ monitorStats(transceiverStats) {
18893
+ var _this$meetingMediaSta3, _this$meetingMediaSta4, _this$meetingMediaSta5, _this$meetingMediaSta6, _this$meetingMediaSta7, _this$previousTransce, _this$previousTransce2, _this$previousTransce3, _this$previousTransce4, _this$previousTransce5, _this$previousTransce6, _this$previousTransce7, _this$previousTransce8, _this$previousTransce9, _this$previousTransce10, _this$previousTransce11, _this$previousTransce12;
18894
+ var emitNetworkQualityEvents = (mediaType, intervalStats) => {
18895
+ var roundTripTimeArray = getPropertyFromStatsByTypeInArray(intervalStats, 'remote-inbound-rtp', 'roundTripTime');
18896
+ var jitterArray = getPropertyFromStatsByTypeInArray(intervalStats, 'remote-inbound-rtp', 'jitter');
18897
+ var fractionLostArray = getPropertyFromStatsByTypeInArray(intervalStats, 'remote-inbound-rtp', 'fractionLost');
18898
+ this.networkQualityMonitor.determineUplinkNetworkQuality({
18899
+ mediaType,
18900
+ roundTripTime: mean(roundTripTimeArray),
18901
+ jitter: mean(jitterArray),
18902
+ fractionLost: mean(fractionLostArray)
18903
+ });
18904
+ };
18905
+ if ((_this$meetingMediaSta3 = this.meetingMediaStatus) !== null && _this$meetingMediaSta3 !== void 0 && _this$meetingMediaSta3.expected.sendAudio) {
18906
+ var current = convertToStatsMap(transceiverStats.audio.senders);
18907
+ if (this.previousTransceiverStats) {
18908
+ var previous = convertToStatsMap(this.previousTransceiverStats.audio.senders);
18909
+ var currentPacketsSent = getSumFromStatsByType(current, 'outbound-rtp', 'packetsSent');
18910
+ var previousPacketsSent = getSumFromStatsByType(previous, 'outbound-rtp', 'packetsSent');
18911
+ if (currentPacketsSent === previousPacketsSent) {
18912
+ getLogger().info("StatsAnalyzer#monitorStats --> No audio packets sent, last packets sent count: ".concat(currentPacketsSent, "."));
18913
+ }
18914
+ var totalAudioEnergyExists = getPropertyFromStatsByType(current, 'media-source', 'totalAudioEnergy') !== undefined;
18915
+ if (totalAudioEnergyExists) {
18916
+ var currentTotalAudioEnergy = getSumFromStatsByType(current, 'media-source', 'totalAudioEnergy');
18917
+ var previousTotalAudioEnergy = getSumFromStatsByType(previous, 'media-source', 'totalAudioEnergy');
18918
+ if (currentTotalAudioEnergy === previousTotalAudioEnergy) {
18919
+ getLogger().info("StatsAnalyzer#monitorStats --> No audio energy, last total audio energy: ".concat(currentTotalAudioEnergy, "."));
18849
18920
  }
18850
- if (this.meetingMediaStatus.expected.sendAudio && currentStats.audioLevel === 0) {
18851
- getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user");
18921
+ }
18922
+ var audioLevelExists = getPropertyFromStatsByType(current, 'media-source', 'audioLevel') !== undefined;
18923
+ if (audioLevelExists) {
18924
+ var currentAudioLevel = getSumFromStatsByType(current, 'media-source', 'audioLevel');
18925
+ if (currentAudioLevel === 0) {
18926
+ getLogger().info("StatsAnalyzer#monitorStats --> Audio level is 0.");
18852
18927
  }
18853
18928
  }
18854
- this.emitStartStopEvents('audio', previousStats.totalPacketsSent, currentStats.totalPacketsSent, true);
18855
- }
18856
- var currentAudioPacketsReceived = getCurrentStatsTotals('audio-recv', 'totalPacketsReceived');
18857
- var previousAudioPacketsReceived = getPreviousStatsTotals('audio-recv', 'totalPacketsReceived');
18858
- this.emitStartStopEvents('audio', previousAudioPacketsReceived, currentAudioPacketsReceived, false);
18859
- var currentTotalPacketsSent = getCurrentStatsTotals('video-send', 'totalPacketsSent');
18860
- var previousTotalPacketsSent = getPreviousStatsTotals('video-send', 'totalPacketsSent');
18861
- var currentFramesEncoded = getCurrentStatsTotals('video-send', 'framesEncoded');
18862
- var previousFramesEncoded = getPreviousStatsTotals('video-send', 'framesEncoded');
18863
- var currentFramesSent = getCurrentStatsTotals('video-send', 'framesSent');
18864
- var previousFramesSent = getPreviousStatsTotals('video-send', 'framesSent');
18865
- var doesVideoSendExist = Object.keys(this.lastStatsResults).some(item => item.includes('video-send'));
18866
- if (doesVideoSendExist) {
18867
- if (this.meetingMediaStatus.expected.sendVideo && (currentTotalPacketsSent === previousTotalPacketsSent || currentTotalPacketsSent === 0)) {
18868
- getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent", currentTotalPacketsSent);
18869
- } else {
18870
- if (this.meetingMediaStatus.expected.sendVideo && (currentFramesEncoded === previousFramesEncoded || currentFramesEncoded === 0)) {
18871
- getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded", currentFramesEncoded);
18929
+ }
18930
+ emitNetworkQualityEvents('audio', current);
18931
+ }
18932
+ if ((_this$meetingMediaSta4 = this.meetingMediaStatus) !== null && _this$meetingMediaSta4 !== void 0 && _this$meetingMediaSta4.expected.sendVideo) {
18933
+ var _current = convertToStatsMap(transceiverStats.video.senders);
18934
+ if (this.previousTransceiverStats) {
18935
+ var _previous = convertToStatsMap(this.previousTransceiverStats.video.senders);
18936
+ var _currentPacketsSent = getSumFromStatsByType(_current, 'outbound-rtp', 'packetsSent');
18937
+ var _previousPacketsSent = getSumFromStatsByType(_previous, 'outbound-rtp', 'packetsSent');
18938
+ if (_currentPacketsSent === _previousPacketsSent) {
18939
+ getLogger().info("StatsAnalyzer#monitorStats --> No video packets sent, last packets sent count: ".concat(_currentPacketsSent, "."));
18940
+ }
18941
+ var currentFramesEncoded = getSumFromStatsByType(_current, 'outbound-rtp', 'framesEncoded');
18942
+ var previousFramesEncoded = getSumFromStatsByType(_previous, 'outbound-rtp', 'framesEncoded');
18943
+ if (currentFramesEncoded === previousFramesEncoded) {
18944
+ getLogger().info("StatsAnalyzer#monitorStats --> No video frames encoded, last frames encoded count: ".concat(currentFramesEncoded, "."));
18945
+ }
18946
+ var currentFramesSent = getSumFromStatsByType(_current, 'outbound-rtp', 'framesSent');
18947
+ var previousFramesSent = getSumFromStatsByType(_previous, 'outbound-rtp', 'framesSent');
18948
+ if (currentFramesSent === previousFramesSent) {
18949
+ getLogger().info("StatsAnalyzer#monitorStats --> No video frames sent, last frames sent count: ".concat(currentFramesSent, "."));
18950
+ }
18951
+ }
18952
+ emitNetworkQualityEvents('video', _current);
18953
+ }
18954
+ if ((_this$meetingMediaSta5 = this.meetingMediaStatus) !== null && _this$meetingMediaSta5 !== void 0 && _this$meetingMediaSta5.expected.receiveVideo) {
18955
+ var _current2 = convertToStatsMap(transceiverStats.video.receivers);
18956
+ if (this.previousTransceiverStats) {
18957
+ var currentSourceStateArray = getPropertyFromStatsByTypeInArray(_current2, 'inbound-rtp', 'sourceState');
18958
+ if (currentSourceStateArray.includes('live')) {
18959
+ var _previous2 = convertToStatsMap(this.previousTransceiverStats.video.receivers);
18960
+ var currentPacketsReceived = getSumFromStatsByType(_current2, 'inbound-rtp', 'packetsReceived');
18961
+ var previousPacketsReceived = getSumFromStatsByType(_previous2, 'inbound-rtp', 'packetsReceived');
18962
+ if (currentPacketsReceived === previousPacketsReceived) {
18963
+ getLogger().info("StatsAnalyzer#monitorStats --> No video packets received, last packets received count: ".concat(currentPacketsReceived, "."));
18872
18964
  }
18873
- if (this.meetingMediaStatus.expected.sendVideo && (currentFramesSent === previousFramesSent || currentFramesSent === 0)) {
18874
- getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent", currentFramesSent);
18965
+ var currentFramesDecoded = getSumFromStatsByType(_current2, 'inbound-rtp', 'framesDecoded');
18966
+ var previousFramesDecoded = getSumFromStatsByType(_previous2, 'inbound-rtp', 'framesDecoded');
18967
+ if (currentFramesDecoded === previousFramesDecoded) {
18968
+ getLogger().info("StatsAnalyzer#monitorStats --> No video frames decoded, last frames decoded count: ".concat(currentFramesDecoded, "."));
18875
18969
  }
18876
- }
18877
- this.emitStartStopEvents('video', previousFramesSent, currentFramesSent, true);
18878
- }
18879
- var currentVideoFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');
18880
- var previousVideoFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');
18881
- this.emitStartStopEvents('video', previousVideoFramesDecoded, currentVideoFramesDecoded, false);
18882
- if (this.lastStatsResults['video-share-send']) {
18883
- var _currentStats = this.statsResults['video-share-send'].send;
18884
- var _previousStats = this.lastStatsResults['video-share-send'].send;
18885
- if (this.meetingMediaStatus.expected.sendShare && (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0)) {
18886
- getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent", _currentStats.totalPacketsSent);
18887
- } else {
18888
- if (this.meetingMediaStatus.expected.sendShare && (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0)) {
18889
- getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded", _currentStats.framesEncoded);
18970
+ var currentFramesReceived = getSumFromStatsByType(_current2, 'inbound-rtp', 'framesReceived');
18971
+ var previousFramesReceived = getSumFromStatsByType(_previous2, 'inbound-rtp', 'framesReceived');
18972
+ if (currentFramesReceived === previousFramesReceived) {
18973
+ getLogger().info("StatsAnalyzer#monitorStats --> No video frames received, last frames received count: ".concat(currentFramesReceived, "."));
18890
18974
  }
18891
- if (this.meetingMediaStatus.expected.sendShare && (this.statsResults['video-share-send'].send.framesSent === this.lastStatsResults['video-share-send'].send.framesSent || this.statsResults['video-share-send'].send.framesSent === 0)) {
18892
- getLogger().info("StatsAnalyzer:index#compareLastStatsResult --> No share frames sent", this.statsResults['video-share-send'].send.framesSent);
18975
+ var currentFramesDropped = getSumFromStatsByType(_current2, 'inbound-rtp', 'framesDropped');
18976
+ var previousFramesDropped = getSumFromStatsByType(_previous2, 'inbound-rtp', 'framesDropped');
18977
+ if (currentFramesDropped - previousFramesDropped > 10) {
18978
+ getLogger().info("StatsAnalyzer#monitorStats --> Too many video frames dropped, total frames dropped count: ".concat(currentFramesDropped, "."));
18893
18979
  }
18894
18980
  }
18895
- this.emitStartStopEvents('share', _previousStats.framesSent, _currentStats.framesSent, true);
18896
18981
  }
18897
- var currentShareFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');
18898
- var previousShareFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');
18899
- this.emitStartStopEvents('share', previousShareFramesDecoded, currentShareFramesDecoded, false);
18900
- } else {
18901
- getLogger().info('StatsAnalyzer:index#compareLastStatsResult --> No last stats results to compare, or meetingMediaStatus is not set');
18902
- }
18903
- }
18904
- getStatsAndParse() {
18905
- if (!this.mediaConnection) {
18906
- return Promise.resolve();
18907
18982
  }
18908
- if (this.mediaConnection && this.mediaConnection.getConnectionState() === ConnectionState.Failed) {
18909
- getLogger().trace('StatsAnalyzer:index#getStatsAndParse --> media connection is in failed state');
18910
- return Promise.resolve();
18911
- }
18912
- getLogger().trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');
18913
- return this.mediaConnection.getTransceiverStats().then(transceiverStats => {
18914
- transceiverStats.video.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, "video-recv-".concat(i), false));
18915
- transceiverStats.audio.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, "audio-recv-".concat(i), false));
18916
- transceiverStats.screenShareVideo.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, "video-share-recv-".concat(i), false));
18917
- transceiverStats.screenShareAudio.receivers.forEach((receiver, i) => this.filterAndParseGetStatsResults(receiver, "audio-share-recv-".concat(i), false));
18918
- transceiverStats.video.senders.forEach((sender, i) => {
18919
- if (i > 0) {
18920
- throw new Error('Stats Analyzer does not support multiple senders.');
18921
- }
18922
- this.filterAndParseGetStatsResults(sender, 'video-send', true);
18923
- });
18924
- transceiverStats.audio.senders.forEach((sender, i) => {
18925
- if (i > 0) {
18926
- throw new Error('Stats Analyzer does not support multiple senders.');
18983
+ if ((_this$meetingMediaSta6 = this.meetingMediaStatus) !== null && _this$meetingMediaSta6 !== void 0 && _this$meetingMediaSta6.expected.sendShare) {
18984
+ var _current3 = convertToStatsMap(transceiverStats.screenShareVideo.senders);
18985
+ if (this.previousTransceiverStats) {
18986
+ var _previous3 = convertToStatsMap(this.previousTransceiverStats.screenShareVideo.senders);
18987
+ var _currentPacketsSent2 = getSumFromStatsByType(_current3, 'outbound-rtp', 'packetsSent');
18988
+ var _previousPacketsSent2 = getSumFromStatsByType(_previous3, 'outbound-rtp', 'packetsSent');
18989
+ if (_currentPacketsSent2 === _previousPacketsSent2) {
18990
+ getLogger().info("StatsAnalyzer#monitorStats --> No share packets sent, last packets sent count: ".concat(_currentPacketsSent2, "."));
18927
18991
  }
18928
- this.filterAndParseGetStatsResults(sender, 'audio-send', true);
18929
- });
18930
- transceiverStats.screenShareVideo.senders.forEach((sender, i) => {
18931
- if (i > 0) {
18932
- throw new Error('Stats Analyzer does not support multiple senders.');
18992
+ var _currentFramesEncoded = getSumFromStatsByType(_current3, 'outbound-rtp', 'framesEncoded');
18993
+ var _previousFramesEncoded = getSumFromStatsByType(_previous3, 'outbound-rtp', 'framesEncoded');
18994
+ if (_currentFramesEncoded === _previousFramesEncoded) {
18995
+ getLogger().info("StatsAnalyzer#monitorStats --> No share frames encoded, last frames encoded count: ".concat(_currentFramesEncoded, "."));
18933
18996
  }
18934
- this.filterAndParseGetStatsResults(sender, 'video-share-send', true);
18935
- });
18936
- transceiverStats.screenShareAudio.senders.forEach((sender, i) => {
18937
- if (i > 0) {
18938
- throw new Error('Stats Analyzer does not support multiple senders.');
18939
- }
18940
- this.filterAndParseGetStatsResults(sender, 'audio-share-send', true);
18941
- });
18942
- this.compareLastStatsResult();
18943
- this.lastStatsResults = JSON.parse(JSON.stringify(this.statsResults));
18944
- getLogger().trace('StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats');
18945
- });
18946
- }
18947
- processOutboundRTPResult(result, mediaType) {
18948
- var sendrecvType = MediaDirection.SEND;
18949
- if (result.bytesSent) {
18950
- var _this$statsResults$me, _this$statsResults$me2;
18951
- var kilobytes = 0;
18952
- if (result.frameWidth && result.frameHeight) {
18953
- this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
18954
- this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
18955
- this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;
18956
- this.statsResults[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
18957
- }
18958
- this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
18959
- this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
18960
- this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
18961
- this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent;
18962
- this.statsResults[mediaType][sendrecvType].totalKeyFramesEncoded = result.keyFramesEncoded;
18963
- this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
18964
- this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;
18965
- this.statsResults[mediaType][sendrecvType].totalPacketsSent = result.packetsSent;
18966
- this.statsResults[mediaType][sendrecvType].totalFirCount = result.firCount;
18967
- this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;
18968
- this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
18969
- this.statsResults[mediaType][sendrecvType].encoderImplementation = result.encoderImplementation;
18970
- this.statsResults[mediaType][sendrecvType].qualityLimitationReason = result.qualityLimitationReason;
18971
- this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges = result.qualityLimitationResolutionChanges;
18972
- this.statsResults[mediaType][sendrecvType].totalRtxPacketsSent = result.retransmittedPacketsSent;
18973
- this.statsResults[mediaType][sendrecvType].totalRtxBytesSent = result.retransmittedBytesSent;
18974
- this.statsResults[mediaType][sendrecvType].totalBytesSent = result.bytesSent;
18975
- this.statsResults[mediaType][sendrecvType].headerBytesSent = result.headerBytesSent;
18976
- this.statsResults[mediaType][sendrecvType].retransmittedBytesSent = result.retransmittedBytesSent;
18977
- this.statsResults[mediaType][sendrecvType].isRequested = result.isRequested;
18978
- this.statsResults[mediaType][sendrecvType].lastRequestedUpdateTimestamp = result.lastRequestedUpdateTimestamp;
18979
- this.statsResults[mediaType][sendrecvType].requestedBitrate = result.requestedBitrate;
18980
- this.statsResults[mediaType][sendrecvType].requestedFrameSize = result.requestedFrameSize;
18981
- if (result.effect) {
18982
- this.statsResults[mediaType][sendrecvType].effect = result.effect;
18983
- }
18984
- var meanRtpPacketSize = Math.round(result.bytesSent / result.packetsSent);
18985
- (_this$statsResults$me2 = (_this$statsResults$me = this.statsResults[mediaType][sendrecvType]).meanRtpPacketSize) !== null && _this$statsResults$me2 !== void 0 ? _this$statsResults$me2 : _this$statsResults$me.meanRtpPacketSize = [];
18986
- this.statsResults[mediaType][sendrecvType].meanRtpPacketSize.push(meanRtpPacketSize);
18987
- }
18988
- }
18989
- processInboundRTPResult(result, mediaType) {
18990
- var sendrecvType = MediaDirection.RECEIVE;
18991
- if (result.bytesReceived) {
18992
- var _this$statsResults$me3, _this$statsResults$me4;
18993
- var kilobytes = 0;
18994
- var sourceState = result.sourceState;
18995
- var midAndCsi = "mid: \"".concat(result.mid || '', "\"").concat(result.csi ? " and csi: ".concat(result.csi) : '');
18996
- var bytes = result.bytesReceived - this.statsResults[mediaType][sendrecvType].totalBytesReceived;
18997
- kilobytes = bytes / 1024;
18998
- this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
18999
- var currentPacketsLost = result.packetsLost - this.statsResults[mediaType][sendrecvType].totalPacketsLost;
19000
- if (currentPacketsLost < 0) {
19001
- currentPacketsLost = 0;
19002
- }
19003
- var packetsReceivedDiff = result.packetsReceived - this.statsResults[mediaType][sendrecvType].totalPacketsReceived;
19004
- this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
19005
- if (packetsReceivedDiff === 0) {
19006
- if (sourceState === 'live') {
19007
- getLogger().info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for mediaType: ".concat(mediaType, ", receive slot ").concat(midAndCsi, ". Total packets received on slot: "), result.packetsReceived);
18997
+ var _currentFramesSent = getSumFromStatsByType(_current3, 'outbound-rtp', 'framesSent');
18998
+ var _previousFramesSent = getSumFromStatsByType(_previous3, 'outbound-rtp', 'framesSent');
18999
+ if (_currentFramesSent === _previousFramesSent) {
19000
+ getLogger().info("StatsAnalyzer#monitorStats --> No share frames sent, last frames sent count: ".concat(_currentFramesSent, "."));
19008
19001
  }
19009
19002
  }
19010
- if (mediaType.startsWith('video') || mediaType.startsWith('share')) {
19011
- var videoFramesReceivedDiff = result.framesReceived - this.statsResults[mediaType][sendrecvType].framesReceived;
19012
- if (videoFramesReceivedDiff === 0) {
19013
- if (sourceState === 'live') {
19014
- getLogger().info("StatsAnalyzer:index#processInboundRTPResult --> No frames received for mediaType: ".concat(mediaType, ", receive slot ").concat(midAndCsi, ". Total frames received on slot: "), result.framesReceived);
19003
+ emitNetworkQualityEvents('share', _current3);
19004
+ }
19005
+ if ((_this$meetingMediaSta7 = this.meetingMediaStatus) !== null && _this$meetingMediaSta7 !== void 0 && _this$meetingMediaSta7.expected.receiveShare) {
19006
+ var _current4 = convertToStatsMap(transceiverStats.screenShareVideo.receivers);
19007
+ if (this.previousTransceiverStats) {
19008
+ var _currentSourceStateArray = getPropertyFromStatsByTypeInArray(_current4, 'inbound-rtp', 'sourceState');
19009
+ if (_currentSourceStateArray.includes('live')) {
19010
+ var _previous4 = convertToStatsMap(this.previousTransceiverStats.screenShareVideo.receivers);
19011
+ var _currentPacketsReceived = getSumFromStatsByType(_current4, 'inbound-rtp', 'packetsReceived');
19012
+ var _previousPacketsReceived = getSumFromStatsByType(_previous4, 'inbound-rtp', 'packetsReceived');
19013
+ if (_currentPacketsReceived === _previousPacketsReceived) {
19014
+ getLogger().info("StatsAnalyzer#monitorStats --> No share packets received, last packets received count: ".concat(_currentPacketsReceived, "."));
19015
19015
  }
19016
- }
19017
- var videoFramesDecodedDiff = result.framesDecoded - this.statsResults[mediaType][sendrecvType].framesDecoded;
19018
- if (videoFramesDecodedDiff === 0) {
19019
- if (sourceState === 'live') {
19020
- getLogger().info("StatsAnalyzer:index#processInboundRTPResult --> No frames decoded for mediaType: ".concat(mediaType, ", receive slot ").concat(midAndCsi, ". Total frames decoded on slot: "), result.framesDecoded);
19016
+ var _currentFramesDecoded = getSumFromStatsByType(_current4, 'inbound-rtp', 'framesDecoded');
19017
+ var _previousFramesDecoded = getSumFromStatsByType(_previous4, 'inbound-rtp', 'framesDecoded');
19018
+ if (_currentFramesDecoded === _previousFramesDecoded) {
19019
+ getLogger().info("StatsAnalyzer#monitorStats --> No share frames decoded, last frames decoded count: ".concat(_currentFramesDecoded, "."));
19021
19020
  }
19022
- }
19023
- var videoFramesDroppedDiff = result.framesDropped - this.statsResults[mediaType][sendrecvType].framesDropped;
19024
- if (videoFramesDroppedDiff > 10) {
19025
- if (sourceState === 'live') {
19026
- getLogger().info("StatsAnalyzer:index#processInboundRTPResult --> Frames dropped for mediaType: ".concat(mediaType, ", receive slot ").concat(midAndCsi, ". Total frames dropped on slot: "), result.framesDropped);
19021
+ var _currentFramesReceived = getSumFromStatsByType(_current4, 'inbound-rtp', 'framesReceived');
19022
+ var _previousFramesReceived = getSumFromStatsByType(_previous4, 'inbound-rtp', 'framesReceived');
19023
+ if (_currentFramesReceived === _previousFramesReceived) {
19024
+ getLogger().info("StatsAnalyzer#monitorStats --> No share frames received, last frames received count: ".concat(_currentFramesReceived, "."));
19025
+ }
19026
+ var _currentFramesDropped = getSumFromStatsByType(_current4, 'inbound-rtp', 'framesDropped');
19027
+ var _previousFramesDropped = getSumFromStatsByType(_previous4, 'inbound-rtp', 'framesDropped');
19028
+ if (_currentFramesDropped - _previousFramesDropped > 10) {
19029
+ getLogger().info("StatsAnalyzer#monitorStats --> Too many share frames dropped, total frames dropped count: ".concat(_currentFramesDropped, "."));
19027
19030
  }
19028
19031
  }
19029
19032
  }
19030
- if (mediaType.startsWith('video-recv')) {
19031
- this.statsResults[mediaType][sendrecvType].isActiveSpeaker = result.isActiveSpeaker;
19032
- this.statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp = result.lastActiveSpeakerUpdateTimestamp;
19033
- }
19034
- this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = currentPacketsLost > 0 ? currentPacketsLost / (packetsReceivedDiff + currentPacketsLost) : 0;
19035
- if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
19036
- getLogger().info("StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ".concat(midAndCsi), this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
19037
- }
19038
- if (result.frameWidth && result.frameHeight) {
19039
- this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
19040
- this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
19041
- this.statsResults[mediaType][sendrecvType].framesReceived = result.framesReceived;
19042
- }
19043
- if (result.packetsLost) {
19044
- this.statsResults[mediaType][sendrecvType].totalPacketsLost = result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;
19045
- } else {
19046
- this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;
19047
- }
19048
- this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
19049
- this.statsResults[mediaType][sendrecvType].requestedBitrate = result.requestedBitrate;
19050
- this.statsResults[mediaType][sendrecvType].requestedFrameSize = result.requestedFrameSize;
19051
- this.statsResults[mediaType][sendrecvType].requestedFrameRate = result.requestedFrameRate;
19052
- this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
19053
- this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;
19054
- this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
19055
- this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;
19056
- this.statsResults[mediaType][sendrecvType].framesDropped = result.framesDropped;
19057
- this.statsResults[mediaType][sendrecvType].decoderImplementation = result.decoderImplementation;
19058
- this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
19059
- this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;
19060
- this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;
19061
- this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;
19062
- this.statsResults[mediaType][sendrecvType].headerBytesReceived = result.headerBytesReceived;
19063
- this.statsResults[mediaType][sendrecvType].totalRtxPacketsReceived = result.retransmittedPacketsReceived;
19064
- this.statsResults[mediaType][sendrecvType].totalRtxBytesReceived = result.retransmittedBytesReceived;
19065
- this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);
19066
- this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;
19067
- this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;
19068
- this.statsResults[mediaType][sendrecvType].totalSamplesReceived = result.totalSamplesReceived || 0;
19069
- this.statsResults[mediaType][sendrecvType].totalSamplesDecoded = result.totalSamplesDecoded || 0;
19070
- this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;
19071
- this.statsResults[mediaType][sendrecvType].silentConcealedSamples = result.silentConcealedSamples || 0;
19072
- this.statsResults[mediaType][sendrecvType].isRequested = result.isRequested;
19073
- this.statsResults[mediaType][sendrecvType].lastRequestedUpdateTimestamp = result.lastRequestedUpdateTimestamp;
19074
- var meanRtpPacketSize = Math.round(result.bytesReceived / result.packetsReceived);
19075
- (_this$statsResults$me4 = (_this$statsResults$me3 = this.statsResults[mediaType][sendrecvType]).meanRtpPacketSize) !== null && _this$statsResults$me4 !== void 0 ? _this$statsResults$me4 : _this$statsResults$me3.meanRtpPacketSize = [];
19076
- this.statsResults[mediaType][sendrecvType].meanRtpPacketSize.push(meanRtpPacketSize);
19077
- }
19078
- }
19079
- compareSentAndReceived(result, type) {
19080
- if (!type || !this.statsResults[type].send) {
19081
- return;
19082
- }
19083
- var mediaType = type;
19084
- var currentPacketLoss = result.packetsLost - this.statsResults[mediaType].send.totalPacketsLostOnReceiver;
19085
- this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;
19086
- this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
19087
- this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);
19088
- this.statsResults[mediaType].send.meanRoundTripTime.push(result.roundTripTime);
19089
- this.statsResults[mediaType].send.timestamp = result.timestamp;
19090
- this.statsResults[mediaType].send.ssrc = result.ssrc;
19091
- this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;
19092
- this.statsResults[mediaType].send.overAllPacketLossRatio = this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0 ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver / this.statsResults[mediaType].send.totalPacketsSent : 0;
19093
- this.statsResults[mediaType].send.currentPacketLossRatio = this.statsResults[mediaType].send.packetsLostOnReceiver > 0 ? this.statsResults[mediaType].send.packetsLostOnReceiver * 100 / (this.statsResults[mediaType].send.packetsSent + this.statsResults[mediaType].send.packetsLostOnReceiver) : 0;
19094
- if (this.statsResults[mediaType].send.maxPacketLossRatio < this.statsResults[mediaType].send.currentPacketLossRatio) {
19095
- this.statsResults[mediaType].send.maxPacketLossRatio = this.statsResults[mediaType].send.currentPacketLossRatio;
19096
- }
19097
- if (result.type === 'remote-inbound-rtp') {
19098
- this.networkQualityMonitor.determineUplinkNetworkQuality({
19099
- mediaType,
19100
- remoteRtpResults: result,
19101
- statsAnalyzerCurrentStats: this.statsResults
19102
- });
19103
19033
  }
19034
+ this.emitStartStopEvents('audio', getSumFromStatsByType(convertToStatsMap((_this$previousTransce = (_this$previousTransce2 = this.previousTransceiverStats) === null || _this$previousTransce2 === void 0 ? void 0 : _this$previousTransce2.audio.senders) !== null && _this$previousTransce !== void 0 ? _this$previousTransce : []), 'outbound-rtp', 'packetsSent'), getSumFromStatsByType(convertToStatsMap(transceiverStats.audio.senders), 'outbound-rtp', 'packetsSent'), true);
19035
+ this.emitStartStopEvents('audio', getSumFromStatsByType(convertToStatsMap((_this$previousTransce3 = (_this$previousTransce4 = this.previousTransceiverStats) === null || _this$previousTransce4 === void 0 ? void 0 : _this$previousTransce4.audio.receivers) !== null && _this$previousTransce3 !== void 0 ? _this$previousTransce3 : []), 'inbound-rtp', 'packetsReceived'), getSumFromStatsByType(convertToStatsMap(transceiverStats.audio.receivers), 'inbound-rtp', 'packetsReceived'), false);
19036
+ this.emitStartStopEvents('video', getSumFromStatsByType(convertToStatsMap((_this$previousTransce5 = (_this$previousTransce6 = this.previousTransceiverStats) === null || _this$previousTransce6 === void 0 ? void 0 : _this$previousTransce6.video.senders) !== null && _this$previousTransce5 !== void 0 ? _this$previousTransce5 : []), 'outbound-rtp', 'framesSent'), getSumFromStatsByType(convertToStatsMap(transceiverStats.video.senders), 'outbound-rtp', 'framesSent'), true);
19037
+ this.emitStartStopEvents('video', getSumFromStatsByType(convertToStatsMap((_this$previousTransce7 = (_this$previousTransce8 = this.previousTransceiverStats) === null || _this$previousTransce8 === void 0 ? void 0 : _this$previousTransce8.video.receivers) !== null && _this$previousTransce7 !== void 0 ? _this$previousTransce7 : []), 'inbound-rtp', 'framesDecoded'), getSumFromStatsByType(convertToStatsMap(transceiverStats.video.receivers), 'inbound-rtp', 'framesDecoded'), false);
19038
+ this.emitStartStopEvents('share', getSumFromStatsByType(convertToStatsMap((_this$previousTransce9 = (_this$previousTransce10 = this.previousTransceiverStats) === null || _this$previousTransce10 === void 0 ? void 0 : _this$previousTransce10.screenShareVideo.senders) !== null && _this$previousTransce9 !== void 0 ? _this$previousTransce9 : []), 'outbound-rtp', 'framesSent'), getSumFromStatsByType(convertToStatsMap(transceiverStats.screenShareVideo.senders), 'outbound-rtp', 'framesSent'), true);
19039
+ this.emitStartStopEvents('share', getSumFromStatsByType(convertToStatsMap((_this$previousTransce11 = (_this$previousTransce12 = this.previousTransceiverStats) === null || _this$previousTransce12 === void 0 ? void 0 : _this$previousTransce12.screenShareVideo.receivers) !== null && _this$previousTransce11 !== void 0 ? _this$previousTransce11 : []), 'inbound-rtp', 'framesDecoded'), getSumFromStatsByType(convertToStatsMap(transceiverStats.screenShareVideo.receivers), 'inbound-rtp', 'framesDecoded'), false);
19040
+ this.previousTransceiverStats = transceiverStats;
19104
19041
  }
19105
19042
  }
19106
19043
 
@@ -19140,14 +19077,13 @@ class NetworkQualityMonitor extends EventEmitter$5 {
19140
19077
  determineUplinkNetworkQuality(_ref) {
19141
19078
  var {
19142
19079
  mediaType,
19143
- remoteRtpResults,
19144
- statsAnalyzerCurrentStats
19080
+ roundTripTime,
19081
+ jitter,
19082
+ fractionLost
19145
19083
  } = _ref;
19146
- var roundTripTimeInMilliseconds = remoteRtpResults.roundTripTime * 1000;
19147
- var jitterInMilliseconds = remoteRtpResults.jitter * 1000;
19148
- var {
19149
- currentPacketLossRatio
19150
- } = statsAnalyzerCurrentStats[mediaType].send;
19084
+ var roundTripTimeInMilliseconds = roundTripTime * 1000;
19085
+ var jitterInMilliseconds = jitter * 1000;
19086
+ var percentLost = fractionLost * 100;
19151
19087
  var {
19152
19088
  JITTER,
19153
19089
  PACKETLOSS,
@@ -19157,7 +19093,7 @@ class NetworkQualityMonitor extends EventEmitter$5 {
19157
19093
  UPLINK
19158
19094
  } = this.frequencyTypes;
19159
19095
  var determinePacketLoss = () => {
19160
- if (this.config.videoPacketLossRatioThreshold !== undefined && currentPacketLossRatio > this.config.videoPacketLossRatioThreshold) {
19096
+ if (this.config.videoPacketLossRatioThreshold !== undefined && percentLost > this.config.videoPacketLossRatioThreshold) {
19161
19097
  this.networkQualityScore = 0;
19162
19098
  return false;
19163
19099
  }
@@ -19184,15 +19120,15 @@ class NetworkQualityMonitor extends EventEmitter$5 {
19184
19120
  }
19185
19121
  this.networkQualityStatus[UPLINK][mediaType][PACKETLOSS] = {
19186
19122
  acceptable: determinePacketLoss(),
19187
- value: getValueOrNull(currentPacketLossRatio)
19123
+ value: getValueOrNull(percentLost)
19188
19124
  };
19189
19125
  this.networkQualityStatus[UPLINK][mediaType][LATENCY] = {
19190
19126
  acceptable: determineLatency(),
19191
- value: getValueOrNull(remoteRtpResults.roundTripTime)
19127
+ value: getValueOrNull(roundTripTime)
19192
19128
  };
19193
19129
  this.networkQualityStatus[UPLINK][mediaType][JITTER] = {
19194
19130
  acceptable: determineJitter(),
19195
- value: getValueOrNull(remoteRtpResults.jitter)
19131
+ value: getValueOrNull(jitter)
19196
19132
  };
19197
19133
  this.updateNetworkQualityStatus(mediaType);
19198
19134
  }