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