@webex/plugin-meetings 3.3.1-next.34 → 3.3.1-next.36

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.
@@ -269,8 +269,8 @@ var getVideoReceiverStreamMqa = exports.getVideoReceiverStreamMqa = function get
269
269
  videoReceiverStream.common.receivedBitrate = totalBytesReceivedInaMin ? totalBytesReceivedInaMin * 8 / 60 : 0;
270
270
  var totalFrameReceivedInaMin = statsResults[mediaType][sendrecvType].framesReceived - lastFramesReceived;
271
271
  var totalFrameDecodedInaMin = statsResults[mediaType][sendrecvType].framesDecoded - lastFramesDecoded;
272
- videoReceiverStream.common.receivedFrameRate = Math.round(totalFrameReceivedInaMin ? totalFrameReceivedInaMin / 60 : 0);
273
- videoReceiverStream.common.renderedFrameRate = Math.round(totalFrameDecodedInaMin ? totalFrameDecodedInaMin / 60 : 0);
272
+ videoReceiverStream.common.receivedFrameRate = Math.round(totalFrameReceivedInaMin ? totalFrameReceivedInaMin * 100 / 60 : 0);
273
+ videoReceiverStream.common.renderedFrameRate = Math.round(totalFrameDecodedInaMin ? totalFrameDecodedInaMin * 100 / 60 : 0);
274
274
  videoReceiverStream.common.framesDropped = statsResults[mediaType][sendrecvType].framesDropped - lastFramesDropped || 0;
275
275
  videoReceiverStream.receivedHeight = statsResults[mediaType][sendrecvType].height || 0;
276
276
  videoReceiverStream.receivedWidth = statsResults[mediaType][sendrecvType].width || 0;
@@ -368,7 +368,7 @@ var getVideoSenderStreamMqa = exports.getVideoSenderStreamMqa = function getVide
368
368
 
369
369
  // From tracks //TODO: calculate a proper one
370
370
  var totalFrameSentInaMin = statsResults[mediaType][sendrecvType].framesSent - (lastFramesSent || 0);
371
- videoSenderStream.common.transmittedFrameRate = Math.round(totalFrameSentInaMin ? totalFrameSentInaMin / 60 : 0);
371
+ videoSenderStream.common.transmittedFrameRate = Math.round(totalFrameSentInaMin ? totalFrameSentInaMin * 100 / 60 : 0);
372
372
  videoSenderStream.transmittedHeight = statsResults[mediaType][sendrecvType].height || 0;
373
373
  videoSenderStream.transmittedWidth = statsResults[mediaType][sendrecvType].width || 0;
374
374
  videoSenderStream.transmittedFrameSize = videoSenderStream.transmittedHeight * videoSenderStream.transmittedWidth / 256;
