@webex/plugin-meetings 3.3.1-next.1 → 3.3.1-next.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/mediaQualityMetrics/config.js +10 -6
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/index.js +9 -5
- package/dist/meeting/index.js.map +1 -1
- package/dist/statsAnalyzer/index.js +74 -26
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +34 -8
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/types/mediaQualityMetrics/config.d.ts +6 -0
- package/dist/types/statsAnalyzer/index.d.ts +14 -6
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +17 -4
- package/dist/webinar/index.js +1 -1
- package/package.json +22 -22
- package/src/mediaQualityMetrics/config.ts +9 -3
- package/src/meeting/index.ts +6 -5
- package/src/statsAnalyzer/index.ts +78 -21
- package/src/statsAnalyzer/mqaUtil.ts +53 -5
- package/test/unit/spec/stats-analyzer/index.js +586 -312
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequ
|
|
|
5
5
|
_Object$defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.getVideoSenderStreamMqa = exports.getVideoSenderMqa = exports.getVideoReceiverStreamMqa = exports.getVideoReceiverMqa = exports.getAudioSenderStreamMqa = exports.getAudioSenderMqa = exports.getAudioReceiverStreamMqa = exports.getAudioReceiverMqa = void 0;
|
|
8
|
+
exports.isStreamRequested = exports.getVideoSenderStreamMqa = exports.getVideoSenderMqa = exports.getVideoReceiverStreamMqa = exports.getVideoReceiverMqa = exports.getAudioSenderStreamMqa = exports.getAudioSenderMqa = exports.getAudioReceiverStreamMqa = exports.getAudioReceiverMqa = void 0;
|
|
9
9
|
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
|
|
10
10
|
var _lodash = require("lodash");
|
|
11
11
|
var _constants = require("../constants");
|
|
@@ -33,7 +33,8 @@ var getAudioReceiverMqa = exports.getAudioReceiverMqa = function getAudioReceive
|
|
|
33
33
|
var audioReceiver = _ref.audioReceiver,
|
|
34
34
|
statsResults = _ref.statsResults,
|
|
35
35
|
lastMqaDataSent = _ref.lastMqaDataSent,
|
|
36
|
-
baseMediaType = _ref.baseMediaType
|
|
36
|
+
baseMediaType = _ref.baseMediaType,
|
|
37
|
+
isMultistream = _ref.isMultistream;
|
|
37
38
|
var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
|
|
38
39
|
var getLastTotalValue = function getLastTotalValue(value) {
|
|
39
40
|
return getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
|
|
@@ -55,6 +56,7 @@ var getAudioReceiverMqa = exports.getAudioReceiverMqa = function getAudioReceive
|
|
|
55
56
|
return mediaType.includes(baseMediaType);
|
|
56
57
|
})]) === null || _statsResults$Object$ === void 0 ? void 0 : _statsResults$Object$.direction) || 'inactive';
|
|
57
58
|
audioReceiver.common.common.isMain = !baseMediaType.includes('-share');
|
|
59
|
+
audioReceiver.common.common.multistreamEnabled = isMultistream;
|
|
58
60
|
audioReceiver.common.transportType = statsResults.connectionType.local.transport;
|
|
59
61
|
|
|
60
62
|
// add rtpPacket info inside common as also for call analyzer
|
|
@@ -66,7 +68,8 @@ var getAudioReceiverMqa = exports.getAudioReceiverMqa = function getAudioReceive
|
|
|
66
68
|
audioReceiver.common.mediaHopByHopLost = totalPacketsLost;
|
|
67
69
|
audioReceiver.common.rtpHopByHopLost = totalPacketsLost;
|
|
68
70
|
var fecRecovered = totalFecPacketsReceived - lastFecPacketsReceived - (totalFecPacketsDiscarded - lastFecPacketsDiscarded);
|
|
69
|
-
audioReceiver.common.fecPackets =
|
|
71
|
+
audioReceiver.common.fecPackets = totalFecPacketsReceived - lastFecPacketsReceived;
|
|
72
|
+
audioReceiver.common.rtpRecovered = fecRecovered;
|
|
70
73
|
audioReceiver.common.rtpBitrate = (totalBytesReceived - lastBytesReceived) * 8 / 60 || 0;
|
|
71
74
|
};
|
|
72
75
|
var getAudioReceiverStreamMqa = exports.getAudioReceiverStreamMqa = function getAudioReceiverStreamMqa(_ref2) {
|
|
@@ -109,7 +112,8 @@ var getAudioSenderMqa = exports.getAudioSenderMqa = function getAudioSenderMqa(_
|
|
|
109
112
|
var audioSender = _ref3.audioSender,
|
|
110
113
|
statsResults = _ref3.statsResults,
|
|
111
114
|
lastMqaDataSent = _ref3.lastMqaDataSent,
|
|
112
|
-
baseMediaType = _ref3.baseMediaType
|
|
115
|
+
baseMediaType = _ref3.baseMediaType,
|
|
116
|
+
isMultistream = _ref3.isMultistream;
|
|
113
117
|
var sendrecvType = _constants.STATS.SEND_DIRECTION;
|
|
114
118
|
var getLastTotalValue = function getLastTotalValue(value) {
|
|
115
119
|
return getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
|
|
@@ -135,6 +139,7 @@ var getAudioSenderMqa = exports.getAudioSenderMqa = function getAudioSenderMqa(_
|
|
|
135
139
|
return mediaType.includes(baseMediaType);
|
|
136
140
|
})]) === null || _statsResults$Object$2 === void 0 ? void 0 : _statsResults$Object$2.direction) || 'inactive';
|
|
137
141
|
audioSender.common.common.isMain = !baseMediaType.includes('-share');
|
|
142
|
+
audioSender.common.common.multistreamEnabled = isMultistream;
|
|
138
143
|
audioSender.common.transportType = statsResults.connectionType.local.transport;
|
|
139
144
|
audioSender.common.maxRemoteJitter = (0, _lodash.max)(meanRemoteJitter) * 1000 || 0;
|
|
140
145
|
audioSender.common.meanRemoteJitter = (0, _lodash.mean)(meanRemoteJitter) * 1000 || 0;
|
|
@@ -142,8 +147,8 @@ var getAudioSenderMqa = exports.getAudioSenderMqa = function getAudioSenderMqa(_
|
|
|
142
147
|
// audioSender.streams[0].common.rtpPackets = audioSender.common.rtpPackets;
|
|
143
148
|
// From candidate-pair
|
|
144
149
|
audioSender.common.availableBitrate = getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, 'availableOutgoingBitrate');
|
|
145
|
-
// Calculate based on how much packets lost of received compated to how to the client sent
|
|
146
150
|
|
|
151
|
+
// Calculate based on how much packets lost of received compated to how to the client sent
|
|
147
152
|
var totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;
|
|
148
153
|
audioSender.common.remoteLossRate = totalPacketsSent - lastPacketsSent > 0 ? totalPacketsLostForaMin * 100 / (totalPacketsSent - lastPacketsSent) : 0; // This is the packets sent with in last min
|
|
149
154
|
|
|
@@ -182,7 +187,8 @@ var getVideoReceiverMqa = exports.getVideoReceiverMqa = function getVideoReceive
|
|
|
182
187
|
var videoReceiver = _ref5.videoReceiver,
|
|
183
188
|
statsResults = _ref5.statsResults,
|
|
184
189
|
lastMqaDataSent = _ref5.lastMqaDataSent,
|
|
185
|
-
baseMediaType = _ref5.baseMediaType
|
|
190
|
+
baseMediaType = _ref5.baseMediaType,
|
|
191
|
+
isMultistream = _ref5.isMultistream;
|
|
186
192
|
var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
|
|
187
193
|
var getLastTotalValue = function getLastTotalValue(value) {
|
|
188
194
|
return getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
|
|
@@ -208,6 +214,7 @@ var getVideoReceiverMqa = exports.getVideoReceiverMqa = function getVideoReceive
|
|
|
208
214
|
videoReceiver.common.common.direction = ((_statsResults$Object$3 = statsResults[(0, _keys.default)(statsResults).find(function (mediaType) {
|
|
209
215
|
return mediaType.includes(baseMediaType);
|
|
210
216
|
})]) === null || _statsResults$Object$3 === void 0 ? void 0 : _statsResults$Object$3.direction) || 'inactive';
|
|
217
|
+
videoReceiver.common.common.multistreamEnabled = isMultistream;
|
|
211
218
|
videoReceiver.common.common.isMain = !baseMediaType.includes('-share');
|
|
212
219
|
videoReceiver.common.transportType = statsResults.connectionType.local.transport;
|
|
213
220
|
|
|
@@ -232,7 +239,7 @@ var getVideoReceiverMqa = exports.getVideoReceiverMqa = function getVideoReceive
|
|
|
232
239
|
videoReceiver.common.rtxBitrate = totalRtxBytesReceivedInaMin ? totalRtxBytesReceivedInaMin * 8 / 60 : 0;
|
|
233
240
|
};
|
|
234
241
|
var getVideoReceiverStreamMqa = exports.getVideoReceiverStreamMqa = function getVideoReceiverStreamMqa(_ref6) {
|
|
235
|
-
var _lastMqaDataSent$medi13, _lastMqaDataSent$medi14, _lastMqaDataSent$medi15, _lastMqaDataSent$medi16, _lastMqaDataSent$medi17, _lastMqaDataSent$medi18, _lastMqaDataSent$medi19, _lastMqaDataSent$medi20;
|
|
242
|
+
var _lastMqaDataSent$medi13, _lastMqaDataSent$medi14, _lastMqaDataSent$medi15, _lastMqaDataSent$medi16, _lastMqaDataSent$medi17, _lastMqaDataSent$medi18, _lastMqaDataSent$medi19, _lastMqaDataSent$medi20, _statsResults$mediaTy, _statsResults$mediaTy2;
|
|
236
243
|
var videoReceiverStream = _ref6.videoReceiverStream,
|
|
237
244
|
statsResults = _ref6.statsResults,
|
|
238
245
|
lastMqaDataSent = _ref6.lastMqaDataSent,
|
|
@@ -270,13 +277,15 @@ var getVideoReceiverStreamMqa = exports.getVideoReceiverStreamMqa = function get
|
|
|
270
277
|
videoReceiverStream.receivedFrameSize = videoReceiverStream.receivedHeight * videoReceiverStream.receivedWidth / 256;
|
|
271
278
|
videoReceiverStream.receivedKeyFrames = statsResults[mediaType][sendrecvType].keyFramesDecoded - lastKeyFramesDecoded || 0;
|
|
272
279
|
videoReceiverStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalPliCount - lastPliCount || 0;
|
|
280
|
+
videoReceiverStream.isActiveSpeaker = statsResults[mediaType][sendrecvType].isActiveSpeaker || ((_statsResults$mediaTy = statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp) !== null && _statsResults$mediaTy !== void 0 ? _statsResults$mediaTy : 0) > 0 && performance.now() + performance.timeOrigin - ((_statsResults$mediaTy2 = statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp) !== null && _statsResults$mediaTy2 !== void 0 ? _statsResults$mediaTy2 : 0) < _constants.MQA_INTERVAL;
|
|
273
281
|
};
|
|
274
282
|
var getVideoSenderMqa = exports.getVideoSenderMqa = function getVideoSenderMqa(_ref7) {
|
|
275
283
|
var _statsResults$Object$4;
|
|
276
284
|
var videoSender = _ref7.videoSender,
|
|
277
285
|
statsResults = _ref7.statsResults,
|
|
278
286
|
lastMqaDataSent = _ref7.lastMqaDataSent,
|
|
279
|
-
baseMediaType = _ref7.baseMediaType
|
|
287
|
+
baseMediaType = _ref7.baseMediaType,
|
|
288
|
+
isMultistream = _ref7.isMultistream;
|
|
280
289
|
var sendrecvType = _constants.STATS.SEND_DIRECTION;
|
|
281
290
|
var getLastTotalValue = function getLastTotalValue(value) {
|
|
282
291
|
return getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
|
|
@@ -298,6 +307,7 @@ var getVideoSenderMqa = exports.getVideoSenderMqa = function getVideoSenderMqa(_
|
|
|
298
307
|
videoSender.common.common.direction = ((_statsResults$Object$4 = statsResults[(0, _keys.default)(statsResults).find(function (mediaType) {
|
|
299
308
|
return mediaType.includes(baseMediaType);
|
|
300
309
|
})]) === null || _statsResults$Object$4 === void 0 ? void 0 : _statsResults$Object$4.direction) || 'inactive';
|
|
310
|
+
videoSender.common.common.multistreamEnabled = isMultistream;
|
|
301
311
|
videoSender.common.common.isMain = !baseMediaType.includes('-share');
|
|
302
312
|
videoSender.common.transportType = statsResults.connectionType.local.transport;
|
|
303
313
|
var meanRemoteJitter = (0, _keys.default)(statsResults).filter(function (mt) {
|
|
@@ -365,4 +375,20 @@ var getVideoSenderStreamMqa = exports.getVideoSenderStreamMqa = function getVide
|
|
|
365
375
|
videoSenderStream.requestedBitrate = statsResults[mediaType][sendrecvType].requestedBitrate || 0;
|
|
366
376
|
videoSenderStream.requestedFrameSize = statsResults[mediaType][sendrecvType].requestedFrameSize || 0;
|
|
367
377
|
};
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* Checks if stream stats should be updated based on request status and elapsed time.
|
|
381
|
+
*
|
|
382
|
+
* @param {Object} statsResults - Stats results object.
|
|
383
|
+
* @param {string} mediaType - Media type (e.g., 'audio', 'video').
|
|
384
|
+
* @param {string} direction - Stats direction (e.g., 'send', 'receive').
|
|
385
|
+
* @returns {boolean} Whether stats should be updated.
|
|
386
|
+
*/
|
|
387
|
+
var isStreamRequested = exports.isStreamRequested = function isStreamRequested(statsResults, mediaType, direction) {
|
|
388
|
+
var _statsResults$mediaTy3, _statsResults$mediaTy4;
|
|
389
|
+
var now = performance.timeOrigin + performance.now();
|
|
390
|
+
var lastUpdateTimestamp = (_statsResults$mediaTy3 = statsResults[mediaType][direction]) === null || _statsResults$mediaTy3 === void 0 ? void 0 : _statsResults$mediaTy3.lastRequestedUpdateTimestamp;
|
|
391
|
+
var isRequested = (_statsResults$mediaTy4 = statsResults[mediaType][direction]) === null || _statsResults$mediaTy4 === void 0 ? void 0 : _statsResults$mediaTy4.isRequested;
|
|
392
|
+
return isRequested || lastUpdateTimestamp && now - lastUpdateTimestamp < _constants.MQA_INTERVAL;
|
|
393
|
+
};
|
|
368
394
|
//# sourceMappingURL=mqaUtil.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_lodash","require","_constants","getTotalValueFromBaseType","stats","sendrecvType","baseMediaType","value","_keys","default","filter","mt","includes","reduce","acc","_stats$mt","_stats$mt$sendrecvTyp","getAudioReceiverMqa","exports","_ref","_statsResults$Object$","audioReceiver","statsResults","lastMqaDataSent","STATS","RECEIVE_DIRECTION","getLastTotalValue","getTotalValue","lastPacketsReceived","lastPacketsLost","lastBytesReceived","lastFecPacketsReceived","lastFecPacketsDiscarded","totalPacketsReceived","packetsLost","totalBytesReceived","totalFecPacketsReceived","totalFecPacketsDiscarded","common","direction","find","mediaType","isMain","transportType","connectionType","local","transport","rtpPackets","totalPacketsLost","mediaHopByHopLost","rtpHopByHopLost","fecRecovered","fecPackets","rtpBitrate","getAudioReceiverStreamMqa","_ref2","_lastMqaDataSent$medi","_lastMqaDataSent$medi2","_lastMqaDataSent$medi3","_lastMqaDataSent$medi4","_lastMqaDataSent$medi5","_lastMqaDataSent$medi6","_lastMqaDataSent$medi7","_lastMqaDataSent$medi8","audioReceiverStream","lastPacketsDecoded","totalSamplesDecoded","lastSamplesReceived","totalSamplesReceived","lastConcealedSamples","concealedSamples","fecPacketsReceived","fecPacketsDiscarded","csi","push","maxRtpJitter","max","meanRtpJitter","mean","rtpJitter","rtpEndToEndLost","framesDropped","renderedFrameRate","framesReceived","concealedFrames","receivedBitrate","getAudioSenderMqa","_ref3","_statsResults$Object$2","audioSender","SEND_DIRECTION","lastPacketsSent","lastPacketsLostTotal","totalPacketsLostOnReceiver","totalPacketsSent","meanRemoteJitter","concat","meanRoundTripTime","maxRemoteJitter","availableBitrate","totalPacketsLostForaMin","remoteLossRate","maxRoundTripTime","roundTripTime","totalBytesSentInaMin","getAudioSenderStreamMqa","_ref4","_lastMqaDataSent$medi9","_lastMqaDataSent$medi10","_lastMqaDataSent$medi11","_lastMqaDataSent$medi12","audioSenderStream","lastBytesSent","totalBytesSent","lastFramesEncoded","totalKeyFramesEncoded","lastFirCount","totalFirCount","transmittedBitrate","transmittedKeyFrames","requestedKeyFrames","requestedBitrate","getVideoReceiverMqa","_ref5","_statsResults$Object$3","videoReceiver","lastRtxPacketsReceived","lastRtxBytesReceived","totalRtxPacketsReceived","totalRtxBytesReceived","totalBytesReceivedInaMin","totalRtxBytesReceivedInaMin","rtxPackets","rtxBitrate","getVideoReceiverStreamMqa","_ref6","_lastMqaDataSent$medi13","_lastMqaDataSent$medi14","_lastMqaDataSent$medi15","_lastMqaDataSent$medi16","_lastMqaDataSent$medi17","_lastMqaDataSent$medi18","_lastMqaDataSent$medi19","_lastMqaDataSent$medi20","videoReceiverStream","lastFramesReceived","lastFramesDecoded","framesDecoded","lastFramesDropped","lastKeyFramesDecoded","keyFramesDecoded","lastPliCount","totalPliCount","totalPacketLoss","totalFrameReceivedInaMin","totalFrameDecodedInaMin","receivedFrameRate","Math","round","receivedHeight","height","receivedWidth","width","receivedFrameSize","receivedKeyFrames","getVideoSenderMqa","_ref7","_statsResults$Object$4","videoSender","lastRtxPacketsSent","lastRtxBytesSent","availableOutgoingBitrate","totalRtxPacketsSent","totalRtxBytesSent","totalRtxBytesSentInaMin","getVideoSenderStreamMqa","_ref8","_lastMqaDataSent$medi21","_lastMqaDataSent$medi22","_lastMqaDataSent$medi23","_lastMqaDataSent$medi24","_lastMqaDataSent$medi25","videoSenderStream","lastKeyFramesEncoded","lastFramesSent","framesSent","totalFrameSentInaMin","transmittedFrameRate","transmittedHeight","transmittedWidth","transmittedFrameSize","requestedFrameSize"],"sources":["mqaUtil.ts"],"sourcesContent":["/* eslint-disable no-param-reassign, prefer-destructuring */\n\nimport {mean, max} from 'lodash';\n\nimport {STATS} from '../constants';\n\n/**\n * Get the totals of a certain value from a certain media type.\n *\n * @param {object} stats - The large stats object.\n * @param {string} sendrecvType - \"send\" or \"recv\".\n * @param {string} baseMediaType - audio or video _and_ share or non-share.\n * @param {string} value - The value we want to get the totals of.\n * @returns {number}\n */\nconst getTotalValueFromBaseType = (\n stats: object,\n sendrecvType: string,\n baseMediaType: string,\n value: string\n): number =>\n Object.keys(stats)\n .filter((mt) => mt.includes(baseMediaType))\n .reduce((acc, mt) => acc + (stats[mt]?.[sendrecvType]?.[value] || 0), 0);\n\nexport const getAudioReceiverMqa = ({\n audioReceiver,\n statsResults,\n lastMqaDataSent,\n baseMediaType,\n}) => {\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n const getLastTotalValue = (value: string) =>\n getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);\n const getTotalValue = (value: string) =>\n getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);\n\n const lastPacketsReceived = getLastTotalValue('totalPacketsReceived');\n const lastPacketsLost = getLastTotalValue('totalPacketsLost');\n const lastBytesReceived = getLastTotalValue('totalBytesReceived');\n const lastFecPacketsReceived = getLastTotalValue('fecPacketsReceived');\n const lastFecPacketsDiscarded = getLastTotalValue('fecPacketsDiscarded');\n\n const totalPacketsReceived = getTotalValue('totalPacketsReceived');\n const packetsLost = getTotalValue('totalPacketsLost');\n const totalBytesReceived = getTotalValue('totalBytesReceived');\n const totalFecPacketsReceived = getTotalValue('fecPacketsReceived');\n const totalFecPacketsDiscarded = getTotalValue('fecPacketsDiscarded');\n\n audioReceiver.common.common.direction =\n statsResults[Object.keys(statsResults).find((mediaType) => mediaType.includes(baseMediaType))]\n ?.direction || 'inactive';\n audioReceiver.common.common.isMain = !baseMediaType.includes('-share');\n audioReceiver.common.transportType = statsResults.connectionType.local.transport;\n\n // add rtpPacket info inside common as also for call analyzer\n audioReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived;\n\n // Hop by hop are numbers and not percentage so we compare on what we sent the last min\n // collect the packets received for the last min\n const totalPacketsLost = packetsLost - lastPacketsLost;\n audioReceiver.common.mediaHopByHopLost = totalPacketsLost;\n audioReceiver.common.rtpHopByHopLost = totalPacketsLost;\n\n const fecRecovered =\n totalFecPacketsReceived -\n lastFecPacketsReceived -\n (totalFecPacketsDiscarded - lastFecPacketsDiscarded);\n audioReceiver.common.fecPackets = fecRecovered;\n\n audioReceiver.common.rtpBitrate = ((totalBytesReceived - lastBytesReceived) * 8) / 60 || 0;\n};\n\nexport const getAudioReceiverStreamMqa = ({\n audioReceiverStream,\n statsResults,\n lastMqaDataSent,\n mediaType,\n}) => {\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n const lastPacketsDecoded = lastMqaDataSent[mediaType]?.[sendrecvType].totalSamplesDecoded || 0;\n const lastSamplesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalSamplesReceived || 0;\n const lastConcealedSamples = lastMqaDataSent[mediaType]?.[sendrecvType].concealedSamples || 0;\n const lastBytesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesReceived || 0;\n const lastFecPacketsReceived = lastMqaDataSent[mediaType]?.[sendrecvType].fecPacketsReceived || 0;\n const lastFecPacketsDiscarded =\n lastMqaDataSent[mediaType]?.[sendrecvType].fecPacketsDiscarded || 0;\n const lastPacketsReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsReceived || 0;\n const lastPacketsLost = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLost || 0;\n\n const {csi} = statsResults[mediaType];\n if (csi && !audioReceiverStream.common.csi.includes(csi)) {\n audioReceiverStream.common.csi.push(csi);\n }\n\n audioReceiverStream.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;\n\n audioReceiverStream.common.maxRtpJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;\n audioReceiverStream.common.meanRtpJitter =\n mean(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;\n audioReceiverStream.common.rtpJitter = audioReceiverStream.common.maxRtpJitter;\n\n // Fec packets do come in as part of the FEC only for audio\n const fecRecovered =\n statsResults[mediaType][sendrecvType].fecPacketsReceived -\n lastFecPacketsReceived -\n (statsResults[mediaType][sendrecvType].fecPacketsDiscarded - lastFecPacketsDiscarded);\n\n audioReceiverStream.common.rtpEndToEndLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost - fecRecovered || 0;\n\n audioReceiverStream.common.framesDropped =\n statsResults[mediaType][sendrecvType].totalSamplesDecoded - lastPacketsDecoded || 0;\n audioReceiverStream.common.renderedFrameRate =\n (audioReceiverStream.common.framesDropped * 100) / 60 || 0;\n\n audioReceiverStream.common.framesReceived =\n statsResults[mediaType][sendrecvType].totalSamplesReceived - lastSamplesReceived || 0;\n audioReceiverStream.common.concealedFrames =\n statsResults[mediaType][sendrecvType].concealedSamples - lastConcealedSamples || 0;\n audioReceiverStream.common.receivedBitrate =\n ((statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived) * 8) / 60 || 0;\n};\n\nexport const getAudioSenderMqa = ({audioSender, statsResults, lastMqaDataSent, baseMediaType}) => {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n const getLastTotalValue = (value: string) =>\n getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);\n const getTotalValue = (value: string) =>\n getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);\n\n const lastPacketsSent = getLastTotalValue('totalPacketsSent');\n const lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');\n\n const totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');\n const totalPacketsSent = getTotalValue('totalPacketsSent');\n\n const meanRemoteJitter = Object.keys(statsResults)\n .filter((mt) => mt.includes(baseMediaType))\n .reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);\n const meanRoundTripTime = Object.keys(statsResults)\n .filter((mt) => mt.includes(baseMediaType))\n .reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);\n\n audioSender.common.common.direction =\n statsResults[Object.keys(statsResults).find((mediaType) => mediaType.includes(baseMediaType))]\n ?.direction || 'inactive';\n audioSender.common.common.isMain = !baseMediaType.includes('-share');\n audioSender.common.transportType = statsResults.connectionType.local.transport;\n\n audioSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000 || 0;\n audioSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000 || 0;\n\n audioSender.common.rtpPackets = totalPacketsSent - lastPacketsSent || 0;\n // audioSender.streams[0].common.rtpPackets = audioSender.common.rtpPackets;\n // From candidate-pair\n audioSender.common.availableBitrate = getTotalValueFromBaseType(\n statsResults,\n sendrecvType,\n baseMediaType,\n 'availableOutgoingBitrate'\n );\n // Calculate based on how much packets lost of received compated to how to the client sent\n\n const totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;\n audioSender.common.remoteLossRate =\n totalPacketsSent - lastPacketsSent > 0\n ? (totalPacketsLostForaMin * 100) / (totalPacketsSent - lastPacketsSent)\n : 0; // This is the packets sent with in last min\n\n audioSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000 || 0;\n audioSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000 || 0;\n audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin =\n getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, 'totalBytesSent') -\n getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, 'totalBytesSent');\n\n audioSender.common.rtpBitrate = totalBytesSentInaMin ? (totalBytesSentInaMin * 8) / 60 : 0;\n};\n\nexport const getAudioSenderStreamMqa = ({\n audioSenderStream,\n statsResults,\n lastMqaDataSent,\n mediaType,\n}) => {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n const lastBytesSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesSent || 0;\n const lastFramesEncoded = lastMqaDataSent[mediaType]?.[sendrecvType].totalKeyFramesEncoded || 0;\n const lastFirCount = lastMqaDataSent[mediaType]?.[sendrecvType].totalFirCount || 0;\n const lastPacketsSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsSent || 0;\n\n const {csi} = statsResults[mediaType];\n if (csi && !audioSenderStream.common.csi.includes(csi)) {\n audioSenderStream.common.csi.push(csi);\n }\n\n audioSenderStream.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;\n\n const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;\n audioSenderStream.common.transmittedBitrate = totalBytesSentInaMin\n ? (totalBytesSentInaMin * 8) / 60\n : 0;\n\n audioSenderStream.transmittedKeyFrames =\n statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastFramesEncoded || 0;\n audioSenderStream.requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;\n\n audioSenderStream.requestedBitrate = statsResults[mediaType][sendrecvType].requestedBitrate || 0;\n};\n\nexport const getVideoReceiverMqa = ({\n videoReceiver,\n statsResults,\n lastMqaDataSent,\n baseMediaType,\n}) => {\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n const getLastTotalValue = (value: string) =>\n getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);\n const getTotalValue = (value: string) =>\n getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);\n\n const lastPacketsReceived = getLastTotalValue('totalPacketsReceived');\n const lastPacketsLost = getLastTotalValue('totalPacketsLost');\n const lastBytesReceived = getLastTotalValue('totalBytesReceived');\n\n const lastRtxPacketsReceived = getLastTotalValue('totalRtxPacketsReceived');\n const lastRtxBytesReceived = getLastTotalValue('totalRtxBytesReceived');\n\n const packetsLost = getTotalValue('totalPacketsLost');\n const totalPacketsReceived = getTotalValue('totalPacketsReceived');\n const totalBytesReceived = getTotalValue('totalBytesReceived');\n\n const totalRtxPacketsReceived = getTotalValue('totalRtxPacketsReceived');\n const totalRtxBytesReceived = getTotalValue('totalRtxBytesReceived');\n\n const meanRemoteJitter = Object.keys(statsResults)\n .filter((mt) => mt.includes(baseMediaType))\n .reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);\n\n videoReceiver.common.common.direction =\n statsResults[Object.keys(statsResults).find((mediaType) => mediaType.includes(baseMediaType))]\n ?.direction || 'inactive';\n videoReceiver.common.common.isMain = !baseMediaType.includes('-share');\n videoReceiver.common.transportType = statsResults.connectionType.local.transport;\n\n // collect the packets received for the last min\n videoReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived || 0;\n\n // Hop by hop are numbers and not percentage so we compare on what we sent the last min\n // this is including packet lost\n const totalPacketsLost = packetsLost - lastPacketsLost;\n videoReceiver.common.mediaHopByHopLost = totalPacketsLost;\n videoReceiver.common.rtpHopByHopLost = totalPacketsLost;\n\n // calculate this values\n videoReceiver.common.maxRemoteJitter = max(meanRemoteJitter) * 1000 || 0;\n videoReceiver.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000 || 0;\n\n // Calculate the outgoing bitrate\n const totalBytesReceivedInaMin = totalBytesReceived - lastBytesReceived;\n const totalRtxBytesReceivedInaMin = totalRtxBytesReceived - lastRtxBytesReceived;\n\n videoReceiver.common.rtpBitrate = totalBytesReceivedInaMin\n ? (totalBytesReceivedInaMin * 8) / 60\n : 0;\n videoReceiver.common.rtxPackets = totalRtxPacketsReceived - lastRtxPacketsReceived;\n videoReceiver.common.rtxBitrate = totalRtxBytesReceivedInaMin\n ? (totalRtxBytesReceivedInaMin * 8) / 60\n : 0;\n};\n\nexport const getVideoReceiverStreamMqa = ({\n videoReceiverStream,\n statsResults,\n lastMqaDataSent,\n mediaType,\n}) => {\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n const lastPacketsReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsReceived || 0;\n const lastPacketsLost = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLost || 0;\n const lastBytesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesReceived || 0;\n const lastFramesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].framesReceived || 0;\n const lastFramesDecoded = lastMqaDataSent[mediaType]?.[sendrecvType].framesDecoded || 0;\n const lastFramesDropped = lastMqaDataSent[mediaType]?.[sendrecvType].framesDropped || 0;\n const lastKeyFramesDecoded = lastMqaDataSent[mediaType]?.[sendrecvType].keyFramesDecoded || 0;\n const lastPliCount = lastMqaDataSent[mediaType]?.[sendrecvType].totalPliCount || 0;\n\n const {csi} = statsResults[mediaType];\n if (csi && !videoReceiverStream.common.csi.includes(csi)) {\n videoReceiverStream.common.csi.push(csi);\n }\n\n videoReceiverStream.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;\n\n const totalPacketLoss =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;\n\n // End to end packetloss is after recovery\n videoReceiverStream.common.rtpEndToEndLost = totalPacketLoss;\n\n videoReceiverStream.common.rtpJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n const totalBytesReceivedInaMin =\n statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived;\n videoReceiverStream.common.receivedBitrate = totalBytesReceivedInaMin\n ? (totalBytesReceivedInaMin * 8) / 60\n : 0;\n\n const totalFrameReceivedInaMin =\n statsResults[mediaType][sendrecvType].framesReceived - lastFramesReceived;\n const totalFrameDecodedInaMin =\n statsResults[mediaType][sendrecvType].framesDecoded - lastFramesDecoded;\n\n videoReceiverStream.common.receivedFrameRate = Math.round(\n totalFrameReceivedInaMin ? totalFrameReceivedInaMin / 60 : 0\n );\n videoReceiverStream.common.renderedFrameRate = Math.round(\n totalFrameDecodedInaMin ? totalFrameDecodedInaMin / 60 : 0\n );\n\n videoReceiverStream.common.framesDropped =\n statsResults[mediaType][sendrecvType].framesDropped - lastFramesDropped || 0;\n videoReceiverStream.receivedHeight = statsResults[mediaType][sendrecvType].height || 0;\n videoReceiverStream.receivedWidth = statsResults[mediaType][sendrecvType].width || 0;\n videoReceiverStream.receivedFrameSize =\n (videoReceiverStream.receivedHeight * videoReceiverStream.receivedWidth) / 256;\n\n videoReceiverStream.receivedKeyFrames =\n statsResults[mediaType][sendrecvType].keyFramesDecoded - lastKeyFramesDecoded || 0;\n videoReceiverStream.requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalPliCount - lastPliCount || 0;\n};\n\nexport const getVideoSenderMqa = ({videoSender, statsResults, lastMqaDataSent, baseMediaType}) => {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n const getLastTotalValue = (value: string) =>\n getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);\n const getTotalValue = (value: string) =>\n getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);\n\n const lastPacketsSent = getLastTotalValue('totalPacketsSent');\n const lastBytesSent = getLastTotalValue('totalBytesSent');\n const lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');\n const lastRtxPacketsSent = getLastTotalValue('totalRtxPacketsSent');\n const lastRtxBytesSent = getLastTotalValue('totalRtxBytesSent');\n\n const totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');\n const totalPacketsSent = getTotalValue('totalPacketsSent');\n const totalBytesSent = getTotalValue('totalBytesSent');\n const availableOutgoingBitrate = getTotalValue('availableOutgoingBitrate');\n const totalRtxPacketsSent = getTotalValue('totalRtxPacketsSent');\n const totalRtxBytesSent = getTotalValue('totalRtxBytesSent');\n\n videoSender.common.common.direction =\n statsResults[Object.keys(statsResults).find((mediaType) => mediaType.includes(baseMediaType))]\n ?.direction || 'inactive';\n videoSender.common.common.isMain = !baseMediaType.includes('-share');\n videoSender.common.transportType = statsResults.connectionType.local.transport;\n\n const meanRemoteJitter = Object.keys(statsResults)\n .filter((mt) => mt.includes(baseMediaType))\n .reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);\n const meanRoundTripTime = Object.keys(statsResults)\n .filter((mt) => mt.includes(baseMediaType))\n .reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);\n\n // @ts-ignore\n videoSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000 || 0;\n videoSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000 || 0;\n\n videoSender.common.rtpPackets = totalPacketsSent - lastPacketsSent;\n videoSender.common.availableBitrate = availableOutgoingBitrate;\n\n // Calculate based on how much packets lost of received compated to how to the client sent\n const totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;\n\n videoSender.common.remoteLossRate =\n totalPacketsSent - lastPacketsSent > 0\n ? (totalPacketsLostForaMin * 100) / (totalPacketsSent - lastPacketsSent)\n : 0; // This is the packets sent with in last min || 0;\n\n videoSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000 || 0;\n videoSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000 || 0;\n videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin = totalBytesSent - lastBytesSent;\n const totalRtxBytesSentInaMin = totalRtxBytesSent - lastRtxBytesSent;\n\n videoSender.common.rtpBitrate = totalBytesSentInaMin ? (totalBytesSentInaMin * 8) / 60 : 0;\n videoSender.common.rtxPackets = totalRtxPacketsSent - lastRtxPacketsSent;\n videoSender.common.rtxBitrate = totalRtxBytesSentInaMin ? (totalRtxBytesSentInaMin * 8) / 60 : 0;\n};\n\nexport const getVideoSenderStreamMqa = ({\n videoSenderStream,\n statsResults,\n lastMqaDataSent,\n mediaType,\n}) => {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n const lastPacketsSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsSent || 0;\n const lastBytesSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesSent || 0;\n const lastKeyFramesEncoded =\n lastMqaDataSent[mediaType]?.[sendrecvType].totalKeyFramesEncoded || 0;\n const lastFirCount = lastMqaDataSent[mediaType]?.[sendrecvType].totalFirCount || 0;\n const lastFramesSent = lastMqaDataSent[mediaType]?.[sendrecvType].framesSent || 0;\n\n const {csi} = statsResults[mediaType];\n if (csi && !videoSenderStream.common.csi.includes(csi)) {\n videoSenderStream.common.csi.push(csi);\n }\n\n videoSenderStream.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;\n\n videoSenderStream.common.transmittedBitrate = totalBytesSentInaMin\n ? (totalBytesSentInaMin * 8) / 60\n : 0;\n\n videoSenderStream.transmittedKeyFrames =\n statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastKeyFramesEncoded || 0;\n videoSenderStream.requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;\n\n // From tracks //TODO: calculate a proper one\n const totalFrameSentInaMin =\n statsResults[mediaType][sendrecvType].framesSent - (lastFramesSent || 0);\n\n videoSenderStream.common.transmittedFrameRate = Math.round(\n totalFrameSentInaMin ? totalFrameSentInaMin / 60 : 0\n );\n videoSenderStream.transmittedHeight = statsResults[mediaType][sendrecvType].height || 0;\n videoSenderStream.transmittedWidth = statsResults[mediaType][sendrecvType].width || 0;\n videoSenderStream.transmittedFrameSize =\n (videoSenderStream.transmittedHeight * videoSenderStream.transmittedWidth) / 256;\n videoSenderStream.requestedBitrate = statsResults[mediaType][sendrecvType].requestedBitrate || 0;\n videoSenderStream.requestedFrameSize =\n statsResults[mediaType][sendrecvType].requestedFrameSize || 0;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_lodash","require","_constants","getTotalValueFromBaseType","stats","sendrecvType","baseMediaType","value","_keys","default","filter","mt","includes","reduce","acc","_stats$mt","_stats$mt$sendrecvTyp","getAudioReceiverMqa","exports","_ref","_statsResults$Object$","audioReceiver","statsResults","lastMqaDataSent","isMultistream","STATS","RECEIVE_DIRECTION","getLastTotalValue","getTotalValue","lastPacketsReceived","lastPacketsLost","lastBytesReceived","lastFecPacketsReceived","lastFecPacketsDiscarded","totalPacketsReceived","packetsLost","totalBytesReceived","totalFecPacketsReceived","totalFecPacketsDiscarded","common","direction","find","mediaType","isMain","multistreamEnabled","transportType","connectionType","local","transport","rtpPackets","totalPacketsLost","mediaHopByHopLost","rtpHopByHopLost","fecRecovered","fecPackets","rtpRecovered","rtpBitrate","getAudioReceiverStreamMqa","_ref2","_lastMqaDataSent$medi","_lastMqaDataSent$medi2","_lastMqaDataSent$medi3","_lastMqaDataSent$medi4","_lastMqaDataSent$medi5","_lastMqaDataSent$medi6","_lastMqaDataSent$medi7","_lastMqaDataSent$medi8","audioReceiverStream","lastPacketsDecoded","totalSamplesDecoded","lastSamplesReceived","totalSamplesReceived","lastConcealedSamples","concealedSamples","fecPacketsReceived","fecPacketsDiscarded","csi","push","maxRtpJitter","max","meanRtpJitter","mean","rtpJitter","rtpEndToEndLost","framesDropped","renderedFrameRate","framesReceived","concealedFrames","receivedBitrate","getAudioSenderMqa","_ref3","_statsResults$Object$2","audioSender","SEND_DIRECTION","lastPacketsSent","lastPacketsLostTotal","totalPacketsLostOnReceiver","totalPacketsSent","meanRemoteJitter","concat","meanRoundTripTime","maxRemoteJitter","availableBitrate","totalPacketsLostForaMin","remoteLossRate","maxRoundTripTime","roundTripTime","totalBytesSentInaMin","getAudioSenderStreamMqa","_ref4","_lastMqaDataSent$medi9","_lastMqaDataSent$medi10","_lastMqaDataSent$medi11","_lastMqaDataSent$medi12","audioSenderStream","lastBytesSent","totalBytesSent","lastFramesEncoded","totalKeyFramesEncoded","lastFirCount","totalFirCount","transmittedBitrate","transmittedKeyFrames","requestedKeyFrames","requestedBitrate","getVideoReceiverMqa","_ref5","_statsResults$Object$3","videoReceiver","lastRtxPacketsReceived","lastRtxBytesReceived","totalRtxPacketsReceived","totalRtxBytesReceived","totalBytesReceivedInaMin","totalRtxBytesReceivedInaMin","rtxPackets","rtxBitrate","getVideoReceiverStreamMqa","_ref6","_lastMqaDataSent$medi13","_lastMqaDataSent$medi14","_lastMqaDataSent$medi15","_lastMqaDataSent$medi16","_lastMqaDataSent$medi17","_lastMqaDataSent$medi18","_lastMqaDataSent$medi19","_lastMqaDataSent$medi20","_statsResults$mediaTy","_statsResults$mediaTy2","videoReceiverStream","lastFramesReceived","lastFramesDecoded","framesDecoded","lastFramesDropped","lastKeyFramesDecoded","keyFramesDecoded","lastPliCount","totalPliCount","totalPacketLoss","totalFrameReceivedInaMin","totalFrameDecodedInaMin","receivedFrameRate","Math","round","receivedHeight","height","receivedWidth","width","receivedFrameSize","receivedKeyFrames","isActiveSpeaker","lastActiveSpeakerTimestamp","performance","now","timeOrigin","MQA_INTERVAL","getVideoSenderMqa","_ref7","_statsResults$Object$4","videoSender","lastRtxPacketsSent","lastRtxBytesSent","availableOutgoingBitrate","totalRtxPacketsSent","totalRtxBytesSent","totalRtxBytesSentInaMin","getVideoSenderStreamMqa","_ref8","_lastMqaDataSent$medi21","_lastMqaDataSent$medi22","_lastMqaDataSent$medi23","_lastMqaDataSent$medi24","_lastMqaDataSent$medi25","videoSenderStream","lastKeyFramesEncoded","lastFramesSent","framesSent","totalFrameSentInaMin","transmittedFrameRate","transmittedHeight","transmittedWidth","transmittedFrameSize","requestedFrameSize","isStreamRequested","_statsResults$mediaTy3","_statsResults$mediaTy4","lastUpdateTimestamp","lastRequestedUpdateTimestamp","isRequested"],"sources":["mqaUtil.ts"],"sourcesContent":["/* eslint-disable no-param-reassign, prefer-destructuring */\n\nimport {mean, max} from 'lodash';\n\nimport {MQA_INTERVAL, STATS} from '../constants';\n\n/**\n * Get the totals of a certain value from a certain media type.\n *\n * @param {object} stats - The large stats object.\n * @param {string} sendrecvType - \"send\" or \"recv\".\n * @param {string} baseMediaType - audio or video _and_ share or non-share.\n * @param {string} value - The value we want to get the totals of.\n * @returns {number}\n */\nconst getTotalValueFromBaseType = (\n stats: object,\n sendrecvType: string,\n baseMediaType: string,\n value: string\n): number =>\n Object.keys(stats)\n .filter((mt) => mt.includes(baseMediaType))\n .reduce((acc, mt) => acc + (stats[mt]?.[sendrecvType]?.[value] || 0), 0);\n\nexport const getAudioReceiverMqa = ({\n audioReceiver,\n statsResults,\n lastMqaDataSent,\n baseMediaType,\n isMultistream,\n}) => {\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n const getLastTotalValue = (value: string) =>\n getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);\n const getTotalValue = (value: string) =>\n getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);\n\n const lastPacketsReceived = getLastTotalValue('totalPacketsReceived');\n const lastPacketsLost = getLastTotalValue('totalPacketsLost');\n const lastBytesReceived = getLastTotalValue('totalBytesReceived');\n const lastFecPacketsReceived = getLastTotalValue('fecPacketsReceived');\n const lastFecPacketsDiscarded = getLastTotalValue('fecPacketsDiscarded');\n\n const totalPacketsReceived = getTotalValue('totalPacketsReceived');\n const packetsLost = getTotalValue('totalPacketsLost');\n const totalBytesReceived = getTotalValue('totalBytesReceived');\n const totalFecPacketsReceived = getTotalValue('fecPacketsReceived');\n const totalFecPacketsDiscarded = getTotalValue('fecPacketsDiscarded');\n\n audioReceiver.common.common.direction =\n statsResults[Object.keys(statsResults).find((mediaType) => mediaType.includes(baseMediaType))]\n ?.direction || 'inactive';\n audioReceiver.common.common.isMain = !baseMediaType.includes('-share');\n audioReceiver.common.common.multistreamEnabled = isMultistream;\n audioReceiver.common.transportType = statsResults.connectionType.local.transport;\n\n // add rtpPacket info inside common as also for call analyzer\n audioReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived;\n\n // Hop by hop are numbers and not percentage so we compare on what we sent the last min\n // collect the packets received for the last min\n const totalPacketsLost = packetsLost - lastPacketsLost;\n audioReceiver.common.mediaHopByHopLost = totalPacketsLost;\n audioReceiver.common.rtpHopByHopLost = totalPacketsLost;\n\n const fecRecovered =\n totalFecPacketsReceived -\n lastFecPacketsReceived -\n (totalFecPacketsDiscarded - lastFecPacketsDiscarded);\n audioReceiver.common.fecPackets = totalFecPacketsReceived - lastFecPacketsReceived;\n\n audioReceiver.common.rtpRecovered = fecRecovered;\n\n audioReceiver.common.rtpBitrate = ((totalBytesReceived - lastBytesReceived) * 8) / 60 || 0;\n};\n\nexport const getAudioReceiverStreamMqa = ({\n audioReceiverStream,\n statsResults,\n lastMqaDataSent,\n mediaType,\n}) => {\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n const lastPacketsDecoded = lastMqaDataSent[mediaType]?.[sendrecvType].totalSamplesDecoded || 0;\n const lastSamplesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalSamplesReceived || 0;\n const lastConcealedSamples = lastMqaDataSent[mediaType]?.[sendrecvType].concealedSamples || 0;\n const lastBytesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesReceived || 0;\n const lastFecPacketsReceived = lastMqaDataSent[mediaType]?.[sendrecvType].fecPacketsReceived || 0;\n const lastFecPacketsDiscarded =\n lastMqaDataSent[mediaType]?.[sendrecvType].fecPacketsDiscarded || 0;\n const lastPacketsReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsReceived || 0;\n const lastPacketsLost = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLost || 0;\n\n const {csi} = statsResults[mediaType];\n if (csi && !audioReceiverStream.common.csi.includes(csi)) {\n audioReceiverStream.common.csi.push(csi);\n }\n\n audioReceiverStream.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;\n\n audioReceiverStream.common.maxRtpJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;\n audioReceiverStream.common.meanRtpJitter =\n mean(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;\n audioReceiverStream.common.rtpJitter = audioReceiverStream.common.maxRtpJitter;\n\n // Fec packets do come in as part of the FEC only for audio\n const fecRecovered =\n statsResults[mediaType][sendrecvType].fecPacketsReceived -\n lastFecPacketsReceived -\n (statsResults[mediaType][sendrecvType].fecPacketsDiscarded - lastFecPacketsDiscarded);\n\n audioReceiverStream.common.rtpEndToEndLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost - fecRecovered || 0;\n\n audioReceiverStream.common.framesDropped =\n statsResults[mediaType][sendrecvType].totalSamplesDecoded - lastPacketsDecoded || 0;\n audioReceiverStream.common.renderedFrameRate =\n (audioReceiverStream.common.framesDropped * 100) / 60 || 0;\n\n audioReceiverStream.common.framesReceived =\n statsResults[mediaType][sendrecvType].totalSamplesReceived - lastSamplesReceived || 0;\n audioReceiverStream.common.concealedFrames =\n statsResults[mediaType][sendrecvType].concealedSamples - lastConcealedSamples || 0;\n audioReceiverStream.common.receivedBitrate =\n ((statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived) * 8) / 60 || 0;\n};\n\nexport const getAudioSenderMqa = ({\n audioSender,\n statsResults,\n lastMqaDataSent,\n baseMediaType,\n isMultistream,\n}) => {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n const getLastTotalValue = (value: string) =>\n getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);\n const getTotalValue = (value: string) =>\n getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);\n\n const lastPacketsSent = getLastTotalValue('totalPacketsSent');\n const lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');\n\n const totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');\n const totalPacketsSent = getTotalValue('totalPacketsSent');\n\n const meanRemoteJitter = Object.keys(statsResults)\n .filter((mt) => mt.includes(baseMediaType))\n .reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);\n const meanRoundTripTime = Object.keys(statsResults)\n .filter((mt) => mt.includes(baseMediaType))\n .reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);\n\n audioSender.common.common.direction =\n statsResults[Object.keys(statsResults).find((mediaType) => mediaType.includes(baseMediaType))]\n ?.direction || 'inactive';\n audioSender.common.common.isMain = !baseMediaType.includes('-share');\n audioSender.common.common.multistreamEnabled = isMultistream;\n audioSender.common.transportType = statsResults.connectionType.local.transport;\n\n audioSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000 || 0;\n audioSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000 || 0;\n\n audioSender.common.rtpPackets = totalPacketsSent - lastPacketsSent || 0;\n // audioSender.streams[0].common.rtpPackets = audioSender.common.rtpPackets;\n // From candidate-pair\n audioSender.common.availableBitrate = getTotalValueFromBaseType(\n statsResults,\n sendrecvType,\n baseMediaType,\n 'availableOutgoingBitrate'\n );\n\n // Calculate based on how much packets lost of received compated to how to the client sent\n const totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;\n audioSender.common.remoteLossRate =\n totalPacketsSent - lastPacketsSent > 0\n ? (totalPacketsLostForaMin * 100) / (totalPacketsSent - lastPacketsSent)\n : 0; // This is the packets sent with in last min\n\n audioSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000 || 0;\n audioSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000 || 0;\n audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin =\n getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, 'totalBytesSent') -\n getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, 'totalBytesSent');\n\n audioSender.common.rtpBitrate = totalBytesSentInaMin ? (totalBytesSentInaMin * 8) / 60 : 0;\n};\n\nexport const getAudioSenderStreamMqa = ({\n audioSenderStream,\n statsResults,\n lastMqaDataSent,\n mediaType,\n}) => {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n const lastBytesSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesSent || 0;\n const lastFramesEncoded = lastMqaDataSent[mediaType]?.[sendrecvType].totalKeyFramesEncoded || 0;\n const lastFirCount = lastMqaDataSent[mediaType]?.[sendrecvType].totalFirCount || 0;\n const lastPacketsSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsSent || 0;\n\n const {csi} = statsResults[mediaType];\n if (csi && !audioSenderStream.common.csi.includes(csi)) {\n audioSenderStream.common.csi.push(csi);\n }\n\n audioSenderStream.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;\n\n const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;\n audioSenderStream.common.transmittedBitrate = totalBytesSentInaMin\n ? (totalBytesSentInaMin * 8) / 60\n : 0;\n\n audioSenderStream.transmittedKeyFrames =\n statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastFramesEncoded || 0;\n audioSenderStream.requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;\n\n audioSenderStream.requestedBitrate = statsResults[mediaType][sendrecvType].requestedBitrate || 0;\n};\n\nexport const getVideoReceiverMqa = ({\n videoReceiver,\n statsResults,\n lastMqaDataSent,\n baseMediaType,\n isMultistream,\n}) => {\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n const getLastTotalValue = (value: string) =>\n getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);\n const getTotalValue = (value: string) =>\n getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);\n\n const lastPacketsReceived = getLastTotalValue('totalPacketsReceived');\n const lastPacketsLost = getLastTotalValue('totalPacketsLost');\n const lastBytesReceived = getLastTotalValue('totalBytesReceived');\n\n const lastRtxPacketsReceived = getLastTotalValue('totalRtxPacketsReceived');\n const lastRtxBytesReceived = getLastTotalValue('totalRtxBytesReceived');\n\n const packetsLost = getTotalValue('totalPacketsLost');\n const totalPacketsReceived = getTotalValue('totalPacketsReceived');\n const totalBytesReceived = getTotalValue('totalBytesReceived');\n\n const totalRtxPacketsReceived = getTotalValue('totalRtxPacketsReceived');\n const totalRtxBytesReceived = getTotalValue('totalRtxBytesReceived');\n\n const meanRemoteJitter = Object.keys(statsResults)\n .filter((mt) => mt.includes(baseMediaType))\n .reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);\n\n videoReceiver.common.common.direction =\n statsResults[Object.keys(statsResults).find((mediaType) => mediaType.includes(baseMediaType))]\n ?.direction || 'inactive';\n videoReceiver.common.common.multistreamEnabled = isMultistream;\n videoReceiver.common.common.isMain = !baseMediaType.includes('-share');\n videoReceiver.common.transportType = statsResults.connectionType.local.transport;\n\n // collect the packets received for the last min\n videoReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived || 0;\n\n // Hop by hop are numbers and not percentage so we compare on what we sent the last min\n // this is including packet lost\n const totalPacketsLost = packetsLost - lastPacketsLost;\n videoReceiver.common.mediaHopByHopLost = totalPacketsLost;\n videoReceiver.common.rtpHopByHopLost = totalPacketsLost;\n\n // calculate this values\n videoReceiver.common.maxRemoteJitter = max(meanRemoteJitter) * 1000 || 0;\n videoReceiver.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000 || 0;\n\n // Calculate the outgoing bitrate\n const totalBytesReceivedInaMin = totalBytesReceived - lastBytesReceived;\n const totalRtxBytesReceivedInaMin = totalRtxBytesReceived - lastRtxBytesReceived;\n\n videoReceiver.common.rtpBitrate = totalBytesReceivedInaMin\n ? (totalBytesReceivedInaMin * 8) / 60\n : 0;\n videoReceiver.common.rtxPackets = totalRtxPacketsReceived - lastRtxPacketsReceived;\n videoReceiver.common.rtxBitrate = totalRtxBytesReceivedInaMin\n ? (totalRtxBytesReceivedInaMin * 8) / 60\n : 0;\n};\n\nexport const getVideoReceiverStreamMqa = ({\n videoReceiverStream,\n statsResults,\n lastMqaDataSent,\n mediaType,\n}) => {\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n const lastPacketsReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsReceived || 0;\n const lastPacketsLost = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLost || 0;\n const lastBytesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesReceived || 0;\n const lastFramesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].framesReceived || 0;\n const lastFramesDecoded = lastMqaDataSent[mediaType]?.[sendrecvType].framesDecoded || 0;\n const lastFramesDropped = lastMqaDataSent[mediaType]?.[sendrecvType].framesDropped || 0;\n const lastKeyFramesDecoded = lastMqaDataSent[mediaType]?.[sendrecvType].keyFramesDecoded || 0;\n const lastPliCount = lastMqaDataSent[mediaType]?.[sendrecvType].totalPliCount || 0;\n\n const {csi} = statsResults[mediaType];\n if (csi && !videoReceiverStream.common.csi.includes(csi)) {\n videoReceiverStream.common.csi.push(csi);\n }\n\n videoReceiverStream.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;\n\n const totalPacketLoss =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;\n\n // End to end packetloss is after recovery\n videoReceiverStream.common.rtpEndToEndLost = totalPacketLoss;\n\n videoReceiverStream.common.rtpJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n const totalBytesReceivedInaMin =\n statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived;\n videoReceiverStream.common.receivedBitrate = totalBytesReceivedInaMin\n ? (totalBytesReceivedInaMin * 8) / 60\n : 0;\n\n const totalFrameReceivedInaMin =\n statsResults[mediaType][sendrecvType].framesReceived - lastFramesReceived;\n const totalFrameDecodedInaMin =\n statsResults[mediaType][sendrecvType].framesDecoded - lastFramesDecoded;\n\n videoReceiverStream.common.receivedFrameRate = Math.round(\n totalFrameReceivedInaMin ? totalFrameReceivedInaMin / 60 : 0\n );\n videoReceiverStream.common.renderedFrameRate = Math.round(\n totalFrameDecodedInaMin ? totalFrameDecodedInaMin / 60 : 0\n );\n\n videoReceiverStream.common.framesDropped =\n statsResults[mediaType][sendrecvType].framesDropped - lastFramesDropped || 0;\n videoReceiverStream.receivedHeight = statsResults[mediaType][sendrecvType].height || 0;\n videoReceiverStream.receivedWidth = statsResults[mediaType][sendrecvType].width || 0;\n videoReceiverStream.receivedFrameSize =\n (videoReceiverStream.receivedHeight * videoReceiverStream.receivedWidth) / 256;\n\n videoReceiverStream.receivedKeyFrames =\n statsResults[mediaType][sendrecvType].keyFramesDecoded - lastKeyFramesDecoded || 0;\n videoReceiverStream.requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalPliCount - lastPliCount || 0;\n\n videoReceiverStream.isActiveSpeaker =\n statsResults[mediaType][sendrecvType].isActiveSpeaker ||\n ((statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp ?? 0) > 0 &&\n performance.now() +\n performance.timeOrigin -\n (statsResults[mediaType][sendrecvType].lastActiveSpeakerTimestamp ?? 0) <\n MQA_INTERVAL);\n};\n\nexport const getVideoSenderMqa = ({\n videoSender,\n statsResults,\n lastMqaDataSent,\n baseMediaType,\n isMultistream,\n}) => {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n const getLastTotalValue = (value: string) =>\n getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);\n const getTotalValue = (value: string) =>\n getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);\n\n const lastPacketsSent = getLastTotalValue('totalPacketsSent');\n const lastBytesSent = getLastTotalValue('totalBytesSent');\n const lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');\n const lastRtxPacketsSent = getLastTotalValue('totalRtxPacketsSent');\n const lastRtxBytesSent = getLastTotalValue('totalRtxBytesSent');\n\n const totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');\n const totalPacketsSent = getTotalValue('totalPacketsSent');\n const totalBytesSent = getTotalValue('totalBytesSent');\n const availableOutgoingBitrate = getTotalValue('availableOutgoingBitrate');\n const totalRtxPacketsSent = getTotalValue('totalRtxPacketsSent');\n const totalRtxBytesSent = getTotalValue('totalRtxBytesSent');\n\n videoSender.common.common.direction =\n statsResults[Object.keys(statsResults).find((mediaType) => mediaType.includes(baseMediaType))]\n ?.direction || 'inactive';\n videoSender.common.common.multistreamEnabled = isMultistream;\n videoSender.common.common.isMain = !baseMediaType.includes('-share');\n videoSender.common.transportType = statsResults.connectionType.local.transport;\n\n const meanRemoteJitter = Object.keys(statsResults)\n .filter((mt) => mt.includes(baseMediaType))\n .reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);\n const meanRoundTripTime = Object.keys(statsResults)\n .filter((mt) => mt.includes(baseMediaType))\n .reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);\n\n // @ts-ignore\n videoSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000 || 0;\n videoSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000 || 0;\n\n videoSender.common.rtpPackets = totalPacketsSent - lastPacketsSent;\n videoSender.common.availableBitrate = availableOutgoingBitrate;\n\n // Calculate based on how much packets lost of received compated to how to the client sent\n const totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;\n\n videoSender.common.remoteLossRate =\n totalPacketsSent - lastPacketsSent > 0\n ? (totalPacketsLostForaMin * 100) / (totalPacketsSent - lastPacketsSent)\n : 0; // This is the packets sent with in last min || 0;\n\n videoSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000 || 0;\n videoSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000 || 0;\n videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin = totalBytesSent - lastBytesSent;\n const totalRtxBytesSentInaMin = totalRtxBytesSent - lastRtxBytesSent;\n\n videoSender.common.rtpBitrate = totalBytesSentInaMin ? (totalBytesSentInaMin * 8) / 60 : 0;\n videoSender.common.rtxPackets = totalRtxPacketsSent - lastRtxPacketsSent;\n videoSender.common.rtxBitrate = totalRtxBytesSentInaMin ? (totalRtxBytesSentInaMin * 8) / 60 : 0;\n};\n\nexport const getVideoSenderStreamMqa = ({\n videoSenderStream,\n statsResults,\n lastMqaDataSent,\n mediaType,\n}) => {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n const lastPacketsSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsSent || 0;\n const lastBytesSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesSent || 0;\n const lastKeyFramesEncoded =\n lastMqaDataSent[mediaType]?.[sendrecvType].totalKeyFramesEncoded || 0;\n const lastFirCount = lastMqaDataSent[mediaType]?.[sendrecvType].totalFirCount || 0;\n const lastFramesSent = lastMqaDataSent[mediaType]?.[sendrecvType].framesSent || 0;\n\n const {csi} = statsResults[mediaType];\n if (csi && !videoSenderStream.common.csi.includes(csi)) {\n videoSenderStream.common.csi.push(csi);\n }\n\n videoSenderStream.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;\n\n videoSenderStream.common.transmittedBitrate = totalBytesSentInaMin\n ? (totalBytesSentInaMin * 8) / 60\n : 0;\n\n videoSenderStream.transmittedKeyFrames =\n statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastKeyFramesEncoded || 0;\n videoSenderStream.requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;\n\n // From tracks //TODO: calculate a proper one\n const totalFrameSentInaMin =\n statsResults[mediaType][sendrecvType].framesSent - (lastFramesSent || 0);\n\n videoSenderStream.common.transmittedFrameRate = Math.round(\n totalFrameSentInaMin ? totalFrameSentInaMin / 60 : 0\n );\n videoSenderStream.transmittedHeight = statsResults[mediaType][sendrecvType].height || 0;\n videoSenderStream.transmittedWidth = statsResults[mediaType][sendrecvType].width || 0;\n videoSenderStream.transmittedFrameSize =\n (videoSenderStream.transmittedHeight * videoSenderStream.transmittedWidth) / 256;\n videoSenderStream.requestedBitrate = statsResults[mediaType][sendrecvType].requestedBitrate || 0;\n videoSenderStream.requestedFrameSize =\n statsResults[mediaType][sendrecvType].requestedFrameSize || 0;\n};\n\n/**\n * Checks if stream stats should be updated based on request status and elapsed time.\n *\n * @param {Object} statsResults - Stats results object.\n * @param {string} mediaType - Media type (e.g., 'audio', 'video').\n * @param {string} direction - Stats direction (e.g., 'send', 'receive').\n * @returns {boolean} Whether stats should be updated.\n */\nexport const isStreamRequested = (\n statsResults: any,\n mediaType: string,\n direction: string\n): boolean => {\n const now = performance.timeOrigin + performance.now();\n const lastUpdateTimestamp = statsResults[mediaType][direction]?.lastRequestedUpdateTimestamp;\n const isRequested = statsResults[mediaType][direction]?.isRequested;\n\n return isRequested || (lastUpdateTimestamp && now - lastUpdateTimestamp < MQA_INTERVAL);\n};\n"],"mappings":"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"}
|
|
@@ -8,6 +8,12 @@ export declare const emptyMqaInterval: {
|
|
|
8
8
|
processMaximumCPU: number;
|
|
9
9
|
systemAverageCPU: number;
|
|
10
10
|
systemMaximumCPU: number;
|
|
11
|
+
screenWidth: number;
|
|
12
|
+
screenHeight: number;
|
|
13
|
+
screenResolution: number;
|
|
14
|
+
appWindowWidth: number;
|
|
15
|
+
appWindowHeight: number;
|
|
16
|
+
appWindowSize: number;
|
|
11
17
|
};
|
|
12
18
|
networkType: string;
|
|
13
19
|
intervalNumber: number;
|
|
@@ -37,16 +37,24 @@ export declare class StatsAnalyzer extends EventsScope {
|
|
|
37
37
|
successfulCandidatePair: any;
|
|
38
38
|
localIpAddress: string;
|
|
39
39
|
receiveSlotCallback: ReceiveSlotCallback;
|
|
40
|
+
isMultistream: boolean;
|
|
40
41
|
/**
|
|
41
42
|
* Creates a new instance of StatsAnalyzer
|
|
42
43
|
* @constructor
|
|
43
44
|
* @public
|
|
44
|
-
* @param {Object} config SDK Configuration Object
|
|
45
|
-
* @param {Function} receiveSlotCallback Callback used to access receive slots.
|
|
46
|
-
* @param {Object} networkQualityMonitor
|
|
47
|
-
* @param {Object} statsResults Default properties for stats
|
|
48
|
-
|
|
49
|
-
|
|
45
|
+
* @param {Object} config - SDK Configuration Object
|
|
46
|
+
* @param {Function} receiveSlotCallback - Callback used to access receive slots.
|
|
47
|
+
* @param {Object} networkQualityMonitor - Class for assessing network characteristics (jitter, packetLoss, latency)
|
|
48
|
+
* @param {Object} statsResults - Default properties for stats
|
|
49
|
+
* @param {boolean | undefined} isMultistream - Param indicating if the media connection is multistream or not
|
|
50
|
+
*/
|
|
51
|
+
constructor({ config, receiveSlotCallback, networkQualityMonitor, statsResults, isMultistream, }: {
|
|
52
|
+
config: any;
|
|
53
|
+
receiveSlotCallback: ReceiveSlotCallback;
|
|
54
|
+
networkQualityMonitor: any;
|
|
55
|
+
statsResults?: any;
|
|
56
|
+
isMultistream?: boolean;
|
|
57
|
+
});
|
|
50
58
|
/**
|
|
51
59
|
* Resets cumulative stats arrays.
|
|
52
60
|
*
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
export declare const getAudioReceiverMqa: ({ audioReceiver, statsResults, lastMqaDataSent, baseMediaType, }: {
|
|
1
|
+
export declare const getAudioReceiverMqa: ({ audioReceiver, statsResults, lastMqaDataSent, baseMediaType, isMultistream, }: {
|
|
2
2
|
audioReceiver: any;
|
|
3
3
|
statsResults: any;
|
|
4
4
|
lastMqaDataSent: any;
|
|
5
5
|
baseMediaType: any;
|
|
6
|
+
isMultistream: any;
|
|
6
7
|
}) => void;
|
|
7
8
|
export declare const getAudioReceiverStreamMqa: ({ audioReceiverStream, statsResults, lastMqaDataSent, mediaType, }: {
|
|
8
9
|
audioReceiverStream: any;
|
|
@@ -10,11 +11,12 @@ export declare const getAudioReceiverStreamMqa: ({ audioReceiverStream, statsRes
|
|
|
10
11
|
lastMqaDataSent: any;
|
|
11
12
|
mediaType: any;
|
|
12
13
|
}) => void;
|
|
13
|
-
export declare const getAudioSenderMqa: ({ audioSender, statsResults, lastMqaDataSent, baseMediaType }: {
|
|
14
|
+
export declare const getAudioSenderMqa: ({ audioSender, statsResults, lastMqaDataSent, baseMediaType, isMultistream, }: {
|
|
14
15
|
audioSender: any;
|
|
15
16
|
statsResults: any;
|
|
16
17
|
lastMqaDataSent: any;
|
|
17
18
|
baseMediaType: any;
|
|
19
|
+
isMultistream: any;
|
|
18
20
|
}) => void;
|
|
19
21
|
export declare const getAudioSenderStreamMqa: ({ audioSenderStream, statsResults, lastMqaDataSent, mediaType, }: {
|
|
20
22
|
audioSenderStream: any;
|
|
@@ -22,11 +24,12 @@ export declare const getAudioSenderStreamMqa: ({ audioSenderStream, statsResults
|
|
|
22
24
|
lastMqaDataSent: any;
|
|
23
25
|
mediaType: any;
|
|
24
26
|
}) => void;
|
|
25
|
-
export declare const getVideoReceiverMqa: ({ videoReceiver, statsResults, lastMqaDataSent, baseMediaType, }: {
|
|
27
|
+
export declare const getVideoReceiverMqa: ({ videoReceiver, statsResults, lastMqaDataSent, baseMediaType, isMultistream, }: {
|
|
26
28
|
videoReceiver: any;
|
|
27
29
|
statsResults: any;
|
|
28
30
|
lastMqaDataSent: any;
|
|
29
31
|
baseMediaType: any;
|
|
32
|
+
isMultistream: any;
|
|
30
33
|
}) => void;
|
|
31
34
|
export declare const getVideoReceiverStreamMqa: ({ videoReceiverStream, statsResults, lastMqaDataSent, mediaType, }: {
|
|
32
35
|
videoReceiverStream: any;
|
|
@@ -34,11 +37,12 @@ export declare const getVideoReceiverStreamMqa: ({ videoReceiverStream, statsRes
|
|
|
34
37
|
lastMqaDataSent: any;
|
|
35
38
|
mediaType: any;
|
|
36
39
|
}) => void;
|
|
37
|
-
export declare const getVideoSenderMqa: ({ videoSender, statsResults, lastMqaDataSent, baseMediaType }: {
|
|
40
|
+
export declare const getVideoSenderMqa: ({ videoSender, statsResults, lastMqaDataSent, baseMediaType, isMultistream, }: {
|
|
38
41
|
videoSender: any;
|
|
39
42
|
statsResults: any;
|
|
40
43
|
lastMqaDataSent: any;
|
|
41
44
|
baseMediaType: any;
|
|
45
|
+
isMultistream: any;
|
|
42
46
|
}) => void;
|
|
43
47
|
export declare const getVideoSenderStreamMqa: ({ videoSenderStream, statsResults, lastMqaDataSent, mediaType, }: {
|
|
44
48
|
videoSenderStream: any;
|
|
@@ -46,3 +50,12 @@ export declare const getVideoSenderStreamMqa: ({ videoSenderStream, statsResults
|
|
|
46
50
|
lastMqaDataSent: any;
|
|
47
51
|
mediaType: any;
|
|
48
52
|
}) => void;
|
|
53
|
+
/**
|
|
54
|
+
* Checks if stream stats should be updated based on request status and elapsed time.
|
|
55
|
+
*
|
|
56
|
+
* @param {Object} statsResults - Stats results object.
|
|
57
|
+
* @param {string} mediaType - Media type (e.g., 'audio', 'video').
|
|
58
|
+
* @param {string} direction - Stats direction (e.g., 'send', 'receive').
|
|
59
|
+
* @returns {boolean} Whether stats should be updated.
|
|
60
|
+
*/
|
|
61
|
+
export declare const isStreamRequested: (statsResults: any, mediaType: string, direction: string) => boolean;
|
package/dist/webinar/index.js
CHANGED
|
@@ -62,7 +62,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
62
62
|
updateCanManageWebcast: function updateCanManageWebcast(canManageWebcast) {
|
|
63
63
|
this.set('canManageWebcast', canManageWebcast);
|
|
64
64
|
},
|
|
65
|
-
version: "3.3.1-next.
|
|
65
|
+
version: "3.3.1-next.11"
|
|
66
66
|
});
|
|
67
67
|
var _default = exports.default = Webinar;
|
|
68
68
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -43,13 +43,13 @@
|
|
|
43
43
|
"@webex/eslint-config-legacy": "0.0.0",
|
|
44
44
|
"@webex/jest-config-legacy": "0.0.0",
|
|
45
45
|
"@webex/legacy-tools": "0.0.0",
|
|
46
|
-
"@webex/plugin-meetings": "3.3.1-next.
|
|
47
|
-
"@webex/plugin-rooms": "3.3.1-next.
|
|
48
|
-
"@webex/test-helper-chai": "3.1
|
|
49
|
-
"@webex/test-helper-mocha": "3.1
|
|
50
|
-
"@webex/test-helper-mock-webex": "3.1
|
|
51
|
-
"@webex/test-helper-retry": "3.1
|
|
52
|
-
"@webex/test-helper-test-users": "3.1
|
|
46
|
+
"@webex/plugin-meetings": "3.3.1-next.11",
|
|
47
|
+
"@webex/plugin-rooms": "3.3.1-next.3",
|
|
48
|
+
"@webex/test-helper-chai": "3.3.1-next.2",
|
|
49
|
+
"@webex/test-helper-mocha": "3.3.1-next.2",
|
|
50
|
+
"@webex/test-helper-mock-webex": "3.3.1-next.2",
|
|
51
|
+
"@webex/test-helper-retry": "3.3.1-next.2",
|
|
52
|
+
"@webex/test-helper-test-users": "3.3.1-next.2",
|
|
53
53
|
"chai": "^4.3.4",
|
|
54
54
|
"chai-as-promised": "^7.1.1",
|
|
55
55
|
"eslint": "^8.24.0",
|
|
@@ -61,20 +61,20 @@
|
|
|
61
61
|
"typescript": "^4.7.4"
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@webex/common": "3.1
|
|
65
|
-
"@webex/internal-media-core": "2.5.
|
|
66
|
-
"@webex/internal-plugin-conversation": "3.3.1-next.
|
|
67
|
-
"@webex/internal-plugin-device": "3.1
|
|
68
|
-
"@webex/internal-plugin-llm": "3.3.1-next.
|
|
69
|
-
"@webex/internal-plugin-mercury": "3.3.1-next.
|
|
70
|
-
"@webex/internal-plugin-metrics": "3.1
|
|
71
|
-
"@webex/internal-plugin-support": "3.3.1-next.
|
|
72
|
-
"@webex/internal-plugin-user": "3.1
|
|
73
|
-
"@webex/internal-plugin-voicea": "3.3.1-next.
|
|
74
|
-
"@webex/media-helpers": "3.1
|
|
75
|
-
"@webex/plugin-people": "3.3.1-next.
|
|
76
|
-
"@webex/plugin-rooms": "3.3.1-next.
|
|
77
|
-
"@webex/webex-core": "3.1
|
|
64
|
+
"@webex/common": "3.3.1-next.2",
|
|
65
|
+
"@webex/internal-media-core": "2.5.3",
|
|
66
|
+
"@webex/internal-plugin-conversation": "3.3.1-next.3",
|
|
67
|
+
"@webex/internal-plugin-device": "3.3.1-next.2",
|
|
68
|
+
"@webex/internal-plugin-llm": "3.3.1-next.3",
|
|
69
|
+
"@webex/internal-plugin-mercury": "3.3.1-next.3",
|
|
70
|
+
"@webex/internal-plugin-metrics": "3.3.1-next.2",
|
|
71
|
+
"@webex/internal-plugin-support": "3.3.1-next.3",
|
|
72
|
+
"@webex/internal-plugin-user": "3.3.1-next.2",
|
|
73
|
+
"@webex/internal-plugin-voicea": "3.3.1-next.11",
|
|
74
|
+
"@webex/media-helpers": "3.3.1-next.4",
|
|
75
|
+
"@webex/plugin-people": "3.3.1-next.3",
|
|
76
|
+
"@webex/plugin-rooms": "3.3.1-next.3",
|
|
77
|
+
"@webex/webex-core": "3.3.1-next.2",
|
|
78
78
|
"ampersand-collection": "^2.0.2",
|
|
79
79
|
"bowser": "^2.11.0",
|
|
80
80
|
"btoa": "^1.2.1",
|
|
@@ -91,5 +91,5 @@
|
|
|
91
91
|
"//": [
|
|
92
92
|
"TODO: upgrade jwt-decode when moving to node 18"
|
|
93
93
|
],
|
|
94
|
-
"version": "3.3.1-next.
|
|
94
|
+
"version": "3.3.1-next.11"
|
|
95
95
|
}
|
|
@@ -8,6 +8,12 @@ export const emptyMqaInterval = {
|
|
|
8
8
|
processMaximumCPU: 0,
|
|
9
9
|
systemAverageCPU: 0,
|
|
10
10
|
systemMaximumCPU: 0,
|
|
11
|
+
screenWidth: 0,
|
|
12
|
+
screenHeight: 0,
|
|
13
|
+
screenResolution: 0,
|
|
14
|
+
appWindowWidth: 0,
|
|
15
|
+
appWindowHeight: 0,
|
|
16
|
+
appWindowSize: 0,
|
|
11
17
|
},
|
|
12
18
|
networkType: '',
|
|
13
19
|
intervalNumber: 0,
|
|
@@ -126,7 +132,7 @@ export const emptyVideoReceive = {
|
|
|
126
132
|
mariRtxEnabled: false,
|
|
127
133
|
mariQosEnabled: false,
|
|
128
134
|
mariLiteEnabled: false,
|
|
129
|
-
multistreamEnabled:
|
|
135
|
+
multistreamEnabled: false,
|
|
130
136
|
},
|
|
131
137
|
dtlsBitrate: 0, // Not avaliable
|
|
132
138
|
dtlsPackets: 0, // Not avaliable
|
|
@@ -170,7 +176,7 @@ export const emptyVideoReceiveStream = {
|
|
|
170
176
|
ssci: 0, // Not avaliable
|
|
171
177
|
},
|
|
172
178
|
h264CodecProfile: 'BP',
|
|
173
|
-
isActiveSpeaker:
|
|
179
|
+
isActiveSpeaker: false,
|
|
174
180
|
optimalFrameSize: 0, // Not avaliable
|
|
175
181
|
receivedFrameSize: 0,
|
|
176
182
|
receivedHeight: 0,
|
|
@@ -193,7 +199,7 @@ export const emptyVideoTransmit = {
|
|
|
193
199
|
mariRtxEnabled: false,
|
|
194
200
|
mariQosEnabled: false,
|
|
195
201
|
mariLiteEnabled: false,
|
|
196
|
-
multistreamEnabled: false,
|
|
202
|
+
multistreamEnabled: false,
|
|
197
203
|
},
|
|
198
204
|
dtlsBitrate: 0, // Not avaliable
|
|
199
205
|
dtlsPackets: 0, // Not avaliable
|
package/src/meeting/index.ts
CHANGED
|
@@ -6317,12 +6317,13 @@ export default class Meeting extends StatelessWebexPlugin {
|
|
|
6317
6317
|
if (this.config.stats.enableStatsAnalyzer) {
|
|
6318
6318
|
// @ts-ignore - config coming from registerPlugin
|
|
6319
6319
|
this.networkQualityMonitor = new NetworkQualityMonitor(this.config.stats);
|
|
6320
|
-
this.statsAnalyzer = new StatsAnalyzer(
|
|
6320
|
+
this.statsAnalyzer = new StatsAnalyzer({
|
|
6321
6321
|
// @ts-ignore - config coming from registerPlugin
|
|
6322
|
-
this.config.stats,
|
|
6323
|
-
(ssrc: number) => this.receiveSlotManager.findReceiveSlotBySsrc(ssrc),
|
|
6324
|
-
this.networkQualityMonitor
|
|
6325
|
-
|
|
6322
|
+
config: this.config.stats,
|
|
6323
|
+
receiveSlotCallback: (ssrc: number) => this.receiveSlotManager.findReceiveSlotBySsrc(ssrc),
|
|
6324
|
+
networkQualityMonitor: this.networkQualityMonitor,
|
|
6325
|
+
isMultistream: this.isMultistream,
|
|
6326
|
+
});
|
|
6326
6327
|
this.setupStatsAnalyzerEventHandlers();
|
|
6327
6328
|
this.networkQualityMonitor.on(
|
|
6328
6329
|
EVENT_TRIGGERS.NETWORK_QUALITY,
|