@webex/plugin-meetings 3.3.1-next.11 → 3.3.1-next.12

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.
@@ -209,7 +209,7 @@ var Breakout = _webexCore.WebexPlugin.extend({
209
209
  sessionId: this.sessionId
210
210
  });
211
211
  },
212
- version: "3.3.1-next.11"
212
+ version: "3.3.1-next.12"
213
213
  });
214
214
  var _default = exports.default = Breakout;
215
215
  //# sourceMappingURL=breakout.js.map
@@ -1041,7 +1041,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
1041
1041
  this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
1042
1042
  }
1043
1043
  },
1044
- version: "3.3.1-next.11"
1044
+ version: "3.3.1-next.12"
1045
1045
  });
1046
1046
  var _default = exports.default = Breakouts;
1047
1047
  //# sourceMappingURL=index.js.map
@@ -373,7 +373,7 @@ var SimultaneousInterpretation = _webexCore.WebexPlugin.extend({
373
373
  throw error;
374
374
  });
375
375
  },
376
- version: "3.3.1-next.11"
376
+ version: "3.3.1-next.12"
377
377
  });
378
378
  var _default = exports.default = SimultaneousInterpretation;
379
379
  //# sourceMappingURL=index.js.map
@@ -18,7 +18,7 @@ var SILanguage = _webexCore.WebexPlugin.extend({
18
18
  languageCode: 'number',
19
19
  languageName: 'string'
20
20
  },
21
- version: "3.3.1-next.11"
21
+ version: "3.3.1-next.12"
22
22
  });
23
23
  var _default = exports.default = SILanguage;
24
24
  //# sourceMappingURL=siLanguage.js.map
@@ -150,7 +150,7 @@ var getAudioSenderMqa = exports.getAudioSenderMqa = function getAudioSenderMqa(_
150
150
 
151
151
  // Calculate based on how much packets lost of received compated to how to the client sent
152
152
  var totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;
153
- audioSender.common.remoteLossRate = totalPacketsSent - lastPacketsSent > 0 ? totalPacketsLostForaMin * 100 / (totalPacketsSent - lastPacketsSent) : 0; // This is the packets sent with in last min
153
+ audioSender.common.maxRemoteLossRate = totalPacketsSent - lastPacketsSent > 0 ? totalPacketsLostForaMin * 100 / (totalPacketsSent - lastPacketsSent) : 0; // This is the packets sent with in last min
154
154
 
155
155
  audioSender.common.maxRoundTripTime = (0, _lodash.max)(meanRoundTripTime) * 1000 || 0;
156
156
  audioSender.common.meanRoundTripTime = (0, _lodash.mean)(meanRoundTripTime) * 1000 || 0;
@@ -329,7 +329,7 @@ var getVideoSenderMqa = exports.getVideoSenderMqa = function getVideoSenderMqa(_
329
329
 
330
330
  // Calculate based on how much packets lost of received compated to how to the client sent
331
331
  var totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;
332
- videoSender.common.remoteLossRate = totalPacketsSent - lastPacketsSent > 0 ? totalPacketsLostForaMin * 100 / (totalPacketsSent - lastPacketsSent) : 0; // This is the packets sent with in last min || 0;
332
+ videoSender.common.maxRemoteLossRate = totalPacketsSent - lastPacketsSent > 0 ? totalPacketsLostForaMin * 100 / (totalPacketsSent - lastPacketsSent) : 0; // This is the packets sent with in last min || 0;
333
333
 
334
334
  videoSender.common.maxRoundTripTime = (0, _lodash.max)(meanRoundTripTime) * 1000 || 0;
335
335
  videoSender.common.meanRoundTripTime = (0, _lodash.mean)(meanRoundTripTime) * 1000 || 0;
@@ -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","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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"}
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","maxRemoteLossRate","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.maxRemoteLossRate =\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.maxRemoteLossRate =\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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"}
@@ -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.11"
65
+ version: "3.3.1-next.12"
66
66
  });
67
67
  var _default = exports.default = Webinar;
68
68
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -43,7 +43,7 @@
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.11",
46
+ "@webex/plugin-meetings": "3.3.1-next.12",
47
47
  "@webex/plugin-rooms": "3.3.1-next.3",
48
48
  "@webex/test-helper-chai": "3.3.1-next.2",
49
49
  "@webex/test-helper-mocha": "3.3.1-next.2",
@@ -70,7 +70,7 @@
70
70
  "@webex/internal-plugin-metrics": "3.3.1-next.2",
71
71
  "@webex/internal-plugin-support": "3.3.1-next.3",
72
72
  "@webex/internal-plugin-user": "3.3.1-next.2",
73
- "@webex/internal-plugin-voicea": "3.3.1-next.11",
73
+ "@webex/internal-plugin-voicea": "3.3.1-next.12",
74
74
  "@webex/media-helpers": "3.3.1-next.4",
75
75
  "@webex/plugin-people": "3.3.1-next.3",
76
76
  "@webex/plugin-rooms": "3.3.1-next.3",
@@ -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.11"
94
+ "version": "3.3.1-next.12"
95
95
  }