@@ -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","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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"}
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 * 100) / 60 : 0\n );\n videoReceiverStream.common.renderedFrameRate = Math.round(\n totalFrameDecodedInaMin ? (totalFrameDecodedInaMin * 100) / 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 * 100) / 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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"}
@@ -450,7 +450,7 @@ export default class Meeting extends StatelessWebexPlugin {
450
450
  areVoiceaEventsSetup: boolean;
451
451
  isMoveToInProgress: boolean;
452
452
  voiceaListenerCallbacks: object;
453
- private retriedWithTurnServer;
453
+ private addMediaData;
454
454
  private sendSlotManager;
455
455
  private deferSDPAnswer?;
456
456
  private sdpResponseTimer?;
@@ -1382,13 +1382,23 @@ export default class Meeting extends StatelessWebexPlugin {
1382
1382
  * Creates a media connection to the server. Media connection is required for sending or receiving any audio/video.
1383
1383
  *
1384
1384
  * @param {AddMediaOptions} options
1385
- * @param {TurnServerInfo} turnServerInfo - TURN server information (used only internally by the SDK)
1386
- * @param {boolean} forceTurnDiscovery - if true, TURN discovery will be done (used only internally by the SDK)
1387
1385
  * @returns {Promise<void>}
1388
1386
  * @public
1389
1387
  * @memberof Meeting
1390
1388
  */
1391
- addMedia(options?: AddMediaOptions, turnServerInfo?: TurnServerInfo, forceTurnDiscovery?: boolean): Promise<void>;
1389
+ addMedia(options?: AddMediaOptions): Promise<void>;
1390
+ /**
1391
+ * Internal version of addMedia() with some more arguments for finer control of its behavior
1392
+ *
1393
+ * @param {Function} icePhaseCallback - callback to determine the icePhase for CA "client.ice.end" failure events
1394
+ * @param {TurnServerInfo} turnServerInfo - TURN server information
1395
+ * @param {boolean} forceTurnDiscovery - if true, TURN discovery will be done
1396
+ * @param {AddMediaOptions} options - same as options of the public addMedia() method
1397
+ * @returns {Promise<void>}
1398
+ * @protected
1399
+ * @memberof Meeting
1400
+ */
1401
+ protected addMediaInternal(icePhaseCallback: () => string, turnServerInfo: TurnServerInfo, forceTurnDiscovery: any, options?: AddMediaOptions): Promise<void>;
1392
1402
  /**
1393
1403
  * Informs if the peer connection is in a state that can be updated with updateMedia (audio/video/share)
1394
1404
  * @returns {Boolean}
@@ -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.34"
65
+ version: "3.3.1-next.36"
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.34",
46
+ "@webex/plugin-meetings": "3.3.1-next.36",
47
47
  "@webex/plugin-rooms": "3.3.1-next.9",
48
48
  "@webex/test-helper-chai": "3.3.1-next.8",
49
49
  "@webex/test-helper-mocha": "3.3.1-next.8",
@@ -70,7 +70,7 @@
70
70
  "@webex/internal-plugin-metrics": "3.3.1-next.8",
71
71
  "@webex/internal-plugin-support": "3.3.1-next.9",
72
72
  "@webex/internal-plugin-user": "3.3.1-next.8",
73
- "@webex/internal-plugin-voicea": "3.3.1-next.34",
73
+ "@webex/internal-plugin-voicea": "3.3.1-next.36",
74
74
  "@webex/media-helpers": "3.3.1-next.14",
75
75
  "@webex/plugin-people": "3.3.1-next.9",
76
76
  "@webex/plugin-rooms": "3.3.1-next.9",
@@ -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.34"
94
+ "version": "3.3.1-next.36"
95
95
  }
@@ -155,6 +155,9 @@ import PermissionError from '../common/errors/permission';
155
155
  import {LocusMediaRequest} from './locusMediaRequest';
156
156
  import {ConnectionStateHandler, ConnectionStateEvent} from './connectionStateHandler';
157
157
 
158
+ // default callback so we don't call an undefined function, but in practice it should never be used
159
+ const DEFAULT_ICE_PHASE_CALLBACK = () => 'JOIN_MEETING_FINAL';
160
+
158
161
  const logRequest = (request: any, {logText = ''}) => {
159
162
  LoggerProxy.logger.info(`${logText} - sending request`);
160
163
 
@@ -679,7 +682,11 @@ export default class Meeting extends StatelessWebexPlugin {
679
682
  },
680
683
  };
681
684
 
682
- private retriedWithTurnServer: boolean;
685
+ private addMediaData: {
686
+ retriedWithTurnServer: boolean;
687
+ icePhaseCallback: () => string;
688
+ };
689
+
683
690
  private sendSlotManager: SendSlotManager = new SendSlotManager(LoggerProxy);
684
691
  private deferSDPAnswer?: Defer; // used for waiting for a response
685
692
  private sdpResponseTimer?: ReturnType<typeof setTimeout>;
@@ -1452,13 +1459,19 @@ export default class Meeting extends StatelessWebexPlugin {
1452
1459
  this.turnServerUsed = false;
1453
1460
 
1454
1461
  /**
1455
- * Whether retry was done using TURN Discovery.
1462
+ * Contains information used during the addMedia() operation:
1463
+ * retriedWithTurnServer - whether retry was done using TURN Discovery
1464
+ * icePhaseCallback - callback for determining the value for icePhase when sending failure event to CA
1465
+ *
1456
1466
  * @instance
1457
- * @type {boolean}
1467
+ * @type {Object}
1458
1468
  * @private
1459
1469
  * @memberof Meeting
1460
1470
  */
1461
- this.retriedWithTurnServer = false;
1471
+ this.addMediaData = {
1472
+ retriedWithTurnServer: false,
1473
+ icePhaseCallback: DEFAULT_ICE_PHASE_CALLBACK,
1474
+ };
1462
1475
 
1463
1476
  /**
1464
1477
  * Whether or not the media connection has ever successfully connected.
@@ -4627,7 +4640,14 @@ export default class Meeting extends StatelessWebexPlugin {
4627
4640
  joined = true;
4628
4641
  }
4629
4642
 
4630
- const mediaResponse = await this.addMedia(mediaOptions, turnServerInfo, forceTurnDiscovery);
4643
+ const mediaResponse = await this.addMediaInternal(
4644
+ () => {
4645
+ return this.joinWithMediaRetryInfo.isRetry ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY';
4646
+ },
4647
+ turnServerInfo,
4648
+ forceTurnDiscovery,
4649
+ mediaOptions
4650
+ );
4631
4651
 
4632
4652
  this.joinWithMediaRetryInfo = {isRetry: false, prevJoinResponse: undefined};
4633
4653
 
@@ -6382,7 +6402,7 @@ export default class Meeting extends StatelessWebexPlugin {
6382
6402
  name: 'client.ice.end',
6383
6403
  payload: {
6384
6404
  canProceed: !this.turnServerUsed, // If we haven't done turn tls retry yet we will proceed with join attempt
6385
- icePhase: this.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY',
6405
+ icePhase: this.addMediaData.icePhaseCallback(),
6386
6406
  errors: [
6387
6407
  // @ts-ignore
6388
6408
  this.webex.internal.newMetrics.callDiagnosticMetrics.getErrorPayloadForClientErrorCode(
@@ -6549,7 +6569,7 @@ export default class Meeting extends StatelessWebexPlugin {
6549
6569
  remoteMediaManagerConfig?: RemoteMediaManagerConfiguration,
6550
6570
  bundlePolicy?: BundlePolicy
6551
6571
  ): Promise<void> {
6552
- this.retriedWithTurnServer = true;
6572
+ this.addMediaData.retriedWithTurnServer = true;
6553
6573
  const LOG_HEADER = 'Meeting:index#addMedia():retryWithForcedTurnDiscovery -->';
6554
6574
 
6555
6575
  await this.cleanUpBeforeRetryWithTurnServer();
@@ -6644,7 +6664,7 @@ export default class Meeting extends StatelessWebexPlugin {
6644
6664
  correlation_id: this.correlationId,
6645
6665
  latency: cdl.getTurnDiscoveryTime(),
6646
6666
  turnServerUsed: this.turnServerUsed,
6647
- retriedWithTurnServer: this.retriedWithTurnServer,
6667
+ retriedWithTurnServer: this.addMediaData.retriedWithTurnServer,
6648
6668
  });
6649
6669
  }
6650
6670
 
@@ -6824,18 +6844,39 @@ export default class Meeting extends StatelessWebexPlugin {
6824
6844
  * Creates a media connection to the server. Media connection is required for sending or receiving any audio/video.
6825
6845
  *
6826
6846
  * @param {AddMediaOptions} options
6827
- * @param {TurnServerInfo} turnServerInfo - TURN server information (used only internally by the SDK)
6828
- * @param {boolean} forceTurnDiscovery - if true, TURN discovery will be done (used only internally by the SDK)
6829
6847
  * @returns {Promise<void>}
6830
6848
  * @public
6831
6849
  * @memberof Meeting
6832
6850
  */
6833
- async addMedia(
6834
- options: AddMediaOptions = {},
6835
- turnServerInfo: TurnServerInfo = undefined,
6836
- forceTurnDiscovery = false
6851
+ addMedia(options: AddMediaOptions = {}): Promise<void> {
6852
+ return this.addMediaInternal(
6853
+ () => (this.turnServerUsed ? 'JOIN_MEETING_FINAL' : 'JOIN_MEETING_RETRY'),
6854
+ undefined,
6855
+ false,
6856
+ options
6857
+ );
6858
+ }
6859
+
6860
+ /**
6861
+ * Internal version of addMedia() with some more arguments for finer control of its behavior
6862
+ *
6863
+ * @param {Function} icePhaseCallback - callback to determine the icePhase for CA "client.ice.end" failure events
6864
+ * @param {TurnServerInfo} turnServerInfo - TURN server information
6865
+ * @param {boolean} forceTurnDiscovery - if true, TURN discovery will be done
6866
+ * @param {AddMediaOptions} options - same as options of the public addMedia() method
6867
+ * @returns {Promise<void>}
6868
+ * @protected
6869
+ * @memberof Meeting
6870
+ */
6871
+ protected async addMediaInternal(
6872
+ icePhaseCallback: () => string,
6873
+ turnServerInfo: TurnServerInfo,
6874
+ forceTurnDiscovery,
6875
+ options: AddMediaOptions = {}
6837
6876
  ): Promise<void> {
6838
- this.retriedWithTurnServer = false;
6877
+ this.addMediaData.retriedWithTurnServer = false;
6878
+ this.addMediaData.icePhaseCallback = icePhaseCallback;
6879
+
6839
6880
  this.hasMediaConnectionConnectedAtLeastOnce = false;
6840
6881
  const LOG_HEADER = 'Meeting:index#addMedia -->';
6841
6882
  LoggerProxy.logger.info(
@@ -6946,7 +6987,7 @@ export default class Meeting extends StatelessWebexPlugin {
6946
6987
  selectedCandidatePairChanges,
6947
6988
  numTransports,
6948
6989
  isMultistream: this.isMultistream,
6949
- retriedWithTurnServer: this.retriedWithTurnServer,
6990
+ retriedWithTurnServer: this.addMediaData.retriedWithTurnServer,
6950
6991
  isJoinWithMediaRetry: this.joinWithMediaRetryInfo.isRetry,
6951
6992
  ...reachabilityStats,
6952
6993
  });
@@ -6984,7 +7025,7 @@ export default class Meeting extends StatelessWebexPlugin {
6984
7025
  numTransports,
6985
7026
  turnDiscoverySkippedReason: this.turnDiscoverySkippedReason,
6986
7027
  turnServerUsed: this.turnServerUsed,
6987
- retriedWithTurnServer: this.retriedWithTurnServer,
7028
+ retriedWithTurnServer: this.addMediaData.retriedWithTurnServer,
6988
7029
  isMultistream: this.isMultistream,
6989
7030
  isJoinWithMediaRetry: this.joinWithMediaRetryInfo.isRetry,
6990
7031
  signalingState:
@@ -7024,6 +7065,8 @@ export default class Meeting extends StatelessWebexPlugin {
7024
7065
  }
7025
7066
 
7026
7067
  throw error;
7068
+ } finally {
7069
+ this.addMediaData.icePhaseCallback = DEFAULT_ICE_PHASE_CALLBACK;
7027
7070
  }
7028
7071
  }
7029
7072
 
@@ -343,10 +343,10 @@ export const getVideoReceiverStreamMqa = ({
343
343
  statsResults[mediaType][sendrecvType].framesDecoded - lastFramesDecoded;
344
344
 
345
345
  videoReceiverStream.common.receivedFrameRate = Math.round(
346
- totalFrameReceivedInaMin ? totalFrameReceivedInaMin / 60 : 0
346
+ totalFrameReceivedInaMin ? (totalFrameReceivedInaMin * 100) / 60 : 0
347
347
  );
348
348
  videoReceiverStream.common.renderedFrameRate = Math.round(
349
- totalFrameDecodedInaMin ? totalFrameDecodedInaMin / 60 : 0
349
+ totalFrameDecodedInaMin ? (totalFrameDecodedInaMin * 100) / 60 : 0
350
350
  );
351
351
 
352
352
  videoReceiverStream.common.framesDropped =
@@ -479,7 +479,7 @@ export const getVideoSenderStreamMqa = ({
479
479
  statsResults[mediaType][sendrecvType].framesSent - (lastFramesSent || 0);
480
480
 
481
481
  videoSenderStream.common.transmittedFrameRate = Math.round(
482
- totalFrameSentInaMin ? totalFrameSentInaMin / 60 : 0
482
+ totalFrameSentInaMin ? (totalFrameSentInaMin * 100) / 60 : 0
483
483
  );
484
484
  videoSenderStream.transmittedHeight = statsResults[mediaType][sendrecvType].height || 0;
485
485
  videoSenderStream.transmittedWidth = statsResults[mediaType][sendrecvType].width || 0;