@webex/plugin-meetings 2.60.0-next.9 → 2.60.1-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.js +2 -1
- package/dist/config.js.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.d.ts +2 -0
- package/dist/interceptors/index.js +15 -0
- package/dist/interceptors/index.js.map +1 -0
- package/dist/interceptors/locusRetry.d.ts +27 -0
- package/dist/interceptors/locusRetry.js +94 -0
- package/dist/interceptors/locusRetry.js.map +1 -0
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/meeting/index.js +6 -2
- package/dist/meeting/index.js.map +1 -1
- package/dist/meetings/index.d.ts +1 -11
- package/dist/meetings/index.js +4 -3
- package/dist/meetings/index.js.map +1 -1
- package/dist/reachability/clusterReachability.d.ts +109 -0
- package/dist/reachability/clusterReachability.js +357 -0
- package/dist/reachability/clusterReachability.js.map +1 -0
- package/dist/reachability/index.d.ts +32 -121
- package/dist/reachability/index.js +173 -459
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/util.d.ts +8 -0
- package/dist/reachability/util.js +29 -0
- package/dist/reachability/util.js.map +1 -0
- package/dist/statsAnalyzer/index.d.ts +22 -0
- package/dist/statsAnalyzer/index.js +60 -0
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +4 -0
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/webinar/index.js +1 -1
- package/package.json +25 -22
- package/src/config.ts +1 -0
- package/src/index.ts +4 -0
- package/src/interceptors/index.ts +3 -0
- package/src/interceptors/locusRetry.ts +67 -0
- package/src/meeting/index.ts +10 -2
- package/src/meetings/index.ts +4 -3
- package/src/reachability/clusterReachability.ts +320 -0
- package/src/reachability/index.ts +124 -421
- package/src/reachability/util.ts +24 -0
- package/src/statsAnalyzer/index.ts +64 -1
- package/src/statsAnalyzer/mqaUtil.ts +4 -0
- package/test/unit/spec/interceptors/locusRetry.ts +131 -0
- package/test/unit/spec/meeting/index.js +8 -1
- package/test/unit/spec/meetings/index.js +28 -25
- package/test/unit/spec/reachability/clusterReachability.ts +279 -0
- package/test/unit/spec/reachability/index.ts +159 -226
- package/test/unit/spec/reachability/util.ts +40 -0
- package/test/unit/spec/roap/request.ts +26 -3
- package/test/unit/spec/stats-analyzer/index.js +100 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_lodash","require","_internalMediaCore","_eventsScope","_interopRequireDefault","_constants","_config","_loggerProxy","_global","_mqaUtil","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","EVENTS","exports","MEDIA_QUALITY","LOCAL_MEDIA_STARTED","LOCAL_MEDIA_STOPPED","REMOTE_MEDIA_STARTED","REMOTE_MEDIA_STOPPED","emptySender","trackLabel","maxPacketLossRatio","availableBandwidth","bytesSent","meanRemoteJitter","meanRoundTripTime","emptyReceiver","bytesReceived","meanRtpJitter","StatsAnalyzer","_EventsScope","_inherits2","_super","config","_this","receiveSlotCallback","length","undefined","networkQualityMonitor","statsResults","defaultStats","_classCallCheck2","_defineProperty2","_assertThisInitialized2","mediaType","previousValue","currentValue","isLocal","Error","concat","lastEmittedStartStopEvent","lastEmittedEvent","local","remote","newEvent","emit","file","function","type","isSender","isRemote","_this$successfulCandi","id","successfulCandidatePair","localCandidateId","transport","relayProtocol","toUpperCase","protocol","sendRecvType","STATS","SEND_DIRECTION","RECEIVE_DIRECTION","ipType","REMOTE","LOCAL","candidates","candidateType","ipAddress","ip","portNumber","port","networkType","priority","timestamp","time","connectionType","NETWORK_TYPE","VPN","UNKNOWN","totalRoundTripTime","statsStarted","lastStatsResults","correlationId","mqaSentCount","lastMqaDataSent","_createClass2","key","value","resetStatsResults","_this2","_keys","forEach","includes","recv","send","updateMediaStatus","status","meetingMediaStatus","sendMqaData","_this3","newMqa","cloneDeep","emptyMqaInterval","audioSender","emptyAudioTransmit","getAudioSenderMqa","audioTransmit","push","audioReceiver","emptyAudioReceive","getAudioReceiverMqa","audioReceive","videoSender","emptyVideoTransmit","getVideoSenderMqa","videoTransmit","videoReceiver","emptyVideoReceive","getVideoReceiverMqa","videoReceive","intervalMetadata","peerReflexiveIP","peripherals","information","_UNKNOWN_","name","MEDIA_DEVICES","SPEAKER","MICROPHONE","CAMERA","intervalNumber","data","updateMediaConnection","mediaConnection","startAnalyzer","_this4","getStatsAndParse","then","statsInterval","setInterval","analyzerInterval","mqaInterval","MQA_INTEVAL","_promise","resolve","stopAnalyzer","_this5","sendOneLastMqa","clearInterval","parseGetStatsResult","getStatsResult","processOutboundRTPResult","processInboundRTPResult","compareSentAndReceived","parseCandidate","parseAudioSource","filterAndParseGetStatsResults","statsItem","_this6","types","DEFAULT_GET_STATS_FILTER","report","state","direction","currentDirection","localTrackLabel","csi","audioLevel","totalAudioEnergy","compareLastStatsResult","_this7","getCurrentStatsTotals","keyPrefix","filter","startsWith","reduce","prev","cur","_this7$statsResults$c","getPreviousStatsTotals","_this7$lastStatsResul","expected","sendAudio","currentStats","previousStats","totalPacketsSent","LoggerProxy","logger","info","emitStartStopEvents","receiveAudio","currentPacketsReceived","previousPacketsReceived","currentSamplesReceived","previousSamplesReceived","sendVideo","framesEncoded","framesSent","receiveVideo","currentFramesReceived","previousFramesReceived","currentFramesDecoded","previousFramesDecoded","currentFramesDropped","previousFramesDropped","sendShare","_this8","getConnectionState","ConnectionState","Failed","trace","getTransceiverStats","transceiverStats","video","receivers","receiver","i","audio","screenShareVideo","screenShareAudio","senders","sender","JSON","parse","_stringify","sendrecvType","kilobytes","frameWidth","frameHeight","width","height","hugeFramesSent","toFixed","keyFramesEncoded","packetsSent","totalKeyFramesEncoded","totalNackCount","nackCount","totalPliCount","pliCount","totalFirCount","firCount","encoderImplementation","qualityLimitationReason","qualityLimitationResolutionChanges","retransmittedPacketsSent","totalBytesSent","headerBytesSent","retransmittedBytesSent","receiveSlot","ssrc","idAndCsi","framesReceived","bytes","totalBytesReceived","currentPacketsLost","packetsLost","totalPacketsLost","packetsReceived","totalPacketsReceived","currentPacketLossRatio","lastPacketReceivedTimestamp","framesDecoded","keyFramesDecoded","decoderImplementation","fecPacketsDiscarded","fecPacketsReceived","headerBytesReceived","jitter","totalSamplesReceived","totalSamplesDecoded","concealedSamples","currentPacketLoss","totalPacketsLostOnReceiver","packetsLostOnReceiver","roundTripTime","reportsReceived","overAllPacketLossRatio","determineUplinkNetworkQuality","remoteRtpResults","statsAnalyzerCurrentStats","EventsScope"],"sources":["index.ts"],"sourcesContent":["/* eslint-disable prefer-destructuring */\n\nimport {cloneDeep} from 'lodash';\nimport {ConnectionState} from '@webex/internal-media-core';\n\nimport EventsScope from '../common/events/events-scope';\nimport {\n DEFAULT_GET_STATS_FILTER,\n STATS,\n MQA_INTEVAL,\n NETWORK_TYPE,\n MEDIA_DEVICES,\n _UNKNOWN_,\n} from '../constants';\nimport {\n emptyAudioReceive,\n emptyAudioTransmit,\n emptyMqaInterval,\n emptyVideoReceive,\n emptyVideoTransmit,\n} from '../mediaQualityMetrics/config';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport defaultStats from './global';\nimport {\n getAudioSenderMqa,\n getAudioReceiverMqa,\n getVideoSenderMqa,\n getVideoReceiverMqa,\n} from './mqaUtil';\nimport {ReceiveSlot} from '../multistream/receiveSlot';\n\nexport const EVENTS = {\n MEDIA_QUALITY: 'MEDIA_QUALITY',\n LOCAL_MEDIA_STARTED: 'LOCAL_MEDIA_STARTED',\n LOCAL_MEDIA_STOPPED: 'LOCAL_MEDIA_STOPPED',\n REMOTE_MEDIA_STARTED: 'REMOTE_MEDIA_STARTED',\n REMOTE_MEDIA_STOPPED: 'REMOTE_MEDIA_STOPPED',\n};\n\nconst emptySender = {\n trackLabel: '',\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n bytesSent: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n};\n\nconst emptyReceiver = {\n availableBandwidth: 0,\n bytesReceived: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n};\n\ntype ReceiveSlotCallback = (csi: number) => ReceiveSlot | undefined;\n\n/**\n * Stats Analyzer class that will emit events based on detected quality\n *\n * @export\n * @class StatsAnalyzer\n * @extends {EventsScope}\n */\nexport class StatsAnalyzer extends EventsScope {\n config: any;\n correlationId: any;\n lastEmittedStartStopEvent: any;\n lastMqaDataSent: any;\n lastStatsResults: any;\n meetingMediaStatus: any;\n mqaInterval: NodeJS.Timeout;\n mqaSentCount: any;\n networkQualityMonitor: any;\n mediaConnection: any;\n statsInterval: NodeJS.Timeout;\n statsResults: any;\n statsStarted: any;\n successfulCandidatePair: any;\n receiveSlotCallback: ReceiveSlotCallback;\n\n /**\n * Creates a new instance of StatsAnalyzer\n * @constructor\n * @public\n * @param {Object} config SDK Configuration Object\n * @param {Function} receiveSlotCallback Callback used to access receive slots.\n * @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)\n * @param {Object} statsResults Default properties for stats\n */\n constructor(\n config: any,\n receiveSlotCallback: ReceiveSlotCallback = () => undefined,\n networkQualityMonitor: object = {},\n statsResults: object = defaultStats\n ) {\n super();\n this.statsStarted = false;\n this.statsResults = statsResults;\n this.lastStatsResults = null;\n this.config = config;\n this.networkQualityMonitor = networkQualityMonitor;\n this.correlationId = config.correlationId;\n this.mqaSentCount = -1;\n this.lastMqaDataSent = {};\n this.lastEmittedStartStopEvent = {};\n this.receiveSlotCallback = receiveSlotCallback;\n this.successfulCandidatePair = {};\n }\n\n /**\n * Resets cumulative stats arrays.\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n resetStatsResults() {\n Object.keys(this.statsResults).forEach((mediaType) => {\n if (mediaType.includes('recv')) {\n this.statsResults[mediaType].recv.meanRtpJitter = [];\n }\n\n if (mediaType.includes('send')) {\n this.statsResults[mediaType].send.meanRemoteJitter = [];\n this.statsResults[mediaType].send.meanRoundTripTime = [];\n }\n });\n }\n\n /**\n * sets mediaStatus status for analyzing metrics\n *\n * @public\n * @param {Object} status for the audio and video\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n public updateMediaStatus(status: object) {\n this.meetingMediaStatus = status;\n }\n\n /**\n * captures MQA data from media connection\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n sendMqaData() {\n const newMqa = cloneDeep(emptyMqaInterval);\n\n Object.keys(this.statsResults).forEach((mediaType) => {\n if (!this.lastMqaDataSent[mediaType]) {\n this.lastMqaDataSent[mediaType] = {};\n }\n\n if (!this.lastMqaDataSent[mediaType].send && mediaType.includes('-send')) {\n this.lastMqaDataSent[mediaType].send = {};\n }\n\n if (!this.lastMqaDataSent[mediaType].recv && mediaType.includes('-recv')) {\n this.lastMqaDataSent[mediaType].recv = {};\n }\n\n if (mediaType.includes('audio-send') || mediaType.includes('audio-share-send')) {\n const audioSender = cloneDeep(emptyAudioTransmit);\n\n getAudioSenderMqa({\n audioSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n newMqa.audioTransmit.push(audioSender);\n\n this.lastMqaDataSent[mediaType].send = cloneDeep(this.statsResults[mediaType].send);\n } else if (mediaType.includes('audio-recv') || mediaType.includes('audio-share-recv')) {\n const audioReceiver = cloneDeep(emptyAudioReceive);\n\n getAudioReceiverMqa({\n audioReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n newMqa.audioReceive.push(audioReceiver);\n\n this.lastMqaDataSent[mediaType].recv = cloneDeep(this.statsResults[mediaType].recv);\n } else if (mediaType.includes('video-send') || mediaType.includes('video-share-send')) {\n const videoSender = cloneDeep(emptyVideoTransmit);\n\n getVideoSenderMqa({\n videoSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n newMqa.videoTransmit.push(videoSender);\n\n this.lastMqaDataSent[mediaType].send = cloneDeep(this.statsResults[mediaType].send);\n } else if (mediaType.includes('video-recv') || mediaType.includes('video-share-recv')) {\n const videoReceiver = cloneDeep(emptyVideoReceive);\n\n getVideoReceiverMqa({\n videoReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n newMqa.videoReceive.push(videoReceiver);\n\n this.lastMqaDataSent[mediaType].recv = cloneDeep(this.statsResults[mediaType].recv);\n }\n });\n\n newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;\n\n // Adding peripheral information\n newMqa.intervalMetadata.peripherals.push({information: _UNKNOWN_, name: MEDIA_DEVICES.SPEAKER});\n if (this.statsResults['audio-send']) {\n newMqa.intervalMetadata.peripherals.push({\n information: this.statsResults['audio-send'].trackLabel || _UNKNOWN_,\n name: MEDIA_DEVICES.MICROPHONE,\n });\n }\n if (this.statsResults['video-send']) {\n newMqa.intervalMetadata.peripherals.push({\n information: this.statsResults['video-send'].trackLabel || _UNKNOWN_,\n name: MEDIA_DEVICES.CAMERA,\n });\n }\n\n newMqa.networkType = this.statsResults.connectionType.local.networkType;\n\n this.mqaSentCount += 1;\n\n newMqa.intervalNumber = this.mqaSentCount;\n\n this.resetStatsResults();\n\n this.emit(\n {\n file: 'statsAnalyzer',\n function: 'sendMqaData',\n },\n EVENTS.MEDIA_QUALITY,\n {\n data: newMqa,\n // @ts-ignore\n networkType: newMqa.networkType,\n }\n );\n }\n\n /**\n * updated the media connection when changed\n *\n * @private\n * @memberof StatsAnalyzer\n * @param {RoapMediaConnection} mediaConnection\n * @returns {void}\n */\n updateMediaConnection(mediaConnection: any) {\n this.mediaConnection = mediaConnection;\n }\n\n /**\n * Starts the stats analyzer on interval\n *\n * @public\n * @memberof StatsAnalyzer\n * @param {RoapMediaConnection} mediaConnection\n * @returns {Promise}\n */\n public startAnalyzer(mediaConnection: any) {\n if (!this.statsStarted) {\n this.statsStarted = true;\n this.mediaConnection = mediaConnection;\n\n return this.getStatsAndParse().then(() => {\n this.statsInterval = setInterval(() => {\n this.getStatsAndParse();\n }, this.config.analyzerInterval);\n // Trigger initial fetch\n this.sendMqaData();\n this.mqaInterval = setInterval(() => {\n this.sendMqaData();\n }, MQA_INTEVAL);\n });\n }\n\n return Promise.resolve();\n }\n\n /**\n * Cleans up the analyzer when done\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n public stopAnalyzer() {\n const sendOneLastMqa = this.mqaInterval && this.statsInterval;\n\n if (this.statsInterval) {\n clearInterval(this.statsInterval);\n this.statsInterval = undefined;\n }\n\n if (this.mqaInterval) {\n clearInterval(this.mqaInterval);\n this.mqaInterval = undefined;\n }\n\n if (sendOneLastMqa) {\n return this.getStatsAndParse().then(() => {\n this.sendMqaData();\n this.mediaConnection = null;\n });\n }\n\n return Promise.resolve();\n }\n\n /**\n * Parse a single result of get stats\n *\n * @private\n * @param {*} getStatsResult\n * @param {String} type\n * @param {boolean} isSender\n * @returns {void}\n * @memberof StatsAnalyzer\n */\n private parseGetStatsResult(getStatsResult: any, type: string, isSender: boolean) {\n if (!getStatsResult) {\n return;\n }\n\n // Generate empty stats results\n if (!this.statsResults[type]) {\n this.statsResults[type] = {};\n }\n\n if (isSender && !this.statsResults[type].send) {\n this.statsResults[type].send = cloneDeep(emptySender);\n } else if (!isSender && !this.statsResults[type].recv) {\n this.statsResults[type].recv = cloneDeep(emptyReceiver);\n }\n\n switch (getStatsResult.type) {\n case 'outbound-rtp':\n this.processOutboundRTPResult(getStatsResult, type);\n break;\n case 'inbound-rtp':\n this.processInboundRTPResult(getStatsResult, type);\n break;\n case 'remote-inbound-rtp':\n case 'remote-outbound-rtp':\n this.compareSentAndReceived(getStatsResult, type);\n break;\n case 'remotecandidate':\n case 'remote-candidate':\n this.parseCandidate(getStatsResult, type, isSender, true);\n break;\n case 'local-candidate':\n this.parseCandidate(getStatsResult, type, isSender, false);\n break;\n case 'media-source':\n // @ts-ignore\n this.parseAudioSource(getStatsResult, type);\n break;\n default:\n break;\n }\n }\n\n /**\n * Filters the get stats results for types\n * @private\n * @param {Array} statsItem\n * @param {String} type\n * @param {boolean} isSender\n * @returns {void}\n */\n filterAndParseGetStatsResults(statsItem: any, type: string, isSender: boolean) {\n const {types} = DEFAULT_GET_STATS_FILTER;\n\n // get the successful candidate pair before parsing stats.\n statsItem.report.forEach((report) => {\n if (report.type === 'candidate-pair' && report.state === 'succeeded') {\n this.successfulCandidatePair = report;\n }\n });\n\n statsItem.report.forEach((result) => {\n if (types.includes(result.type)) {\n this.parseGetStatsResult(result, type, isSender);\n }\n });\n\n if (this.statsResults[type]) {\n this.statsResults[type].direction = statsItem.currentDirection;\n this.statsResults[type].trackLabel = statsItem.localTrackLabel;\n this.statsResults[type].csi = statsItem.csi;\n // reset the successful candidate pair.\n this.successfulCandidatePair = {};\n }\n }\n\n /**\n * parse the audio\n * @param {String} result\n * @param {boolean} type\n * @returns {void}\n */\n parseAudioSource(result: any, type: any) {\n if (!result) {\n return;\n }\n\n if (type.includes('audio-send')) {\n this.statsResults[type].send.audioLevel = result.audioLevel;\n this.statsResults[type].send.totalAudioEnergy = result.totalAudioEnergy;\n }\n }\n\n /**\n * emits started/stopped events for local/remote media by checking\n * if given values are increasing or not. The previousValue, currentValue\n * params can be any numerical value like number of receive packets or\n * decoded frames, etc.\n *\n * @private\n * @param {string} mediaType\n * @param {number} previousValue - value to compare\n * @param {number} currentValue - value to compare (must be same type of value as previousValue)\n * @param {boolean} isLocal - true if stats are for local media being sent out, false for remote media being received\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n emitStartStopEvents = (\n mediaType: string,\n previousValue: number,\n currentValue: number,\n isLocal: boolean\n ) => {\n if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {\n throw new Error(`Unsupported mediaType: ${mediaType}`);\n }\n\n // eslint-disable-next-line no-param-reassign\n if (previousValue === undefined) previousValue = 0;\n // eslint-disable-next-line no-param-reassign\n if (currentValue === undefined) currentValue = 0;\n\n if (!this.lastEmittedStartStopEvent[mediaType]) {\n this.lastEmittedStartStopEvent[mediaType] = {};\n }\n\n const lastEmittedEvent = isLocal\n ? this.lastEmittedStartStopEvent[mediaType].local\n : this.lastEmittedStartStopEvent[mediaType].remote;\n\n let newEvent;\n\n if (currentValue - previousValue > 0) {\n newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STARTED : EVENTS.REMOTE_MEDIA_STARTED;\n } else if (currentValue === previousValue && currentValue > 0) {\n newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STOPPED : EVENTS.REMOTE_MEDIA_STOPPED;\n }\n\n if (newEvent && lastEmittedEvent !== newEvent) {\n if (isLocal) {\n this.lastEmittedStartStopEvent[mediaType].local = newEvent;\n } else {\n this.lastEmittedStartStopEvent[mediaType].remote = newEvent;\n }\n this.emit(\n {\n file: 'statsAnalyzer/index',\n function: 'compareLastStatsResult',\n },\n newEvent,\n {\n type: mediaType,\n }\n );\n }\n };\n\n /**\n * compares current and previous stats to check if packets are not sent\n *\n * @private\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n private compareLastStatsResult() {\n if (this.lastStatsResults !== null && this.meetingMediaStatus) {\n const getCurrentStatsTotals = (keyPrefix: string, value: string): number =>\n Object.keys(this.statsResults)\n .filter((key) => key.startsWith(keyPrefix))\n .reduce((prev, cur) => prev + (this.statsResults[cur]?.recv[value] || 0), 0);\n\n const getPreviousStatsTotals = (keyPrefix: string, value: string): number =>\n Object.keys(this.statsResults)\n .filter((key) => key.startsWith(keyPrefix))\n .reduce((prev, cur) => prev + (this.lastStatsResults[cur]?.recv[value] || 0), 0);\n\n if (this.meetingMediaStatus.expected.sendAudio && this.lastStatsResults['audio-send']) {\n // compare audio stats sent\n // NOTE: relies on there being only one sender.\n const currentStats = this.statsResults['audio-send'].send;\n const previousStats = this.lastStatsResults['audio-send'].send;\n\n if (\n currentStats.totalPacketsSent === previousStats.totalPacketsSent ||\n currentStats.totalPacketsSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent`,\n currentStats.totalPacketsSent\n );\n } else {\n if (\n currentStats.totalAudioEnergy === previousStats.totalAudioEnergy ||\n currentStats.totalAudioEnergy === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present`,\n currentStats.totalAudioEnergy\n );\n }\n\n if (currentStats.audioLevel === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user`\n );\n }\n }\n\n this.emitStartStopEvents(\n 'audio',\n previousStats.totalPacketsSent,\n currentStats.totalPacketsSent,\n true\n );\n }\n\n if (this.meetingMediaStatus.expected.receiveAudio) {\n // compare audio stats received\n const currentPacketsReceived = getCurrentStatsTotals('audio-recv', 'totalPacketsReceived');\n const previousPacketsReceived = getPreviousStatsTotals(\n 'audio-recv',\n 'totalPacketsReceived'\n );\n const currentSamplesReceived = getCurrentStatsTotals('audio-recv', 'totalSamplesReceived');\n const previousSamplesReceived = getPreviousStatsTotals(\n 'audio-recv',\n 'totalSamplesReceived'\n );\n\n if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets received`,\n currentPacketsReceived\n );\n } else if (\n currentSamplesReceived === previousSamplesReceived ||\n currentSamplesReceived === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No audio samples received`,\n currentSamplesReceived\n );\n }\n\n this.emitStartStopEvents('audio', previousPacketsReceived, currentPacketsReceived, false);\n }\n\n if (this.meetingMediaStatus.expected.sendVideo && this.lastStatsResults['video-send']) {\n // compare video stats sent\n const currentStats = this.statsResults['video-send'].send;\n const previousStats = this.lastStatsResults['video-send'].send;\n\n if (\n currentStats.totalPacketsSent === previousStats.totalPacketsSent ||\n currentStats.totalPacketsSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent`,\n currentStats.totalPacketsSent\n );\n } else {\n if (\n currentStats.framesEncoded === previousStats.framesEncoded ||\n currentStats.framesEncoded === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded`,\n currentStats.framesEncoded\n );\n }\n\n if (\n this.statsResults['video-send'].send.framesSent ===\n this.lastStatsResults['video-send'].send.framesSent ||\n this.statsResults['video-send'].send.framesSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent`,\n this.statsResults['video-send'].send.framesSent\n );\n }\n }\n\n this.emitStartStopEvents('video', previousStats.framesSent, currentStats.framesSent, true);\n }\n\n if (this.meetingMediaStatus.expected.receiveVideo) {\n // compare video stats received\n const currentPacketsReceived = getCurrentStatsTotals('video-recv', 'totalPacketsReceived');\n const previousPacketsReceived = getPreviousStatsTotals(\n 'video-recv',\n 'totalPacketsReceived'\n );\n const currentFramesReceived = getCurrentStatsTotals('video-recv', 'framesReceived');\n const previousFramesReceived = getPreviousStatsTotals('video-recv', 'framesReceived');\n const currentFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');\n const previousFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');\n const currentFramesDropped = getCurrentStatsTotals('video-recv', 'framesDropped');\n const previousFramesDropped = getPreviousStatsTotals('video-recv', 'framesDropped');\n\n if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received`,\n currentPacketsReceived\n );\n } else {\n if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video frames received`,\n currentFramesReceived\n );\n }\n\n if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded`,\n currentFramesDecoded\n );\n }\n\n if (currentFramesDropped - previousFramesDropped > 10) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped`,\n currentFramesDropped - previousFramesDropped\n );\n }\n }\n\n this.emitStartStopEvents('video', previousFramesDecoded, currentFramesDecoded, false);\n }\n\n if (this.meetingMediaStatus.expected.sendShare && this.lastStatsResults['video-share-send']) {\n // compare share stats sent\n\n const currentStats = this.statsResults['video-share-send'].send;\n const previousStats = this.lastStatsResults['video-share-send'].send;\n\n if (\n currentStats.totalPacketsSent === previousStats.totalPacketsSent ||\n currentStats.totalPacketsSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent`,\n currentStats.totalPacketsSent\n );\n } else {\n if (\n currentStats.framesEncoded === previousStats.framesEncoded ||\n currentStats.framesEncoded === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded`,\n currentStats.framesEncoded\n );\n }\n\n if (\n this.statsResults['video-share-send'].send.framesSent ===\n this.lastStatsResults['video-share-send'].send.framesSent ||\n this.statsResults['video-share-send'].send.framesSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share frames sent`,\n this.statsResults['video-share-send'].send.framesSent\n );\n }\n }\n }\n\n if (this.meetingMediaStatus.expected.sendShare) {\n // TODO:need to check receive share value\n // compare share stats received\n const currentPacketsReceived = getCurrentStatsTotals(\n 'video-share-recv',\n 'totalPacketsReceived'\n );\n const previousPacketsReceived = getPreviousStatsTotals(\n 'video-share-recv',\n 'totalPacketsReceived'\n );\n const currentFramesReceived = getCurrentStatsTotals('video-share-recv', 'framesReceived');\n const previousFramesReceived = getPreviousStatsTotals('video-share-recv', 'framesReceived');\n const currentFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');\n const previousFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');\n const currentFramesDropped = getCurrentStatsTotals('video-share-recv', 'framesDropped');\n const previousFramesDropped = getPreviousStatsTotals('video-share-recv', 'framesDropped');\n\n if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received`,\n currentPacketsReceived\n );\n } else {\n if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share frames received`,\n currentFramesReceived\n );\n }\n\n if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded`,\n currentFramesDecoded\n );\n }\n\n if (currentFramesDropped - previousFramesDropped > 10) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped`,\n currentFramesDropped - previousFramesDropped\n );\n }\n }\n\n // we are not calling emitStartStopEvents() for sending or receiving share because sharing is often started and stopped\n // in meetings and this.meetingMediaStatus.expected values can be out of sync with the actual packet flow\n // so we would send \"sharing stopped\" events incorrectly\n }\n }\n }\n\n /**\n * Does a `getStats` on all the transceivers and parses the results\n *\n * @private\n * @memberof StatsAnalyzer\n * @returns {Promise}\n */\n private getStatsAndParse() {\n if (!this.mediaConnection) {\n return Promise.resolve();\n }\n\n if (\n this.mediaConnection &&\n this.mediaConnection.getConnectionState() === ConnectionState.Failed\n ) {\n LoggerProxy.logger.trace(\n 'StatsAnalyzer:index#getStatsAndParse --> media connection is in failed state'\n );\n\n return Promise.resolve();\n }\n\n LoggerProxy.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');\n\n return this.mediaConnection.getTransceiverStats().then((transceiverStats) => {\n transceiverStats.video.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `video-recv-${i}`, false)\n );\n transceiverStats.audio.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `audio-recv-${i}`, false)\n );\n transceiverStats.screenShareVideo.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `video-share-recv-${i}`, false)\n );\n transceiverStats.screenShareAudio.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `audio-share-recv-${i}`, false)\n );\n\n transceiverStats.video.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'video-send', true);\n });\n transceiverStats.audio.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'audio-send', true);\n });\n transceiverStats.screenShareVideo.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'video-share-send', true);\n });\n transceiverStats.screenShareAudio.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'audio-share-send', true);\n });\n\n this.compareLastStatsResult();\n\n // Save the last results to compare with the current\n // DO Deep copy, for some reason it takes the reference all the time rather then old value set\n this.lastStatsResults = JSON.parse(JSON.stringify(this.statsResults));\n\n LoggerProxy.logger.trace(\n 'StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats'\n );\n });\n }\n\n /**\n * Processes OutboundRTP stats result and stores\n * @private\n * @param {*} result\n * @param {*} mediaType\n * @returns {void}\n */\n private processOutboundRTPResult(result: any, mediaType: any) {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n if (result.bytesSent) {\n const kilobytes = 0;\n\n if (result.frameWidth && result.frameHeight) {\n this.statsResults[mediaType][sendrecvType].width = result.frameWidth;\n this.statsResults[mediaType][sendrecvType].height = result.frameHeight;\n this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;\n this.statsResults[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;\n }\n\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n\n this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;\n this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;\n this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent;\n\n // Data saved to send MQA metrics\n\n this.statsResults[mediaType][sendrecvType].totalKeyFramesEncoded = result.keyFramesEncoded;\n this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;\n this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;\n this.statsResults[mediaType][sendrecvType].totalPacketsSent = result.packetsSent;\n this.statsResults[mediaType][sendrecvType].totalFirCount = result.firCount;\n this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;\n this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;\n this.statsResults[mediaType][sendrecvType].encoderImplementation =\n result.encoderImplementation;\n this.statsResults[mediaType][sendrecvType].qualityLimitationReason =\n result.qualityLimitationReason;\n this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges =\n result.qualityLimitationResolutionChanges;\n this.statsResults[mediaType][sendrecvType].retransmittedPacketsSent =\n result.retransmittedPacketsSent;\n this.statsResults[mediaType][sendrecvType].totalBytesSent = result.bytesSent;\n this.statsResults[mediaType][sendrecvType].headerBytesSent = result.headerBytesSent;\n this.statsResults[mediaType][sendrecvType].retransmittedBytesSent =\n result.retransmittedBytesSent;\n }\n }\n\n /**\n * Processes InboundRTP stats result and stores\n * @private\n * @param {*} result\n * @param {*} mediaType\n * @returns {void}\n */\n private processInboundRTPResult(result: any, mediaType: any) {\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n if (result.bytesReceived) {\n let kilobytes = 0;\n const receiveSlot = this.receiveSlotCallback(result.ssrc);\n const idAndCsi = receiveSlot\n ? `id: \"${receiveSlot.id || ''}\"${receiveSlot.csi ? ` and csi: ${receiveSlot.csi}` : ''}`\n : '';\n\n if (result.frameWidth && result.frameHeight) {\n this.statsResults[mediaType][sendrecvType].width = result.frameWidth;\n this.statsResults[mediaType][sendrecvType].height = result.frameHeight;\n this.statsResults[mediaType][sendrecvType].framesReceived = result.framesReceived;\n }\n\n const bytes =\n result.bytesReceived - this.statsResults[mediaType][sendrecvType].totalBytesReceived;\n\n kilobytes = bytes / 1024;\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n\n let currentPacketsLost =\n result.packetsLost - this.statsResults[mediaType][sendrecvType].totalPacketsLost;\n if (currentPacketsLost < 0) {\n currentPacketsLost = 0;\n }\n\n const currentPacketsReceived =\n result.packetsReceived - this.statsResults[mediaType][sendrecvType].totalPacketsReceived;\n this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n\n if (currentPacketsReceived === 0) {\n if (receiveSlot) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#processInboundRTPResult --> No packets received for receive slot ${idAndCsi}`,\n currentPacketsReceived\n );\n }\n }\n\n // Check the over all packet Lost ratio\n this.statsResults[mediaType][sendrecvType].currentPacketLossRatio =\n currentPacketsLost > 0\n ? currentPacketsLost / (currentPacketsReceived + currentPacketsLost)\n : 0;\n if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ${idAndCsi}`,\n this.statsResults[mediaType][sendrecvType].currentPacketLossRatio\n );\n }\n\n // TODO: check the packet loss value is negative values here\n\n if (result.packetsLost) {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost =\n result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;\n } else {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;\n }\n\n this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp =\n result.lastPacketReceivedTimestamp;\n\n // From Thin\n this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;\n this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;\n this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;\n this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;\n\n this.statsResults[mediaType][sendrecvType].decoderImplementation =\n result.decoderImplementation;\n this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n\n this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;\n this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;\n this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;\n this.statsResults[mediaType][sendrecvType].headerBytesReceived = result.headerBytesReceived;\n\n this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);\n\n // Audio stats\n\n this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;\n this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;\n this.statsResults[mediaType][sendrecvType].totalSamplesReceived =\n result.totalSamplesReceived || 0;\n this.statsResults[mediaType][sendrecvType].totalSamplesDecoded =\n result.totalSamplesDecoded || 0;\n this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;\n }\n }\n\n /**\n * Processes remote and local candidate result and stores\n * @private\n * @param {*} result\n * @param {*} type\n * @param {boolean} isSender\n * @param {boolean} isRemote\n *\n * @returns {void}\n */\n parseCandidate = (result: any, type: any, isSender: boolean, isRemote: boolean) => {\n if (!result || !result.id) {\n return;\n }\n\n // We only care about the successful local candidate\n if (this.successfulCandidatePair?.localCandidateId !== result.id) {\n return;\n }\n\n let transport;\n if (result.relayProtocol) {\n transport = result.relayProtocol.toUpperCase();\n } else if (result.protocol) {\n transport = result.protocol.toUpperCase();\n }\n\n const sendRecvType = isSender ? STATS.SEND_DIRECTION : STATS.RECEIVE_DIRECTION;\n const ipType = isRemote ? STATS.REMOTE : STATS.LOCAL;\n\n if (!this.statsResults.candidates) {\n this.statsResults.candidates = {};\n }\n\n this.statsResults.candidates[result.id] = {\n candidateType: result.candidateType,\n ipAddress: result.ip, // TODO: add ports\n portNumber: result.port,\n networkType: result.networkType,\n priority: result.priority,\n transport,\n timestamp: result.time,\n id: result.id,\n type: result.type,\n };\n\n this.statsResults.connectionType[ipType].candidateType = result.candidateType;\n this.statsResults.connectionType[ipType].ipAddress = result.ipAddress;\n\n this.statsResults.connectionType[ipType].networkType =\n result.networkType === NETWORK_TYPE.VPN ? NETWORK_TYPE.UNKNOWN : result.networkType;\n this.statsResults.connectionType[ipType].transport = transport;\n\n this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;\n };\n\n /**\n *\n * @private\n * @param {*} result\n * @param {*} type\n * @returns {void}\n * @memberof StatsAnalyzer\n */\n compareSentAndReceived(result, type) {\n // Don't compare on transceivers without a sender.\n if (!type || !this.statsResults[type].send) {\n return;\n }\n\n const mediaType = type;\n\n const currentPacketLoss =\n result.packetsLost - this.statsResults[mediaType].send.totalPacketsLostOnReceiver;\n\n this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;\n this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;\n\n this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);\n this.statsResults[mediaType].send.meanRoundTripTime.push(result.roundTripTime);\n\n this.statsResults[mediaType].send.timestamp = result.timestamp;\n this.statsResults[mediaType].send.ssrc = result.ssrc;\n this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;\n\n // Total packloss ratio on this video section of the call\n this.statsResults[mediaType].send.overAllPacketLossRatio =\n this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0\n ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver /\n this.statsResults[mediaType].send.totalPacketsSent\n : 0;\n this.statsResults[mediaType].send.currentPacketLossRatio =\n this.statsResults[mediaType].send.packetsLostOnReceiver > 0\n ? (this.statsResults[mediaType].send.packetsLostOnReceiver * 100) /\n (this.statsResults[mediaType].send.packetsSent +\n this.statsResults[mediaType].send.packetsLostOnReceiver)\n : 0;\n\n if (\n this.statsResults[mediaType].send.maxPacketLossRatio <\n this.statsResults[mediaType].send.currentPacketLossRatio\n ) {\n this.statsResults[mediaType].send.maxPacketLossRatio =\n this.statsResults[mediaType].send.currentPacketLossRatio;\n }\n\n if (result.type === 'remote-inbound-rtp') {\n this.networkQualityMonitor.determineUplinkNetworkQuality({\n mediaType,\n remoteRtpResults: result,\n statsAnalyzerCurrentStats: this.statsResults,\n });\n }\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_lodash","require","_internalMediaCore","_eventsScope","_interopRequireDefault","_constants","_config","_loggerProxy","_global","_mqaUtil","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","_createSuperInternal","Super","_getPrototypeOf2","default","result","NewTarget","constructor","_Reflect$construct","arguments","apply","_possibleConstructorReturn2","Reflect","sham","Proxy","Boolean","prototype","valueOf","call","e","EVENTS","exports","MEDIA_QUALITY","LOCAL_MEDIA_STARTED","LOCAL_MEDIA_STOPPED","REMOTE_MEDIA_STARTED","REMOTE_MEDIA_STOPPED","emptySender","trackLabel","maxPacketLossRatio","availableBandwidth","bytesSent","meanRemoteJitter","meanRoundTripTime","emptyReceiver","bytesReceived","meanRtpJitter","StatsAnalyzer","_EventsScope","_inherits2","_super","config","_this","receiveSlotCallback","length","undefined","networkQualityMonitor","statsResults","defaultStats","_classCallCheck2","_defineProperty2","_assertThisInitialized2","mediaType","previousValue","currentValue","isLocal","Error","concat","lastEmittedStartStopEvent","lastEmittedEvent","local","remote","newEvent","emit","file","function","type","successfulCandidatePairId","candidates","newIpAddress","isEmpty","localCandidate","candidateType","address","relayProtocol","relatedAddress","localIpAddress","isSender","isRemote","_this$successfulCandi","id","successfulCandidatePair","localCandidateId","transport","toUpperCase","protocol","sendRecvType","STATS","SEND_DIRECTION","RECEIVE_DIRECTION","ipType","REMOTE","LOCAL","ipAddress","ip","relatedPort","portNumber","port","networkType","priority","timestamp","time","connectionType","NETWORK_TYPE","VPN","UNKNOWN","totalRoundTripTime","statsStarted","lastStatsResults","correlationId","mqaSentCount","lastMqaDataSent","_createClass2","key","value","resetStatsResults","_this2","_keys","forEach","includes","recv","send","updateMediaStatus","status","meetingMediaStatus","sendMqaData","_this3","newMqa","cloneDeep","emptyMqaInterval","audioSender","emptyAudioTransmit","getAudioSenderMqa","audioTransmit","push","audioReceiver","emptyAudioReceive","getAudioReceiverMqa","audioReceive","videoSender","emptyVideoTransmit","getVideoSenderMqa","videoTransmit","videoReceiver","emptyVideoReceive","getVideoReceiverMqa","videoReceive","intervalMetadata","peerReflexiveIP","peripherals","information","_UNKNOWN_","name","MEDIA_DEVICES","SPEAKER","MICROPHONE","CAMERA","intervalNumber","data","updateMediaConnection","mediaConnection","getLocalIpAddress","startAnalyzer","_this4","getStatsAndParse","then","statsInterval","setInterval","analyzerInterval","mqaInterval","MQA_INTEVAL","_promise","resolve","stopAnalyzer","_this5","sendOneLastMqa","clearInterval","parseGetStatsResult","getStatsResult","processOutboundRTPResult","processInboundRTPResult","compareSentAndReceived","parseCandidate","parseAudioSource","filterAndParseGetStatsResults","statsItem","_this6","types","DEFAULT_GET_STATS_FILTER","report","state","_this$successfulCandi2","_this$statsResults","direction","currentDirection","localTrackLabel","csi","extractAndSetLocalIpAddressInfoForDiagnostics","audioLevel","totalAudioEnergy","compareLastStatsResult","_this7","getCurrentStatsTotals","keyPrefix","filter","startsWith","reduce","prev","cur","_this7$statsResults$c","getPreviousStatsTotals","_this7$lastStatsResul","expected","sendAudio","currentStats","previousStats","totalPacketsSent","LoggerProxy","logger","info","emitStartStopEvents","receiveAudio","currentPacketsReceived","previousPacketsReceived","currentSamplesReceived","previousSamplesReceived","sendVideo","framesEncoded","framesSent","receiveVideo","currentFramesReceived","previousFramesReceived","currentFramesDecoded","previousFramesDecoded","currentFramesDropped","previousFramesDropped","sendShare","_this8","getConnectionState","ConnectionState","Failed","trace","getTransceiverStats","transceiverStats","video","receivers","receiver","i","audio","screenShareVideo","screenShareAudio","senders","sender","JSON","parse","_stringify","sendrecvType","kilobytes","frameWidth","frameHeight","width","height","hugeFramesSent","toFixed","keyFramesEncoded","packetsSent","totalKeyFramesEncoded","totalNackCount","nackCount","totalPliCount","pliCount","totalFirCount","firCount","encoderImplementation","qualityLimitationReason","qualityLimitationResolutionChanges","retransmittedPacketsSent","totalBytesSent","headerBytesSent","retransmittedBytesSent","receiveSlot","ssrc","idAndCsi","framesReceived","bytes","totalBytesReceived","currentPacketsLost","packetsLost","totalPacketsLost","packetsReceived","totalPacketsReceived","currentPacketLossRatio","lastPacketReceivedTimestamp","framesDecoded","keyFramesDecoded","decoderImplementation","fecPacketsDiscarded","fecPacketsReceived","headerBytesReceived","jitter","totalSamplesReceived","totalSamplesDecoded","concealedSamples","currentPacketLoss","totalPacketsLostOnReceiver","packetsLostOnReceiver","roundTripTime","reportsReceived","overAllPacketLossRatio","determineUplinkNetworkQuality","remoteRtpResults","statsAnalyzerCurrentStats","EventsScope"],"sources":["index.ts"],"sourcesContent":["/* eslint-disable prefer-destructuring */\n\nimport {cloneDeep, isEmpty} from 'lodash';\nimport {ConnectionState} from '@webex/internal-media-core';\n\nimport EventsScope from '../common/events/events-scope';\nimport {\n DEFAULT_GET_STATS_FILTER,\n STATS,\n MQA_INTEVAL,\n NETWORK_TYPE,\n MEDIA_DEVICES,\n _UNKNOWN_,\n} from '../constants';\nimport {\n emptyAudioReceive,\n emptyAudioTransmit,\n emptyMqaInterval,\n emptyVideoReceive,\n emptyVideoTransmit,\n} from '../mediaQualityMetrics/config';\nimport LoggerProxy from '../common/logs/logger-proxy';\n\nimport defaultStats from './global';\nimport {\n getAudioSenderMqa,\n getAudioReceiverMqa,\n getVideoSenderMqa,\n getVideoReceiverMqa,\n} from './mqaUtil';\nimport {ReceiveSlot} from '../multistream/receiveSlot';\n\nexport const EVENTS = {\n MEDIA_QUALITY: 'MEDIA_QUALITY',\n LOCAL_MEDIA_STARTED: 'LOCAL_MEDIA_STARTED',\n LOCAL_MEDIA_STOPPED: 'LOCAL_MEDIA_STOPPED',\n REMOTE_MEDIA_STARTED: 'REMOTE_MEDIA_STARTED',\n REMOTE_MEDIA_STOPPED: 'REMOTE_MEDIA_STOPPED',\n};\n\nconst emptySender = {\n trackLabel: '',\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n bytesSent: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n};\n\nconst emptyReceiver = {\n availableBandwidth: 0,\n bytesReceived: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n};\n\ntype ReceiveSlotCallback = (csi: number) => ReceiveSlot | undefined;\n\n/**\n * Stats Analyzer class that will emit events based on detected quality\n *\n * @export\n * @class StatsAnalyzer\n * @extends {EventsScope}\n */\nexport class StatsAnalyzer extends EventsScope {\n config: any;\n correlationId: any;\n lastEmittedStartStopEvent: any;\n lastMqaDataSent: any;\n lastStatsResults: any;\n meetingMediaStatus: any;\n mqaInterval: NodeJS.Timeout;\n mqaSentCount: any;\n networkQualityMonitor: any;\n mediaConnection: any;\n statsInterval: NodeJS.Timeout;\n statsResults: any;\n statsStarted: any;\n successfulCandidatePair: any;\n localIpAddress: string; // Returns the local IP address for diagnostics. this is the local IP of the interface used for the current media connection a host can have many local Ip Addresses\n receiveSlotCallback: ReceiveSlotCallback;\n\n /**\n * Creates a new instance of StatsAnalyzer\n * @constructor\n * @public\n * @param {Object} config SDK Configuration Object\n * @param {Function} receiveSlotCallback Callback used to access receive slots.\n * @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)\n * @param {Object} statsResults Default properties for stats\n */\n constructor(\n config: any,\n receiveSlotCallback: ReceiveSlotCallback = () => undefined,\n networkQualityMonitor: object = {},\n statsResults: object = defaultStats\n ) {\n super();\n this.statsStarted = false;\n this.statsResults = statsResults;\n this.lastStatsResults = null;\n this.config = config;\n this.networkQualityMonitor = networkQualityMonitor;\n this.correlationId = config.correlationId;\n this.mqaSentCount = -1;\n this.lastMqaDataSent = {};\n this.lastEmittedStartStopEvent = {};\n this.receiveSlotCallback = receiveSlotCallback;\n this.successfulCandidatePair = {};\n this.localIpAddress = '';\n }\n\n /**\n * Resets cumulative stats arrays.\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n resetStatsResults() {\n Object.keys(this.statsResults).forEach((mediaType) => {\n if (mediaType.includes('recv')) {\n this.statsResults[mediaType].recv.meanRtpJitter = [];\n }\n\n if (mediaType.includes('send')) {\n this.statsResults[mediaType].send.meanRemoteJitter = [];\n this.statsResults[mediaType].send.meanRoundTripTime = [];\n }\n });\n }\n\n /**\n * sets mediaStatus status for analyzing metrics\n *\n * @public\n * @param {Object} status for the audio and video\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n public updateMediaStatus(status: object) {\n this.meetingMediaStatus = status;\n }\n\n /**\n * captures MQA data from media connection\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n sendMqaData() {\n const newMqa = cloneDeep(emptyMqaInterval);\n\n Object.keys(this.statsResults).forEach((mediaType) => {\n if (!this.lastMqaDataSent[mediaType]) {\n this.lastMqaDataSent[mediaType] = {};\n }\n\n if (!this.lastMqaDataSent[mediaType].send && mediaType.includes('-send')) {\n this.lastMqaDataSent[mediaType].send = {};\n }\n\n if (!this.lastMqaDataSent[mediaType].recv && mediaType.includes('-recv')) {\n this.lastMqaDataSent[mediaType].recv = {};\n }\n\n if (mediaType.includes('audio-send') || mediaType.includes('audio-share-send')) {\n const audioSender = cloneDeep(emptyAudioTransmit);\n\n getAudioSenderMqa({\n audioSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n newMqa.audioTransmit.push(audioSender);\n\n this.lastMqaDataSent[mediaType].send = cloneDeep(this.statsResults[mediaType].send);\n } else if (mediaType.includes('audio-recv') || mediaType.includes('audio-share-recv')) {\n const audioReceiver = cloneDeep(emptyAudioReceive);\n\n getAudioReceiverMqa({\n audioReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n newMqa.audioReceive.push(audioReceiver);\n\n this.lastMqaDataSent[mediaType].recv = cloneDeep(this.statsResults[mediaType].recv);\n } else if (mediaType.includes('video-send') || mediaType.includes('video-share-send')) {\n const videoSender = cloneDeep(emptyVideoTransmit);\n\n getVideoSenderMqa({\n videoSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n newMqa.videoTransmit.push(videoSender);\n\n this.lastMqaDataSent[mediaType].send = cloneDeep(this.statsResults[mediaType].send);\n } else if (mediaType.includes('video-recv') || mediaType.includes('video-share-recv')) {\n const videoReceiver = cloneDeep(emptyVideoReceive);\n\n getVideoReceiverMqa({\n videoReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n mediaType,\n });\n newMqa.videoReceive.push(videoReceiver);\n\n this.lastMqaDataSent[mediaType].recv = cloneDeep(this.statsResults[mediaType].recv);\n }\n });\n\n newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;\n\n // Adding peripheral information\n newMqa.intervalMetadata.peripherals.push({information: _UNKNOWN_, name: MEDIA_DEVICES.SPEAKER});\n if (this.statsResults['audio-send']) {\n newMqa.intervalMetadata.peripherals.push({\n information: this.statsResults['audio-send'].trackLabel || _UNKNOWN_,\n name: MEDIA_DEVICES.MICROPHONE,\n });\n }\n if (this.statsResults['video-send']) {\n newMqa.intervalMetadata.peripherals.push({\n information: this.statsResults['video-send'].trackLabel || _UNKNOWN_,\n name: MEDIA_DEVICES.CAMERA,\n });\n }\n\n newMqa.networkType = this.statsResults.connectionType.local.networkType;\n\n this.mqaSentCount += 1;\n\n newMqa.intervalNumber = this.mqaSentCount;\n\n this.resetStatsResults();\n\n this.emit(\n {\n file: 'statsAnalyzer',\n function: 'sendMqaData',\n },\n EVENTS.MEDIA_QUALITY,\n {\n data: newMqa,\n // @ts-ignore\n networkType: newMqa.networkType,\n }\n );\n }\n\n /**\n * updated the media connection when changed\n *\n * @private\n * @memberof StatsAnalyzer\n * @param {RoapMediaConnection} mediaConnection\n * @returns {void}\n */\n updateMediaConnection(mediaConnection: any) {\n this.mediaConnection = mediaConnection;\n }\n\n /**\n * Returns the local IP address for diagnostics.\n * this is the local IP of the interface used for the current media connection\n * a host can have many local Ip Addresses\n * @returns {string | undefined} The local IP address.\n */\n getLocalIpAddress(): string {\n return this.localIpAddress;\n }\n\n /**\n * Starts the stats analyzer on interval\n *\n * @public\n * @memberof StatsAnalyzer\n * @param {RoapMediaConnection} mediaConnection\n * @returns {Promise}\n */\n public startAnalyzer(mediaConnection: any) {\n if (!this.statsStarted) {\n this.statsStarted = true;\n this.mediaConnection = mediaConnection;\n\n return this.getStatsAndParse().then(() => {\n this.statsInterval = setInterval(() => {\n this.getStatsAndParse();\n }, this.config.analyzerInterval);\n // Trigger initial fetch\n this.sendMqaData();\n this.mqaInterval = setInterval(() => {\n this.sendMqaData();\n }, MQA_INTEVAL);\n });\n }\n\n return Promise.resolve();\n }\n\n /**\n * Cleans up the analyzer when done\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n public stopAnalyzer() {\n const sendOneLastMqa = this.mqaInterval && this.statsInterval;\n\n if (this.statsInterval) {\n clearInterval(this.statsInterval);\n this.statsInterval = undefined;\n }\n\n if (this.mqaInterval) {\n clearInterval(this.mqaInterval);\n this.mqaInterval = undefined;\n }\n\n if (sendOneLastMqa) {\n return this.getStatsAndParse().then(() => {\n this.sendMqaData();\n this.mediaConnection = null;\n });\n }\n\n return Promise.resolve();\n }\n\n /**\n * Parse a single result of get stats\n *\n * @private\n * @param {*} getStatsResult\n * @param {String} type\n * @param {boolean} isSender\n * @returns {void}\n * @memberof StatsAnalyzer\n */\n private parseGetStatsResult(getStatsResult: any, type: string, isSender: boolean) {\n if (!getStatsResult) {\n return;\n }\n\n // Generate empty stats results\n if (!this.statsResults[type]) {\n this.statsResults[type] = {};\n }\n\n if (isSender && !this.statsResults[type].send) {\n this.statsResults[type].send = cloneDeep(emptySender);\n } else if (!isSender && !this.statsResults[type].recv) {\n this.statsResults[type].recv = cloneDeep(emptyReceiver);\n }\n\n switch (getStatsResult.type) {\n case 'outbound-rtp':\n this.processOutboundRTPResult(getStatsResult, type);\n break;\n case 'inbound-rtp':\n this.processInboundRTPResult(getStatsResult, type);\n break;\n case 'remote-inbound-rtp':\n case 'remote-outbound-rtp':\n this.compareSentAndReceived(getStatsResult, type);\n break;\n case 'remotecandidate':\n case 'remote-candidate':\n this.parseCandidate(getStatsResult, type, isSender, true);\n break;\n case 'local-candidate':\n this.parseCandidate(getStatsResult, type, isSender, false);\n break;\n case 'media-source':\n // @ts-ignore\n this.parseAudioSource(getStatsResult, type);\n break;\n default:\n break;\n }\n }\n\n /**\n * Filters the get stats results for types\n * @private\n * @param {Array} statsItem\n * @param {String} type\n * @param {boolean} isSender\n * @returns {void}\n */\n filterAndParseGetStatsResults(statsItem: any, type: string, isSender: boolean) {\n const {types} = DEFAULT_GET_STATS_FILTER;\n\n // get the successful candidate pair before parsing stats.\n statsItem.report.forEach((report) => {\n if (report.type === 'candidate-pair' && report.state === 'succeeded') {\n this.successfulCandidatePair = report;\n }\n });\n\n statsItem.report.forEach((result) => {\n if (types.includes(result.type)) {\n this.parseGetStatsResult(result, type, isSender);\n }\n });\n\n if (this.statsResults[type]) {\n this.statsResults[type].direction = statsItem.currentDirection;\n this.statsResults[type].trackLabel = statsItem.localTrackLabel;\n this.statsResults[type].csi = statsItem.csi;\n this.extractAndSetLocalIpAddressInfoForDiagnostics(\n this.successfulCandidatePair?.localCandidateId,\n this.statsResults?.candidates\n );\n // reset the successful candidate pair.\n this.successfulCandidatePair = {};\n }\n }\n\n /**\n * parse the audio\n * @param {String} result\n * @param {boolean} type\n * @returns {void}\n */\n parseAudioSource(result: any, type: any) {\n if (!result) {\n return;\n }\n\n if (type.includes('audio-send')) {\n this.statsResults[type].send.audioLevel = result.audioLevel;\n this.statsResults[type].send.totalAudioEnergy = result.totalAudioEnergy;\n }\n }\n\n /**\n * emits started/stopped events for local/remote media by checking\n * if given values are increasing or not. The previousValue, currentValue\n * params can be any numerical value like number of receive packets or\n * decoded frames, etc.\n *\n * @private\n * @param {string} mediaType\n * @param {number} previousValue - value to compare\n * @param {number} currentValue - value to compare (must be same type of value as previousValue)\n * @param {boolean} isLocal - true if stats are for local media being sent out, false for remote media being received\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n emitStartStopEvents = (\n mediaType: string,\n previousValue: number,\n currentValue: number,\n isLocal: boolean\n ) => {\n if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {\n throw new Error(`Unsupported mediaType: ${mediaType}`);\n }\n\n // eslint-disable-next-line no-param-reassign\n if (previousValue === undefined) previousValue = 0;\n // eslint-disable-next-line no-param-reassign\n if (currentValue === undefined) currentValue = 0;\n\n if (!this.lastEmittedStartStopEvent[mediaType]) {\n this.lastEmittedStartStopEvent[mediaType] = {};\n }\n\n const lastEmittedEvent = isLocal\n ? this.lastEmittedStartStopEvent[mediaType].local\n : this.lastEmittedStartStopEvent[mediaType].remote;\n\n let newEvent;\n\n if (currentValue - previousValue > 0) {\n newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STARTED : EVENTS.REMOTE_MEDIA_STARTED;\n } else if (currentValue === previousValue && currentValue > 0) {\n newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STOPPED : EVENTS.REMOTE_MEDIA_STOPPED;\n }\n\n if (newEvent && lastEmittedEvent !== newEvent) {\n if (isLocal) {\n this.lastEmittedStartStopEvent[mediaType].local = newEvent;\n } else {\n this.lastEmittedStartStopEvent[mediaType].remote = newEvent;\n }\n this.emit(\n {\n file: 'statsAnalyzer/index',\n function: 'compareLastStatsResult',\n },\n newEvent,\n {\n type: mediaType,\n }\n );\n }\n };\n\n /**\n * compares current and previous stats to check if packets are not sent\n *\n * @private\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n private compareLastStatsResult() {\n if (this.lastStatsResults !== null && this.meetingMediaStatus) {\n const getCurrentStatsTotals = (keyPrefix: string, value: string): number =>\n Object.keys(this.statsResults)\n .filter((key) => key.startsWith(keyPrefix))\n .reduce((prev, cur) => prev + (this.statsResults[cur]?.recv[value] || 0), 0);\n\n const getPreviousStatsTotals = (keyPrefix: string, value: string): number =>\n Object.keys(this.statsResults)\n .filter((key) => key.startsWith(keyPrefix))\n .reduce((prev, cur) => prev + (this.lastStatsResults[cur]?.recv[value] || 0), 0);\n\n if (this.meetingMediaStatus.expected.sendAudio && this.lastStatsResults['audio-send']) {\n // compare audio stats sent\n // NOTE: relies on there being only one sender.\n const currentStats = this.statsResults['audio-send'].send;\n const previousStats = this.lastStatsResults['audio-send'].send;\n\n if (\n currentStats.totalPacketsSent === previousStats.totalPacketsSent ||\n currentStats.totalPacketsSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent`,\n currentStats.totalPacketsSent\n );\n } else {\n if (\n currentStats.totalAudioEnergy === previousStats.totalAudioEnergy ||\n currentStats.totalAudioEnergy === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present`,\n currentStats.totalAudioEnergy\n );\n }\n\n if (currentStats.audioLevel === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user`\n );\n }\n }\n\n this.emitStartStopEvents(\n 'audio',\n previousStats.totalPacketsSent,\n currentStats.totalPacketsSent,\n true\n );\n }\n\n if (this.meetingMediaStatus.expected.receiveAudio) {\n // compare audio stats received\n const currentPacketsReceived = getCurrentStatsTotals('audio-recv', 'totalPacketsReceived');\n const previousPacketsReceived = getPreviousStatsTotals(\n 'audio-recv',\n 'totalPacketsReceived'\n );\n const currentSamplesReceived = getCurrentStatsTotals('audio-recv', 'totalSamplesReceived');\n const previousSamplesReceived = getPreviousStatsTotals(\n 'audio-recv',\n 'totalSamplesReceived'\n );\n\n if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets received`,\n currentPacketsReceived\n );\n } else if (\n currentSamplesReceived === previousSamplesReceived ||\n currentSamplesReceived === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No audio samples received`,\n currentSamplesReceived\n );\n }\n\n this.emitStartStopEvents('audio', previousPacketsReceived, currentPacketsReceived, false);\n }\n\n if (this.meetingMediaStatus.expected.sendVideo && this.lastStatsResults['video-send']) {\n // compare video stats sent\n const currentStats = this.statsResults['video-send'].send;\n const previousStats = this.lastStatsResults['video-send'].send;\n\n if (\n currentStats.totalPacketsSent === previousStats.totalPacketsSent ||\n currentStats.totalPacketsSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent`,\n currentStats.totalPacketsSent\n );\n } else {\n if (\n currentStats.framesEncoded === previousStats.framesEncoded ||\n currentStats.framesEncoded === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded`,\n currentStats.framesEncoded\n );\n }\n\n if (\n this.statsResults['video-send'].send.framesSent ===\n this.lastStatsResults['video-send'].send.framesSent ||\n this.statsResults['video-send'].send.framesSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent`,\n this.statsResults['video-send'].send.framesSent\n );\n }\n }\n\n this.emitStartStopEvents('video', previousStats.framesSent, currentStats.framesSent, true);\n }\n\n if (this.meetingMediaStatus.expected.receiveVideo) {\n // compare video stats received\n const currentPacketsReceived = getCurrentStatsTotals('video-recv', 'totalPacketsReceived');\n const previousPacketsReceived = getPreviousStatsTotals(\n 'video-recv',\n 'totalPacketsReceived'\n );\n const currentFramesReceived = getCurrentStatsTotals('video-recv', 'framesReceived');\n const previousFramesReceived = getPreviousStatsTotals('video-recv', 'framesReceived');\n const currentFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');\n const previousFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');\n const currentFramesDropped = getCurrentStatsTotals('video-recv', 'framesDropped');\n const previousFramesDropped = getPreviousStatsTotals('video-recv', 'framesDropped');\n\n if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received`,\n currentPacketsReceived\n );\n } else {\n if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video frames received`,\n currentFramesReceived\n );\n }\n\n if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded`,\n currentFramesDecoded\n );\n }\n\n if (currentFramesDropped - previousFramesDropped > 10) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped`,\n currentFramesDropped - previousFramesDropped\n );\n }\n }\n\n this.emitStartStopEvents('video', previousFramesDecoded, currentFramesDecoded, false);\n }\n\n if (this.meetingMediaStatus.expected.sendShare && this.lastStatsResults['video-share-send']) {\n // compare share stats sent\n\n const currentStats = this.statsResults['video-share-send'].send;\n const previousStats = this.lastStatsResults['video-share-send'].send;\n\n if (\n currentStats.totalPacketsSent === previousStats.totalPacketsSent ||\n currentStats.totalPacketsSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent`,\n currentStats.totalPacketsSent\n );\n } else {\n if (\n currentStats.framesEncoded === previousStats.framesEncoded ||\n currentStats.framesEncoded === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded`,\n currentStats.framesEncoded\n );\n }\n\n if (\n this.statsResults['video-share-send'].send.framesSent ===\n this.lastStatsResults['video-share-send'].send.framesSent ||\n this.statsResults['video-share-send'].send.framesSent === 0\n ) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share frames sent`,\n this.statsResults['video-share-send'].send.framesSent\n );\n }\n }\n }\n\n if (this.meetingMediaStatus.expected.sendShare) {\n // TODO:need to check receive share value\n // compare share stats received\n const currentPacketsReceived = getCurrentStatsTotals(\n 'video-share-recv',\n 'totalPacketsReceived'\n );\n const previousPacketsReceived = getPreviousStatsTotals(\n 'video-share-recv',\n 'totalPacketsReceived'\n );\n const currentFramesReceived = getCurrentStatsTotals('video-share-recv', 'framesReceived');\n const previousFramesReceived = getPreviousStatsTotals('video-share-recv', 'framesReceived');\n const currentFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');\n const previousFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');\n const currentFramesDropped = getCurrentStatsTotals('video-share-recv', 'framesDropped');\n const previousFramesDropped = getPreviousStatsTotals('video-share-recv', 'framesDropped');\n\n if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received`,\n currentPacketsReceived\n );\n } else {\n if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share frames received`,\n currentFramesReceived\n );\n }\n\n if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded`,\n currentFramesDecoded\n );\n }\n\n if (currentFramesDropped - previousFramesDropped > 10) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped`,\n currentFramesDropped - previousFramesDropped\n );\n }\n }\n\n // we are not calling emitStartStopEvents() for sending or receiving share because sharing is often started and stopped\n // in meetings and this.meetingMediaStatus.expected values can be out of sync with the actual packet flow\n // so we would send \"sharing stopped\" events incorrectly\n }\n }\n }\n\n /**\n * Does a `getStats` on all the transceivers and parses the results\n *\n * @private\n * @memberof StatsAnalyzer\n * @returns {Promise}\n */\n private getStatsAndParse() {\n if (!this.mediaConnection) {\n return Promise.resolve();\n }\n\n if (\n this.mediaConnection &&\n this.mediaConnection.getConnectionState() === ConnectionState.Failed\n ) {\n LoggerProxy.logger.trace(\n 'StatsAnalyzer:index#getStatsAndParse --> media connection is in failed state'\n );\n\n return Promise.resolve();\n }\n\n LoggerProxy.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');\n\n return this.mediaConnection.getTransceiverStats().then((transceiverStats) => {\n transceiverStats.video.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `video-recv-${i}`, false)\n );\n transceiverStats.audio.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `audio-recv-${i}`, false)\n );\n transceiverStats.screenShareVideo.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `video-share-recv-${i}`, false)\n );\n transceiverStats.screenShareAudio.receivers.forEach((receiver, i) =>\n this.filterAndParseGetStatsResults(receiver, `audio-share-recv-${i}`, false)\n );\n\n transceiverStats.video.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'video-send', true);\n });\n transceiverStats.audio.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'audio-send', true);\n });\n transceiverStats.screenShareVideo.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'video-share-send', true);\n });\n transceiverStats.screenShareAudio.senders.forEach((sender, i) => {\n if (i > 0) {\n throw new Error('Stats Analyzer does not support multiple senders.');\n }\n this.filterAndParseGetStatsResults(sender, 'audio-share-send', true);\n });\n\n this.compareLastStatsResult();\n\n // Save the last results to compare with the current\n // DO Deep copy, for some reason it takes the reference all the time rather then old value set\n this.lastStatsResults = JSON.parse(JSON.stringify(this.statsResults));\n\n LoggerProxy.logger.trace(\n 'StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats'\n );\n });\n }\n\n /**\n * Processes OutboundRTP stats result and stores\n * @private\n * @param {*} result\n * @param {*} mediaType\n * @returns {void}\n */\n private processOutboundRTPResult(result: any, mediaType: any) {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n if (result.bytesSent) {\n const kilobytes = 0;\n\n if (result.frameWidth && result.frameHeight) {\n this.statsResults[mediaType][sendrecvType].width = result.frameWidth;\n this.statsResults[mediaType][sendrecvType].height = result.frameHeight;\n this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;\n this.statsResults[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;\n }\n\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n\n this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;\n this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;\n this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent;\n\n // Data saved to send MQA metrics\n\n this.statsResults[mediaType][sendrecvType].totalKeyFramesEncoded = result.keyFramesEncoded;\n this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;\n this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;\n this.statsResults[mediaType][sendrecvType].totalPacketsSent = result.packetsSent;\n this.statsResults[mediaType][sendrecvType].totalFirCount = result.firCount;\n this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;\n this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;\n this.statsResults[mediaType][sendrecvType].encoderImplementation =\n result.encoderImplementation;\n this.statsResults[mediaType][sendrecvType].qualityLimitationReason =\n result.qualityLimitationReason;\n this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges =\n result.qualityLimitationResolutionChanges;\n this.statsResults[mediaType][sendrecvType].retransmittedPacketsSent =\n result.retransmittedPacketsSent;\n this.statsResults[mediaType][sendrecvType].totalBytesSent = result.bytesSent;\n this.statsResults[mediaType][sendrecvType].headerBytesSent = result.headerBytesSent;\n this.statsResults[mediaType][sendrecvType].retransmittedBytesSent =\n result.retransmittedBytesSent;\n }\n }\n\n /**\n * Processes InboundRTP stats result and stores\n * @private\n * @param {*} result\n * @param {*} mediaType\n * @returns {void}\n */\n private processInboundRTPResult(result: any, mediaType: any) {\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n if (result.bytesReceived) {\n let kilobytes = 0;\n const receiveSlot = this.receiveSlotCallback(result.ssrc);\n const idAndCsi = receiveSlot\n ? `id: \"${receiveSlot.id || ''}\"${receiveSlot.csi ? ` and csi: ${receiveSlot.csi}` : ''}`\n : '';\n\n if (result.frameWidth && result.frameHeight) {\n this.statsResults[mediaType][sendrecvType].width = result.frameWidth;\n this.statsResults[mediaType][sendrecvType].height = result.frameHeight;\n this.statsResults[mediaType][sendrecvType].framesReceived = result.framesReceived;\n }\n\n const bytes =\n result.bytesReceived - this.statsResults[mediaType][sendrecvType].totalBytesReceived;\n\n kilobytes = bytes / 1024;\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n\n let currentPacketsLost =\n result.packetsLost - this.statsResults[mediaType][sendrecvType].totalPacketsLost;\n if (currentPacketsLost < 0) {\n currentPacketsLost = 0;\n }\n\n const currentPacketsReceived =\n result.packetsReceived - this.statsResults[mediaType][sendrecvType].totalPacketsReceived;\n this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n\n if (currentPacketsReceived === 0) {\n if (receiveSlot) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#processInboundRTPResult --> No packets received for receive slot ${idAndCsi}`,\n currentPacketsReceived\n );\n }\n }\n\n // Check the over all packet Lost ratio\n this.statsResults[mediaType][sendrecvType].currentPacketLossRatio =\n currentPacketsLost > 0\n ? currentPacketsLost / (currentPacketsReceived + currentPacketsLost)\n : 0;\n if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {\n LoggerProxy.logger.info(\n `StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ${idAndCsi}`,\n this.statsResults[mediaType][sendrecvType].currentPacketLossRatio\n );\n }\n\n // TODO: check the packet loss value is negative values here\n\n if (result.packetsLost) {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost =\n result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;\n } else {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;\n }\n\n this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp =\n result.lastPacketReceivedTimestamp;\n\n // From Thin\n this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;\n this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;\n this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;\n this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;\n\n this.statsResults[mediaType][sendrecvType].decoderImplementation =\n result.decoderImplementation;\n this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n\n this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;\n this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;\n this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;\n this.statsResults[mediaType][sendrecvType].headerBytesReceived = result.headerBytesReceived;\n\n this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);\n\n // Audio stats\n\n this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;\n this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;\n this.statsResults[mediaType][sendrecvType].totalSamplesReceived =\n result.totalSamplesReceived || 0;\n this.statsResults[mediaType][sendrecvType].totalSamplesDecoded =\n result.totalSamplesDecoded || 0;\n this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;\n }\n }\n\n /**\n * extracts the local Ip address from the statsResult object by looking at stats results candidates\n * and matches that ID with the successful candidate pair. It looks at the type of local candidate it is\n * and then extracts the IP address from the relatedAddress or address property based on conditions known in webrtc\n * note, there are known incompatibilities and it is possible for this to set undefined, or for the IP address to be the public IP address\n * for example, firefox does not set the relayProtocol, and if the user is behind a NAT it might be the public IP\n * @private\n * @param {string} successfulCandidatePairId - The ID of the successful candidate pair.\n * @param {Object} candidates - the stats result candidates\n * @returns {void}\n */\n extractAndSetLocalIpAddressInfoForDiagnostics = (\n successfulCandidatePairId: string,\n candidates: {[key: string]: Record<string, unknown>}\n ) => {\n let newIpAddress = '';\n if (successfulCandidatePairId && !isEmpty(candidates)) {\n const localCandidate = candidates[successfulCandidatePairId];\n if (localCandidate) {\n if (localCandidate.candidateType === 'host') {\n // if it's a host candidate, use the address property - it will be the local IP\n newIpAddress = `${localCandidate.address}`;\n } else if (localCandidate.candidateType === 'prflx') {\n // if it's a peer reflexive candidate and we're not using a relay (there is no relayProtocol set)\n // then look at the relatedAddress - it will be the local\n //\n // Firefox doesn't populate the relayProtocol property\n if (!localCandidate.relayProtocol) {\n newIpAddress = `${localCandidate.relatedAddress}`;\n } else {\n // if it's a peer reflexive candidate and we are using a relay -\n // in that case the relatedAddress will be the IP of the TURN server (Linus),\n // so we can only look at the address, but it might be local IP or public IP,\n // depending on if the user is behind a NAT or not\n newIpAddress = `${localCandidate.address}`;\n }\n }\n }\n }\n this.localIpAddress = newIpAddress;\n };\n\n /**\n * Processes remote and local candidate result and stores\n * @private\n * @param {*} result\n * @param {*} type\n * @param {boolean} isSender\n * @param {boolean} isRemote\n *\n * @returns {void}\n */\n parseCandidate = (result: any, type: any, isSender: boolean, isRemote: boolean) => {\n if (!result || !result.id) {\n return;\n }\n\n // We only care about the successful local candidate\n if (this.successfulCandidatePair?.localCandidateId !== result.id) {\n return;\n }\n\n let transport;\n if (result.relayProtocol) {\n transport = result.relayProtocol.toUpperCase();\n } else if (result.protocol) {\n transport = result.protocol.toUpperCase();\n }\n\n const sendRecvType = isSender ? STATS.SEND_DIRECTION : STATS.RECEIVE_DIRECTION;\n const ipType = isRemote ? STATS.REMOTE : STATS.LOCAL;\n\n if (!this.statsResults.candidates) {\n this.statsResults.candidates = {};\n }\n\n this.statsResults.candidates[result.id] = {\n candidateType: result.candidateType,\n ipAddress: result.ip, // TODO: add ports\n relatedAddress: result.relatedAddress,\n relatedPort: result.relatedPort,\n relayProtocol: result.relayProtocol,\n protocol: result.protocol,\n address: result.address,\n portNumber: result.port,\n networkType: result.networkType,\n priority: result.priority,\n transport,\n timestamp: result.time,\n id: result.id,\n type: result.type,\n };\n\n this.statsResults.connectionType[ipType].candidateType = result.candidateType;\n this.statsResults.connectionType[ipType].ipAddress = result.ipAddress;\n\n this.statsResults.connectionType[ipType].networkType =\n result.networkType === NETWORK_TYPE.VPN ? NETWORK_TYPE.UNKNOWN : result.networkType;\n this.statsResults.connectionType[ipType].transport = transport;\n\n this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;\n };\n\n /**\n *\n * @private\n * @param {*} result\n * @param {*} type\n * @returns {void}\n * @memberof StatsAnalyzer\n */\n compareSentAndReceived(result, type) {\n // Don't compare on transceivers without a sender.\n if (!type || !this.statsResults[type].send) {\n return;\n }\n\n const mediaType = type;\n\n const currentPacketLoss =\n result.packetsLost - this.statsResults[mediaType].send.totalPacketsLostOnReceiver;\n\n this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;\n this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;\n\n this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);\n this.statsResults[mediaType].send.meanRoundTripTime.push(result.roundTripTime);\n\n this.statsResults[mediaType].send.timestamp = result.timestamp;\n this.statsResults[mediaType].send.ssrc = result.ssrc;\n this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;\n\n // Total packloss ratio on this video section of the call\n this.statsResults[mediaType].send.overAllPacketLossRatio =\n this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0\n ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver /\n this.statsResults[mediaType].send.totalPacketsSent\n : 0;\n this.statsResults[mediaType].send.currentPacketLossRatio =\n this.statsResults[mediaType].send.packetsLostOnReceiver > 0\n ? (this.statsResults[mediaType].send.packetsLostOnReceiver * 100) /\n (this.statsResults[mediaType].send.packetsSent +\n this.statsResults[mediaType].send.packetsLostOnReceiver)\n : 0;\n\n if (\n this.statsResults[mediaType].send.maxPacketLossRatio <\n this.statsResults[mediaType].send.currentPacketLossRatio\n ) {\n this.statsResults[mediaType].send.maxPacketLossRatio =\n this.statsResults[mediaType].send.currentPacketLossRatio;\n }\n\n if (result.type === 'remote-inbound-rtp') {\n this.networkQualityMonitor.determineUplinkNetworkQuality({\n mediaType,\n remoteRtpResults: result,\n statsAnalyzerCurrentStats: this.statsResults,\n });\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -29,6 +29,7 @@ var getAudioReceiverMqa = exports.getAudioReceiverMqa = function getAudioReceive
|
|
|
29
29
|
audioReceiver.streams[0].common.csi.push(csi);
|
|
30
30
|
}
|
|
31
31
|
audioReceiver.common.common.direction = statsResults[mediaType].direction;
|
|
32
|
+
audioReceiver.common.common.isMain = !mediaType.includes('-share');
|
|
32
33
|
audioReceiver.common.transportType = statsResults.connectionType.local.transport;
|
|
33
34
|
|
|
34
35
|
// add rtpPacket info inside common as also for call analyzer
|
|
@@ -71,6 +72,7 @@ var getAudioSenderMqa = exports.getAudioSenderMqa = function getAudioSenderMqa(_
|
|
|
71
72
|
audioSender.streams[0].common.csi.push(csi);
|
|
72
73
|
}
|
|
73
74
|
audioSender.common.common.direction = statsResults[mediaType].direction;
|
|
75
|
+
audioSender.common.common.isMain = !mediaType.includes('-share');
|
|
74
76
|
audioSender.common.transportType = statsResults.connectionType.local.transport;
|
|
75
77
|
audioSender.common.maxRemoteJitter =
|
|
76
78
|
// @ts-ignore
|
|
@@ -118,6 +120,7 @@ var getVideoReceiverMqa = exports.getVideoReceiverMqa = function getVideoReceive
|
|
|
118
120
|
videoReceiver.streams[0].common.csi.push(csi);
|
|
119
121
|
}
|
|
120
122
|
videoReceiver.common.common.direction = statsResults[mediaType].direction;
|
|
123
|
+
videoReceiver.common.common.isMain = !mediaType.includes('-share');
|
|
121
124
|
videoReceiver.common.transportType = statsResults.connectionType.local.transport;
|
|
122
125
|
|
|
123
126
|
// collect the packets received for the last min
|
|
@@ -176,6 +179,7 @@ var getVideoSenderMqa = exports.getVideoSenderMqa = function getVideoSenderMqa(_
|
|
|
176
179
|
videoSender.streams[0].common.csi.push(csi);
|
|
177
180
|
}
|
|
178
181
|
videoSender.common.common.direction = statsResults[mediaType].direction;
|
|
182
|
+
videoSender.common.common.isMain = !mediaType.includes('-share');
|
|
179
183
|
videoSender.common.transportType = statsResults.connectionType.local.transport;
|
|
180
184
|
|
|
181
185
|
// @ts-ignore
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_lodash","require","_constants","getAudioReceiverMqa","exports","_ref","_lastMqaDataSent$medi","_lastMqaDataSent$medi2","_lastMqaDataSent$medi3","_lastMqaDataSent$medi4","_lastMqaDataSent$medi5","_lastMqaDataSent$medi6","_lastMqaDataSent$medi7","_lastMqaDataSent$medi8","audioReceiver","statsResults","lastMqaDataSent","mediaType","sendrecvType","STATS","RECEIVE_DIRECTION","lastPacketsReceived","totalPacketsReceived","lastPacketsLost","totalPacketsLost","lastPacketsDecoded","totalSamplesDecoded","lastSamplesReceived","totalSamplesReceived","lastConcealedSamples","concealedSamples","lastBytesReceived","totalBytesReceived","lastFecPacketsReceived","fecPacketsReceived","lastFecPacketsDiscarded","fecPacketsDiscarded","csi","streams","common","includes","push","direction","transportType","connectionType","local","transport","rtpPackets","mediaHopByHopLost","rtpHopByHopLost","maxRtpJitter","max","meanRtpJitter","mean","rtpJitter","fecRecovered","rtpEndToEndLost","framesDropped","renderedFrameRate","framesReceived","concealedFrames","receivedBitrate","rtpBitrate","getAudioSenderMqa","_ref2","_lastMqaDataSent$medi9","_lastMqaDataSent$medi10","_lastMqaDataSent$medi11","_lastMqaDataSent$medi12","_lastMqaDataSent$medi13","audioSender","SEND_DIRECTION","lastPacketsSent","totalPacketsSent","totalPacketsLostOnReceiver","lastBytesSent","totalBytesSent","lastFramesEncoded","totalKeyFramesEncoded","lastFirCount","totalFirCount","maxRemoteJitter","meanRemoteJitter","availableBitrate","availableOutgoingBitrate","totalpacketsLostForaMin","remoteLossRate","maxRoundTripTime","meanRoundTripTime","roundTripTime","totalBytesSentInaMin","transmittedBitrate","transmittedKeyFrames","requestedKeyFrames","getVideoReceiverMqa","_ref3","_lastMqaDataSent$medi14","_lastMqaDataSent$medi15","_lastMqaDataSent$medi16","_lastMqaDataSent$medi17","_lastMqaDataSent$medi18","_lastMqaDataSent$medi19","_lastMqaDataSent$medi20","_lastMqaDataSent$medi21","videoReceiver","lastFramesReceived","lastFramesDecoded","framesDecoded","lastFramesDropped","lastKeyFramesDecoded","keyFramesDecoded","lastPliCount","totalPliCount","totalPacketLoss","totalBytesReceivedInaMin","totalFrameReceivedInaMin","totalFrameDecodedInaMin","receivedFrameRate","Math","round","receivedHeight","height","receivedWidth","width","receivedFrameSize","receivedKeyFrames","getVideoSenderMqa","_ref4","_lastMqaDataSent$medi22","_lastMqaDataSent$medi23","_lastMqaDataSent$medi24","_lastMqaDataSent$medi25","_lastMqaDataSent$medi26","_lastMqaDataSent$medi27","videoSender","lastKeyFramesEncoded","lastFramesSent","framesSent","totalFrameSentInaMin","transmittedFrameRate","transmittedHeight","transmittedWidth","transmittedFrameSize"],"sources":["mqaUtil.ts"],"sourcesContent":["/* eslint-disable no-param-reassign, prefer-destructuring */\n\nimport {mean, max} from 'lodash';\n\nimport {STATS} from '../constants';\n\nexport const getAudioReceiverMqa = ({audioReceiver, statsResults, lastMqaDataSent, mediaType}) => {\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 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\n const {csi} = statsResults[mediaType];\n if (csi && !audioReceiver.streams[0].common.csi.includes(csi)) {\n audioReceiver.streams[0].common.csi.push(csi);\n }\n\n audioReceiver.common.common.direction = statsResults[mediaType].direction;\n audioReceiver.common.transportType = statsResults.connectionType.local.transport;\n\n // add rtpPacket info inside common as also for call analyzer\n audioReceiver.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;\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 audioReceiver.streams[0].common.rtpPackets = audioReceiver.common.rtpPackets;\n audioReceiver.common.mediaHopByHopLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;\n audioReceiver.common.rtpHopByHopLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;\n\n audioReceiver.streams[0].common.maxRtpJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;\n audioReceiver.streams[0].common.meanRtpJitter =\n mean(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;\n audioReceiver.streams[0].common.rtpJitter = audioReceiver.streams[0].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 audioReceiver.streams[0].common.rtpEndToEndLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost - fecRecovered || 0;\n\n audioReceiver.streams[0].common.framesDropped =\n statsResults[mediaType][sendrecvType].totalSamplesDecoded - lastPacketsDecoded || 0;\n audioReceiver.streams[0].common.renderedFrameRate =\n (audioReceiver.streams[0].common.framesDropped * 100) / 60 || 0;\n\n audioReceiver.streams[0].common.framesReceived =\n statsResults[mediaType][sendrecvType].totalSamplesReceived - lastSamplesReceived || 0;\n audioReceiver.streams[0].common.concealedFrames =\n statsResults[mediaType][sendrecvType].concealedSamples - lastConcealedSamples || 0;\n audioReceiver.streams[0].common.receivedBitrate =\n ((statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived) * 8) / 60 || 0;\n\n audioReceiver.common.rtpBitrate = audioReceiver.streams[0].common.receivedBitrate;\n};\n\nexport const getAudioSenderMqa = ({audioSender, statsResults, lastMqaDataSent, mediaType}) => {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n const lastPacketsSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsSent || 0;\n const lastPacketsLost =\n lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLostOnReceiver || 0;\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\n const {csi} = statsResults[mediaType];\n if (csi && !audioSender.streams[0].common.csi.includes(csi)) {\n audioSender.streams[0].common.csi.push(csi);\n }\n\n audioSender.common.common.direction = statsResults[mediaType].direction;\n audioSender.common.transportType = statsResults.connectionType.local.transport;\n\n audioSender.common.maxRemoteJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n audioSender.common.meanRemoteJitter =\n mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n audioSender.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;\n audioSender.streams[0].common.rtpPackets = audioSender.common.rtpPackets;\n // From candidate-pair\n audioSender.common.availableBitrate =\n statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;\n // Calculate based on how much packets lost of received compated to how to the client sent\n\n const totalpacketsLostForaMin =\n statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver - lastPacketsLost;\n\n audioSender.common.remoteLossRate =\n totalpacketsLostForaMin > 0\n ? (totalpacketsLostForaMin * 100) / audioSender.common.rtpPackets\n : 0; // This is the packets sent with in last min || 0;\n\n audioSender.common.maxRoundTripTime =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n audioSender.common.meanRoundTripTime =\n mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;\n\n audioSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin\n ? (totalBytesSentInaMin * 8) / 60\n : 0;\n audioSender.common.rtpBitrate = audioSender.streams[0].common.transmittedBitrate;\n\n audioSender.streams[0].transmittedKeyFrames =\n statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastFramesEncoded || 0;\n audioSender.streams[0].requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;\n};\n\nexport const getVideoReceiverMqa = ({videoReceiver, statsResults, lastMqaDataSent, mediaType}) => {\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 && !videoReceiver.streams[0].common.csi.includes(csi)) {\n videoReceiver.streams[0].common.csi.push(csi);\n }\n\n videoReceiver.common.common.direction = statsResults[mediaType].direction;\n videoReceiver.common.transportType = statsResults.connectionType.local.transport;\n\n // collect the packets received for the last min\n videoReceiver.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;\n videoReceiver.streams[0].common.rtpPackets = videoReceiver.common.rtpPackets;\n\n const totalPacketLoss =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;\n\n // Hope by hop are numbers and not percentage so we compare on what we sent the last min\n // this is including packet lost\n videoReceiver.common.mediaHopByHopLost = totalPacketLoss;\n videoReceiver.common.rtpHopByHopLost = totalPacketLoss;\n\n // End to end packetloss is after recovery\n videoReceiver.streams[0].common.rtpEndToEndLost = totalPacketLoss;\n\n // calculate this values\n\n videoReceiver.common.maxRemoteJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n videoReceiver.common.meanRemoteJitter =\n mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n videoReceiver.streams[0].common.rtpJitter = videoReceiver.common.maxRemoteJitter;\n\n // Calculate the outgoing bitrate\n const totalBytesReceivedInaMin =\n statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived;\n\n videoReceiver.streams[0].common.receivedBitrate = totalBytesReceivedInaMin\n ? (totalBytesReceivedInaMin * 8) / 60\n : 0;\n videoReceiver.common.rtpBitrate = videoReceiver.streams[0].common.receivedBitrate;\n\n // From tracks //TODO: calculate a proper one\n const totalFrameReceivedInaMin =\n statsResults[mediaType][sendrecvType].framesReceived - lastFramesReceived;\n const totalFrameDecodedInaMin =\n statsResults[mediaType][sendrecvType].framesDecoded - lastFramesDecoded;\n\n videoReceiver.streams[0].common.receivedFrameRate = Math.round(\n totalFrameReceivedInaMin ? totalFrameReceivedInaMin / 60 : 0\n );\n videoReceiver.streams[0].common.renderedFrameRate = Math.round(\n totalFrameDecodedInaMin ? totalFrameDecodedInaMin / 60 : 0\n );\n\n videoReceiver.streams[0].common.framesDropped =\n statsResults[mediaType][sendrecvType].framesDropped - lastFramesDropped;\n videoReceiver.streams[0].receivedHeight = statsResults[mediaType][sendrecvType].height || 0;\n videoReceiver.streams[0].receivedWidth = statsResults[mediaType][sendrecvType].width || 0;\n videoReceiver.streams[0].receivedFrameSize =\n (videoReceiver.streams[0].receivedHeight * videoReceiver.streams[0].receivedWidth) / 256;\n\n videoReceiver.streams[0].receivedKeyFrames =\n statsResults[mediaType][sendrecvType].keyFramesDecoded - lastKeyFramesDecoded || 0;\n videoReceiver.streams[0].requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalPliCount - lastPliCount || 0;\n};\n\nexport const getVideoSenderMqa = ({videoSender, statsResults, lastMqaDataSent, mediaType}) => {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n const lastPacketsSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsSent || 0;\n const lastPacketsLost =\n lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLostOnReceiver || 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 const {csi} = statsResults[mediaType];\n if (csi && !videoSender.streams[0].common.csi.includes(csi)) {\n videoSender.streams[0].common.csi.push(csi);\n }\n\n videoSender.common.common.direction = statsResults[mediaType].direction;\n videoSender.common.transportType = statsResults.connectionType.local.transport;\n\n // @ts-ignore\n videoSender.common.maxRemoteJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n videoSender.common.meanRemoteJitter =\n mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n videoSender.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;\n videoSender.common.availableBitrate =\n statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;\n // Calculate based on how much packets lost of received compated to how to the client sent\n\n const totalpacketsLostForaMin =\n statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver - lastPacketsLost;\n\n videoSender.common.remoteLossRate =\n totalpacketsLostForaMin > 0\n ? (totalpacketsLostForaMin * 100) / (videoSender.common.rtpPackets + totalpacketsLostForaMin)\n : 0; // This is the packets sent with in last min || 0;\n\n videoSender.common.maxRoundTripTime =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n videoSender.common.meanRoundTripTime =\n mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;\n\n videoSender.streams[0].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 videoSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin\n ? (totalBytesSentInaMin * 8) / 60\n : 0;\n\n videoSender.common.rtpBitrate = videoSender.streams[0].common.transmittedBitrate;\n\n videoSender.streams[0].transmittedKeyFrames =\n statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastKeyFramesEncoded || 0;\n videoSender.streams[0].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 videoSender.streams[0].common.transmittedFrameRate = Math.round(\n totalFrameSentInaMin ? totalFrameSentInaMin / 60 : 0\n );\n videoSender.streams[0].transmittedHeight = statsResults[mediaType][sendrecvType].height || 0;\n videoSender.streams[0].transmittedWidth = statsResults[mediaType][sendrecvType].width || 0;\n videoSender.streams[0].transmittedFrameSize =\n (videoSender.streams[0].transmittedHeight * videoSender.streams[0].transmittedWidth) / 256;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_lodash","require","_constants","getAudioReceiverMqa","exports","_ref","_lastMqaDataSent$medi","_lastMqaDataSent$medi2","_lastMqaDataSent$medi3","_lastMqaDataSent$medi4","_lastMqaDataSent$medi5","_lastMqaDataSent$medi6","_lastMqaDataSent$medi7","_lastMqaDataSent$medi8","audioReceiver","statsResults","lastMqaDataSent","mediaType","sendrecvType","STATS","RECEIVE_DIRECTION","lastPacketsReceived","totalPacketsReceived","lastPacketsLost","totalPacketsLost","lastPacketsDecoded","totalSamplesDecoded","lastSamplesReceived","totalSamplesReceived","lastConcealedSamples","concealedSamples","lastBytesReceived","totalBytesReceived","lastFecPacketsReceived","fecPacketsReceived","lastFecPacketsDiscarded","fecPacketsDiscarded","csi","streams","common","includes","push","direction","isMain","transportType","connectionType","local","transport","rtpPackets","mediaHopByHopLost","rtpHopByHopLost","maxRtpJitter","max","meanRtpJitter","mean","rtpJitter","fecRecovered","rtpEndToEndLost","framesDropped","renderedFrameRate","framesReceived","concealedFrames","receivedBitrate","rtpBitrate","getAudioSenderMqa","_ref2","_lastMqaDataSent$medi9","_lastMqaDataSent$medi10","_lastMqaDataSent$medi11","_lastMqaDataSent$medi12","_lastMqaDataSent$medi13","audioSender","SEND_DIRECTION","lastPacketsSent","totalPacketsSent","totalPacketsLostOnReceiver","lastBytesSent","totalBytesSent","lastFramesEncoded","totalKeyFramesEncoded","lastFirCount","totalFirCount","maxRemoteJitter","meanRemoteJitter","availableBitrate","availableOutgoingBitrate","totalpacketsLostForaMin","remoteLossRate","maxRoundTripTime","meanRoundTripTime","roundTripTime","totalBytesSentInaMin","transmittedBitrate","transmittedKeyFrames","requestedKeyFrames","getVideoReceiverMqa","_ref3","_lastMqaDataSent$medi14","_lastMqaDataSent$medi15","_lastMqaDataSent$medi16","_lastMqaDataSent$medi17","_lastMqaDataSent$medi18","_lastMqaDataSent$medi19","_lastMqaDataSent$medi20","_lastMqaDataSent$medi21","videoReceiver","lastFramesReceived","lastFramesDecoded","framesDecoded","lastFramesDropped","lastKeyFramesDecoded","keyFramesDecoded","lastPliCount","totalPliCount","totalPacketLoss","totalBytesReceivedInaMin","totalFrameReceivedInaMin","totalFrameDecodedInaMin","receivedFrameRate","Math","round","receivedHeight","height","receivedWidth","width","receivedFrameSize","receivedKeyFrames","getVideoSenderMqa","_ref4","_lastMqaDataSent$medi22","_lastMqaDataSent$medi23","_lastMqaDataSent$medi24","_lastMqaDataSent$medi25","_lastMqaDataSent$medi26","_lastMqaDataSent$medi27","videoSender","lastKeyFramesEncoded","lastFramesSent","framesSent","totalFrameSentInaMin","transmittedFrameRate","transmittedHeight","transmittedWidth","transmittedFrameSize"],"sources":["mqaUtil.ts"],"sourcesContent":["/* eslint-disable no-param-reassign, prefer-destructuring */\n\nimport {mean, max} from 'lodash';\n\nimport {STATS} from '../constants';\n\nexport const getAudioReceiverMqa = ({audioReceiver, statsResults, lastMqaDataSent, mediaType}) => {\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 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\n const {csi} = statsResults[mediaType];\n if (csi && !audioReceiver.streams[0].common.csi.includes(csi)) {\n audioReceiver.streams[0].common.csi.push(csi);\n }\n\n audioReceiver.common.common.direction = statsResults[mediaType].direction;\n audioReceiver.common.common.isMain = !mediaType.includes('-share');\n audioReceiver.common.transportType = statsResults.connectionType.local.transport;\n\n // add rtpPacket info inside common as also for call analyzer\n audioReceiver.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;\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 audioReceiver.streams[0].common.rtpPackets = audioReceiver.common.rtpPackets;\n audioReceiver.common.mediaHopByHopLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;\n audioReceiver.common.rtpHopByHopLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;\n\n audioReceiver.streams[0].common.maxRtpJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;\n audioReceiver.streams[0].common.meanRtpJitter =\n mean(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;\n audioReceiver.streams[0].common.rtpJitter = audioReceiver.streams[0].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 audioReceiver.streams[0].common.rtpEndToEndLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost - fecRecovered || 0;\n\n audioReceiver.streams[0].common.framesDropped =\n statsResults[mediaType][sendrecvType].totalSamplesDecoded - lastPacketsDecoded || 0;\n audioReceiver.streams[0].common.renderedFrameRate =\n (audioReceiver.streams[0].common.framesDropped * 100) / 60 || 0;\n\n audioReceiver.streams[0].common.framesReceived =\n statsResults[mediaType][sendrecvType].totalSamplesReceived - lastSamplesReceived || 0;\n audioReceiver.streams[0].common.concealedFrames =\n statsResults[mediaType][sendrecvType].concealedSamples - lastConcealedSamples || 0;\n audioReceiver.streams[0].common.receivedBitrate =\n ((statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived) * 8) / 60 || 0;\n\n audioReceiver.common.rtpBitrate = audioReceiver.streams[0].common.receivedBitrate;\n};\n\nexport const getAudioSenderMqa = ({audioSender, statsResults, lastMqaDataSent, mediaType}) => {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n const lastPacketsSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsSent || 0;\n const lastPacketsLost =\n lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLostOnReceiver || 0;\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\n const {csi} = statsResults[mediaType];\n if (csi && !audioSender.streams[0].common.csi.includes(csi)) {\n audioSender.streams[0].common.csi.push(csi);\n }\n\n audioSender.common.common.direction = statsResults[mediaType].direction;\n audioSender.common.common.isMain = !mediaType.includes('-share');\n audioSender.common.transportType = statsResults.connectionType.local.transport;\n\n audioSender.common.maxRemoteJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n audioSender.common.meanRemoteJitter =\n mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n audioSender.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;\n audioSender.streams[0].common.rtpPackets = audioSender.common.rtpPackets;\n // From candidate-pair\n audioSender.common.availableBitrate =\n statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;\n // Calculate based on how much packets lost of received compated to how to the client sent\n\n const totalpacketsLostForaMin =\n statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver - lastPacketsLost;\n\n audioSender.common.remoteLossRate =\n totalpacketsLostForaMin > 0\n ? (totalpacketsLostForaMin * 100) / audioSender.common.rtpPackets\n : 0; // This is the packets sent with in last min || 0;\n\n audioSender.common.maxRoundTripTime =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n audioSender.common.meanRoundTripTime =\n mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;\n\n audioSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin\n ? (totalBytesSentInaMin * 8) / 60\n : 0;\n audioSender.common.rtpBitrate = audioSender.streams[0].common.transmittedBitrate;\n\n audioSender.streams[0].transmittedKeyFrames =\n statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastFramesEncoded || 0;\n audioSender.streams[0].requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;\n};\n\nexport const getVideoReceiverMqa = ({videoReceiver, statsResults, lastMqaDataSent, mediaType}) => {\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 && !videoReceiver.streams[0].common.csi.includes(csi)) {\n videoReceiver.streams[0].common.csi.push(csi);\n }\n\n videoReceiver.common.common.direction = statsResults[mediaType].direction;\n videoReceiver.common.common.isMain = !mediaType.includes('-share');\n videoReceiver.common.transportType = statsResults.connectionType.local.transport;\n\n // collect the packets received for the last min\n videoReceiver.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;\n videoReceiver.streams[0].common.rtpPackets = videoReceiver.common.rtpPackets;\n\n const totalPacketLoss =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;\n\n // Hope by hop are numbers and not percentage so we compare on what we sent the last min\n // this is including packet lost\n videoReceiver.common.mediaHopByHopLost = totalPacketLoss;\n videoReceiver.common.rtpHopByHopLost = totalPacketLoss;\n\n // End to end packetloss is after recovery\n videoReceiver.streams[0].common.rtpEndToEndLost = totalPacketLoss;\n\n // calculate this values\n\n videoReceiver.common.maxRemoteJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n videoReceiver.common.meanRemoteJitter =\n mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n videoReceiver.streams[0].common.rtpJitter = videoReceiver.common.maxRemoteJitter;\n\n // Calculate the outgoing bitrate\n const totalBytesReceivedInaMin =\n statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived;\n\n videoReceiver.streams[0].common.receivedBitrate = totalBytesReceivedInaMin\n ? (totalBytesReceivedInaMin * 8) / 60\n : 0;\n videoReceiver.common.rtpBitrate = videoReceiver.streams[0].common.receivedBitrate;\n\n // From tracks //TODO: calculate a proper one\n const totalFrameReceivedInaMin =\n statsResults[mediaType][sendrecvType].framesReceived - lastFramesReceived;\n const totalFrameDecodedInaMin =\n statsResults[mediaType][sendrecvType].framesDecoded - lastFramesDecoded;\n\n videoReceiver.streams[0].common.receivedFrameRate = Math.round(\n totalFrameReceivedInaMin ? totalFrameReceivedInaMin / 60 : 0\n );\n videoReceiver.streams[0].common.renderedFrameRate = Math.round(\n totalFrameDecodedInaMin ? totalFrameDecodedInaMin / 60 : 0\n );\n\n videoReceiver.streams[0].common.framesDropped =\n statsResults[mediaType][sendrecvType].framesDropped - lastFramesDropped;\n videoReceiver.streams[0].receivedHeight = statsResults[mediaType][sendrecvType].height || 0;\n videoReceiver.streams[0].receivedWidth = statsResults[mediaType][sendrecvType].width || 0;\n videoReceiver.streams[0].receivedFrameSize =\n (videoReceiver.streams[0].receivedHeight * videoReceiver.streams[0].receivedWidth) / 256;\n\n videoReceiver.streams[0].receivedKeyFrames =\n statsResults[mediaType][sendrecvType].keyFramesDecoded - lastKeyFramesDecoded || 0;\n videoReceiver.streams[0].requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalPliCount - lastPliCount || 0;\n};\n\nexport const getVideoSenderMqa = ({videoSender, statsResults, lastMqaDataSent, mediaType}) => {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n const lastPacketsSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsSent || 0;\n const lastPacketsLost =\n lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLostOnReceiver || 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 const {csi} = statsResults[mediaType];\n if (csi && !videoSender.streams[0].common.csi.includes(csi)) {\n videoSender.streams[0].common.csi.push(csi);\n }\n\n videoSender.common.common.direction = statsResults[mediaType].direction;\n videoSender.common.common.isMain = !mediaType.includes('-share');\n videoSender.common.transportType = statsResults.connectionType.local.transport;\n\n // @ts-ignore\n videoSender.common.maxRemoteJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n videoSender.common.meanRemoteJitter =\n mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n videoSender.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;\n videoSender.common.availableBitrate =\n statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;\n // Calculate based on how much packets lost of received compated to how to the client sent\n\n const totalpacketsLostForaMin =\n statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver - lastPacketsLost;\n\n videoSender.common.remoteLossRate =\n totalpacketsLostForaMin > 0\n ? (totalpacketsLostForaMin * 100) / (videoSender.common.rtpPackets + totalpacketsLostForaMin)\n : 0; // This is the packets sent with in last min || 0;\n\n videoSender.common.maxRoundTripTime =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n videoSender.common.meanRoundTripTime =\n mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;\n\n videoSender.streams[0].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 videoSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin\n ? (totalBytesSentInaMin * 8) / 60\n : 0;\n\n videoSender.common.rtpBitrate = videoSender.streams[0].common.transmittedBitrate;\n\n videoSender.streams[0].transmittedKeyFrames =\n statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastKeyFramesEncoded || 0;\n videoSender.streams[0].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 videoSender.streams[0].common.transmittedFrameRate = Math.round(\n totalFrameSentInaMin ? totalFrameSentInaMin / 60 : 0\n );\n videoSender.streams[0].transmittedHeight = statsResults[mediaType][sendrecvType].height || 0;\n videoSender.streams[0].transmittedWidth = statsResults[mediaType][sendrecvType].width || 0;\n videoSender.streams[0].transmittedFrameSize =\n (videoSender.streams[0].transmittedHeight * videoSender.streams[0].transmittedWidth) / 256;\n};\n"],"mappings":"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"}
|
package/dist/webinar/index.js
CHANGED
|
@@ -62,7 +62,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
62
62
|
updateCanManageWebcast: function updateCanManageWebcast(canManageWebcast) {
|
|
63
63
|
this.set('canManageWebcast', canManageWebcast);
|
|
64
64
|
},
|
|
65
|
-
version: "2.60.
|
|
65
|
+
version: "2.60.1-next.1"
|
|
66
66
|
});
|
|
67
67
|
var _default = exports.default = Webinar;
|
|
68
68
|
//# sourceMappingURL=index.js.map
|