@webex/plugin-meetings 3.8.1-next.9 → 3.8.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 +13 -26
- package/dist/annotation/annotation.types.d.ts +42 -0
- package/dist/annotation/constants.d.ts +31 -0
- package/dist/annotation/index.d.ts +117 -0
- package/dist/breakouts/breakout.d.ts +8 -0
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/collection.d.ts +5 -0
- package/dist/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/breakouts/events.d.ts +8 -0
- package/dist/breakouts/index.d.ts +5 -0
- package/dist/breakouts/index.js +1 -1
- package/dist/breakouts/request.d.ts +22 -0
- package/dist/breakouts/utils.d.ts +15 -0
- package/dist/common/browser-detection.d.ts +9 -0
- package/dist/common/collection.d.ts +48 -0
- package/dist/common/config.d.ts +2 -0
- package/dist/common/errors/captcha-error.d.ts +15 -0
- package/dist/common/errors/intent-to-join.d.ts +16 -0
- package/dist/common/errors/join-meeting.d.ts +17 -0
- package/dist/common/errors/media.d.ts +15 -0
- package/dist/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/common/errors/parameter.d.ts +15 -0
- package/dist/common/errors/password-error.d.ts +15 -0
- package/dist/common/errors/permission.d.ts +14 -0
- package/dist/common/errors/reclaim-host-role-error.d.ts +60 -0
- package/dist/common/errors/reclaim-host-role-error.js +158 -0
- package/dist/common/errors/reclaim-host-role-error.js.map +1 -0
- package/dist/common/errors/reclaim-host-role-errors.d.ts +60 -0
- package/dist/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/common/errors/reconnection-in-progress.js +35 -0
- package/dist/common/errors/reconnection-in-progress.js.map +1 -0
- package/dist/common/errors/reconnection.d.ts +15 -0
- package/dist/common/errors/stats.d.ts +15 -0
- package/dist/common/errors/webex-errors.d.ts +81 -0
- package/dist/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/common/events/events-scope.d.ts +17 -0
- package/dist/common/events/events.d.ts +12 -0
- package/dist/common/events/trigger-proxy.d.ts +2 -0
- package/dist/common/events/util.d.ts +2 -0
- package/dist/common/logs/logger-config.d.ts +2 -0
- package/dist/common/logs/logger-proxy.d.ts +2 -0
- package/dist/common/logs/request.d.ts +34 -0
- package/dist/common/queue.d.ts +32 -0
- package/dist/config.d.ts +73 -0
- package/dist/constants.d.ts +952 -0
- package/dist/constants.js +1 -8
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.d.ts +4 -0
- package/dist/controls-options-manager/enums.d.ts +5 -0
- package/dist/controls-options-manager/enums.js +0 -1
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.d.ts +120 -0
- package/dist/controls-options-manager/types.d.ts +43 -0
- package/dist/controls-options-manager/types.js.map +1 -1
- package/dist/controls-options-manager/util.d.ts +7 -0
- package/dist/controls-options-manager/util.js +0 -26
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/interceptors/index.d.ts +2 -0
- package/dist/interceptors/locusRetry.d.ts +27 -0
- package/dist/interpretation/collection.d.ts +5 -0
- package/dist/interpretation/index.d.ts +5 -0
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.d.ts +5 -0
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.d.ts +2 -0
- package/dist/locus-info/controlsUtils.js +3 -11
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/locus-info/fullState.d.ts +2 -0
- package/dist/locus-info/hostUtils.d.ts +2 -0
- package/dist/locus-info/index.d.ts +269 -0
- package/dist/locus-info/index.js +0 -30
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.d.ts +2 -0
- package/dist/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/locus-info/parser.d.ts +212 -0
- package/dist/locus-info/selfUtils.d.ts +2 -0
- package/dist/media/index.d.ts +32 -0
- package/dist/media/properties.d.ts +108 -0
- package/dist/media/util.d.ts +2 -0
- package/dist/mediaQualityMetrics/config.d.ts +233 -0
- package/dist/mediaQualityMetrics/config.js +513 -0
- package/dist/mediaQualityMetrics/config.js.map +1 -0
- package/dist/meeting/brbState.js +2 -3
- package/dist/meeting/brbState.js.map +1 -1
- package/dist/meeting/effectsState.d.ts +42 -0
- package/dist/meeting/effectsState.js +260 -0
- package/dist/meeting/effectsState.js.map +1 -0
- package/dist/meeting/in-meeting-actions.d.ts +79 -0
- package/dist/meeting/in-meeting-actions.js +1 -5
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.d.ts +1622 -0
- package/dist/meeting/index.js +66 -88
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/meeting/muteState.d.ts +116 -0
- package/dist/meeting/request.d.ts +257 -0
- package/dist/meeting/request.type.d.ts +11 -0
- package/dist/meeting/state.d.ts +9 -0
- package/dist/meeting/util.d.ts +2 -0
- package/dist/meeting/voicea-meeting.d.ts +16 -0
- package/dist/meeting-info/collection.d.ts +20 -0
- package/dist/meeting-info/index.d.ts +57 -0
- package/dist/meeting-info/meeting-info-v2.d.ts +93 -0
- package/dist/meeting-info/request.d.ts +22 -0
- package/dist/meeting-info/util.d.ts +2 -0
- package/dist/meeting-info/utilv2.d.ts +2 -0
- package/dist/meetings/collection.d.ts +23 -0
- package/dist/meetings/index.d.ts +296 -0
- package/dist/meetings/meetings.types.d.ts +4 -0
- package/dist/meetings/request.d.ts +27 -0
- package/dist/meetings/util.d.ts +18 -0
- package/dist/member/index.d.ts +148 -0
- package/dist/member/member.types.d.ts +11 -0
- package/dist/member/member.types.js +18 -0
- package/dist/member/member.types.js.map +1 -0
- package/dist/member/types.d.ts +32 -0
- package/dist/member/util.d.ts +2 -0
- package/dist/members/collection.d.ts +24 -0
- package/dist/members/index.d.ts +308 -0
- package/dist/members/request.d.ts +58 -0
- package/dist/members/types.d.ts +25 -0
- package/dist/members/util.d.ts +2 -0
- package/dist/metrics/config.d.ts +169 -0
- package/dist/metrics/config.js +289 -0
- package/dist/metrics/config.js.map +1 -0
- package/dist/metrics/constants.d.ts +59 -0
- package/dist/metrics/constants.js +0 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.d.ts +152 -0
- package/dist/multistream/mediaRequestManager.d.ts +119 -0
- package/dist/multistream/receiveSlot.d.ts +68 -0
- package/dist/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/multistream/remoteMedia.d.ts +72 -0
- package/dist/multistream/remoteMediaGroup.d.ts +49 -0
- package/dist/multistream/remoteMediaManager.d.ts +300 -0
- package/dist/multistream/sendSlotManager.d.ts +69 -0
- package/dist/networkQualityMonitor/index.d.ts +70 -0
- package/dist/networkQualityMonitor/index.js +226 -0
- package/dist/networkQualityMonitor/index.js.map +1 -0
- package/dist/peer-connection-manager/index.d.ts +6 -0
- package/dist/peer-connection-manager/index.js +671 -0
- package/dist/peer-connection-manager/index.js.map +1 -0
- package/dist/peer-connection-manager/util.d.ts +6 -0
- package/dist/peer-connection-manager/util.js +110 -0
- package/dist/peer-connection-manager/util.js.map +1 -0
- package/dist/personal-meeting-room/index.d.ts +47 -0
- package/dist/personal-meeting-room/request.d.ts +14 -0
- package/dist/personal-meeting-room/util.d.ts +2 -0
- package/dist/reachability/clusterReachability.d.ts +109 -0
- package/dist/reachability/index.d.ts +139 -0
- package/dist/reachability/index.js +10 -5
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.d.ts +35 -0
- package/dist/reachability/util.d.ts +8 -0
- package/dist/reactions/constants.d.ts +3 -0
- package/dist/reactions/reactions.d.ts +4 -0
- package/dist/reactions/reactions.type.d.ts +32 -0
- package/dist/reconnection-manager/index.d.ts +112 -0
- package/dist/recording-controller/enums.d.ts +7 -0
- package/dist/recording-controller/index.d.ts +193 -0
- package/dist/recording-controller/util.d.ts +13 -0
- package/dist/roap/collection.d.ts +10 -0
- package/dist/roap/collection.js +63 -0
- package/dist/roap/collection.js.map +1 -0
- package/dist/roap/handler.d.ts +47 -0
- package/dist/roap/handler.js +279 -0
- package/dist/roap/handler.js.map +1 -0
- package/dist/roap/index.d.ts +116 -0
- package/dist/roap/request.d.ts +35 -0
- package/dist/roap/state.d.ts +9 -0
- package/dist/roap/state.js +127 -0
- package/dist/roap/state.js.map +1 -0
- package/dist/roap/turnDiscovery.d.ts +81 -0
- package/dist/roap/util.d.ts +2 -0
- package/dist/roap/util.js +76 -0
- package/dist/roap/util.js.map +1 -0
- package/dist/rtcMetrics/constants.d.ts +4 -0
- package/dist/rtcMetrics/constants.js +11 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.d.ts +61 -0
- package/dist/rtcMetrics/index.js +197 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.d.ts +118 -0
- package/dist/statsAnalyzer/global.js +127 -0
- package/dist/statsAnalyzer/global.js.map +1 -0
- package/dist/statsAnalyzer/index.d.ts +193 -0
- package/dist/statsAnalyzer/index.js +1019 -0
- package/dist/statsAnalyzer/index.js.map +1 -0
- package/dist/statsAnalyzer/mqaUtil.d.ts +22 -0
- package/dist/statsAnalyzer/mqaUtil.js +181 -0
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -0
- package/dist/transcription/index.d.ts +64 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/constants.d.ts +0 -6
- package/dist/types/controls-options-manager/enums.d.ts +1 -2
- package/dist/types/controls-options-manager/types.d.ts +1 -4
- package/dist/types/mediaQualityMetrics/config.d.ts +241 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +0 -4
- package/dist/types/metrics/constants.d.ts +0 -1
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/reachability/index.d.ts +2 -2
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +71 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +217 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +48 -0
- package/dist/webinar/collection.d.ts +16 -0
- package/dist/webinar/index.d.ts +5 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +23 -23
- package/src/constants.ts +0 -9
- package/src/controls-options-manager/enums.ts +0 -1
- package/src/controls-options-manager/types.ts +1 -6
- package/src/controls-options-manager/util.ts +0 -31
- package/src/locus-info/controlsUtils.ts +0 -15
- package/src/locus-info/index.ts +0 -41
- package/src/meeting/brbState.ts +2 -4
- package/src/meeting/in-meeting-actions.ts +0 -8
- package/src/meeting/index.ts +29 -62
- package/src/metrics/constants.ts +0 -1
- package/src/reachability/index.ts +13 -5
- package/test/unit/spec/controls-options-manager/util.js +0 -58
- package/test/unit/spec/locus-info/controlsUtils.js +0 -52
- package/test/unit/spec/locus-info/index.js +0 -42
- package/test/unit/spec/meeting/brbState.ts +2 -21
- package/test/unit/spec/meeting/in-meeting-actions.ts +0 -4
- package/test/unit/spec/meeting/index.js +27 -130
- package/test/unit/spec/reachability/index.ts +6 -2
@@ -0,0 +1,197 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
5
|
+
_Object$defineProperty(exports, "__esModule", {
|
6
|
+
value: true
|
7
|
+
});
|
8
|
+
exports.default = void 0;
|
9
|
+
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
11
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
12
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
13
|
+
var _internalPluginMetrics = require("@webex/internal-plugin-metrics");
|
14
|
+
var _uuid = _interopRequireDefault(require("uuid"));
|
15
|
+
var _constants = _interopRequireDefault(require("./constants"));
|
16
|
+
/* eslint-disable class-methods-use-this */
|
17
|
+
|
18
|
+
var parseJsonPayload = function parseJsonPayload(payload) {
|
19
|
+
try {
|
20
|
+
if (payload && payload[0]) {
|
21
|
+
return JSON.parse(payload[0]);
|
22
|
+
}
|
23
|
+
return null;
|
24
|
+
} catch (_) {
|
25
|
+
return null;
|
26
|
+
}
|
27
|
+
};
|
28
|
+
|
29
|
+
/**
|
30
|
+
* Rtc Metrics
|
31
|
+
*/
|
32
|
+
var RtcMetrics = exports.default = /*#__PURE__*/function () {
|
33
|
+
/**
|
34
|
+
* Initialize the interval.
|
35
|
+
*
|
36
|
+
* @param {object} webex - The main `webex` object.
|
37
|
+
* @param {string} meetingId - The meeting id.
|
38
|
+
* @param {string} correlationId - The correlation id.
|
39
|
+
*/
|
40
|
+
function RtcMetrics(webex, meetingId, correlationId) {
|
41
|
+
(0, _classCallCheck2.default)(this, RtcMetrics);
|
42
|
+
/**
|
43
|
+
* Array of MetricData items to be sent to the metrics service.
|
44
|
+
*/
|
45
|
+
(0, _defineProperty2.default)(this, "metricsQueue", []);
|
46
|
+
(0, _defineProperty2.default)(this, "intervalId", void 0);
|
47
|
+
(0, _defineProperty2.default)(this, "webex", void 0);
|
48
|
+
(0, _defineProperty2.default)(this, "meetingId", void 0);
|
49
|
+
(0, _defineProperty2.default)(this, "correlationId", void 0);
|
50
|
+
(0, _defineProperty2.default)(this, "connectionId", void 0);
|
51
|
+
(0, _defineProperty2.default)(this, "shouldSendMetricsOnNextStatsReport", void 0);
|
52
|
+
// `window` is used to prevent typescript from returning a NodeJS.Timer.
|
53
|
+
this.intervalId = window.setInterval(this.sendMetricsInQueue.bind(this), 30 * 1000);
|
54
|
+
this.meetingId = meetingId;
|
55
|
+
this.webex = webex;
|
56
|
+
this.correlationId = correlationId;
|
57
|
+
this.resetConnection();
|
58
|
+
}
|
59
|
+
|
60
|
+
/**
|
61
|
+
* Check to see if the metrics queue has any items.
|
62
|
+
*
|
63
|
+
* @returns {void}
|
64
|
+
*/
|
65
|
+
(0, _createClass2.default)(RtcMetrics, [{
|
66
|
+
key: "sendMetricsInQueue",
|
67
|
+
value: function sendMetricsInQueue() {
|
68
|
+
if (this.metricsQueue.length) {
|
69
|
+
this.sendMetrics();
|
70
|
+
this.metricsQueue = [];
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
/**
|
75
|
+
* Forces sending metrics when we get the next stats-report
|
76
|
+
*
|
77
|
+
* This is useful for cases when something important happens that affects the media connection,
|
78
|
+
* for example when we move from lobby into the meeting.
|
79
|
+
*
|
80
|
+
* @returns {void}
|
81
|
+
*/
|
82
|
+
}, {
|
83
|
+
key: "sendNextMetrics",
|
84
|
+
value: function sendNextMetrics() {
|
85
|
+
this.shouldSendMetricsOnNextStatsReport = true;
|
86
|
+
}
|
87
|
+
|
88
|
+
/**
|
89
|
+
* Add metrics items to the metrics queue.
|
90
|
+
*
|
91
|
+
* @param {object} data - An object with a payload array of metrics items.
|
92
|
+
*
|
93
|
+
* @returns {void}
|
94
|
+
*/
|
95
|
+
}, {
|
96
|
+
key: "addMetrics",
|
97
|
+
value: function addMetrics(data) {
|
98
|
+
if (data.payload.length) {
|
99
|
+
if (data.name === 'stats-report') {
|
100
|
+
data.payload = data.payload.map(this.anonymizeIp);
|
101
|
+
}
|
102
|
+
this.metricsQueue.push(data);
|
103
|
+
if (this.shouldSendMetricsOnNextStatsReport && data.name === 'stats-report') {
|
104
|
+
// this is the first useful set of data (WCME gives it to us after 5s), send it out immediately
|
105
|
+
// in case the user is unhappy and closes the browser early
|
106
|
+
this.sendMetricsInQueue();
|
107
|
+
this.shouldSendMetricsOnNextStatsReport = false;
|
108
|
+
}
|
109
|
+
try {
|
110
|
+
// If a connection fails, send the rest of the metrics in queue and get a new connection id.
|
111
|
+
var parsedPayload = parseJsonPayload(data.payload);
|
112
|
+
if (data.name === 'onconnectionstatechange' && parsedPayload && parsedPayload.value === 'failed') {
|
113
|
+
this.sendMetricsInQueue();
|
114
|
+
this.resetConnection();
|
115
|
+
}
|
116
|
+
} catch (e) {
|
117
|
+
console.error(e);
|
118
|
+
}
|
119
|
+
}
|
120
|
+
}
|
121
|
+
|
122
|
+
/**
|
123
|
+
* Clear the metrics interval.
|
124
|
+
*
|
125
|
+
* @returns {void}
|
126
|
+
*/
|
127
|
+
}, {
|
128
|
+
key: "closeMetrics",
|
129
|
+
value: function closeMetrics() {
|
130
|
+
this.sendMetricsInQueue();
|
131
|
+
clearInterval(this.intervalId);
|
132
|
+
}
|
133
|
+
|
134
|
+
/**
|
135
|
+
* Anonymize IP addresses.
|
136
|
+
*
|
137
|
+
* @param {array} stats - An RTCStatsReport organized into an array of strings.
|
138
|
+
* @returns {string}
|
139
|
+
*/
|
140
|
+
}, {
|
141
|
+
key: "anonymizeIp",
|
142
|
+
value: function anonymizeIp(stats) {
|
143
|
+
var data = JSON.parse(stats);
|
144
|
+
// on local and remote candidates, anonymize the last 4 bits.
|
145
|
+
if (data.type === 'local-candidate' || data.type === 'remote-candidate') {
|
146
|
+
data.ip = _internalPluginMetrics.CallDiagnosticUtils.anonymizeIPAddress(data.ip) || undefined;
|
147
|
+
data.address = _internalPluginMetrics.CallDiagnosticUtils.anonymizeIPAddress(data.address) || undefined;
|
148
|
+
data.relatedAddress = _internalPluginMetrics.CallDiagnosticUtils.anonymizeIPAddress(data.relatedAddress) || undefined;
|
149
|
+
}
|
150
|
+
return (0, _stringify.default)(data);
|
151
|
+
}
|
152
|
+
|
153
|
+
/**
|
154
|
+
* Set a new connection id.
|
155
|
+
*
|
156
|
+
* @returns {void}
|
157
|
+
*/
|
158
|
+
}, {
|
159
|
+
key: "resetConnection",
|
160
|
+
value: function resetConnection() {
|
161
|
+
this.connectionId = _uuid.default.v4();
|
162
|
+
this.shouldSendMetricsOnNextStatsReport = true;
|
163
|
+
}
|
164
|
+
|
165
|
+
/**
|
166
|
+
* Send metrics to the metrics service.
|
167
|
+
*
|
168
|
+
* @returns {void}
|
169
|
+
*/
|
170
|
+
}, {
|
171
|
+
key: "sendMetrics",
|
172
|
+
value: function sendMetrics() {
|
173
|
+
this.webex.request({
|
174
|
+
method: 'POST',
|
175
|
+
service: 'unifiedTelemetry',
|
176
|
+
resource: 'metric/v2',
|
177
|
+
headers: {
|
178
|
+
type: 'webrtcMedia',
|
179
|
+
appId: _constants.default.APP_ID
|
180
|
+
},
|
181
|
+
body: {
|
182
|
+
metrics: [{
|
183
|
+
type: 'webrtc',
|
184
|
+
version: '1.1.0',
|
185
|
+
userId: this.webex.internal.device.userId,
|
186
|
+
meetingId: this.meetingId,
|
187
|
+
correlationId: this.correlationId,
|
188
|
+
connectionId: this.connectionId,
|
189
|
+
data: this.metricsQueue
|
190
|
+
}]
|
191
|
+
}
|
192
|
+
});
|
193
|
+
}
|
194
|
+
}]);
|
195
|
+
return RtcMetrics;
|
196
|
+
}();
|
197
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["_internalPluginMetrics","require","_uuid","_interopRequireDefault","_constants","parseJsonPayload","payload","JSON","parse","_","RtcMetrics","exports","default","webex","meetingId","correlationId","_classCallCheck2","_defineProperty2","intervalId","window","setInterval","sendMetricsInQueue","bind","resetConnection","_createClass2","key","value","metricsQueue","length","sendMetrics","sendNextMetrics","shouldSendMetricsOnNextStatsReport","addMetrics","data","name","map","anonymizeIp","push","parsedPayload","e","console","error","closeMetrics","clearInterval","stats","type","ip","CallDiagnosticUtils","anonymizeIPAddress","undefined","address","relatedAddress","_stringify","connectionId","uuid","v4","request","method","service","resource","headers","appId","RTC_METRICS","APP_ID","body","metrics","version","userId","internal","device"],"sources":["index.ts"],"sourcesContent":["/* eslint-disable class-methods-use-this */\nimport {CallDiagnosticUtils} from '@webex/internal-plugin-metrics';\nimport uuid from 'uuid';\nimport RTC_METRICS from './constants';\n\nconst parseJsonPayload = (payload: any[]): any | null => {\n try {\n if (payload && payload[0]) {\n return JSON.parse(payload[0]);\n }\n\n return null;\n } catch (_) {\n return null;\n }\n};\n\n/**\n * Rtc Metrics\n */\nexport default class RtcMetrics {\n /**\n * Array of MetricData items to be sent to the metrics service.\n */\n metricsQueue = [];\n\n intervalId: number;\n\n webex: any;\n\n meetingId: string;\n\n correlationId: string;\n\n connectionId: string;\n\n shouldSendMetricsOnNextStatsReport: boolean;\n\n /**\n * Initialize the interval.\n *\n * @param {object} webex - The main `webex` object.\n * @param {string} meetingId - The meeting id.\n * @param {string} correlationId - The correlation id.\n */\n constructor(webex, meetingId, correlationId) {\n // `window` is used to prevent typescript from returning a NodeJS.Timer.\n this.intervalId = window.setInterval(this.sendMetricsInQueue.bind(this), 30 * 1000);\n this.meetingId = meetingId;\n this.webex = webex;\n this.correlationId = correlationId;\n this.resetConnection();\n }\n\n /**\n * Check to see if the metrics queue has any items.\n *\n * @returns {void}\n */\n public sendMetricsInQueue() {\n if (this.metricsQueue.length) {\n this.sendMetrics();\n this.metricsQueue = [];\n }\n }\n\n /**\n * Forces sending metrics when we get the next stats-report\n *\n * This is useful for cases when something important happens that affects the media connection,\n * for example when we move from lobby into the meeting.\n *\n * @returns {void}\n */\n public sendNextMetrics() {\n this.shouldSendMetricsOnNextStatsReport = true;\n }\n\n /**\n * Add metrics items to the metrics queue.\n *\n * @param {object} data - An object with a payload array of metrics items.\n *\n * @returns {void}\n */\n addMetrics(data) {\n if (data.payload.length) {\n if (data.name === 'stats-report') {\n data.payload = data.payload.map(this.anonymizeIp);\n }\n\n this.metricsQueue.push(data);\n\n if (this.shouldSendMetricsOnNextStatsReport && data.name === 'stats-report') {\n // this is the first useful set of data (WCME gives it to us after 5s), send it out immediately\n // in case the user is unhappy and closes the browser early\n this.sendMetricsInQueue();\n this.shouldSendMetricsOnNextStatsReport = false;\n }\n\n try {\n // If a connection fails, send the rest of the metrics in queue and get a new connection id.\n const parsedPayload = parseJsonPayload(data.payload);\n if (\n data.name === 'onconnectionstatechange' &&\n parsedPayload &&\n parsedPayload.value === 'failed'\n ) {\n this.sendMetricsInQueue();\n this.resetConnection();\n }\n } catch (e) {\n console.error(e);\n }\n }\n }\n\n /**\n * Clear the metrics interval.\n *\n * @returns {void}\n */\n closeMetrics() {\n this.sendMetricsInQueue();\n clearInterval(this.intervalId);\n }\n\n /**\n * Anonymize IP addresses.\n *\n * @param {array} stats - An RTCStatsReport organized into an array of strings.\n * @returns {string}\n */\n anonymizeIp(stats: string): string {\n const data = JSON.parse(stats);\n // on local and remote candidates, anonymize the last 4 bits.\n if (data.type === 'local-candidate' || data.type === 'remote-candidate') {\n data.ip = CallDiagnosticUtils.anonymizeIPAddress(data.ip) || undefined;\n data.address = CallDiagnosticUtils.anonymizeIPAddress(data.address) || undefined;\n data.relatedAddress =\n CallDiagnosticUtils.anonymizeIPAddress(data.relatedAddress) || undefined;\n }\n\n return JSON.stringify(data);\n }\n\n /**\n * Set a new connection id.\n *\n * @returns {void}\n */\n private resetConnection() {\n this.connectionId = uuid.v4();\n this.shouldSendMetricsOnNextStatsReport = true;\n }\n\n /**\n * Send metrics to the metrics service.\n *\n * @returns {void}\n */\n private sendMetrics() {\n this.webex.request({\n method: 'POST',\n service: 'unifiedTelemetry',\n resource: 'metric/v2',\n headers: {\n type: 'webrtcMedia',\n appId: RTC_METRICS.APP_ID,\n },\n body: {\n metrics: [\n {\n type: 'webrtc',\n version: '1.1.0',\n userId: this.webex.internal.device.userId,\n meetingId: this.meetingId,\n correlationId: this.correlationId,\n connectionId: this.connectionId,\n data: this.metricsQueue,\n },\n ],\n },\n });\n }\n}\n"],"mappings":"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"}
|
@@ -0,0 +1,118 @@
|
|
1
|
+
declare const STATS_DEFAULT: {
|
2
|
+
encryption: string;
|
3
|
+
audio: {
|
4
|
+
send: {
|
5
|
+
maxPacketLossRatio: number;
|
6
|
+
availableBandwidth: number;
|
7
|
+
bytesSent: number;
|
8
|
+
meanRemoteJitter: any[];
|
9
|
+
meanRoundTripTime: any[];
|
10
|
+
};
|
11
|
+
recv: {
|
12
|
+
availableBandwidth: number;
|
13
|
+
bytesReceived: number;
|
14
|
+
meanRtpJitter: any[];
|
15
|
+
meanRoundTripTime: any[];
|
16
|
+
};
|
17
|
+
};
|
18
|
+
video: {
|
19
|
+
send: {
|
20
|
+
maxPacketLossRatio: number;
|
21
|
+
availableBandwidth: number;
|
22
|
+
meanRemoteJitter: any[];
|
23
|
+
meanRoundTripTime: any[];
|
24
|
+
};
|
25
|
+
recv: {
|
26
|
+
availableBandwidth: number;
|
27
|
+
totalPacketsLost: number;
|
28
|
+
meanRtpJitter: any[];
|
29
|
+
meanRoundTripTime: any[];
|
30
|
+
};
|
31
|
+
latency: number;
|
32
|
+
packetsLost: number;
|
33
|
+
};
|
34
|
+
share: {
|
35
|
+
send: {
|
36
|
+
maxPacketLossRatio: number;
|
37
|
+
availableBandwidth: number;
|
38
|
+
totalPacketsLost: number;
|
39
|
+
meanRemoteJitter: any[];
|
40
|
+
meanRoundTripTime: any[];
|
41
|
+
};
|
42
|
+
recv: {
|
43
|
+
availableBandwidth: number;
|
44
|
+
meanRtpJitter: any[];
|
45
|
+
meanRoundTripTime: any[];
|
46
|
+
};
|
47
|
+
latency: number;
|
48
|
+
packetsLost: number;
|
49
|
+
};
|
50
|
+
bandwidth: {
|
51
|
+
systemBandwidth: number;
|
52
|
+
sentPerSecond: number;
|
53
|
+
encodedPerSecond: number;
|
54
|
+
helper: {
|
55
|
+
audioBytesSent: number;
|
56
|
+
videoBytestSent: number;
|
57
|
+
};
|
58
|
+
speed: number;
|
59
|
+
};
|
60
|
+
results: {};
|
61
|
+
connectionType: {
|
62
|
+
systemNetworkType: string;
|
63
|
+
systemIpAddress: string;
|
64
|
+
local: {
|
65
|
+
candidateType: any[];
|
66
|
+
transport: any[];
|
67
|
+
ipAddress: any[];
|
68
|
+
networkType: any[];
|
69
|
+
};
|
70
|
+
remote: {
|
71
|
+
candidateType: any[];
|
72
|
+
transport: any[];
|
73
|
+
ipAddress: any[];
|
74
|
+
networkType: any[];
|
75
|
+
};
|
76
|
+
};
|
77
|
+
resolutions: {
|
78
|
+
video: {
|
79
|
+
send: {
|
80
|
+
width: number;
|
81
|
+
height: number;
|
82
|
+
framesSent: number;
|
83
|
+
};
|
84
|
+
recv: {
|
85
|
+
width: number;
|
86
|
+
height: number;
|
87
|
+
};
|
88
|
+
};
|
89
|
+
share: {
|
90
|
+
send: {
|
91
|
+
width: number;
|
92
|
+
height: number;
|
93
|
+
framesSent: number;
|
94
|
+
};
|
95
|
+
recv: {
|
96
|
+
width: number;
|
97
|
+
height: number;
|
98
|
+
};
|
99
|
+
};
|
100
|
+
};
|
101
|
+
internal: {
|
102
|
+
audio: {
|
103
|
+
send: {};
|
104
|
+
recv: {};
|
105
|
+
};
|
106
|
+
video: {
|
107
|
+
send: {};
|
108
|
+
recv: {};
|
109
|
+
};
|
110
|
+
share: {
|
111
|
+
send: {};
|
112
|
+
recv: {};
|
113
|
+
};
|
114
|
+
remote: {};
|
115
|
+
candidates: {};
|
116
|
+
};
|
117
|
+
};
|
118
|
+
export default STATS_DEFAULT;
|
@@ -0,0 +1,127 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
4
|
+
_Object$defineProperty(exports, "__esModule", {
|
5
|
+
value: true
|
6
|
+
});
|
7
|
+
exports.default = void 0;
|
8
|
+
var STATS_DEFAULT = {
|
9
|
+
encryption: 'sha-256',
|
10
|
+
audio: {
|
11
|
+
send: {
|
12
|
+
maxPacketLossRatio: 0,
|
13
|
+
availableBandwidth: 0,
|
14
|
+
bytesSent: 0,
|
15
|
+
meanRemoteJitter: [],
|
16
|
+
meanRoundTripTime: []
|
17
|
+
},
|
18
|
+
recv: {
|
19
|
+
availableBandwidth: 0,
|
20
|
+
bytesReceived: 0,
|
21
|
+
meanRtpJitter: [],
|
22
|
+
meanRoundTripTime: []
|
23
|
+
}
|
24
|
+
},
|
25
|
+
video: {
|
26
|
+
send: {
|
27
|
+
maxPacketLossRatio: 0,
|
28
|
+
availableBandwidth: 0,
|
29
|
+
meanRemoteJitter: [],
|
30
|
+
meanRoundTripTime: []
|
31
|
+
},
|
32
|
+
recv: {
|
33
|
+
availableBandwidth: 0,
|
34
|
+
totalPacketsLost: 0,
|
35
|
+
meanRtpJitter: [],
|
36
|
+
meanRoundTripTime: []
|
37
|
+
},
|
38
|
+
latency: 0,
|
39
|
+
packetsLost: 0
|
40
|
+
},
|
41
|
+
share: {
|
42
|
+
send: {
|
43
|
+
maxPacketLossRatio: 0,
|
44
|
+
availableBandwidth: 0,
|
45
|
+
totalPacketsLost: 0,
|
46
|
+
meanRemoteJitter: [],
|
47
|
+
meanRoundTripTime: []
|
48
|
+
},
|
49
|
+
recv: {
|
50
|
+
availableBandwidth: 0,
|
51
|
+
meanRtpJitter: [],
|
52
|
+
meanRoundTripTime: []
|
53
|
+
},
|
54
|
+
latency: 0,
|
55
|
+
packetsLost: 0
|
56
|
+
},
|
57
|
+
bandwidth: {
|
58
|
+
systemBandwidth: 0,
|
59
|
+
sentPerSecond: 0,
|
60
|
+
encodedPerSecond: 0,
|
61
|
+
helper: {
|
62
|
+
audioBytesSent: 0,
|
63
|
+
videoBytestSent: 0
|
64
|
+
},
|
65
|
+
speed: 0
|
66
|
+
},
|
67
|
+
results: {},
|
68
|
+
connectionType: {
|
69
|
+
systemNetworkType: 'unknown',
|
70
|
+
systemIpAddress: '0.0.0.0',
|
71
|
+
local: {
|
72
|
+
candidateType: [],
|
73
|
+
transport: [],
|
74
|
+
ipAddress: [],
|
75
|
+
networkType: []
|
76
|
+
},
|
77
|
+
remote: {
|
78
|
+
candidateType: [],
|
79
|
+
transport: [],
|
80
|
+
ipAddress: [],
|
81
|
+
networkType: []
|
82
|
+
}
|
83
|
+
},
|
84
|
+
resolutions: {
|
85
|
+
video: {
|
86
|
+
send: {
|
87
|
+
width: 0,
|
88
|
+
height: 0,
|
89
|
+
framesSent: 0
|
90
|
+
},
|
91
|
+
recv: {
|
92
|
+
width: 0,
|
93
|
+
height: 0
|
94
|
+
}
|
95
|
+
},
|
96
|
+
share: {
|
97
|
+
send: {
|
98
|
+
width: 0,
|
99
|
+
height: 0,
|
100
|
+
framesSent: 0
|
101
|
+
},
|
102
|
+
recv: {
|
103
|
+
width: 0,
|
104
|
+
height: 0
|
105
|
+
}
|
106
|
+
}
|
107
|
+
},
|
108
|
+
internal: {
|
109
|
+
audio: {
|
110
|
+
send: {},
|
111
|
+
recv: {}
|
112
|
+
},
|
113
|
+
video: {
|
114
|
+
send: {},
|
115
|
+
recv: {}
|
116
|
+
},
|
117
|
+
share: {
|
118
|
+
send: {},
|
119
|
+
recv: {}
|
120
|
+
},
|
121
|
+
remote: {},
|
122
|
+
candidates: {}
|
123
|
+
}
|
124
|
+
};
|
125
|
+
var _default = STATS_DEFAULT;
|
126
|
+
exports.default = _default;
|
127
|
+
//# sourceMappingURL=global.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"names":["STATS_DEFAULT","encryption","audio","send","maxPacketLossRatio","availableBandwidth","bytesSent","meanRemoteJitter","meanRoundTripTime","recv","bytesReceived","meanRtpJitter","video","totalPacketsLost","latency","packetsLost","share","bandwidth","systemBandwidth","sentPerSecond","encodedPerSecond","helper","audioBytesSent","videoBytestSent","speed","results","connectionType","systemNetworkType","systemIpAddress","local","candidateType","transport","ipAddress","networkType","remote","resolutions","width","height","framesSent","internal","candidates","_default","exports","default"],"sources":["global.ts"],"sourcesContent":["const STATS_DEFAULT = {\n encryption: 'sha-256',\n audio: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n bytesSent: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n },\n recv: {\n availableBandwidth: 0,\n bytesReceived: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n },\n },\n video: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n },\n recv: {\n availableBandwidth: 0,\n totalPacketsLost: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n },\n latency: 0,\n packetsLost: 0,\n },\n share: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n totalPacketsLost: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n },\n recv: {\n availableBandwidth: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n },\n\n latency: 0,\n packetsLost: 0,\n },\n bandwidth: {\n systemBandwidth: 0,\n sentPerSecond: 0,\n encodedPerSecond: 0,\n helper: {\n audioBytesSent: 0,\n videoBytestSent: 0,\n },\n speed: 0,\n },\n results: {},\n connectionType: {\n systemNetworkType: 'unknown',\n systemIpAddress: '0.0.0.0',\n local: {\n candidateType: [],\n transport: [],\n ipAddress: [],\n networkType: [],\n },\n remote: {\n candidateType: [],\n transport: [],\n ipAddress: [],\n networkType: [],\n },\n },\n resolutions: {\n video: {\n send: {\n width: 0,\n height: 0,\n framesSent: 0,\n },\n recv: {\n width: 0,\n height: 0,\n },\n },\n share: {\n send: {\n width: 0,\n height: 0,\n framesSent: 0,\n },\n recv: {\n width: 0,\n height: 0,\n },\n },\n },\n internal: {\n audio: {\n send: {},\n recv: {},\n },\n video: {\n send: {},\n recv: {},\n },\n share: {\n send: {},\n recv: {},\n },\n remote: {},\n candidates: {},\n },\n};\n\nexport default STATS_DEFAULT;\n"],"mappings":"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"}
|
@@ -0,0 +1,193 @@
|
|
1
|
+
/// <reference types="node" />
|
2
|
+
import EventsScope from '../common/events/events-scope';
|
3
|
+
export declare const EVENTS: {
|
4
|
+
MEDIA_QUALITY: string;
|
5
|
+
NO_FRAMES_SENT: string;
|
6
|
+
NO_VIDEO_ENCODED: string;
|
7
|
+
LOCAL_MEDIA_STARTED: string;
|
8
|
+
LOCAL_MEDIA_STOPPED: string;
|
9
|
+
REMOTE_MEDIA_STARTED: string;
|
10
|
+
REMOTE_MEDIA_STOPPED: string;
|
11
|
+
};
|
12
|
+
/**
|
13
|
+
* Stats Analyzer class that will emit events based on detected quality
|
14
|
+
*
|
15
|
+
* @export
|
16
|
+
* @class StatsAnalyzer
|
17
|
+
* @extends {EventsScope}
|
18
|
+
*/
|
19
|
+
export declare class StatsAnalyzer extends EventsScope {
|
20
|
+
config: any;
|
21
|
+
correlationId: any;
|
22
|
+
lastEmittedStartStopEvent: any;
|
23
|
+
lastMqaDataSent: any;
|
24
|
+
lastStatsResults: any;
|
25
|
+
localMQEStats: any;
|
26
|
+
meetingMediaStatus: any;
|
27
|
+
mqaInterval: NodeJS.Timeout;
|
28
|
+
mqaSentCount: any;
|
29
|
+
networkQualityMonitor: any;
|
30
|
+
peerConnection: any;
|
31
|
+
statsInterval: NodeJS.Timeout;
|
32
|
+
statsResults: any;
|
33
|
+
statsStarted: any;
|
34
|
+
/**
|
35
|
+
* Creates a new instance of StatsAnalyzer
|
36
|
+
* @constructor
|
37
|
+
* @public
|
38
|
+
* @param {Object} config SDK Configuration Object
|
39
|
+
* @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)
|
40
|
+
* @param {Object} statsResults Default properties for stats
|
41
|
+
*/
|
42
|
+
constructor(config: any, networkQualityMonitor?: object, statsResults?: object);
|
43
|
+
populateResults(lastMqa: any): void;
|
44
|
+
resetStatsResults(): void;
|
45
|
+
/**
|
46
|
+
* sets mediaStatus status for analyzing metrics
|
47
|
+
*
|
48
|
+
* @public
|
49
|
+
* @param {Object} status for the audio and video
|
50
|
+
* @memberof StatsAnalyzer
|
51
|
+
* @returns {void}
|
52
|
+
*/
|
53
|
+
updateMediaStatus(status: object): void;
|
54
|
+
/**
|
55
|
+
* captures MQA data from peerconnection
|
56
|
+
*
|
57
|
+
* @public
|
58
|
+
* @memberof StatsAnalyzer
|
59
|
+
* @returns {void}
|
60
|
+
*/
|
61
|
+
sendMqaData(): void;
|
62
|
+
/**
|
63
|
+
* updated the peerconnection when changed
|
64
|
+
*
|
65
|
+
* @private
|
66
|
+
* @memberof updatePeerconnection
|
67
|
+
* @param {PeerConnection} peerConnection
|
68
|
+
* @returns {void}
|
69
|
+
*/
|
70
|
+
updatePeerconnection(peerConnection: any): void;
|
71
|
+
/**
|
72
|
+
* Starts the stats analyzer on interval
|
73
|
+
*
|
74
|
+
* @public
|
75
|
+
* @memberof StatsAnalyzer
|
76
|
+
* @param {PeerConnection} peerConnection
|
77
|
+
* @returns {Promise}
|
78
|
+
*/
|
79
|
+
startAnalyzer(peerConnection: any): Promise<void>;
|
80
|
+
/**
|
81
|
+
* Cleans up the analyzer when done
|
82
|
+
*
|
83
|
+
* @public
|
84
|
+
* @memberof StatsAnalyzer
|
85
|
+
* @returns {void}
|
86
|
+
*/
|
87
|
+
stopAnalyzer(): Promise<void>;
|
88
|
+
/**
|
89
|
+
* Parse a single result of get stats
|
90
|
+
*
|
91
|
+
* @private
|
92
|
+
* @param {*} getStatsResult
|
93
|
+
* @param {String} type
|
94
|
+
* @param {boolean} isSender
|
95
|
+
* @returns {void}
|
96
|
+
* @memberof StatsAnalyzer
|
97
|
+
*/
|
98
|
+
private parseGetStatsResult;
|
99
|
+
/**
|
100
|
+
* Filters the get stats results for types
|
101
|
+
* @private
|
102
|
+
* @param {Array} getStatsResults
|
103
|
+
* @param {String} type
|
104
|
+
* @param {boolean} isSender
|
105
|
+
* @returns {void}
|
106
|
+
*/
|
107
|
+
private filterAndParseGetStatsResults;
|
108
|
+
/**
|
109
|
+
* parse the audio
|
110
|
+
* @param {String} result
|
111
|
+
* @param {boolean} type
|
112
|
+
* @returns {void}
|
113
|
+
*/
|
114
|
+
parseAudioSource(result: any, type: any): void;
|
115
|
+
/**
|
116
|
+
* emits started/stopped events for local/remote media by checking
|
117
|
+
* if given values are increasing or not. The previousValue, currentValue
|
118
|
+
* params can be any numerical value like number of receive packets or
|
119
|
+
* decoded frames, etc.
|
120
|
+
*
|
121
|
+
* @private
|
122
|
+
* @param {string} mediaType
|
123
|
+
* @param {number} previousValue - value to compare
|
124
|
+
* @param {number} currentValue - value to compare (must be same type of value as previousValue)
|
125
|
+
* @param {boolean} isLocal - true if stats are for local media being sent out, false for remote media being received
|
126
|
+
* @memberof StatsAnalyzer
|
127
|
+
* @returns {void}
|
128
|
+
*/
|
129
|
+
emitStartStopEvents: (mediaType: string, previousValue: number, currentValue: number, isLocal: boolean) => void;
|
130
|
+
/**
|
131
|
+
* compares current and previous stats to check if packets are not sent
|
132
|
+
*
|
133
|
+
* @private
|
134
|
+
* @memberof StatsAnalyzer
|
135
|
+
* @returns {void}
|
136
|
+
*/
|
137
|
+
private compareLastStatsResult;
|
138
|
+
/**
|
139
|
+
* Does a `getStats` on all the transceivers and parses the results
|
140
|
+
*
|
141
|
+
* @private
|
142
|
+
* @memberof StatsAnalyzer
|
143
|
+
* @returns {Promise}
|
144
|
+
*/
|
145
|
+
private getStatsAndParse;
|
146
|
+
/**
|
147
|
+
* Processes OutboundRTP stats result and stores
|
148
|
+
* @private
|
149
|
+
* @param {*} result
|
150
|
+
* @param {*} type
|
151
|
+
* @returns {void}
|
152
|
+
*/
|
153
|
+
private processOutboundRTPResult;
|
154
|
+
/**
|
155
|
+
* Processes InboundRTP stats result and stores
|
156
|
+
* @private
|
157
|
+
* @param {*} result
|
158
|
+
* @param {*} type
|
159
|
+
* @returns {void}
|
160
|
+
*/
|
161
|
+
private processInboundRTPResult;
|
162
|
+
/**
|
163
|
+
* Processes remote and local candidate result and stores
|
164
|
+
* @private
|
165
|
+
* @param {*} result
|
166
|
+
* @param {*} type
|
167
|
+
* @param {boolean} isSender
|
168
|
+
* @param {boolean} isRemote
|
169
|
+
*
|
170
|
+
* @returns {void}
|
171
|
+
*/
|
172
|
+
parseCandidate: (result: any, type: any, isSender: boolean, isRemote: boolean) => void;
|
173
|
+
/**
|
174
|
+
* Process Track results
|
175
|
+
*
|
176
|
+
* @private
|
177
|
+
* @param {*} result
|
178
|
+
* @param {*} mediaType
|
179
|
+
* @param {*} sendrecvType
|
180
|
+
* @returns {void}
|
181
|
+
* @memberof StatsAnalyzer
|
182
|
+
*/
|
183
|
+
private processTrackResult;
|
184
|
+
/**
|
185
|
+
*
|
186
|
+
* @private
|
187
|
+
* @param {*} result
|
188
|
+
* @param {*} type
|
189
|
+
* @returns {void}
|
190
|
+
* @memberof StatsAnalyzer
|
191
|
+
*/
|
192
|
+
private compareSentAndReceived;
|
193
|
+
}
|