@@ -180,7 +180,7 @@ export const getAudioSenderMqa = ({
180
180
 
181
181
  // Calculate based on how much packets lost of received compated to how to the client sent
182
182
  const totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;
183
- audioSender.common.remoteLossRate =
183
+ audioSender.common.maxRemoteLossRate =
184
184
  totalPacketsSent - lastPacketsSent > 0
185
185
  ? (totalPacketsLostForaMin * 100) / (totalPacketsSent - lastPacketsSent)
186
186
  : 0; // This is the packets sent with in last min
@@ -421,7 +421,7 @@ export const getVideoSenderMqa = ({
421
421
  // Calculate based on how much packets lost of received compated to how to the client sent
422
422
  const totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;
423
423
 
424
- videoSender.common.remoteLossRate =
424
+ videoSender.common.maxRemoteLossRate =
425
425
  totalPacketsSent - lastPacketsSent > 0
426
426
  ? (totalPacketsLostForaMin * 100) / (totalPacketsSent - lastPacketsSent)
427
427
  : 0; // This is the packets sent with in last min || 0;
@@ -1073,35 +1073,52 @@ describe('plugin-meetings', () => {
1073
1073
  });
1074
1074
  });
1075
1075
 
1076
- describe('remote loss rate reporting in stats analyzer', () => {
1076
+ describe('maximum remote loss rate reporting in stats analyzer', () => {
1077
1077
  beforeEach(async () => {
1078
1078
  await startStatsAnalyzer({pc, statsAnalyzer});
1079
1079
  });
1080
1080
 
1081
- it('should report a zero remote loss rate for both audio and video at the start', async () => {
1082
- assert.strictEqual(mqeData.audioTransmit[0].common.remoteLossRate, 0);
1083
- assert.strictEqual(mqeData.videoTransmit[0].common.remoteLossRate, 0);
1081
+ it('should report a zero maximum remote loss rate for both audio and video at the start', async () => {
1082
+ assert.strictEqual(mqeData.audioTransmit[0].common.maxRemoteLossRate, 0);
1083
+ assert.strictEqual(mqeData.videoTransmit[0].common.maxRemoteLossRate, 0);
1084
1084
  });
1085
1085
 
1086
- it('should maintain a zero remote loss rate for both audio and video after packets are sent without loss', async () => {
1086
+ it('should maintain a zero maximum remote loss rate for both audio and video after packets are sent without loss', async () => {
1087
1087
  fakeStats.audio.senders[0].report[0].packetsSent += 100;
1088
1088
  fakeStats.video.senders[0].report[0].packetsSent += 100;
1089
1089
  await progressTime(MQA_INTERVAL);
1090
1090
 
1091
- assert.strictEqual(mqeData.audioTransmit[0].common.remoteLossRate, 0);
1092
- assert.strictEqual(mqeData.videoTransmit[0].common.remoteLossRate, 0);
1091
+ assert.strictEqual(mqeData.audioTransmit[0].common.maxRemoteLossRate, 0);
1092
+ assert.strictEqual(mqeData.videoTransmit[0].common.maxRemoteLossRate, 0);
1093
1093
  });
1094
1094
 
1095
- it('should accurately calculate the remote loss rate for both audio and video after packet loss is detected', async () => {
1095
+ it('should accurately calculate the maximum remote loss rate for both audio and video after packet loss is detected', async () => {
1096
1096
  fakeStats.audio.senders[0].report[0].packetsSent += 200;
1097
1097
  fakeStats.audio.senders[0].report[1].packetsLost += 10;
1098
1098
  fakeStats.video.senders[0].report[0].packetsSent += 200;
1099
1099
  fakeStats.video.senders[0].report[1].packetsLost += 10;
1100
1100
  await progressTime(MQA_INTERVAL);
1101
1101
 
1102
- assert.strictEqual(mqeData.audioTransmit[0].common.remoteLossRate, 5);
1103
- assert.strictEqual(mqeData.videoTransmit[0].common.remoteLossRate, 5);
1102
+ assert.strictEqual(mqeData.audioTransmit[0].common.maxRemoteLossRate, 5);
1103
+ assert.strictEqual(mqeData.videoTransmit[0].common.maxRemoteLossRate, 5);
1104
1104
  });
1105
+
1106
+ it('should reset the maximum remote loss rate across MQA intervals', async() => {
1107
+ fakeStats.audio.senders[0].report[0].packetsSent += 100;
1108
+ fakeStats.audio.senders[0].report[1].packetsLost += 10;
1109
+ fakeStats.video.senders[0].report[0].packetsSent += 50;
1110
+ fakeStats.video.senders[0].report[1].packetsLost += 5;
1111
+ await progressTime(MQA_INTERVAL);
1112
+
1113
+ assert.strictEqual(mqeData.audioTransmit[0].common.maxRemoteLossRate, 10);
1114
+ assert.strictEqual(mqeData.videoTransmit[0].common.maxRemoteLossRate, 10);
1115
+
1116
+ await progressTime(MQA_INTERVAL);
1117
+
1118
+ assert.strictEqual(mqeData.audioTransmit[0].common.maxRemoteLossRate, 0);
1119
+ assert.strictEqual(mqeData.videoTransmit[0].common.maxRemoteLossRate, 0);
1120
+
1121
+ })
1105
1122
  });
1106
1123
 
1107
1124
  it('has the correct localIpAddress set when the candidateType is host', async () => {