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