@webex/plugin-meetings 3.0.0-stream-classes.4 → 3.0.0-test.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -0
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/common/errors/no-meeting-info.js +51 -0
- package/dist/common/errors/no-meeting-info.js.map +1 -0
- package/dist/common/errors/reclaim-host-role-errors.js +158 -0
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
- package/dist/common/errors/webex-errors.js +23 -3
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/logs/request.js +5 -1
- package/dist/common/logs/request.js.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +69 -9
- package/dist/constants.js.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.js +15 -0
- package/dist/interceptors/index.js.map +1 -0
- package/dist/interceptors/locusRetry.js +93 -0
- package/dist/interceptors/locusRetry.js.map +1 -0
- package/dist/interpretation/index.js +16 -2
- package/dist/interpretation/index.js.map +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/index.js +40 -11
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +15 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +42 -21
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/media/index.js +10 -6
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +13 -3
- package/dist/media/properties.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +135 -330
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +4 -0
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2187 -1074
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +37 -25
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +34 -19
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +71 -0
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/index.js +48 -23
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +25 -4
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/utilv2.js +1 -1
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +17 -0
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +142 -57
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/util.js +2 -6
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +9 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +11 -0
- package/dist/member/util.js.map +1 -1
- package/dist/members/index.js +17 -1
- package/dist/members/index.js.map +1 -1
- package/dist/members/types.js.map +1 -1
- package/dist/members/util.js +15 -4
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +15 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +1 -1
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +16 -2
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +222 -73
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +22 -0
- package/dist/multistream/sendSlotManager.js.map +1 -1
- package/dist/reachability/clusterReachability.js +356 -0
- package/dist/reachability/clusterReachability.js.map +1 -0
- package/dist/reachability/index.js +262 -432
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +1 -1
- package/dist/reachability/request.js.map +1 -1
- package/dist/reachability/util.js +29 -0
- package/dist/reachability/util.js.map +1 -0
- package/dist/reconnection-manager/index.js +113 -96
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/index.js +57 -25
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +5 -13
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +173 -81
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/index.js +68 -6
- package/dist/rtcMetrics/index.js.map +1 -1
- package/dist/statsAnalyzer/index.js +338 -289
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +296 -156
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
- package/dist/types/common/errors/webex-errors.d.ts +13 -1
- package/dist/types/common/logs/request.d.ts +2 -0
- package/dist/types/config.d.ts +1 -1
- package/dist/types/constants.d.ts +66 -13
- package/dist/types/index.d.ts +1 -1
- package/dist/types/interceptors/index.d.ts +2 -0
- package/dist/types/interceptors/locusRetry.d.ts +27 -0
- package/dist/types/locus-info/index.d.ts +1 -1
- package/dist/types/locus-info/parser.d.ts +3 -2
- package/dist/types/mediaQualityMetrics/config.d.ts +99 -223
- package/dist/types/meeting/in-meeting-actions.d.ts +4 -0
- package/dist/types/meeting/index.d.ts +285 -34
- package/dist/types/meeting/locusMediaRequest.d.ts +1 -2
- package/dist/types/meeting/muteState.d.ts +2 -8
- package/dist/types/meeting/request.d.ts +4 -1
- package/dist/types/meeting/util.d.ts +25 -1
- package/dist/types/meeting-info/index.d.ts +7 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +1 -0
- package/dist/types/meetings/collection.d.ts +9 -0
- package/dist/types/meetings/index.d.ts +42 -14
- package/dist/types/member/index.d.ts +1 -0
- package/dist/types/members/types.d.ts +1 -0
- package/dist/types/members/util.d.ts +5 -0
- package/dist/types/metrics/constants.d.ts +15 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +2 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +2 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +25 -1
- package/dist/types/multistream/sendSlotManager.d.ts +9 -0
- package/dist/types/reachability/clusterReachability.d.ts +109 -0
- package/dist/types/reachability/index.d.ts +59 -112
- package/dist/types/reachability/request.d.ts +1 -1
- package/dist/types/reachability/util.d.ts +8 -0
- package/dist/types/reconnection-manager/index.d.ts +10 -0
- package/dist/types/roap/index.d.ts +2 -1
- package/dist/types/roap/request.d.ts +2 -1
- package/dist/types/roap/turnDiscovery.d.ts +21 -4
- package/dist/types/rtcMetrics/index.d.ts +15 -1
- package/dist/types/statsAnalyzer/index.d.ts +28 -11
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +28 -4
- package/dist/types/webinar/collection.d.ts +16 -0
- package/dist/types/webinar/index.d.ts +5 -0
- package/dist/webinar/collection.js +44 -0
- package/dist/webinar/collection.js.map +1 -0
- package/dist/webinar/index.js +69 -0
- package/dist/webinar/index.js.map +1 -0
- package/package.json +3 -2
- package/src/common/errors/no-meeting-info.ts +24 -0
- package/src/common/errors/reclaim-host-role-errors.ts +134 -0
- package/src/common/errors/webex-errors.ts +19 -2
- package/src/common/logs/request.ts +5 -1
- package/src/config.ts +1 -1
- package/src/constants.ts +71 -6
- package/src/index.ts +5 -0
- package/src/interceptors/index.ts +3 -0
- package/src/interceptors/locusRetry.ts +67 -0
- package/src/interpretation/index.ts +18 -1
- package/src/locus-info/index.ts +52 -16
- package/src/locus-info/mediaSharesUtils.ts +16 -0
- package/src/locus-info/parser.ts +47 -21
- package/src/media/index.ts +8 -6
- package/src/media/properties.ts +17 -2
- package/src/mediaQualityMetrics/config.ts +103 -238
- package/src/meeting/in-meeting-actions.ts +8 -0
- package/src/meeting/index.ts +1510 -529
- package/src/meeting/muteState.ts +34 -20
- package/src/meeting/request.ts +19 -1
- package/src/meeting/util.ts +97 -0
- package/src/meeting-info/index.ts +47 -20
- package/src/meeting-info/meeting-info-v2.ts +27 -5
- package/src/meeting-info/utilv2.ts +1 -1
- package/src/meetings/collection.ts +13 -0
- package/src/meetings/index.ts +112 -31
- package/src/meetings/util.ts +2 -8
- package/src/member/index.ts +9 -0
- package/src/member/util.ts +14 -0
- package/src/members/index.ts +29 -2
- package/src/members/types.ts +1 -0
- package/src/members/util.ts +15 -1
- package/src/metrics/constants.ts +14 -0
- package/src/multistream/mediaRequestManager.ts +4 -1
- package/src/multistream/remoteMediaGroup.ts +19 -0
- package/src/multistream/remoteMediaManager.ts +141 -18
- package/src/multistream/sendSlotManager.ts +29 -0
- package/src/reachability/clusterReachability.ts +320 -0
- package/src/reachability/index.ts +221 -382
- package/src/reachability/request.ts +1 -1
- package/src/reachability/util.ts +24 -0
- package/src/reconnection-manager/index.ts +87 -83
- package/src/roap/index.ts +60 -24
- package/src/roap/request.ts +3 -16
- package/src/roap/turnDiscovery.ts +112 -39
- package/src/rtcMetrics/index.ts +71 -5
- package/src/statsAnalyzer/index.ts +430 -427
- package/src/statsAnalyzer/mqaUtil.ts +317 -168
- package/src/webinar/collection.ts +31 -0
- package/src/webinar/index.ts +62 -0
- package/test/integration/spec/converged-space-meetings.js +7 -7
- package/test/integration/spec/journey.js +86 -104
- package/test/integration/spec/space-meeting.js +9 -9
- package/test/unit/spec/interceptors/locusRetry.ts +131 -0
- package/test/unit/spec/interpretation/index.ts +36 -3
- package/test/unit/spec/locus-info/index.js +205 -12
- package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +10 -0
- package/test/unit/spec/locus-info/parser.js +54 -13
- package/test/unit/spec/media/index.ts +20 -4
- package/test/unit/spec/media/properties.ts +2 -2
- package/test/unit/spec/meeting/in-meeting-actions.ts +4 -0
- package/test/unit/spec/meeting/index.js +4027 -1075
- package/test/unit/spec/meeting/muteState.js +219 -67
- package/test/unit/spec/meeting/request.js +63 -12
- package/test/unit/spec/meeting/utils.js +93 -0
- package/test/unit/spec/meeting-info/index.js +180 -61
- package/test/unit/spec/meeting-info/meetinginfov2.js +196 -53
- package/test/unit/spec/meetings/collection.js +12 -0
- package/test/unit/spec/meetings/index.js +619 -206
- package/test/unit/spec/meetings/utils.js +35 -12
- package/test/unit/spec/member/index.js +8 -7
- package/test/unit/spec/member/util.js +32 -0
- package/test/unit/spec/members/index.js +130 -17
- package/test/unit/spec/members/utils.js +26 -0
- package/test/unit/spec/multistream/mediaRequestManager.ts +20 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +80 -1
- package/test/unit/spec/multistream/remoteMediaManager.ts +210 -3
- package/test/unit/spec/multistream/sendSlotManager.ts +50 -18
- package/test/unit/spec/reachability/clusterReachability.ts +279 -0
- package/test/unit/spec/reachability/index.ts +505 -135
- package/test/unit/spec/reachability/util.ts +40 -0
- package/test/unit/spec/reconnection-manager/index.js +74 -17
- package/test/unit/spec/roap/index.ts +181 -61
- package/test/unit/spec/roap/request.ts +27 -3
- package/test/unit/spec/roap/turnDiscovery.ts +362 -101
- package/test/unit/spec/rtcMetrics/index.ts +57 -3
- package/test/unit/spec/stats-analyzer/index.js +1225 -12
- package/test/unit/spec/webinar/collection.ts +13 -0
- package/test/unit/spec/webinar/index.ts +60 -0
- package/test/utils/integrationTestUtils.js +4 -4
- package/test/utils/webex-test-users.js +12 -4
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
+
var _Object$keys2 = require("@babel/runtime-corejs2/core-js/object/keys");
|
|
5
|
+
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
|
|
6
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
|
|
7
|
+
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
|
|
8
|
+
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
|
|
4
9
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
5
10
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
11
|
_Object$defineProperty(exports, "__esModule", {
|
|
@@ -17,6 +22,7 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/
|
|
|
17
22
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
18
23
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
19
24
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
25
|
+
var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty"));
|
|
20
26
|
var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
21
27
|
var _internalMediaCore = require("@webex/internal-media-core");
|
|
22
28
|
var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
|
|
@@ -25,6 +31,8 @@ var _config = require("../mediaQualityMetrics/config");
|
|
|
25
31
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
26
32
|
var _global = _interopRequireDefault(require("./global"));
|
|
27
33
|
var _mqaUtil = require("./mqaUtil");
|
|
34
|
+
function ownKeys(object, enumerableOnly) { var keys = _Object$keys2(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; }
|
|
35
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
28
36
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
29
37
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
30
38
|
var EVENTS = {
|
|
@@ -59,6 +67,8 @@ var emptyReceiver = {
|
|
|
59
67
|
var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
60
68
|
(0, _inherits2.default)(StatsAnalyzer, _EventsScope);
|
|
61
69
|
var _super = _createSuper(StatsAnalyzer);
|
|
70
|
+
// Returns the local IP address for diagnostics. this is the local IP of the interface used for the current media connection a host can have many local Ip Addresses
|
|
71
|
+
|
|
62
72
|
/**
|
|
63
73
|
* Creates a new instance of StatsAnalyzer
|
|
64
74
|
* @constructor
|
|
@@ -90,6 +100,8 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
90
100
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsInterval", void 0);
|
|
91
101
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsResults", void 0);
|
|
92
102
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsStarted", void 0);
|
|
103
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "successfulCandidatePair", void 0);
|
|
104
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "localIpAddress", void 0);
|
|
93
105
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "receiveSlotCallback", void 0);
|
|
94
106
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "emitStartStopEvents", function (mediaType, previousValue, currentValue, isLocal) {
|
|
95
107
|
if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {
|
|
@@ -124,57 +136,75 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
124
136
|
});
|
|
125
137
|
}
|
|
126
138
|
});
|
|
139
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "extractAndSetLocalIpAddressInfoForDiagnostics", function (successfulCandidatePairId, candidates) {
|
|
140
|
+
var newIpAddress = '';
|
|
141
|
+
if (successfulCandidatePairId && !(0, _isEmpty2.default)(candidates)) {
|
|
142
|
+
var localCandidate = candidates[successfulCandidatePairId];
|
|
143
|
+
if (localCandidate) {
|
|
144
|
+
if (localCandidate.candidateType === 'host') {
|
|
145
|
+
// if it's a host candidate, use the address property - it will be the local IP
|
|
146
|
+
newIpAddress = "".concat(localCandidate.address);
|
|
147
|
+
} else if (localCandidate.candidateType === 'prflx') {
|
|
148
|
+
// if it's a peer reflexive candidate and we're not using a relay (there is no relayProtocol set)
|
|
149
|
+
// then look at the relatedAddress - it will be the local
|
|
150
|
+
//
|
|
151
|
+
// Firefox doesn't populate the relayProtocol property
|
|
152
|
+
if (!localCandidate.relayProtocol) {
|
|
153
|
+
newIpAddress = "".concat(localCandidate.relatedAddress);
|
|
154
|
+
} else {
|
|
155
|
+
// if it's a peer reflexive candidate and we are using a relay -
|
|
156
|
+
// in that case the relatedAddress will be the IP of the TURN server (Linus),
|
|
157
|
+
// so we can only look at the address, but it might be local IP or public IP,
|
|
158
|
+
// depending on if the user is behind a NAT or not
|
|
159
|
+
newIpAddress = "".concat(localCandidate.address);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
_this.localIpAddress = newIpAddress;
|
|
165
|
+
});
|
|
127
166
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "parseCandidate", function (result, type, isSender, isRemote) {
|
|
167
|
+
var _this$successfulCandi;
|
|
128
168
|
if (!result || !result.id) {
|
|
129
169
|
return;
|
|
130
170
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
if (!result.id) return;
|
|
136
|
-
var sendRecvType = isSender ? _constants.STATS.SEND_DIRECTION : _constants.STATS.RECEIVE_DIRECTION;
|
|
137
|
-
var ipType = isRemote ? _constants.STATS.REMOTE : _constants.STATS.LOCAL;
|
|
138
|
-
if (!RemoteCandidateType[result.id]) {
|
|
139
|
-
RemoteCandidateType[result.id] = [];
|
|
140
|
-
}
|
|
141
|
-
if (!RemoteTransport[result.id]) {
|
|
142
|
-
RemoteTransport[result.id] = [];
|
|
143
|
-
}
|
|
144
|
-
if (!RemoteIpAddress[result.id]) {
|
|
145
|
-
RemoteIpAddress[result.id] = [];
|
|
146
|
-
}
|
|
147
|
-
if (!RemoteNetworkType[result.id]) {
|
|
148
|
-
RemoteNetworkType[result.id] = [];
|
|
149
|
-
}
|
|
150
|
-
if (result.candidateType && RemoteCandidateType[result.id].indexOf(result.candidateType) === -1) {
|
|
151
|
-
RemoteCandidateType[result.id].push(result.candidateType);
|
|
152
|
-
}
|
|
153
|
-
if (result.protocol && RemoteTransport[result.id].indexOf(result.protocol) === -1) {
|
|
154
|
-
RemoteTransport[result.id].push(result.protocol.toUpperCase());
|
|
171
|
+
|
|
172
|
+
// We only care about the successful local candidate
|
|
173
|
+
if (((_this$successfulCandi = _this.successfulCandidatePair) === null || _this$successfulCandi === void 0 ? void 0 : _this$successfulCandi.localCandidateId) !== result.id) {
|
|
174
|
+
return;
|
|
155
175
|
}
|
|
156
|
-
|
|
157
|
-
|
|
176
|
+
var transport;
|
|
177
|
+
if (result.relayProtocol) {
|
|
178
|
+
transport = result.relayProtocol.toUpperCase();
|
|
179
|
+
} else if (result.protocol) {
|
|
180
|
+
transport = result.protocol.toUpperCase();
|
|
158
181
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
182
|
+
var sendRecvType = isSender ? _constants.STATS.SEND_DIRECTION : _constants.STATS.RECEIVE_DIRECTION;
|
|
183
|
+
var ipType = isRemote ? _constants.STATS.REMOTE : _constants.STATS.LOCAL;
|
|
184
|
+
if (!_this.statsResults.candidates) {
|
|
185
|
+
_this.statsResults.candidates = {};
|
|
162
186
|
}
|
|
163
|
-
_this.statsResults.
|
|
164
|
-
candidateType:
|
|
165
|
-
ipAddress:
|
|
187
|
+
_this.statsResults.candidates[result.id] = {
|
|
188
|
+
candidateType: result.candidateType,
|
|
189
|
+
ipAddress: result.ip,
|
|
190
|
+
// TODO: add ports
|
|
191
|
+
relatedAddress: result.relatedAddress,
|
|
192
|
+
relatedPort: result.relatedPort,
|
|
193
|
+
relayProtocol: result.relayProtocol,
|
|
194
|
+
protocol: result.protocol,
|
|
195
|
+
address: result.address,
|
|
166
196
|
portNumber: result.port,
|
|
167
|
-
networkType:
|
|
197
|
+
networkType: result.networkType,
|
|
168
198
|
priority: result.priority,
|
|
169
|
-
transport:
|
|
199
|
+
transport: transport,
|
|
170
200
|
timestamp: result.time,
|
|
171
201
|
id: result.id,
|
|
172
202
|
type: result.type
|
|
173
203
|
};
|
|
174
|
-
_this.statsResults.connectionType[ipType].candidateType =
|
|
175
|
-
_this.statsResults.connectionType[ipType].ipAddress =
|
|
176
|
-
_this.statsResults.connectionType[ipType].networkType =
|
|
177
|
-
_this.statsResults.connectionType[ipType].transport =
|
|
204
|
+
_this.statsResults.connectionType[ipType].candidateType = result.candidateType;
|
|
205
|
+
_this.statsResults.connectionType[ipType].ipAddress = result.ipAddress;
|
|
206
|
+
_this.statsResults.connectionType[ipType].networkType = result.networkType === _constants.NETWORK_TYPE.VPN ? _constants.NETWORK_TYPE.UNKNOWN : result.networkType;
|
|
207
|
+
_this.statsResults.connectionType[ipType].transport = transport;
|
|
178
208
|
_this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;
|
|
179
209
|
});
|
|
180
210
|
_this.statsStarted = false;
|
|
@@ -187,6 +217,8 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
187
217
|
_this.lastMqaDataSent = {};
|
|
188
218
|
_this.lastEmittedStartStopEvent = {};
|
|
189
219
|
_this.receiveSlotCallback = receiveSlotCallback;
|
|
220
|
+
_this.successfulCandidatePair = {};
|
|
221
|
+
_this.localIpAddress = '';
|
|
190
222
|
return _this;
|
|
191
223
|
}
|
|
192
224
|
|
|
@@ -223,7 +255,11 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
223
255
|
}, {
|
|
224
256
|
key: "updateMediaStatus",
|
|
225
257
|
value: function updateMediaStatus(status) {
|
|
226
|
-
|
|
258
|
+
var _this$meetingMediaSta, _this$meetingMediaSta2;
|
|
259
|
+
this.meetingMediaStatus = {
|
|
260
|
+
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),
|
|
261
|
+
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)
|
|
262
|
+
};
|
|
227
263
|
}
|
|
228
264
|
|
|
229
265
|
/**
|
|
@@ -238,64 +274,186 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
238
274
|
value: function sendMqaData() {
|
|
239
275
|
var _this3 = this;
|
|
240
276
|
var newMqa = (0, _cloneDeep2.default)(_config.emptyMqaInterval);
|
|
277
|
+
|
|
278
|
+
// Fill in empty stats items for lastMqaDataSent
|
|
279
|
+
(0, _keys.default)(this.statsResults).forEach(function (mediaType) {
|
|
280
|
+
if (!_this3.lastMqaDataSent[mediaType]) {
|
|
281
|
+
_this3.lastMqaDataSent[mediaType] = {};
|
|
282
|
+
}
|
|
283
|
+
if (!_this3.lastMqaDataSent[mediaType].send && mediaType.includes('-send')) {
|
|
284
|
+
_this3.lastMqaDataSent[mediaType].send = {};
|
|
285
|
+
}
|
|
286
|
+
if (!_this3.lastMqaDataSent[mediaType].recv && mediaType.includes('-recv')) {
|
|
287
|
+
_this3.lastMqaDataSent[mediaType].recv = {};
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
// Create stats the first level, totals for senders and receivers
|
|
292
|
+
var audioSender = (0, _cloneDeep2.default)(_config.emptyAudioTransmit);
|
|
293
|
+
var audioShareSender = (0, _cloneDeep2.default)(_config.emptyAudioTransmit);
|
|
294
|
+
var audioReceiver = (0, _cloneDeep2.default)(_config.emptyAudioReceive);
|
|
295
|
+
var audioShareReceiver = (0, _cloneDeep2.default)(_config.emptyAudioReceive);
|
|
296
|
+
var videoSender = (0, _cloneDeep2.default)(_config.emptyVideoTransmit);
|
|
297
|
+
var videoShareSender = (0, _cloneDeep2.default)(_config.emptyVideoTransmit);
|
|
298
|
+
var videoReceiver = (0, _cloneDeep2.default)(_config.emptyVideoReceive);
|
|
299
|
+
var videoShareReceiver = (0, _cloneDeep2.default)(_config.emptyVideoReceive);
|
|
300
|
+
(0, _mqaUtil.getAudioSenderMqa)({
|
|
301
|
+
audioSender: audioSender,
|
|
302
|
+
statsResults: this.statsResults,
|
|
303
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
304
|
+
baseMediaType: 'audio-send'
|
|
305
|
+
});
|
|
306
|
+
newMqa.audioTransmit.push(audioSender);
|
|
307
|
+
(0, _mqaUtil.getAudioSenderMqa)({
|
|
308
|
+
audioSender: audioShareSender,
|
|
309
|
+
statsResults: this.statsResults,
|
|
310
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
311
|
+
baseMediaType: 'audio-share-send'
|
|
312
|
+
});
|
|
313
|
+
newMqa.audioTransmit.push(audioShareSender);
|
|
314
|
+
(0, _mqaUtil.getAudioReceiverMqa)({
|
|
315
|
+
audioReceiver: audioReceiver,
|
|
316
|
+
statsResults: this.statsResults,
|
|
317
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
318
|
+
baseMediaType: 'audio-recv'
|
|
319
|
+
});
|
|
320
|
+
newMqa.audioReceive.push(audioReceiver);
|
|
321
|
+
(0, _mqaUtil.getAudioReceiverMqa)({
|
|
322
|
+
audioReceiver: audioShareReceiver,
|
|
323
|
+
statsResults: this.statsResults,
|
|
324
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
325
|
+
baseMediaType: 'audio-share-recv'
|
|
326
|
+
});
|
|
327
|
+
newMqa.audioReceive.push(audioShareReceiver);
|
|
328
|
+
(0, _mqaUtil.getVideoSenderMqa)({
|
|
329
|
+
videoSender: videoSender,
|
|
330
|
+
statsResults: this.statsResults,
|
|
331
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
332
|
+
baseMediaType: 'video-send'
|
|
333
|
+
});
|
|
334
|
+
newMqa.videoTransmit.push(videoSender);
|
|
335
|
+
(0, _mqaUtil.getVideoSenderMqa)({
|
|
336
|
+
videoSender: videoShareSender,
|
|
337
|
+
statsResults: this.statsResults,
|
|
338
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
339
|
+
baseMediaType: 'video-share-send'
|
|
340
|
+
});
|
|
341
|
+
newMqa.videoTransmit.push(videoShareSender);
|
|
342
|
+
(0, _mqaUtil.getVideoReceiverMqa)({
|
|
343
|
+
videoReceiver: videoReceiver,
|
|
344
|
+
statsResults: this.statsResults,
|
|
345
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
346
|
+
baseMediaType: 'video-recv'
|
|
347
|
+
});
|
|
348
|
+
newMqa.videoReceive.push(videoReceiver);
|
|
349
|
+
(0, _mqaUtil.getVideoReceiverMqa)({
|
|
350
|
+
videoReceiver: videoShareReceiver,
|
|
351
|
+
statsResults: this.statsResults,
|
|
352
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
353
|
+
baseMediaType: 'video-share-recv'
|
|
354
|
+
});
|
|
355
|
+
newMqa.videoReceive.push(videoShareReceiver);
|
|
356
|
+
|
|
357
|
+
// Add stats for individual streams
|
|
241
358
|
(0, _keys.default)(this.statsResults).forEach(function (mediaType) {
|
|
242
|
-
if (mediaType.includes('audio-send')
|
|
243
|
-
var
|
|
244
|
-
(0, _mqaUtil.
|
|
245
|
-
|
|
359
|
+
if (mediaType.includes('audio-send')) {
|
|
360
|
+
var audioSenderStream = (0, _cloneDeep2.default)(_config.emptyAudioTransmitStream);
|
|
361
|
+
(0, _mqaUtil.getAudioSenderStreamMqa)({
|
|
362
|
+
audioSenderStream: audioSenderStream,
|
|
246
363
|
statsResults: _this3.statsResults,
|
|
247
364
|
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
248
365
|
mediaType: mediaType
|
|
249
366
|
});
|
|
250
|
-
newMqa.audioTransmit.push(
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
(0,
|
|
254
|
-
|
|
367
|
+
newMqa.audioTransmit[0].streams.push(audioSenderStream);
|
|
368
|
+
_this3.lastMqaDataSent[mediaType].send = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].send);
|
|
369
|
+
} else if (mediaType.includes('audio-share-send')) {
|
|
370
|
+
var _audioSenderStream = (0, _cloneDeep2.default)(_config.emptyAudioTransmitStream);
|
|
371
|
+
(0, _mqaUtil.getAudioSenderStreamMqa)({
|
|
372
|
+
audioSenderStream: _audioSenderStream,
|
|
255
373
|
statsResults: _this3.statsResults,
|
|
256
374
|
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
257
375
|
mediaType: mediaType
|
|
258
376
|
});
|
|
259
|
-
newMqa.
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
(0,
|
|
263
|
-
|
|
377
|
+
newMqa.audioTransmit[1].streams.push(_audioSenderStream);
|
|
378
|
+
_this3.lastMqaDataSent[mediaType].send = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].send);
|
|
379
|
+
} else if (mediaType.includes('audio-recv')) {
|
|
380
|
+
var audioReceiverStream = (0, _cloneDeep2.default)(_config.emptyAudioReceiveStream);
|
|
381
|
+
(0, _mqaUtil.getAudioReceiverStreamMqa)({
|
|
382
|
+
audioReceiverStream: audioReceiverStream,
|
|
264
383
|
statsResults: _this3.statsResults,
|
|
265
384
|
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
266
385
|
mediaType: mediaType
|
|
267
386
|
});
|
|
268
|
-
newMqa.
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
(0,
|
|
272
|
-
|
|
387
|
+
newMqa.audioReceive[0].streams.push(audioReceiverStream);
|
|
388
|
+
_this3.lastMqaDataSent[mediaType].recv = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].recv);
|
|
389
|
+
} else if (mediaType.includes('audio-share-recv')) {
|
|
390
|
+
var _audioReceiverStream = (0, _cloneDeep2.default)(_config.emptyAudioReceiveStream);
|
|
391
|
+
(0, _mqaUtil.getAudioReceiverStreamMqa)({
|
|
392
|
+
audioReceiverStream: _audioReceiverStream,
|
|
273
393
|
statsResults: _this3.statsResults,
|
|
274
394
|
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
275
395
|
mediaType: mediaType
|
|
276
396
|
});
|
|
277
|
-
newMqa.
|
|
397
|
+
newMqa.audioReceive[1].streams.push(_audioReceiverStream);
|
|
398
|
+
_this3.lastMqaDataSent[mediaType].recv = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].recv);
|
|
399
|
+
} else if (mediaType.includes('video-send')) {
|
|
400
|
+
var videoSenderStream = (0, _cloneDeep2.default)(_config.emptyVideoTransmitStream);
|
|
401
|
+
(0, _mqaUtil.getVideoSenderStreamMqa)({
|
|
402
|
+
videoSenderStream: videoSenderStream,
|
|
403
|
+
statsResults: _this3.statsResults,
|
|
404
|
+
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
405
|
+
mediaType: mediaType
|
|
406
|
+
});
|
|
407
|
+
newMqa.videoTransmit[0].streams.push(videoSenderStream);
|
|
408
|
+
_this3.lastMqaDataSent[mediaType].send = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].send);
|
|
409
|
+
} else if (mediaType.includes('video-share-send')) {
|
|
410
|
+
var _videoSenderStream = (0, _cloneDeep2.default)(_config.emptyVideoTransmitStream);
|
|
411
|
+
(0, _mqaUtil.getVideoSenderStreamMqa)({
|
|
412
|
+
videoSenderStream: _videoSenderStream,
|
|
413
|
+
statsResults: _this3.statsResults,
|
|
414
|
+
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
415
|
+
mediaType: mediaType
|
|
416
|
+
});
|
|
417
|
+
newMqa.videoTransmit[1].streams.push(_videoSenderStream);
|
|
418
|
+
_this3.lastMqaDataSent[mediaType].send = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].send);
|
|
419
|
+
} else if (mediaType.includes('video-recv')) {
|
|
420
|
+
var videoReceiverStream = (0, _cloneDeep2.default)(_config.emptyVideoReceiveStream);
|
|
421
|
+
(0, _mqaUtil.getVideoReceiverStreamMqa)({
|
|
422
|
+
videoReceiverStream: videoReceiverStream,
|
|
423
|
+
statsResults: _this3.statsResults,
|
|
424
|
+
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
425
|
+
mediaType: mediaType
|
|
426
|
+
});
|
|
427
|
+
newMqa.videoReceive[0].streams.push(videoReceiverStream);
|
|
428
|
+
_this3.lastMqaDataSent[mediaType].recv = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].recv);
|
|
429
|
+
} else if (mediaType.includes('video-share-recv')) {
|
|
430
|
+
var _videoReceiverStream = (0, _cloneDeep2.default)(_config.emptyVideoReceiveStream);
|
|
431
|
+
(0, _mqaUtil.getVideoReceiverStreamMqa)({
|
|
432
|
+
videoReceiverStream: _videoReceiverStream,
|
|
433
|
+
statsResults: _this3.statsResults,
|
|
434
|
+
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
435
|
+
mediaType: mediaType
|
|
436
|
+
});
|
|
437
|
+
newMqa.videoReceive[1].streams.push(_videoReceiverStream);
|
|
438
|
+
_this3.lastMqaDataSent[mediaType].recv = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].recv);
|
|
278
439
|
}
|
|
279
440
|
});
|
|
280
|
-
newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress
|
|
441
|
+
newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;
|
|
281
442
|
|
|
282
443
|
// Adding peripheral information
|
|
283
|
-
newMqa.intervalMetadata.peripherals = [];
|
|
284
444
|
newMqa.intervalMetadata.peripherals.push({
|
|
285
445
|
information: _constants._UNKNOWN_,
|
|
286
446
|
name: _constants.MEDIA_DEVICES.SPEAKER
|
|
287
447
|
});
|
|
288
448
|
if (this.statsResults['audio-send']) {
|
|
289
|
-
var _this$statsResults$au;
|
|
290
449
|
newMqa.intervalMetadata.peripherals.push({
|
|
291
|
-
information:
|
|
450
|
+
information: this.statsResults['audio-send'].trackLabel || _constants._UNKNOWN_,
|
|
292
451
|
name: _constants.MEDIA_DEVICES.MICROPHONE
|
|
293
452
|
});
|
|
294
453
|
}
|
|
295
454
|
if (this.statsResults['video-send']) {
|
|
296
|
-
var _this$statsResults$vi;
|
|
297
455
|
newMqa.intervalMetadata.peripherals.push({
|
|
298
|
-
information:
|
|
456
|
+
information: this.statsResults['video-send'].trackLabel || _constants._UNKNOWN_,
|
|
299
457
|
name: _constants.MEDIA_DEVICES.CAMERA
|
|
300
458
|
});
|
|
301
459
|
}
|
|
@@ -327,6 +485,18 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
327
485
|
this.mediaConnection = mediaConnection;
|
|
328
486
|
}
|
|
329
487
|
|
|
488
|
+
/**
|
|
489
|
+
* Returns the local IP address for diagnostics.
|
|
490
|
+
* this is the local IP of the interface used for the current media connection
|
|
491
|
+
* a host can have many local Ip Addresses
|
|
492
|
+
* @returns {string | undefined} The local IP address.
|
|
493
|
+
*/
|
|
494
|
+
}, {
|
|
495
|
+
key: "getLocalIpAddress",
|
|
496
|
+
value: function getLocalIpAddress() {
|
|
497
|
+
return this.localIpAddress;
|
|
498
|
+
}
|
|
499
|
+
|
|
330
500
|
/**
|
|
331
501
|
* Starts the stats analyzer on interval
|
|
332
502
|
*
|
|
@@ -350,7 +520,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
350
520
|
_this4.sendMqaData();
|
|
351
521
|
_this4.mqaInterval = setInterval(function () {
|
|
352
522
|
_this4.sendMqaData();
|
|
353
|
-
}, _constants.
|
|
523
|
+
}, _constants.MQA_INTERVAL);
|
|
354
524
|
});
|
|
355
525
|
}
|
|
356
526
|
return _promise.default.resolve();
|
|
@@ -411,22 +581,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
411
581
|
} else if (!isSender && !this.statsResults[type].recv) {
|
|
412
582
|
this.statsResults[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
|
|
413
583
|
}
|
|
414
|
-
if (!this.statsResults.resolutions[type]) {
|
|
415
|
-
this.statsResults.resolutions[type] = {};
|
|
416
|
-
}
|
|
417
|
-
if (isSender && !this.statsResults.resolutions[type].send) {
|
|
418
|
-
this.statsResults.resolutions[type].send = (0, _cloneDeep2.default)(emptySender);
|
|
419
|
-
} else if (!isSender && !this.statsResults.resolutions[type].recv) {
|
|
420
|
-
this.statsResults.resolutions[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
|
|
421
|
-
}
|
|
422
|
-
if (!this.statsResults.internal[type]) {
|
|
423
|
-
this.statsResults.internal[type] = {};
|
|
424
|
-
}
|
|
425
|
-
if (isSender && !this.statsResults.internal[type].send) {
|
|
426
|
-
this.statsResults.internal[type].send = (0, _cloneDeep2.default)(emptySender);
|
|
427
|
-
} else if (!isSender && !this.statsResults.internal[type].recv) {
|
|
428
|
-
this.statsResults.internal[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
|
|
429
|
-
}
|
|
430
584
|
switch (getStatsResult.type) {
|
|
431
585
|
case 'outbound-rtp':
|
|
432
586
|
this.processOutboundRTPResult(getStatsResult, type);
|
|
@@ -434,13 +588,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
434
588
|
case 'inbound-rtp':
|
|
435
589
|
this.processInboundRTPResult(getStatsResult, type);
|
|
436
590
|
break;
|
|
437
|
-
case 'track':
|
|
438
|
-
this.processTrackResult(getStatsResult, type);
|
|
439
|
-
break;
|
|
440
591
|
case 'remote-inbound-rtp':
|
|
441
592
|
case 'remote-outbound-rtp':
|
|
442
|
-
|
|
443
|
-
this.compareSentAndReceived(getStatsResult, type, isSender);
|
|
593
|
+
this.compareSentAndReceived(getStatsResult, type);
|
|
444
594
|
break;
|
|
445
595
|
case 'remotecandidate':
|
|
446
596
|
case 'remote-candidate':
|
|
@@ -450,7 +600,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
450
600
|
this.parseCandidate(getStatsResult, type, isSender, false);
|
|
451
601
|
break;
|
|
452
602
|
case 'media-source':
|
|
453
|
-
// @ts-ignore
|
|
454
603
|
this.parseAudioSource(getStatsResult, type);
|
|
455
604
|
break;
|
|
456
605
|
default:
|
|
@@ -471,15 +620,26 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
471
620
|
value: function filterAndParseGetStatsResults(statsItem, type, isSender) {
|
|
472
621
|
var _this6 = this;
|
|
473
622
|
var types = _constants.DEFAULT_GET_STATS_FILTER.types;
|
|
623
|
+
|
|
624
|
+
// get the successful candidate pair before parsing stats.
|
|
625
|
+
statsItem.report.forEach(function (report) {
|
|
626
|
+
if (report.type === 'candidate-pair' && report.state === 'succeeded') {
|
|
627
|
+
_this6.successfulCandidatePair = report;
|
|
628
|
+
}
|
|
629
|
+
});
|
|
474
630
|
statsItem.report.forEach(function (result) {
|
|
475
631
|
if (types.includes(result.type)) {
|
|
476
632
|
_this6.parseGetStatsResult(result, type, isSender);
|
|
477
633
|
}
|
|
478
634
|
});
|
|
479
635
|
if (this.statsResults[type]) {
|
|
636
|
+
var _this$successfulCandi2, _this$statsResults;
|
|
480
637
|
this.statsResults[type].direction = statsItem.currentDirection;
|
|
481
638
|
this.statsResults[type].trackLabel = statsItem.localTrackLabel;
|
|
482
639
|
this.statsResults[type].csi = statsItem.csi;
|
|
640
|
+
this.extractAndSetLocalIpAddressInfoForDiagnostics((_this$successfulCandi2 = this.successfulCandidatePair) === null || _this$successfulCandi2 === void 0 ? void 0 : _this$successfulCandi2.localCandidateId, (_this$statsResults = this.statsResults) === null || _this$statsResults === void 0 ? void 0 : _this$statsResults.candidates);
|
|
641
|
+
// reset the successful candidate pair.
|
|
642
|
+
this.successfulCandidatePair = {};
|
|
483
643
|
}
|
|
484
644
|
}
|
|
485
645
|
|
|
@@ -544,138 +704,77 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
544
704
|
return prev + (((_this7$lastStatsResul = _this7.lastStatsResults[cur]) === null || _this7$lastStatsResul === void 0 ? void 0 : _this7$lastStatsResul.recv[value]) || 0);
|
|
545
705
|
}, 0);
|
|
546
706
|
};
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
}).reduce(function (prev, cur) {
|
|
551
|
-
var _this7$statsResults$r;
|
|
552
|
-
return prev + (((_this7$statsResults$r = _this7.statsResults.resolutions[cur]) === null || _this7$statsResults$r === void 0 ? void 0 : _this7$statsResults$r.recv[value]) || 0);
|
|
553
|
-
}, 0);
|
|
554
|
-
};
|
|
555
|
-
var getPreviousResolutionsStatsTotals = function getPreviousResolutionsStatsTotals(keyPrefix, value) {
|
|
556
|
-
return (0, _keys.default)(_this7.statsResults).filter(function (key) {
|
|
557
|
-
return key.startsWith(keyPrefix);
|
|
558
|
-
}).reduce(function (prev, cur) {
|
|
559
|
-
var _this7$lastStatsResul2;
|
|
560
|
-
return prev + (((_this7$lastStatsResul2 = _this7.lastStatsResults.resolutions[cur]) === null || _this7$lastStatsResul2 === void 0 ? void 0 : _this7$lastStatsResul2.recv[value]) || 0);
|
|
561
|
-
}, 0);
|
|
562
|
-
};
|
|
563
|
-
if (this.meetingMediaStatus.expected.sendAudio && this.lastStatsResults['audio-send']) {
|
|
707
|
+
|
|
708
|
+
// Audio Transmit
|
|
709
|
+
if (this.lastStatsResults['audio-send']) {
|
|
564
710
|
// compare audio stats sent
|
|
565
711
|
// NOTE: relies on there being only one sender.
|
|
566
712
|
var currentStats = this.statsResults['audio-send'].send;
|
|
567
713
|
var previousStats = this.lastStatsResults['audio-send'].send;
|
|
568
|
-
if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
|
|
714
|
+
if (this.meetingMediaStatus.expected.sendAudio && currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
|
|
569
715
|
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent", currentStats.totalPacketsSent);
|
|
570
716
|
} else {
|
|
571
|
-
if (currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
|
|
717
|
+
if (this.meetingMediaStatus.expected.sendAudio && currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
|
|
572
718
|
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present", currentStats.totalAudioEnergy);
|
|
573
719
|
}
|
|
574
|
-
if (currentStats.audioLevel === 0) {
|
|
720
|
+
if (this.meetingMediaStatus.expected.sendAudio && currentStats.audioLevel === 0) {
|
|
575
721
|
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user");
|
|
576
722
|
}
|
|
577
723
|
}
|
|
578
724
|
this.emitStartStopEvents('audio', previousStats.totalPacketsSent, currentStats.totalPacketsSent, true);
|
|
579
725
|
}
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
} else if (currentSamplesReceived === previousSamplesReceived || currentSamplesReceived === 0) {
|
|
589
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio samples received", currentSamplesReceived);
|
|
590
|
-
}
|
|
591
|
-
this.emitStartStopEvents('audio', previousPacketsReceived, currentPacketsReceived, false);
|
|
592
|
-
}
|
|
593
|
-
if (this.meetingMediaStatus.expected.sendVideo && this.lastStatsResults['video-send']) {
|
|
726
|
+
|
|
727
|
+
// Audio Receive
|
|
728
|
+
var currentAudioPacketsReceived = getCurrentStatsTotals('audio-recv', 'totalPacketsReceived');
|
|
729
|
+
var previousAudioPacketsReceived = getPreviousStatsTotals('audio-recv', 'totalPacketsReceived');
|
|
730
|
+
this.emitStartStopEvents('audio', previousAudioPacketsReceived, currentAudioPacketsReceived, false);
|
|
731
|
+
|
|
732
|
+
// Video Transmit
|
|
733
|
+
if (this.lastStatsResults['video-send']) {
|
|
594
734
|
// compare video stats sent
|
|
595
735
|
var _currentStats = this.statsResults['video-send'].send;
|
|
596
736
|
var _previousStats = this.lastStatsResults['video-send'].send;
|
|
597
|
-
if (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0) {
|
|
737
|
+
if (this.meetingMediaStatus.expected.sendVideo && (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0)) {
|
|
598
738
|
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent", _currentStats.totalPacketsSent);
|
|
599
739
|
} else {
|
|
600
|
-
if (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0) {
|
|
740
|
+
if (this.meetingMediaStatus.expected.sendVideo && (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0)) {
|
|
601
741
|
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded", _currentStats.framesEncoded);
|
|
602
742
|
}
|
|
603
|
-
if (this.statsResults
|
|
604
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent", this.statsResults
|
|
743
|
+
if (this.meetingMediaStatus.expected.sendVideo && (this.statsResults['video-send'].send.framesSent === this.lastStatsResults['video-send'].send.framesSent || this.statsResults['video-send'].send.framesSent === 0)) {
|
|
744
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent", this.statsResults['video-send'].send.framesSent);
|
|
605
745
|
}
|
|
606
746
|
}
|
|
607
747
|
this.emitStartStopEvents('video', _previousStats.framesSent, _currentStats.framesSent, true);
|
|
608
748
|
}
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
var currentFramesDropped = getCurrentResolutionsStatsTotals('video-recv', 'framesDropped');
|
|
618
|
-
var previousFramesDropped = getPreviousResolutionsStatsTotals('video-recv', 'framesDropped');
|
|
619
|
-
if (_currentPacketsReceived === _previousPacketsReceived || _currentPacketsReceived === 0) {
|
|
620
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received", _currentPacketsReceived);
|
|
621
|
-
} else {
|
|
622
|
-
if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {
|
|
623
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames received", currentFramesReceived);
|
|
624
|
-
}
|
|
625
|
-
if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {
|
|
626
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded", currentFramesDecoded);
|
|
627
|
-
}
|
|
628
|
-
if (currentFramesDropped - previousFramesDropped > 10) {
|
|
629
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped", currentFramesDropped - previousFramesDropped);
|
|
630
|
-
}
|
|
631
|
-
}
|
|
632
|
-
this.emitStartStopEvents('video', previousFramesDecoded, currentFramesDecoded, false);
|
|
633
|
-
}
|
|
634
|
-
if (this.meetingMediaStatus.expected.sendShare && this.lastStatsResults['video-share-send']) {
|
|
749
|
+
|
|
750
|
+
// Video Receive
|
|
751
|
+
var currentVideoFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');
|
|
752
|
+
var previousVideoFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');
|
|
753
|
+
this.emitStartStopEvents('video', previousVideoFramesDecoded, currentVideoFramesDecoded, false);
|
|
754
|
+
|
|
755
|
+
// Share Transmit
|
|
756
|
+
if (this.lastStatsResults['video-share-send']) {
|
|
635
757
|
// compare share stats sent
|
|
636
758
|
|
|
637
759
|
var _currentStats2 = this.statsResults['video-share-send'].send;
|
|
638
760
|
var _previousStats2 = this.lastStatsResults['video-share-send'].send;
|
|
639
|
-
if (_currentStats2.totalPacketsSent === _previousStats2.totalPacketsSent || _currentStats2.totalPacketsSent === 0) {
|
|
761
|
+
if (this.meetingMediaStatus.expected.sendShare && (_currentStats2.totalPacketsSent === _previousStats2.totalPacketsSent || _currentStats2.totalPacketsSent === 0)) {
|
|
640
762
|
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent", _currentStats2.totalPacketsSent);
|
|
641
763
|
} else {
|
|
642
|
-
if (_currentStats2.framesEncoded === _previousStats2.framesEncoded || _currentStats2.framesEncoded === 0) {
|
|
764
|
+
if (this.meetingMediaStatus.expected.sendShare && (_currentStats2.framesEncoded === _previousStats2.framesEncoded || _currentStats2.framesEncoded === 0)) {
|
|
643
765
|
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded", _currentStats2.framesEncoded);
|
|
644
766
|
}
|
|
645
|
-
if (this.statsResults
|
|
646
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames sent", this.statsResults
|
|
767
|
+
if (this.meetingMediaStatus.expected.sendShare && (this.statsResults['video-share-send'].send.framesSent === this.lastStatsResults['video-share-send'].send.framesSent || this.statsResults['video-share-send'].send.framesSent === 0)) {
|
|
768
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames sent", this.statsResults['video-share-send'].send.framesSent);
|
|
647
769
|
}
|
|
648
770
|
}
|
|
771
|
+
this.emitStartStopEvents('share', _previousStats2.framesSent, _currentStats2.framesSent, true);
|
|
649
772
|
}
|
|
650
|
-
if (this.meetingMediaStatus.expected.sendShare) {
|
|
651
|
-
// TODO:need to check receive share value
|
|
652
|
-
// compare share stats received
|
|
653
|
-
var _currentPacketsReceived2 = getCurrentStatsTotals('video-share-recv', 'totalPacketsReceived');
|
|
654
|
-
var _previousPacketsReceived2 = getPreviousStatsTotals('video-share-recv', 'totalPacketsReceived');
|
|
655
|
-
var _currentFramesReceived = getCurrentResolutionsStatsTotals('video-share-recv', 'framesReceived');
|
|
656
|
-
var _previousFramesReceived = getPreviousResolutionsStatsTotals('video-share-recv', 'framesReceived');
|
|
657
|
-
var _currentFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');
|
|
658
|
-
var _previousFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');
|
|
659
|
-
var _currentFramesDropped = getCurrentResolutionsStatsTotals('video-share-recv', 'framesDropped');
|
|
660
|
-
var _previousFramesDropped = getPreviousResolutionsStatsTotals('video-share-recv', 'framesDropped');
|
|
661
|
-
if (_currentPacketsReceived2 === _previousPacketsReceived2 || _currentPacketsReceived2 === 0) {
|
|
662
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received", _currentPacketsReceived2);
|
|
663
|
-
} else {
|
|
664
|
-
if (_currentFramesReceived === _previousFramesReceived || _currentFramesReceived === 0) {
|
|
665
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames received", _currentFramesReceived);
|
|
666
|
-
}
|
|
667
|
-
if (_currentFramesDecoded === _previousFramesDecoded || _currentFramesDecoded === 0) {
|
|
668
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded", _currentFramesDecoded);
|
|
669
|
-
}
|
|
670
|
-
if (_currentFramesDropped - _previousFramesDropped > 10) {
|
|
671
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped", _currentFramesDropped - _previousFramesDropped);
|
|
672
|
-
}
|
|
673
|
-
}
|
|
674
773
|
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
774
|
+
// Share receive
|
|
775
|
+
var currentShareFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');
|
|
776
|
+
var previousShareFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');
|
|
777
|
+
this.emitStartStopEvents('share', previousShareFramesDecoded, currentShareFramesDecoded, false);
|
|
679
778
|
}
|
|
680
779
|
}
|
|
681
780
|
|
|
@@ -758,33 +857,15 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
758
857
|
if (result.bytesSent) {
|
|
759
858
|
var kilobytes = 0;
|
|
760
859
|
if (result.frameWidth && result.frameHeight) {
|
|
761
|
-
this.statsResults
|
|
762
|
-
this.statsResults
|
|
763
|
-
this.statsResults
|
|
764
|
-
this.statsResults
|
|
765
|
-
}
|
|
766
|
-
if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesSent) {
|
|
767
|
-
this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
|
|
768
|
-
}
|
|
769
|
-
if (!this.statsResults.internal[mediaType][sendrecvType].framesEncoded) {
|
|
770
|
-
this.statsResults.internal[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
|
|
771
|
-
}
|
|
772
|
-
if (!this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded) {
|
|
773
|
-
this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
|
|
860
|
+
this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
|
|
861
|
+
this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
|
|
862
|
+
this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;
|
|
863
|
+
this.statsResults[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
|
|
774
864
|
}
|
|
775
|
-
var bytes = result.bytesSent - this.statsResults.internal[mediaType][sendrecvType].prevBytesSent;
|
|
776
|
-
this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
|
|
777
|
-
kilobytes = bytes / 1024;
|
|
778
865
|
this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
|
|
779
|
-
this.statsResults[mediaType].
|
|
780
|
-
this.statsResults[mediaType][sendrecvType].
|
|
781
|
-
this.statsResults[mediaType][sendrecvType].
|
|
782
|
-
this.statsResults.internal[mediaType].outboundRtpId = result.id;
|
|
783
|
-
if (!this.statsResults.internal[mediaType][sendrecvType].packetsSent) {
|
|
784
|
-
this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
|
|
785
|
-
}
|
|
786
|
-
this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent - this.statsResults.internal[mediaType][sendrecvType].packetsSent;
|
|
787
|
-
this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
|
|
866
|
+
this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
|
|
867
|
+
this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
|
|
868
|
+
this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent;
|
|
788
869
|
|
|
789
870
|
// Data saved to send MQA metrics
|
|
790
871
|
|
|
@@ -819,50 +900,53 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
819
900
|
if (result.bytesReceived) {
|
|
820
901
|
var kilobytes = 0;
|
|
821
902
|
var receiveSlot = this.receiveSlotCallback(result.ssrc);
|
|
903
|
+
var sourceState = receiveSlot === null || receiveSlot === void 0 ? void 0 : receiveSlot.sourceState;
|
|
822
904
|
var idAndCsi = receiveSlot ? "id: \"".concat(receiveSlot.id || '', "\"").concat(receiveSlot.csi ? " and csi: ".concat(receiveSlot.csi) : '') : '';
|
|
823
|
-
|
|
824
|
-
this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
|
|
825
|
-
this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
|
|
826
|
-
this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
|
|
827
|
-
}
|
|
828
|
-
if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {
|
|
829
|
-
this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
|
|
830
|
-
}
|
|
831
|
-
if (!this.statsResults.internal[mediaType][sendrecvType].pliCount) {
|
|
832
|
-
this.statsResults.internal[mediaType][sendrecvType].pliCount = result.pliCount;
|
|
833
|
-
}
|
|
834
|
-
if (!this.statsResults.internal[mediaType][sendrecvType].packetsLost) {
|
|
835
|
-
this.statsResults.internal[mediaType][sendrecvType].packetsLost = result.packetsLost;
|
|
836
|
-
}
|
|
837
|
-
if (!this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived) {
|
|
838
|
-
this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
|
|
839
|
-
}
|
|
840
|
-
if (!this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp) {
|
|
841
|
-
this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
|
|
842
|
-
}
|
|
843
|
-
var bytes = result.bytesReceived - this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived;
|
|
844
|
-
this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
|
|
905
|
+
var bytes = result.bytesReceived - this.statsResults[mediaType][sendrecvType].totalBytesReceived;
|
|
845
906
|
kilobytes = bytes / 1024;
|
|
846
907
|
this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
|
|
847
|
-
this.statsResults[mediaType].
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
if (this.statsResults[mediaType][sendrecvType].currentPacketsLost < 0) {
|
|
851
|
-
this.statsResults[mediaType][sendrecvType].currentPacketsLost = 0;
|
|
908
|
+
var currentPacketsLost = result.packetsLost - this.statsResults[mediaType][sendrecvType].totalPacketsLost;
|
|
909
|
+
if (currentPacketsLost < 0) {
|
|
910
|
+
currentPacketsLost = 0;
|
|
852
911
|
}
|
|
853
|
-
|
|
854
|
-
this.statsResults
|
|
855
|
-
if (
|
|
856
|
-
if (receiveSlot) {
|
|
857
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for receive slot ".concat(idAndCsi),
|
|
912
|
+
var packetsReceivedDiff = result.packetsReceived - this.statsResults[mediaType][sendrecvType].totalPacketsReceived;
|
|
913
|
+
this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
|
|
914
|
+
if (packetsReceivedDiff === 0) {
|
|
915
|
+
if (receiveSlot && sourceState === 'live') {
|
|
916
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for mediaType: ".concat(mediaType, ", receive slot ").concat(idAndCsi, ". Total packets received on slot: "), result.packetsReceived);
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
if (mediaType.startsWith('video') || mediaType.startsWith('share')) {
|
|
920
|
+
var videoFramesReceivedDiff = result.framesReceived - this.statsResults[mediaType][sendrecvType].framesReceived;
|
|
921
|
+
if (videoFramesReceivedDiff === 0) {
|
|
922
|
+
if (receiveSlot && sourceState === 'live') {
|
|
923
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No frames received for mediaType: ".concat(mediaType, ", receive slot ").concat(idAndCsi, ". Total frames received on slot: "), result.framesReceived);
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
var videoFramesDecodedDiff = result.framesDecoded - this.statsResults[mediaType][sendrecvType].framesDecoded;
|
|
927
|
+
if (videoFramesDecodedDiff === 0) {
|
|
928
|
+
if (receiveSlot && sourceState === 'live') {
|
|
929
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No frames decoded for mediaType: ".concat(mediaType, ", receive slot ").concat(idAndCsi, ". Total frames decoded on slot: "), result.framesDecoded);
|
|
930
|
+
}
|
|
931
|
+
}
|
|
932
|
+
var videoFramesDroppedDiff = result.framesDropped - this.statsResults[mediaType][sendrecvType].framesDropped;
|
|
933
|
+
if (videoFramesDroppedDiff > 10) {
|
|
934
|
+
if (receiveSlot && sourceState === 'live') {
|
|
935
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> Frames dropped for mediaType: ".concat(mediaType, ", receive slot ").concat(idAndCsi, ". Total frames dropped on slot: "), result.framesDropped);
|
|
936
|
+
}
|
|
858
937
|
}
|
|
859
938
|
}
|
|
860
939
|
|
|
861
940
|
// Check the over all packet Lost ratio
|
|
862
|
-
this.statsResults[mediaType][sendrecvType].currentPacketLossRatio =
|
|
941
|
+
this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = currentPacketsLost > 0 ? currentPacketsLost / (packetsReceivedDiff + currentPacketsLost) : 0;
|
|
863
942
|
if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
|
|
864
943
|
_loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ".concat(idAndCsi), this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
|
|
865
944
|
}
|
|
945
|
+
if (result.frameWidth && result.frameHeight) {
|
|
946
|
+
this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
|
|
947
|
+
this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
|
|
948
|
+
this.statsResults[mediaType][sendrecvType].framesReceived = result.framesReceived;
|
|
949
|
+
}
|
|
866
950
|
|
|
867
951
|
// TODO: check the packet loss value is negative values here
|
|
868
952
|
|
|
@@ -878,6 +962,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
878
962
|
this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;
|
|
879
963
|
this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
|
|
880
964
|
this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;
|
|
965
|
+
this.statsResults[mediaType][sendrecvType].framesDropped = result.framesDropped;
|
|
881
966
|
this.statsResults[mediaType][sendrecvType].decoderImplementation = result.decoderImplementation;
|
|
882
967
|
this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
|
|
883
968
|
this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;
|
|
@@ -897,49 +982,19 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
897
982
|
}
|
|
898
983
|
|
|
899
984
|
/**
|
|
900
|
-
*
|
|
985
|
+
* extracts the local Ip address from the statsResult object by looking at stats results candidates
|
|
986
|
+
* and matches that ID with the successful candidate pair. It looks at the type of local candidate it is
|
|
987
|
+
* and then extracts the IP address from the relatedAddress or address property based on conditions known in webrtc
|
|
988
|
+
* note, there are known incompatibilities and it is possible for this to set undefined, or for the IP address to be the public IP address
|
|
989
|
+
* for example, firefox does not set the relayProtocol, and if the user is behind a NAT it might be the public IP
|
|
901
990
|
* @private
|
|
902
|
-
* @param {
|
|
903
|
-
* @param {
|
|
904
|
-
* @param {boolean} isSender
|
|
905
|
-
* @param {boolean} isRemote
|
|
906
|
-
*
|
|
991
|
+
* @param {string} successfulCandidatePairId - The ID of the successful candidate pair.
|
|
992
|
+
* @param {Object} candidates - the stats result candidates
|
|
907
993
|
* @returns {void}
|
|
908
994
|
*/
|
|
909
995
|
}, {
|
|
910
|
-
key: "
|
|
996
|
+
key: "compareSentAndReceived",
|
|
911
997
|
value:
|
|
912
|
-
/**
|
|
913
|
-
* Process Track results
|
|
914
|
-
*
|
|
915
|
-
* @private
|
|
916
|
-
* @param {*} result
|
|
917
|
-
* @param {*} mediaType
|
|
918
|
-
* @returns {void}
|
|
919
|
-
* @memberof StatsAnalyzer
|
|
920
|
-
*/
|
|
921
|
-
function processTrackResult(result, mediaType) {
|
|
922
|
-
if (!result || result.type !== 'track') {
|
|
923
|
-
return;
|
|
924
|
-
}
|
|
925
|
-
var sendrecvType = result.remoteSource === true ? _constants.STATS.RECEIVE_DIRECTION : _constants.STATS.SEND_DIRECTION;
|
|
926
|
-
if (sendrecvType === _constants.STATS.RECEIVE_DIRECTION) {
|
|
927
|
-
this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
|
|
928
|
-
this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
|
|
929
|
-
this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;
|
|
930
|
-
}
|
|
931
|
-
if (result.trackIdentifier && !mediaType.includes('audio')) {
|
|
932
|
-
this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier = result.trackIdentifier;
|
|
933
|
-
var jitterBufferDelay = result && result.jitterBufferDelay;
|
|
934
|
-
var jitterBufferEmittedCount = result && result.jitterBufferEmittedCount;
|
|
935
|
-
this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay = jitterBufferEmittedCount && +jitterBufferDelay / +jitterBufferEmittedCount;
|
|
936
|
-
|
|
937
|
-
// Used to calculate the jitter
|
|
938
|
-
this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay = result.jitterBufferDelay;
|
|
939
|
-
this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount = result.jitterBufferEmittedCount;
|
|
940
|
-
}
|
|
941
|
-
}
|
|
942
|
-
|
|
943
998
|
/**
|
|
944
999
|
*
|
|
945
1000
|
* @private
|
|
@@ -948,19 +1003,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
948
1003
|
* @returns {void}
|
|
949
1004
|
* @memberof StatsAnalyzer
|
|
950
1005
|
*/
|
|
951
|
-
|
|
952
|
-
key: "compareSentAndReceived",
|
|
953
|
-
value: function compareSentAndReceived(result, type) {
|
|
1006
|
+
function compareSentAndReceived(result, type) {
|
|
954
1007
|
// Don't compare on transceivers without a sender.
|
|
955
|
-
if (!type || !this.statsResults
|
|
1008
|
+
if (!type || !this.statsResults[type].send) {
|
|
956
1009
|
return;
|
|
957
1010
|
}
|
|
958
1011
|
var mediaType = type;
|
|
959
|
-
|
|
960
|
-
this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
|
|
961
|
-
}
|
|
962
|
-
var currentPacketLoss = result.packetsLost - this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver;
|
|
963
|
-
this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
|
|
1012
|
+
var currentPacketLoss = result.packetsLost - this.statsResults[mediaType].send.totalPacketsLostOnReceiver;
|
|
964
1013
|
this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;
|
|
965
1014
|
this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
|
|
966
1015
|
this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);
|