@webex/plugin-meetings 1.159.5 → 1.161.0

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.
Files changed (134) hide show
  1. package/dist/analyzer/analyzer.js.map +1 -1
  2. package/dist/analyzer/calculator.js.map +1 -1
  3. package/dist/common/browser-detection.js.map +1 -1
  4. package/dist/common/collection.js.map +1 -1
  5. package/dist/common/config.js.map +1 -1
  6. package/dist/common/constants.js.map +1 -1
  7. package/dist/common/errors/captcha-error.js +3 -1
  8. package/dist/common/errors/captcha-error.js.map +1 -1
  9. package/dist/common/errors/intent-to-join.js +3 -1
  10. package/dist/common/errors/intent-to-join.js.map +1 -1
  11. package/dist/common/errors/join-meeting.js +3 -1
  12. package/dist/common/errors/join-meeting.js.map +1 -1
  13. package/dist/common/errors/media.js +3 -1
  14. package/dist/common/errors/media.js.map +1 -1
  15. package/dist/common/errors/parameter.js +3 -1
  16. package/dist/common/errors/parameter.js.map +1 -1
  17. package/dist/common/errors/password-error.js +3 -1
  18. package/dist/common/errors/password-error.js.map +1 -1
  19. package/dist/common/errors/permission.js +3 -1
  20. package/dist/common/errors/permission.js.map +1 -1
  21. package/dist/common/errors/reconnection-in-progress.js +3 -1
  22. package/dist/common/errors/reconnection-in-progress.js.map +1 -1
  23. package/dist/common/errors/reconnection.js +3 -1
  24. package/dist/common/errors/reconnection.js.map +1 -1
  25. package/dist/common/errors/stats.js +3 -1
  26. package/dist/common/errors/stats.js.map +1 -1
  27. package/dist/common/errors/webex-errors.js +9 -7
  28. package/dist/common/errors/webex-errors.js.map +1 -1
  29. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  30. package/dist/common/events/events-scope.js.map +1 -1
  31. package/dist/common/events/events.js.map +1 -1
  32. package/dist/common/events/trigger-proxy.js.map +1 -1
  33. package/dist/common/events/util.js.map +1 -1
  34. package/dist/common/logs/logger-config.js.map +1 -1
  35. package/dist/common/logs/logger-proxy.js.map +1 -1
  36. package/dist/common/logs/request.js.map +1 -1
  37. package/dist/common/queue.js.map +1 -1
  38. package/dist/config.js.map +1 -1
  39. package/dist/constants.js +2 -2
  40. package/dist/constants.js.map +1 -1
  41. package/dist/index.js +1 -1
  42. package/dist/index.js.map +1 -1
  43. package/dist/locus-info/controlsUtils.js +4 -3
  44. package/dist/locus-info/controlsUtils.js.map +1 -1
  45. package/dist/locus-info/fullState.js.map +1 -1
  46. package/dist/locus-info/hostUtils.js.map +1 -1
  47. package/dist/locus-info/index.js.map +1 -1
  48. package/dist/locus-info/infoUtils.js.map +1 -1
  49. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  50. package/dist/locus-info/parser.js.map +1 -1
  51. package/dist/locus-info/selfUtils.js.map +1 -1
  52. package/dist/media/index.js +2 -2
  53. package/dist/media/index.js.map +1 -1
  54. package/dist/media/properties.js.map +1 -1
  55. package/dist/media/util.js.map +1 -1
  56. package/dist/mediaQualityMetrics/config.js.map +1 -1
  57. package/dist/meeting/in-meeting-actions.js.map +1 -1
  58. package/dist/meeting/index.js +2 -2
  59. package/dist/meeting/index.js.map +1 -1
  60. package/dist/meeting/muteState.js +3 -1
  61. package/dist/meeting/muteState.js.map +1 -1
  62. package/dist/meeting/request.js +2 -2
  63. package/dist/meeting/request.js.map +1 -1
  64. package/dist/meeting/state.js.map +1 -1
  65. package/dist/meeting/util.js +2 -2
  66. package/dist/meeting/util.js.map +1 -1
  67. package/dist/meeting-info/collection.js.map +1 -1
  68. package/dist/meeting-info/index.js.map +1 -1
  69. package/dist/meeting-info/meeting-info-v2.js +6 -6
  70. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  71. package/dist/meeting-info/request.js.map +1 -1
  72. package/dist/meeting-info/util.js.map +1 -1
  73. package/dist/meeting-info/utilv2.js.map +1 -1
  74. package/dist/meetings/collection.js.map +1 -1
  75. package/dist/meetings/index.js +219 -219
  76. package/dist/meetings/index.js.map +1 -1
  77. package/dist/meetings/request.js.map +1 -1
  78. package/dist/meetings/util.js.map +1 -1
  79. package/dist/member/index.js.map +1 -1
  80. package/dist/member/util.js.map +1 -1
  81. package/dist/members/collection.js.map +1 -1
  82. package/dist/members/index.js.map +1 -1
  83. package/dist/members/request.js.map +1 -1
  84. package/dist/members/util.js.map +1 -1
  85. package/dist/metrics/config.js +1 -1
  86. package/dist/metrics/config.js.map +1 -1
  87. package/dist/metrics/constants.js.map +1 -1
  88. package/dist/metrics/index.js.map +1 -1
  89. package/dist/metrics/mqa-processor.js +2 -2
  90. package/dist/metrics/mqa-processor.js.map +1 -1
  91. package/dist/networkQualityMonitor/index.js.map +1 -1
  92. package/dist/peer-connection-manager/index.js.map +1 -1
  93. package/dist/peer-connection-manager/util.js.map +1 -1
  94. package/dist/personal-meeting-room/index.js.map +1 -1
  95. package/dist/personal-meeting-room/request.js.map +1 -1
  96. package/dist/personal-meeting-room/util.js.map +1 -1
  97. package/dist/reachability/index.js.map +1 -1
  98. package/dist/reachability/request.js +4 -3
  99. package/dist/reachability/request.js.map +1 -1
  100. package/dist/reconnection-manager/index.js +2 -2
  101. package/dist/reconnection-manager/index.js.map +1 -1
  102. package/dist/roap/collection.js.map +1 -1
  103. package/dist/roap/handler.js.map +1 -1
  104. package/dist/roap/index.js +7 -7
  105. package/dist/roap/index.js.map +1 -1
  106. package/dist/roap/request.js +2 -2
  107. package/dist/roap/request.js.map +1 -1
  108. package/dist/roap/state.js.map +1 -1
  109. package/dist/roap/util.js.map +1 -1
  110. package/dist/stats/data.js.map +1 -1
  111. package/dist/stats/events.js.map +1 -1
  112. package/dist/stats/filter.js.map +1 -1
  113. package/dist/stats/history.js.map +1 -1
  114. package/dist/stats/index.js +126 -126
  115. package/dist/stats/index.js.map +1 -1
  116. package/dist/stats/metrics.js.map +1 -1
  117. package/dist/stats/stats.js.map +1 -1
  118. package/dist/stats/stream.js.map +1 -1
  119. package/dist/stats/transformer.js.map +1 -1
  120. package/dist/stats/util.js.map +1 -1
  121. package/dist/statsAnalyzer/global.js.map +1 -1
  122. package/dist/statsAnalyzer/index.js +1 -1
  123. package/dist/statsAnalyzer/index.js.map +1 -1
  124. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  125. package/dist/transcription/index.js.map +1 -1
  126. package/package.json +6 -6
  127. package/src/common/errors/webex-errors.js +1 -1
  128. package/src/locus-info/parser.js +2 -2
  129. package/src/meeting/index.js +1 -2
  130. package/src/meeting/util.js +2 -2
  131. package/src/meetings/index.js +554 -557
  132. package/src/roap/index.js +48 -48
  133. package/src/stats/index.js +142 -142
  134. package/src/statsAnalyzer/index.js +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["index.js"],"names":["StatsAnalyzer","config","networkQualityMonitor","statsResults","defaultStats","result","type","isSender","isRemote","id","RemoteCandidateType","RemoteTransport","RemoteIpAddress","RemoteNetworkType","sendRecvType","STATS","SEND_DIRECTION","RECEIVE_DIRECTION","ipType","REMOTE","LOCAL","candidateType","indexOf","push","protocol","toUpperCase","ip","portNumber","networkType","internal","candidates","ipAddress","port","priority","transport","timestamp","time","connectionType","NETWORK_TYPE","VPN","UNKNOWN","totalRoundTripTime","statsStarted","lastStatsResults","correlationId","mqaSentCount","lastMqaDataSent","resolutions","video","send","recv","audio","share","localMQEStats","RX","packetsLost","jitter","latency","bitRate","TX","frameRate","resolutionWidth","resolutionHeight","requestedKeyFrame","receivedKeyFrame","lastMqa","audioReceive","common","mediaHopByHopLost","streams","rtpJitter","roundTripTime","receivedBitrate","audioTransmit","remoteLossRate","remoteJitter","transmittedBitrate","videoReceive","receivedFrameRate","receivedWidth","receivedHeight","videoTransmit","transmittedFrameRate","transmittedWidth","transmittedHeight","requestedKeyFrames","meanRemoteJitter","meanRtpJitter","meanRoundTripTime","status","meetingMediaStatus","audioReceiver","mqaData","intervals","audioSender","videoReceiver","videoSender","shareSender","shareReceiver","isShareStream","intervalMetadata","peerReflexiveIP","local","peripherals","information","_UNKNOWN_","name","MEDIA_DEVICES","SPEAKER","peerConnection","audioTransceiver","sender","track","label","MICROPHONE","videoTransceiver","CAMERA","intervalNumber","populateResults","resetStatsResults","emit","file","function","EVENT_TRIGGERS","MEDIA_QUALITY","data","getStatsAndParse","statsInterval","setInterval","analyzerInterval","sendMqaData","mqaInterval","MQA_INTEVAL","clearInterval","statsInterva","undefined","getStatsResult","processOutboundRTPResult","processInboundRTPResult","processTrackResult","compareSentAndReceived","parseCandidate","parseAudioSource","getStatsResults","types","DEFAULT_GET_STATS_FILTER","forEach","includes","parseGetStatsResult","AUDIO_CORRELATE","audioLevel","totalAudioEnergy","mediaType","currentStats","previousStats","expected","sendAudio","totalPacketsSent","LoggerProxy","logger","info","MEETING_MEDIA_LOCAL_STARTED","AUDIO","receiveAudio","totalPacketsReceived","totalSamplesReceived","VIDEO_CORRELATE","sendVideo","framesEncoded","framesSent","VIDEO","receiveVideo","framesReceived","framesDecoded","framesDropped","SHARE_CORRELATE","sendShare","connectionState","CONNECTION_STATE","FAILED","trace","getStats","then","res","filterAndParseGetStatsResults","receiver","shareTransceiver","direction","currentDirection","compareLastStatsResult","JSON","parse","sendrecvType","bytesSent","kilobytes","prevBytesSent","keyFramesEncoded","bytes","availableBandwidth","toFixed","outboundRtpId","packetsSent","totalKeyFramesEncoded","totalNackCount","nackCount","totalPliCount","pliCount","totalFirCount","firCount","encoderImplementation","qualityLimitationReason","qualityLimitationResolutionChanges","retransmittedPacketsSent","totalBytesSent","headerBytesSent","retransmittedBytesSent","bytesReceived","prevBytesReceived","packetsReceived","lastPacketReceivedTimestamp","currentPacketsLost","currentPacketLossRatio","totalPacketsLost","keyFramesDecoded","decoderImplementation","fecPacketsDiscarded","fecPacketsReceived","totalBytesReceived","headerBytesReceived","totalSamplesDecoded","concealedSamples","remoteSource","frameWidth","frameHeight","width","height","hugeFramesSent","trackIdentifier","jitterBufferDelay","jitterBufferEmittedCount","avgJitterDelay","totalPacketsLostOnReceiver","currentPacketLoss","packetsLostOnReceiver","ssrc","reportsReceived","overAllPacketLossRatio","maxPacketLossRatio","determineUplinkNetworkQuality","remoteRtpResults","statsAnalyzerCurrentStats","EventsScope"],"mappings":"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","sourcesContent":["import {cloneDeep} from 'lodash';\n\nimport EventsScope from '../common/events/events-scope';\nimport {EVENT_TRIGGERS,\n DEFAULT_GET_STATS_FILTER, CONNECTION_STATE, STATS, MQA_INTEVAL, NETWORK_TYPE, MEDIA_DEVICES, _UNKNOWN_} from '../constants';\nimport mqaData 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';\n\n\n/**\n * Meeting High Packet Loss Event\n * Emitted when ever there is high packet loss detected\n * @event meeting:highPacketLoss\n * @type {Object}\n * @property {String} mediaType Type of media experiencing packet loss\n * @property {Number} packetLossRatio current packet loss ratio\n * @memberof StatsAnalyzer\n */\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 default class StatsAnalyzer extends EventsScope {\n /**\n * Creates a new instance of StatsAnalyzer\n * @constructor\n * @public\n * @param {Object} config SDK Configuration Object\n * @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)\n * @param {Object} statsResults Default properties for stats\n */\n constructor(config, networkQualityMonitor = {}, statsResults = defaultStats) {\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 resolutions: {video: {send: {}, recv: {}}, audio: {send: {}, recv: {}}, share: {send: {}, recv: {}}},\n video: {send: {}, recv: {}},\n audio: {send: {}, recv: {}},\n share: {send: {}, recv: {}}\n };\n this.localMQEStats = {\n audio: {\n RX: {\n packetsLost: [],\n jitter: [],\n latency: [],\n bitRate: []\n },\n TX: {\n packetsLost: [],\n jitter: [],\n latency: [],\n bitRate: []\n }\n },\n video: {\n RX: {\n packetsLost: [],\n jitter: [],\n latency: [],\n bitRate: [],\n frameRate: [],\n resolutionWidth: [],\n resolutionHeight: [],\n requestedKeyFrame: [],\n receivedKeyFrame: []\n },\n TX: {\n packetsLost: [],\n jitter: [],\n latency: [],\n bitRate: [],\n frameRate: [],\n resolutionWidth: [],\n resolutionHeight: [],\n requestedKeyFrame: [],\n receivedKeyFrame: []\n }\n }\n };\n }\n\n populateResults(lastMqa) {\n // Audio\n\n this.localMQEStats.audio.RX.packetsLost.push(lastMqa.audioReceive[0].common.mediaHopByHopLost);\n this.localMQEStats.audio.RX.jitter.push(lastMqa.audioReceive[0].streams[0].common.rtpJitter);\n this.localMQEStats.audio.RX.latency.push(lastMqa.audioReceive[0].common.roundTripTime);\n this.localMQEStats.audio.RX.bitRate.push(lastMqa.audioReceive[0].streams[0].common.receivedBitrate);\n\n this.localMQEStats.audio.TX.packetsLost.push(lastMqa.audioTransmit[0].common.remoteLossRate);\n this.localMQEStats.audio.TX.jitter.push(lastMqa.audioTransmit[0].common.remoteJitter);\n this.localMQEStats.audio.TX.latency.push(lastMqa.audioTransmit[0].common.roundTripTime);\n this.localMQEStats.audio.TX.bitRate.push(lastMqa.audioTransmit[0].streams[0].common.transmittedBitrate);\n\n // Video\n\n this.localMQEStats.video.RX.packetsLost.push(lastMqa.videoReceive[0].common.mediaHopByHopLost);\n this.localMQEStats.video.RX.jitter.push(lastMqa.videoReceive[0].streams[0].common.rtpJitter);\n this.localMQEStats.video.RX.latency.push(lastMqa.videoReceive[0].streams[0].common.roundTripTime);\n this.localMQEStats.video.RX.bitRate.push(lastMqa.videoReceive[0].streams[0].common.receivedBitrate);\n this.localMQEStats.video.RX.frameRate.push(lastMqa.videoReceive[0].streams[0].common.receivedFrameRate);\n this.localMQEStats.video.RX.resolutionWidth.push(lastMqa.videoReceive[0].streams[0].receivedWidth);\n this.localMQEStats.video.RX.resolutionHeight.push(lastMqa.videoReceive[0].streams[0].receivedHeight);\n this.localMQEStats.video.RX.requestedKeyFrame.push();\n this.localMQEStats.video.RX.receivedKeyFrame.push();\n\n this.localMQEStats.video.TX.packetsLost.push(lastMqa.videoTransmit[0].common.remoteLossRate);\n this.localMQEStats.video.TX.jitter.push(lastMqa.videoTransmit[0].common.remoteJitter);\n this.localMQEStats.video.TX.latency.push(lastMqa.videoTransmit[0].common.roundTripTime);\n this.localMQEStats.video.TX.bitRate.push(lastMqa.videoTransmit[0].streams[0].common.transmittedBitrate);\n this.localMQEStats.video.TX.frameRate.push(lastMqa.videoTransmit[0].streams[0].common.transmittedFrameRate);\n this.localMQEStats.video.TX.resolutionWidth.push(lastMqa.videoTransmit[0].streams[0].transmittedWidth);\n this.localMQEStats.video.TX.resolutionHeight.push(lastMqa.videoTransmit[0].streams[0].transmittedHeight);\n this.localMQEStats.video.TX.requestedKeyFrame.push(lastMqa.videoTransmit[0].streams[0].requestedKeyFrames);\n this.localMQEStats.video.TX.receivedKeyFrame.push();\n }\n\n\n resetStatsResults() {\n this.statsResults.audio.send.meanRemoteJitter = [];\n this.statsResults.video.send.meanRemoteJitter = [];\n this.statsResults.share.send.meanRemoteJitter = [];\n\n this.statsResults.audio.recv.meanRtpJitter = [];\n\n // TODO: currently no values are present\n this.statsResults.video.recv.meanRtpJitter = [];\n this.statsResults.share.recv.meanRtpJitter = [];\n\n // Reset the roundTripTime\n this.statsResults.audio.send.meanRoundTripTime = [];\n this.statsResults.video.send.meanRoundTripTime = [];\n this.statsResults.share.send.meanRoundTripTime = [];\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 updateMediaStatus(status) {\n this.meetingMediaStatus = status;\n }\n\n /**\n * captures MQA data from peerconnection\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n sendMqaData() {\n const audioReceiver = mqaData.intervals[0].audioReceive[0];\n const audioSender = mqaData.intervals[0].audioTransmit[0];\n const videoReceiver = mqaData.intervals[0].videoReceive[0];\n const videoSender = mqaData.intervals[0].videoTransmit[0];\n const shareSender = mqaData.intervals[0].videoTransmit[1];\n const shareReceiver = mqaData.intervals[0].videoReceive[1];\n\n getAudioSenderMqa({\n audioSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent\n });\n getAudioReceiverMqa({\n audioReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent\n });\n\n getVideoReceiverMqa({\n videoReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent\n });\n getVideoSenderMqa({\n videoSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent\n });\n\n // Capture mqa for share scenario\n\n getVideoSenderMqa({\n videoSender: shareSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n isShareStream: true\n });\n\n getVideoReceiverMqa({\n videoReceiver: shareReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n isShareStream: true\n });\n\n mqaData.intervals[0].intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress[0];\n\n // Adding peripheral information\n mqaData.intervals[0].intervalMetadata.peripherals = [];\n mqaData.intervals[0].intervalMetadata.peripherals.push({information: _UNKNOWN_, name: MEDIA_DEVICES.SPEAKER});\n mqaData.intervals[0].intervalMetadata.peripherals.push({information: this.peerConnection?.audioTransceiver?.sender?.track?.label || _UNKNOWN_, name: MEDIA_DEVICES.MICROPHONE});\n mqaData.intervals[0].intervalMetadata.peripherals.push({information: this.peerConnection?.videoTransceiver?.sender?.track?.label || _UNKNOWN_, name: MEDIA_DEVICES.CAMERA});\n\n\n mqaData.networkType = this.statsResults.connectionType.local.networkType;\n\n this.mqaSentCount = this.mqaSentCount + 1;\n\n mqaData.intervals[0].intervalNumber = this.mqaSentCount;\n\n // DO Deep copy, for some reason it takes the reference all the time rather then old value set\n this.lastMqaDataSent = cloneDeep(this.statsResults);\n\n this.populateResults(mqaData.intervals[0]);\n\n this.resetStatsResults();\n\n this.emit(\n {\n file: 'statsAnalyzer',\n function: 'sendMqaData'\n },\n EVENT_TRIGGERS.MEDIA_QUALITY,\n {\n data: mqaData.intervals[0],\n networkType: mqaData.networkType\n }\n );\n }\n\n /**\n * updated the peerconnection when changed\n *\n * @private\n * @memberof updatePeerconnection\n * @param {PeerConnection} peerConnection\n * @returns {void}\n */\n updatePeerconnection(peerConnection) {\n this.peerConnection = peerConnection;\n }\n\n /**\n * Starts the stats analyzer on interval\n *\n * @public\n * @memberof StatsAnalyzer\n * @param {PeerConnection} peerConnection\n * @returns {void}\n */\n startAnalyzer(peerConnection) {\n if (!this.statsStarted) {\n this.statsStarted = true;\n this.peerConnection = peerConnection;\n this.getStatsAndParse();\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 /**\n * Cleans up the analyzer when done\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n stopAnalyzer() {\n if (this.statsInterval) {\n this.getStatsAndParse();\n clearInterval(this.statsInterval);\n this.statsInterva = undefined;\n }\n\n if (this.mqaInterval) {\n this.sendMqaData();\n clearInterval(this.mqaInterval);\n this.statsInterva = undefined;\n }\n this.peerConnection = null;\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 parseGetStatsResult(getStatsResult, type, isSender) {\n if (!getStatsResult) {\n return;\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 'track':\n this.processTrackResult(getStatsResult, type);\n break;\n case 'remote-inbound-rtp':\n case 'remote-outbound-rtp':\n this.compareSentAndReceived(getStatsResult, type, isSender);\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 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} getStatsResults\n * @param {String} type\n * @param {boolean} isSender\n * @returns {void}\n */\n filterAndParseGetStatsResults(getStatsResults, type, isSender) {\n const {types} = DEFAULT_GET_STATS_FILTER;\n\n getStatsResults.forEach((result) => {\n if (types.includes(result.type)) {\n this.parseGetStatsResult(result, type, isSender);\n }\n });\n }\n\n /**\n * parse the audio\n * @param {String} result\n * @param {boolean} type\n * @returns {void}\n */\n parseAudioSource(result, type) {\n if (!result) {\n return;\n }\n\n if (type === STATS.AUDIO_CORRELATE) {\n this.statsResults[type].send.audioLevel = result.audioLevel;\n this.statsResults[type].send.totalAudioEnergy = result.totalAudioEnergy;\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 compareLastStatsResult() {\n if (this.lastStatsResults !== null && this.meetingMediaStatus) {\n // compare audio stats sent\n let mediaType = STATS.AUDIO_CORRELATE;\n let currentStats = null;\n let previousStats = null;\n\n if (this.meetingMediaStatus.expected.sendAudio) {\n currentStats = this.statsResults[mediaType].send;\n previousStats = this.lastStatsResults[mediaType].send;\n\n if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets sent`);\n }\n else {\n if (currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} Energy present`);\n }\n\n if (currentStats.audioLevel === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> ${mediaType} level is 0 for the user`);\n }\n }\n\n if (previousStats.totalPacketsSent === 0 && currentStats.totalPacketsSent > 0) {\n this.emit(\n {\n file: 'statsAnalyzer/index',\n function: 'compareLastStatsResult'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,\n {\n type: mediaType.AUDIO\n }\n );\n }\n }\n\n if (this.meetingMediaStatus.expected.receiveAudio) {\n // compare audio stats received\n currentStats = this.statsResults[mediaType].recv;\n previousStats = this.lastStatsResults[mediaType].recv;\n\n if (currentStats.totalPacketsReceived === previousStats.totalPacketsReceived || currentStats.totalPacketsReceived === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets received`);\n }\n else if (currentStats.totalSamplesReceived === previousStats.totalSamplesReceived ||\n currentStats.totalSamplesReceived === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} samples received`);\n }\n }\n\n mediaType = STATS.VIDEO_CORRELATE;\n if (this.meetingMediaStatus.expected.sendVideo) {\n // compare video stats sent\n currentStats = this.statsResults[mediaType].send;\n previousStats = this.lastStatsResults[mediaType].send;\n\n if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets sent`);\n }\n else {\n if (currentStats.framesEncoded === previousStats.framesEncoded || currentStats.framesEncoded === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} Frames Encoded`);\n }\n\n if (this.statsResults.resolutions[mediaType].send.framesSent === this.lastStatsResults.resolutions[mediaType].send.framesSent || this.statsResults.resolutions[mediaType].send.framesSent === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} Frames sent`);\n }\n }\n\n if (previousStats.framesSent === 0 && currentStats.framesSent > 0) {\n this.emit(\n {\n file: 'statsAnalyzer/index',\n function: 'compareLastStatsResult'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,\n {\n type: mediaType.VIDEO\n }\n );\n }\n }\n\n\n if (this.meetingMediaStatus.expected.receiveVideo) {\n // compare video stats reveived\n\n currentStats = this.statsResults[mediaType].recv;\n previousStats = this.lastStatsResults[mediaType].recv;\n\n if (currentStats.totalPacketsReceived === previousStats.totalPacketsReceived || currentStats.totalPacketsReceived === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets received`);\n }\n else {\n if (this.statsResults.resolutions[mediaType].recv.framesReceived === this.lastStatsResults.resolutions[mediaType].recv.framesReceived || this.statsResults.resolutions[mediaType].recv.framesReceived === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames received`);\n }\n\n if (this.statsResults.resolutions[mediaType].recv.framesDecoded === this.lastStatsResults.resolutions[mediaType].recv.framesDecoded || this.statsResults.resolutions[mediaType].send.framesDecoded === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames decoded`);\n }\n\n if (this.statsResults.resolutions[mediaType].recv.framesDropped - this.lastStatsResults.resolutions[mediaType].recv.framesDropped > 10) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> ${mediaType} frames are getting dropped`);\n }\n }\n }\n\n mediaType = STATS.SHARE_CORRELATE;\n if (this.meetingMediaStatus.expected.sendShare) {\n // compare share stats sent\n\n currentStats = this.statsResults[mediaType].send;\n previousStats = this.lastStatsResults[mediaType].send;\n\n if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets sent`);\n }\n else {\n if (currentStats.framesEncoded === previousStats.framesEncoded || currentStats.framesEncoded === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames getting encoded`);\n }\n\n if (this.statsResults.resolutions[mediaType].send.framesSent === this.lastStatsResults.resolutions[mediaType].send.framesSent || this.statsResults.resolutions[mediaType].send.framesSent === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames sent`);\n }\n }\n\n if (previousStats.framesSent === 0 && currentStats.framesSent > 0) {\n this.emit(\n {\n file: 'statsAnalyzer/index',\n function: 'compareLastStatsResult'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,\n {\n type: mediaType.VIDEO\n }\n );\n }\n\n // TODO:need to check receive share value\n // compare share stats reveived\n currentStats = this.statsResults[mediaType].recv;\n previousStats = this.lastStatsResults[mediaType].recv;\n\n if (currentStats.totalPacketsReceived === previousStats.totalPacketsReceived || currentStats.totalPacketsSent === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets received`);\n }\n else {\n if (this.statsResults.resolutions[mediaType].recv.framesReceived === this.lastStatsResults.resolutions[mediaType].recv.framesReceived || this.statsResults.resolutions[mediaType].recv.framesReceived === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames received`);\n }\n\n if (this.statsResults.resolutions[mediaType].recv.framesDecoded === this.lastStatsResults.resolutions[mediaType].recv.framesDecoded || this.statsResults.resolutions[mediaType].send.framesDecoded === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames decoded`);\n }\n\n if (this.statsResults.resolutions[mediaType].recv.framesDropped - this.lastStatsResults.resolutions[mediaType].recv.framesDropped > 10) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> ${mediaType} frames are getting dropped`);\n }\n }\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 {void}\n */\n getStatsAndParse() {\n if (!this.peerConnection) {\n return;\n }\n\n if (this.peerConnection && this.peerConnection.connectionState === CONNECTION_STATE.FAILED) {\n LoggerProxy.logger.trace('StatsAnalyzer:index#getStatsAndParse --> PeerConnection is in failed state');\n\n return;\n }\n\n LoggerProxy.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');\n this.peerConnection.videoTransceiver.sender.getStats().then((res) => {\n this.filterAndParseGetStatsResults(res, STATS.VIDEO_CORRELATE, true);\n });\n\n this.peerConnection.videoTransceiver.receiver.getStats().then((res) => {\n this.filterAndParseGetStatsResults(res, STATS.VIDEO_CORRELATE, false);\n });\n\n this.peerConnection.audioTransceiver.sender.getStats().then((res) => {\n this.filterAndParseGetStatsResults(res, STATS.AUDIO_CORRELATE, true);\n });\n\n this.peerConnection.audioTransceiver.receiver.getStats().then((res) => {\n this.filterAndParseGetStatsResults(res, STATS.AUDIO_CORRELATE, false);\n });\n\n // TODO: add checks for screen share\n this.peerConnection.shareTransceiver.sender.getStats().then((res) => {\n this.filterAndParseGetStatsResults(res, STATS.SHARE_CORRELATE, true);\n });\n\n this.peerConnection.shareTransceiver.receiver.getStats().then((res) => {\n this.filterAndParseGetStatsResults(res, STATS.SHARE_CORRELATE, false);\n });\n\n // updates the current direction of media\n this.statsResults[STATS.AUDIO_CORRELATE].direction = this.peerConnection.audioTransceiver.currentDirection;\n this.statsResults[STATS.VIDEO_CORRELATE].direction = this.peerConnection.videoTransceiver.currentDirection;\n this.statsResults[STATS.SHARE_CORRELATE].direction = this.peerConnection.shareTransceiver.currentDirection;\n\n // Process Stats results every 5 seconds\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('StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats');\n }\n\n /**\n * Processes OutboundRTP stats result and stores\n * @private\n * @param {*} result\n * @param {*} type\n * @returns {void}\n */\n processOutboundRTPResult(result, type) {\n const mediaType = type || STATS.AUDIO_CORRELATE;\n const sendrecvType = STATS.SEND_DIRECTION;\n\n if (result.bytesSent) {\n let kilobytes = 0;\n\n if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesSent) {\n this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;\n }\n if (!this.statsResults.internal[mediaType][sendrecvType].framesEncoded) {\n this.statsResults.internal[mediaType][sendrecvType].framesEncoded = result.framesEncoded;\n }\n if (!this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded) {\n this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;\n }\n\n const bytes = result.bytesSent - this.statsResults.internal[mediaType][sendrecvType].prevBytesSent;\n\n this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;\n\n kilobytes = bytes / 1024;\n\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n this.statsResults[mediaType].bytesSent = kilobytes;\n\n this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded - this.statsResults.internal[mediaType][sendrecvType].framesEncoded;\n this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded - this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded;\n this.statsResults.internal[mediaType].outboundRtpId = result.id;\n\n if (!this.statsResults.internal[mediaType][sendrecvType].packetsSent) {\n this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;\n }\n\n this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent - this.statsResults.internal[mediaType][sendrecvType].packetsSent;\n this.statsResults.internal[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].framesEncoded = result.framesEncoded;\n this.statsResults[mediaType][sendrecvType].encoderImplementation = result.encoderImplementation;\n this.statsResults[mediaType][sendrecvType].qualityLimitationReason = result.qualityLimitationReason;\n this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges = result.qualityLimitationResolutionChanges;\n this.statsResults[mediaType][sendrecvType].retransmittedPacketsSent = result.retransmittedPacketsSent;\n this.statsResults[mediaType][sendrecvType].totalBytesSent = result.bytesSent;\n this.statsResults[mediaType][sendrecvType].headerBytesSent = result.headerBytesSent;\n this.statsResults[mediaType][sendrecvType].retransmittedBytesSent = result.retransmittedBytesSent;\n }\n }\n\n\n /**\n * Processes InboundRTP stats result and stores\n * @private\n * @param {*} result\n * @param {*} type\n * @returns {void}\n */\n processInboundRTPResult(result, type) {\n const mediaType = type || STATS.AUDIO_CORRELATE;\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n if (result.bytesReceived) {\n let kilobytes = 0;\n\n if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {\n this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;\n }\n\n if (!this.statsResults.internal[mediaType][sendrecvType].pliCount) {\n this.statsResults.internal[mediaType][sendrecvType].pliCount = result.pliCount;\n }\n\n if (!this.statsResults.internal[mediaType][sendrecvType].packetsLost) {\n this.statsResults.internal[mediaType][sendrecvType].packetsLost = result.packetsLost;\n }\n\n if (!this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived) {\n this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n }\n\n if (!this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp) {\n this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;\n }\n\n const bytes = result.bytesReceived - (this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived);\n\n this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;\n\n kilobytes = bytes / 1024;\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n this.statsResults[mediaType].bytesReceived = kilobytes.toFixed(1);\n\n this.statsResults[mediaType][sendrecvType].pliCount = result.pliCount - this.statsResults.internal[mediaType][sendrecvType].pliCount;\n this.statsResults[mediaType][sendrecvType].currentPacketsLost = result.packetsLost - this.statsResults.internal[mediaType][sendrecvType].packetsLost;\n if (this.statsResults[mediaType][sendrecvType].currentPacketsLost < 0) {\n this.statsResults[mediaType][sendrecvType].currentPacketsLost = 0;\n }\n\n this.statsResults[mediaType][sendrecvType].packetsReceived = result.packetsReceived - this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived;\n this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n\n if (this.statsResults[mediaType][sendrecvType].packetsReceived === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#processInboundRTPResult --> No packets received for ${mediaType} `, this.statsResults[mediaType][sendrecvType].packetsReceived);\n }\n\n // Check the over all packet Lost ratio\n this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = this.statsResults[mediaType][sendrecvType].currentPacketsLost > 0 ? this.statsResults[mediaType][sendrecvType].currentPacketsLost / (this.statsResults[mediaType][sendrecvType].packetsReceived + this.statsResults[mediaType][sendrecvType].currentPacketsLost) : 0;\n if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {\n LoggerProxy.logger.info('StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver ', this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);\n }\n\n // TODO: check the packet loss value is negative values here\n\n if (result.packetsLost) {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost = result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;\n }\n else {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;\n }\n\n this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp = 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 = result.decoderImplementation;\n this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n\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 = result.totalSamplesReceived || 0;\n this.statsResults[mediaType][sendrecvType].totalSamplesDecoded = 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, type, isSender, isRemote) => {\n if (!result || !result.id) {\n return;\n }\n const RemoteCandidateType = {};\n const RemoteTransport = {};\n const RemoteIpAddress = {};\n const RemoteNetworkType = {};\n\n if (!result.id) return;\n\n const sendRecvType = isSender ? STATS.SEND_DIRECTION : STATS.RECEIVE_DIRECTION;\n const ipType = isRemote ? STATS.REMOTE : STATS.LOCAL;\n\n if (!RemoteCandidateType[result.id]) {\n RemoteCandidateType[result.id] = [];\n }\n\n if (!RemoteTransport[result.id]) {\n RemoteTransport[result.id] = [];\n }\n\n if (!RemoteIpAddress[result.id]) {\n RemoteIpAddress[result.id] = [];\n }\n if (!RemoteNetworkType[result.id]) {\n RemoteNetworkType[result.id] = [];\n }\n\n if (result.candidateType && RemoteCandidateType[result.id].indexOf(result.candidateType) === -1) {\n RemoteCandidateType[result.id].push(result.candidateType);\n }\n\n if (result.protocol && RemoteTransport[result.id].indexOf(result.protocol) === -1) {\n RemoteTransport[result.id].push(result.protocol.toUpperCase());\n }\n\n if (result.ip && RemoteIpAddress[result.id].indexOf(`${result.ip}:${result.portNumber}`) === -1) {\n RemoteIpAddress[result.id].push(`${result.ip}`); // TODO: Add ports\n }\n\n if (result.networkType && RemoteNetworkType[result.id].indexOf(result.networkType) === -1) {\n RemoteNetworkType[result.id].push(result.networkType);\n }\n\n this.statsResults.internal.candidates[result.id] = {\n candidateType: RemoteCandidateType[result.id],\n ipAddress: RemoteIpAddress[result.id],\n portNumber: result.port,\n networkType: RemoteNetworkType[result.id],\n priority: result.priority,\n transport: RemoteTransport[result.id],\n timestamp: result.time,\n id: result.id,\n type: result.type\n };\n\n this.statsResults.connectionType[ipType].candidateType = RemoteCandidateType[result.id];\n this.statsResults.connectionType[ipType].ipAddress = RemoteIpAddress[result.id];\n\n this.statsResults.connectionType[ipType].networkType = RemoteNetworkType[result.id][0] === NETWORK_TYPE.VPN ? NETWORK_TYPE.UNKNOWN : RemoteNetworkType[result.id][0];\n this.statsResults.connectionType[ipType].transport = RemoteTransport[result.id];\n\n this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;\n };\n\n /**\n * Process Track results\n *\n * @private\n * @param {*} result\n * @param {*} mediaType\n * @returns {void}\n * @memberof StatsAnalyzer\n */\n processTrackResult(result, mediaType) {\n if (!result || result.type !== 'track') {\n return;\n }\n if (result.type !== 'track') return;\n\n const sendrecvType = result.remoteSource === true ? STATS.RECEIVE_DIRECTION : STATS.SEND_DIRECTION;\n\n if (result.frameWidth && result.frameHeight) {\n this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;\n this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;\n this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;\n this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;\n }\n\n if (sendrecvType === STATS.RECEIVE_DIRECTION) {\n this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;\n this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;\n this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;\n }\n\n\n if (result.trackIdentifier && mediaType !== STATS.AUDIO_CORRELATE) {\n this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier = result.trackIdentifier;\n\n const jitterBufferDelay = result && result.jitterBufferDelay;\n const jitterBufferEmittedCount = result && result.jitterBufferEmittedCount;\n\n this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay = jitterBufferEmittedCount && (+jitterBufferDelay / +jitterBufferEmittedCount);\n\n // Used to calculate the jitter\n this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay = result.jitterBufferDelay;\n this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount = result.jitterBufferEmittedCount;\n }\n }\n\n /**\n *\n * @private\n * @param {*} result\n * @param {*} type\n * @returns {void}\n * @memberof StatsAnalyzer\n */\n compareSentAndReceived(result, type) {\n if (!type) {\n return;\n }\n\n const mediaType = type;\n\n if (!this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver) { this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost; }\n\n const currentPacketLoss = result.packetsLost - this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver;\n\n this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;\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 = this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0 ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver / this.statsResults[mediaType].send.totalPacketsSent : 0;\n this.statsResults[mediaType].send.currentPacketLossRatio = this.statsResults[mediaType].send.packetsLostOnReceiver > 0 ? this.statsResults[mediaType].send.packetsLostOnReceiver * 100 / (this.statsResults[mediaType].send.packetsSent + this.statsResults[mediaType].send.packetsLostOnReceiver) : 0;\n\n if (this.statsResults[mediaType].send.maxPacketLossRatio < this.statsResults[mediaType].send.currentPacketLossRatio) {\n this.statsResults[mediaType].send.maxPacketLossRatio = 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"]}
1
+ {"version":3,"names":["StatsAnalyzer","config","networkQualityMonitor","statsResults","defaultStats","result","type","isSender","isRemote","id","RemoteCandidateType","RemoteTransport","RemoteIpAddress","RemoteNetworkType","sendRecvType","STATS","SEND_DIRECTION","RECEIVE_DIRECTION","ipType","REMOTE","LOCAL","candidateType","indexOf","push","protocol","toUpperCase","ip","portNumber","networkType","internal","candidates","ipAddress","port","priority","transport","timestamp","time","connectionType","NETWORK_TYPE","VPN","UNKNOWN","totalRoundTripTime","statsStarted","lastStatsResults","correlationId","mqaSentCount","lastMqaDataSent","resolutions","video","send","recv","audio","share","localMQEStats","RX","packetsLost","jitter","latency","bitRate","TX","frameRate","resolutionWidth","resolutionHeight","requestedKeyFrame","receivedKeyFrame","lastMqa","audioReceive","common","mediaHopByHopLost","streams","rtpJitter","roundTripTime","receivedBitrate","audioTransmit","remoteLossRate","remoteJitter","transmittedBitrate","videoReceive","receivedFrameRate","receivedWidth","receivedHeight","videoTransmit","transmittedFrameRate","transmittedWidth","transmittedHeight","requestedKeyFrames","meanRemoteJitter","meanRtpJitter","meanRoundTripTime","status","meetingMediaStatus","audioReceiver","mqaData","intervals","audioSender","videoReceiver","videoSender","shareSender","shareReceiver","isShareStream","intervalMetadata","peerReflexiveIP","local","peripherals","information","_UNKNOWN_","name","MEDIA_DEVICES","SPEAKER","peerConnection","audioTransceiver","sender","track","label","MICROPHONE","videoTransceiver","CAMERA","intervalNumber","populateResults","resetStatsResults","emit","file","function","EVENT_TRIGGERS","MEDIA_QUALITY","data","getStatsAndParse","statsInterval","setInterval","analyzerInterval","sendMqaData","mqaInterval","MQA_INTEVAL","clearInterval","statsInterva","undefined","getStatsResult","processOutboundRTPResult","processInboundRTPResult","processTrackResult","compareSentAndReceived","parseCandidate","parseAudioSource","getStatsResults","types","DEFAULT_GET_STATS_FILTER","forEach","includes","parseGetStatsResult","AUDIO_CORRELATE","audioLevel","totalAudioEnergy","mediaType","currentStats","previousStats","expected","sendAudio","totalPacketsSent","LoggerProxy","logger","info","MEETING_MEDIA_LOCAL_STARTED","AUDIO","receiveAudio","totalPacketsReceived","totalSamplesReceived","VIDEO_CORRELATE","sendVideo","framesEncoded","framesSent","VIDEO","receiveVideo","framesReceived","framesDecoded","framesDropped","SHARE_CORRELATE","sendShare","connectionState","CONNECTION_STATE","FAILED","trace","getStats","then","res","filterAndParseGetStatsResults","receiver","shareTransceiver","direction","currentDirection","compareLastStatsResult","JSON","parse","sendrecvType","bytesSent","kilobytes","prevBytesSent","keyFramesEncoded","bytes","availableBandwidth","toFixed","outboundRtpId","packetsSent","totalKeyFramesEncoded","totalNackCount","nackCount","totalPliCount","pliCount","totalFirCount","firCount","encoderImplementation","qualityLimitationReason","qualityLimitationResolutionChanges","retransmittedPacketsSent","totalBytesSent","headerBytesSent","retransmittedBytesSent","bytesReceived","prevBytesReceived","packetsReceived","lastPacketReceivedTimestamp","currentPacketsLost","currentPacketLossRatio","totalPacketsLost","keyFramesDecoded","decoderImplementation","fecPacketsDiscarded","fecPacketsReceived","totalBytesReceived","headerBytesReceived","totalSamplesDecoded","concealedSamples","remoteSource","frameWidth","frameHeight","width","height","hugeFramesSent","trackIdentifier","jitterBufferDelay","jitterBufferEmittedCount","avgJitterDelay","totalPacketsLostOnReceiver","currentPacketLoss","packetsLostOnReceiver","ssrc","reportsReceived","overAllPacketLossRatio","maxPacketLossRatio","determineUplinkNetworkQuality","remoteRtpResults","statsAnalyzerCurrentStats","EventsScope"],"sources":["index.js"],"sourcesContent":["import {cloneDeep} from 'lodash';\n\nimport EventsScope from '../common/events/events-scope';\nimport {EVENT_TRIGGERS,\n DEFAULT_GET_STATS_FILTER, CONNECTION_STATE, STATS, MQA_INTEVAL, NETWORK_TYPE, MEDIA_DEVICES, _UNKNOWN_} from '../constants';\nimport mqaData 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';\n\n\n/**\n * Meeting High Packet Loss Event\n * Emitted when ever there is high packet loss detected\n * @event meeting:highPacketLoss\n * @type {Object}\n * @property {String} mediaType Type of media experiencing packet loss\n * @property {Number} packetLossRatio current packet loss ratio\n * @memberof StatsAnalyzer\n */\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 default class StatsAnalyzer extends EventsScope {\n /**\n * Creates a new instance of StatsAnalyzer\n * @constructor\n * @public\n * @param {Object} config SDK Configuration Object\n * @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)\n * @param {Object} statsResults Default properties for stats\n */\n constructor(config, networkQualityMonitor = {}, statsResults = defaultStats) {\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 resolutions: {video: {send: {}, recv: {}}, audio: {send: {}, recv: {}}, share: {send: {}, recv: {}}},\n video: {send: {}, recv: {}},\n audio: {send: {}, recv: {}},\n share: {send: {}, recv: {}}\n };\n this.localMQEStats = {\n audio: {\n RX: {\n packetsLost: [],\n jitter: [],\n latency: [],\n bitRate: []\n },\n TX: {\n packetsLost: [],\n jitter: [],\n latency: [],\n bitRate: []\n }\n },\n video: {\n RX: {\n packetsLost: [],\n jitter: [],\n latency: [],\n bitRate: [],\n frameRate: [],\n resolutionWidth: [],\n resolutionHeight: [],\n requestedKeyFrame: [],\n receivedKeyFrame: []\n },\n TX: {\n packetsLost: [],\n jitter: [],\n latency: [],\n bitRate: [],\n frameRate: [],\n resolutionWidth: [],\n resolutionHeight: [],\n requestedKeyFrame: [],\n receivedKeyFrame: []\n }\n }\n };\n }\n\n populateResults(lastMqa) {\n // Audio\n\n this.localMQEStats.audio.RX.packetsLost.push(lastMqa.audioReceive[0].common.mediaHopByHopLost);\n this.localMQEStats.audio.RX.jitter.push(lastMqa.audioReceive[0].streams[0].common.rtpJitter);\n this.localMQEStats.audio.RX.latency.push(lastMqa.audioReceive[0].common.roundTripTime);\n this.localMQEStats.audio.RX.bitRate.push(lastMqa.audioReceive[0].streams[0].common.receivedBitrate);\n\n this.localMQEStats.audio.TX.packetsLost.push(lastMqa.audioTransmit[0].common.remoteLossRate);\n this.localMQEStats.audio.TX.jitter.push(lastMqa.audioTransmit[0].common.remoteJitter);\n this.localMQEStats.audio.TX.latency.push(lastMqa.audioTransmit[0].common.roundTripTime);\n this.localMQEStats.audio.TX.bitRate.push(lastMqa.audioTransmit[0].streams[0].common.transmittedBitrate);\n\n // Video\n\n this.localMQEStats.video.RX.packetsLost.push(lastMqa.videoReceive[0].common.mediaHopByHopLost);\n this.localMQEStats.video.RX.jitter.push(lastMqa.videoReceive[0].streams[0].common.rtpJitter);\n this.localMQEStats.video.RX.latency.push(lastMqa.videoReceive[0].streams[0].common.roundTripTime);\n this.localMQEStats.video.RX.bitRate.push(lastMqa.videoReceive[0].streams[0].common.receivedBitrate);\n this.localMQEStats.video.RX.frameRate.push(lastMqa.videoReceive[0].streams[0].common.receivedFrameRate);\n this.localMQEStats.video.RX.resolutionWidth.push(lastMqa.videoReceive[0].streams[0].receivedWidth);\n this.localMQEStats.video.RX.resolutionHeight.push(lastMqa.videoReceive[0].streams[0].receivedHeight);\n this.localMQEStats.video.RX.requestedKeyFrame.push();\n this.localMQEStats.video.RX.receivedKeyFrame.push();\n\n this.localMQEStats.video.TX.packetsLost.push(lastMqa.videoTransmit[0].common.remoteLossRate);\n this.localMQEStats.video.TX.jitter.push(lastMqa.videoTransmit[0].common.remoteJitter);\n this.localMQEStats.video.TX.latency.push(lastMqa.videoTransmit[0].common.roundTripTime);\n this.localMQEStats.video.TX.bitRate.push(lastMqa.videoTransmit[0].streams[0].common.transmittedBitrate);\n this.localMQEStats.video.TX.frameRate.push(lastMqa.videoTransmit[0].streams[0].common.transmittedFrameRate);\n this.localMQEStats.video.TX.resolutionWidth.push(lastMqa.videoTransmit[0].streams[0].transmittedWidth);\n this.localMQEStats.video.TX.resolutionHeight.push(lastMqa.videoTransmit[0].streams[0].transmittedHeight);\n this.localMQEStats.video.TX.requestedKeyFrame.push(lastMqa.videoTransmit[0].streams[0].requestedKeyFrames);\n this.localMQEStats.video.TX.receivedKeyFrame.push();\n }\n\n\n resetStatsResults() {\n this.statsResults.audio.send.meanRemoteJitter = [];\n this.statsResults.video.send.meanRemoteJitter = [];\n this.statsResults.share.send.meanRemoteJitter = [];\n\n this.statsResults.audio.recv.meanRtpJitter = [];\n\n // TODO: currently no values are present\n this.statsResults.video.recv.meanRtpJitter = [];\n this.statsResults.share.recv.meanRtpJitter = [];\n\n // Reset the roundTripTime\n this.statsResults.audio.send.meanRoundTripTime = [];\n this.statsResults.video.send.meanRoundTripTime = [];\n this.statsResults.share.send.meanRoundTripTime = [];\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 updateMediaStatus(status) {\n this.meetingMediaStatus = status;\n }\n\n /**\n * captures MQA data from peerconnection\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n sendMqaData() {\n const audioReceiver = mqaData.intervals[0].audioReceive[0];\n const audioSender = mqaData.intervals[0].audioTransmit[0];\n const videoReceiver = mqaData.intervals[0].videoReceive[0];\n const videoSender = mqaData.intervals[0].videoTransmit[0];\n const shareSender = mqaData.intervals[0].videoTransmit[1];\n const shareReceiver = mqaData.intervals[0].videoReceive[1];\n\n getAudioSenderMqa({\n audioSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent\n });\n getAudioReceiverMqa({\n audioReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent\n });\n\n getVideoReceiverMqa({\n videoReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent\n });\n getVideoSenderMqa({\n videoSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent\n });\n\n // Capture mqa for share scenario\n\n getVideoSenderMqa({\n videoSender: shareSender,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n isShareStream: true\n });\n\n getVideoReceiverMqa({\n videoReceiver: shareReceiver,\n statsResults: this.statsResults,\n lastMqaDataSent: this.lastMqaDataSent,\n isShareStream: true\n });\n\n mqaData.intervals[0].intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress[0];\n\n // Adding peripheral information\n mqaData.intervals[0].intervalMetadata.peripherals = [];\n mqaData.intervals[0].intervalMetadata.peripherals.push({information: _UNKNOWN_, name: MEDIA_DEVICES.SPEAKER});\n mqaData.intervals[0].intervalMetadata.peripherals.push({information: this.peerConnection?.audioTransceiver?.sender?.track?.label || _UNKNOWN_, name: MEDIA_DEVICES.MICROPHONE});\n mqaData.intervals[0].intervalMetadata.peripherals.push({information: this.peerConnection?.videoTransceiver?.sender?.track?.label || _UNKNOWN_, name: MEDIA_DEVICES.CAMERA});\n\n\n mqaData.networkType = this.statsResults.connectionType.local.networkType;\n\n this.mqaSentCount += 1;\n\n mqaData.intervals[0].intervalNumber = this.mqaSentCount;\n\n // DO Deep copy, for some reason it takes the reference all the time rather then old value set\n this.lastMqaDataSent = cloneDeep(this.statsResults);\n\n this.populateResults(mqaData.intervals[0]);\n\n this.resetStatsResults();\n\n this.emit(\n {\n file: 'statsAnalyzer',\n function: 'sendMqaData'\n },\n EVENT_TRIGGERS.MEDIA_QUALITY,\n {\n data: mqaData.intervals[0],\n networkType: mqaData.networkType\n }\n );\n }\n\n /**\n * updated the peerconnection when changed\n *\n * @private\n * @memberof updatePeerconnection\n * @param {PeerConnection} peerConnection\n * @returns {void}\n */\n updatePeerconnection(peerConnection) {\n this.peerConnection = peerConnection;\n }\n\n /**\n * Starts the stats analyzer on interval\n *\n * @public\n * @memberof StatsAnalyzer\n * @param {PeerConnection} peerConnection\n * @returns {void}\n */\n startAnalyzer(peerConnection) {\n if (!this.statsStarted) {\n this.statsStarted = true;\n this.peerConnection = peerConnection;\n this.getStatsAndParse();\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 /**\n * Cleans up the analyzer when done\n *\n * @public\n * @memberof StatsAnalyzer\n * @returns {void}\n */\n stopAnalyzer() {\n if (this.statsInterval) {\n this.getStatsAndParse();\n clearInterval(this.statsInterval);\n this.statsInterva = undefined;\n }\n\n if (this.mqaInterval) {\n this.sendMqaData();\n clearInterval(this.mqaInterval);\n this.statsInterva = undefined;\n }\n this.peerConnection = null;\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 parseGetStatsResult(getStatsResult, type, isSender) {\n if (!getStatsResult) {\n return;\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 'track':\n this.processTrackResult(getStatsResult, type);\n break;\n case 'remote-inbound-rtp':\n case 'remote-outbound-rtp':\n this.compareSentAndReceived(getStatsResult, type, isSender);\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 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} getStatsResults\n * @param {String} type\n * @param {boolean} isSender\n * @returns {void}\n */\n filterAndParseGetStatsResults(getStatsResults, type, isSender) {\n const {types} = DEFAULT_GET_STATS_FILTER;\n\n getStatsResults.forEach((result) => {\n if (types.includes(result.type)) {\n this.parseGetStatsResult(result, type, isSender);\n }\n });\n }\n\n /**\n * parse the audio\n * @param {String} result\n * @param {boolean} type\n * @returns {void}\n */\n parseAudioSource(result, type) {\n if (!result) {\n return;\n }\n\n if (type === STATS.AUDIO_CORRELATE) {\n this.statsResults[type].send.audioLevel = result.audioLevel;\n this.statsResults[type].send.totalAudioEnergy = result.totalAudioEnergy;\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 compareLastStatsResult() {\n if (this.lastStatsResults !== null && this.meetingMediaStatus) {\n // compare audio stats sent\n let mediaType = STATS.AUDIO_CORRELATE;\n let currentStats = null;\n let previousStats = null;\n\n if (this.meetingMediaStatus.expected.sendAudio) {\n currentStats = this.statsResults[mediaType].send;\n previousStats = this.lastStatsResults[mediaType].send;\n\n if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets sent`);\n }\n else {\n if (currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} Energy present`);\n }\n\n if (currentStats.audioLevel === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> ${mediaType} level is 0 for the user`);\n }\n }\n\n if (previousStats.totalPacketsSent === 0 && currentStats.totalPacketsSent > 0) {\n this.emit(\n {\n file: 'statsAnalyzer/index',\n function: 'compareLastStatsResult'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,\n {\n type: mediaType.AUDIO\n }\n );\n }\n }\n\n if (this.meetingMediaStatus.expected.receiveAudio) {\n // compare audio stats received\n currentStats = this.statsResults[mediaType].recv;\n previousStats = this.lastStatsResults[mediaType].recv;\n\n if (currentStats.totalPacketsReceived === previousStats.totalPacketsReceived || currentStats.totalPacketsReceived === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets received`);\n }\n else if (currentStats.totalSamplesReceived === previousStats.totalSamplesReceived ||\n currentStats.totalSamplesReceived === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} samples received`);\n }\n }\n\n mediaType = STATS.VIDEO_CORRELATE;\n if (this.meetingMediaStatus.expected.sendVideo) {\n // compare video stats sent\n currentStats = this.statsResults[mediaType].send;\n previousStats = this.lastStatsResults[mediaType].send;\n\n if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets sent`);\n }\n else {\n if (currentStats.framesEncoded === previousStats.framesEncoded || currentStats.framesEncoded === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} Frames Encoded`);\n }\n\n if (this.statsResults.resolutions[mediaType].send.framesSent === this.lastStatsResults.resolutions[mediaType].send.framesSent || this.statsResults.resolutions[mediaType].send.framesSent === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} Frames sent`);\n }\n }\n\n if (previousStats.framesSent === 0 && currentStats.framesSent > 0) {\n this.emit(\n {\n file: 'statsAnalyzer/index',\n function: 'compareLastStatsResult'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,\n {\n type: mediaType.VIDEO\n }\n );\n }\n }\n\n\n if (this.meetingMediaStatus.expected.receiveVideo) {\n // compare video stats reveived\n\n currentStats = this.statsResults[mediaType].recv;\n previousStats = this.lastStatsResults[mediaType].recv;\n\n if (currentStats.totalPacketsReceived === previousStats.totalPacketsReceived || currentStats.totalPacketsReceived === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets received`);\n }\n else {\n if (this.statsResults.resolutions[mediaType].recv.framesReceived === this.lastStatsResults.resolutions[mediaType].recv.framesReceived || this.statsResults.resolutions[mediaType].recv.framesReceived === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames received`);\n }\n\n if (this.statsResults.resolutions[mediaType].recv.framesDecoded === this.lastStatsResults.resolutions[mediaType].recv.framesDecoded || this.statsResults.resolutions[mediaType].send.framesDecoded === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames decoded`);\n }\n\n if (this.statsResults.resolutions[mediaType].recv.framesDropped - this.lastStatsResults.resolutions[mediaType].recv.framesDropped > 10) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> ${mediaType} frames are getting dropped`);\n }\n }\n }\n\n mediaType = STATS.SHARE_CORRELATE;\n if (this.meetingMediaStatus.expected.sendShare) {\n // compare share stats sent\n\n currentStats = this.statsResults[mediaType].send;\n previousStats = this.lastStatsResults[mediaType].send;\n\n if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets sent`);\n }\n else {\n if (currentStats.framesEncoded === previousStats.framesEncoded || currentStats.framesEncoded === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames getting encoded`);\n }\n\n if (this.statsResults.resolutions[mediaType].send.framesSent === this.lastStatsResults.resolutions[mediaType].send.framesSent || this.statsResults.resolutions[mediaType].send.framesSent === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames sent`);\n }\n }\n\n if (previousStats.framesSent === 0 && currentStats.framesSent > 0) {\n this.emit(\n {\n file: 'statsAnalyzer/index',\n function: 'compareLastStatsResult'\n },\n EVENT_TRIGGERS.MEETING_MEDIA_LOCAL_STARTED,\n {\n type: mediaType.VIDEO\n }\n );\n }\n\n // TODO:need to check receive share value\n // compare share stats reveived\n currentStats = this.statsResults[mediaType].recv;\n previousStats = this.lastStatsResults[mediaType].recv;\n\n if (currentStats.totalPacketsReceived === previousStats.totalPacketsReceived || currentStats.totalPacketsSent === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets received`);\n }\n else {\n if (this.statsResults.resolutions[mediaType].recv.framesReceived === this.lastStatsResults.resolutions[mediaType].recv.framesReceived || this.statsResults.resolutions[mediaType].recv.framesReceived === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames received`);\n }\n\n if (this.statsResults.resolutions[mediaType].recv.framesDecoded === this.lastStatsResults.resolutions[mediaType].recv.framesDecoded || this.statsResults.resolutions[mediaType].send.framesDecoded === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames decoded`);\n }\n\n if (this.statsResults.resolutions[mediaType].recv.framesDropped - this.lastStatsResults.resolutions[mediaType].recv.framesDropped > 10) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> ${mediaType} frames are getting dropped`);\n }\n }\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 {void}\n */\n getStatsAndParse() {\n if (!this.peerConnection) {\n return;\n }\n\n if (this.peerConnection && this.peerConnection.connectionState === CONNECTION_STATE.FAILED) {\n LoggerProxy.logger.trace('StatsAnalyzer:index#getStatsAndParse --> PeerConnection is in failed state');\n\n return;\n }\n\n LoggerProxy.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');\n this.peerConnection.videoTransceiver.sender.getStats().then((res) => {\n this.filterAndParseGetStatsResults(res, STATS.VIDEO_CORRELATE, true);\n });\n\n this.peerConnection.videoTransceiver.receiver.getStats().then((res) => {\n this.filterAndParseGetStatsResults(res, STATS.VIDEO_CORRELATE, false);\n });\n\n this.peerConnection.audioTransceiver.sender.getStats().then((res) => {\n this.filterAndParseGetStatsResults(res, STATS.AUDIO_CORRELATE, true);\n });\n\n this.peerConnection.audioTransceiver.receiver.getStats().then((res) => {\n this.filterAndParseGetStatsResults(res, STATS.AUDIO_CORRELATE, false);\n });\n\n // TODO: add checks for screen share\n this.peerConnection.shareTransceiver.sender.getStats().then((res) => {\n this.filterAndParseGetStatsResults(res, STATS.SHARE_CORRELATE, true);\n });\n\n this.peerConnection.shareTransceiver.receiver.getStats().then((res) => {\n this.filterAndParseGetStatsResults(res, STATS.SHARE_CORRELATE, false);\n });\n\n // updates the current direction of media\n this.statsResults[STATS.AUDIO_CORRELATE].direction = this.peerConnection.audioTransceiver.currentDirection;\n this.statsResults[STATS.VIDEO_CORRELATE].direction = this.peerConnection.videoTransceiver.currentDirection;\n this.statsResults[STATS.SHARE_CORRELATE].direction = this.peerConnection.shareTransceiver.currentDirection;\n\n // Process Stats results every 5 seconds\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('StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats');\n }\n\n /**\n * Processes OutboundRTP stats result and stores\n * @private\n * @param {*} result\n * @param {*} type\n * @returns {void}\n */\n processOutboundRTPResult(result, type) {\n const mediaType = type || STATS.AUDIO_CORRELATE;\n const sendrecvType = STATS.SEND_DIRECTION;\n\n if (result.bytesSent) {\n let kilobytes = 0;\n\n if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesSent) {\n this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;\n }\n if (!this.statsResults.internal[mediaType][sendrecvType].framesEncoded) {\n this.statsResults.internal[mediaType][sendrecvType].framesEncoded = result.framesEncoded;\n }\n if (!this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded) {\n this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;\n }\n\n const bytes = result.bytesSent - this.statsResults.internal[mediaType][sendrecvType].prevBytesSent;\n\n this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;\n\n kilobytes = bytes / 1024;\n\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n this.statsResults[mediaType].bytesSent = kilobytes;\n\n this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded - this.statsResults.internal[mediaType][sendrecvType].framesEncoded;\n this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded - this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded;\n this.statsResults.internal[mediaType].outboundRtpId = result.id;\n\n if (!this.statsResults.internal[mediaType][sendrecvType].packetsSent) {\n this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;\n }\n\n this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent - this.statsResults.internal[mediaType][sendrecvType].packetsSent;\n this.statsResults.internal[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].framesEncoded = result.framesEncoded;\n this.statsResults[mediaType][sendrecvType].encoderImplementation = result.encoderImplementation;\n this.statsResults[mediaType][sendrecvType].qualityLimitationReason = result.qualityLimitationReason;\n this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges = result.qualityLimitationResolutionChanges;\n this.statsResults[mediaType][sendrecvType].retransmittedPacketsSent = result.retransmittedPacketsSent;\n this.statsResults[mediaType][sendrecvType].totalBytesSent = result.bytesSent;\n this.statsResults[mediaType][sendrecvType].headerBytesSent = result.headerBytesSent;\n this.statsResults[mediaType][sendrecvType].retransmittedBytesSent = result.retransmittedBytesSent;\n }\n }\n\n\n /**\n * Processes InboundRTP stats result and stores\n * @private\n * @param {*} result\n * @param {*} type\n * @returns {void}\n */\n processInboundRTPResult(result, type) {\n const mediaType = type || STATS.AUDIO_CORRELATE;\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n if (result.bytesReceived) {\n let kilobytes = 0;\n\n if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {\n this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;\n }\n\n if (!this.statsResults.internal[mediaType][sendrecvType].pliCount) {\n this.statsResults.internal[mediaType][sendrecvType].pliCount = result.pliCount;\n }\n\n if (!this.statsResults.internal[mediaType][sendrecvType].packetsLost) {\n this.statsResults.internal[mediaType][sendrecvType].packetsLost = result.packetsLost;\n }\n\n if (!this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived) {\n this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n }\n\n if (!this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp) {\n this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;\n }\n\n const bytes = result.bytesReceived - (this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived);\n\n this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;\n\n kilobytes = bytes / 1024;\n this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);\n this.statsResults[mediaType].bytesReceived = kilobytes.toFixed(1);\n\n this.statsResults[mediaType][sendrecvType].pliCount = result.pliCount - this.statsResults.internal[mediaType][sendrecvType].pliCount;\n this.statsResults[mediaType][sendrecvType].currentPacketsLost = result.packetsLost - this.statsResults.internal[mediaType][sendrecvType].packetsLost;\n if (this.statsResults[mediaType][sendrecvType].currentPacketsLost < 0) {\n this.statsResults[mediaType][sendrecvType].currentPacketsLost = 0;\n }\n\n this.statsResults[mediaType][sendrecvType].packetsReceived = result.packetsReceived - this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived;\n this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n\n if (this.statsResults[mediaType][sendrecvType].packetsReceived === 0) {\n LoggerProxy.logger.info(`StatsAnalyzer:index#processInboundRTPResult --> No packets received for ${mediaType} `, this.statsResults[mediaType][sendrecvType].packetsReceived);\n }\n\n // Check the over all packet Lost ratio\n this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = this.statsResults[mediaType][sendrecvType].currentPacketsLost > 0 ? this.statsResults[mediaType][sendrecvType].currentPacketsLost / (this.statsResults[mediaType][sendrecvType].packetsReceived + this.statsResults[mediaType][sendrecvType].currentPacketsLost) : 0;\n if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {\n LoggerProxy.logger.info('StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver ', this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);\n }\n\n // TODO: check the packet loss value is negative values here\n\n if (result.packetsLost) {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost = result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;\n }\n else {\n this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;\n }\n\n this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp = 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 = result.decoderImplementation;\n this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;\n\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 = result.totalSamplesReceived || 0;\n this.statsResults[mediaType][sendrecvType].totalSamplesDecoded = 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, type, isSender, isRemote) => {\n if (!result || !result.id) {\n return;\n }\n const RemoteCandidateType = {};\n const RemoteTransport = {};\n const RemoteIpAddress = {};\n const RemoteNetworkType = {};\n\n if (!result.id) return;\n\n const sendRecvType = isSender ? STATS.SEND_DIRECTION : STATS.RECEIVE_DIRECTION;\n const ipType = isRemote ? STATS.REMOTE : STATS.LOCAL;\n\n if (!RemoteCandidateType[result.id]) {\n RemoteCandidateType[result.id] = [];\n }\n\n if (!RemoteTransport[result.id]) {\n RemoteTransport[result.id] = [];\n }\n\n if (!RemoteIpAddress[result.id]) {\n RemoteIpAddress[result.id] = [];\n }\n if (!RemoteNetworkType[result.id]) {\n RemoteNetworkType[result.id] = [];\n }\n\n if (result.candidateType && RemoteCandidateType[result.id].indexOf(result.candidateType) === -1) {\n RemoteCandidateType[result.id].push(result.candidateType);\n }\n\n if (result.protocol && RemoteTransport[result.id].indexOf(result.protocol) === -1) {\n RemoteTransport[result.id].push(result.protocol.toUpperCase());\n }\n\n if (result.ip && RemoteIpAddress[result.id].indexOf(`${result.ip}:${result.portNumber}`) === -1) {\n RemoteIpAddress[result.id].push(`${result.ip}`); // TODO: Add ports\n }\n\n if (result.networkType && RemoteNetworkType[result.id].indexOf(result.networkType) === -1) {\n RemoteNetworkType[result.id].push(result.networkType);\n }\n\n this.statsResults.internal.candidates[result.id] = {\n candidateType: RemoteCandidateType[result.id],\n ipAddress: RemoteIpAddress[result.id],\n portNumber: result.port,\n networkType: RemoteNetworkType[result.id],\n priority: result.priority,\n transport: RemoteTransport[result.id],\n timestamp: result.time,\n id: result.id,\n type: result.type\n };\n\n this.statsResults.connectionType[ipType].candidateType = RemoteCandidateType[result.id];\n this.statsResults.connectionType[ipType].ipAddress = RemoteIpAddress[result.id];\n\n this.statsResults.connectionType[ipType].networkType = RemoteNetworkType[result.id][0] === NETWORK_TYPE.VPN ? NETWORK_TYPE.UNKNOWN : RemoteNetworkType[result.id][0];\n this.statsResults.connectionType[ipType].transport = RemoteTransport[result.id];\n\n this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;\n };\n\n /**\n * Process Track results\n *\n * @private\n * @param {*} result\n * @param {*} mediaType\n * @returns {void}\n * @memberof StatsAnalyzer\n */\n processTrackResult(result, mediaType) {\n if (!result || result.type !== 'track') {\n return;\n }\n if (result.type !== 'track') return;\n\n const sendrecvType = result.remoteSource === true ? STATS.RECEIVE_DIRECTION : STATS.SEND_DIRECTION;\n\n if (result.frameWidth && result.frameHeight) {\n this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;\n this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;\n this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;\n this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;\n }\n\n if (sendrecvType === STATS.RECEIVE_DIRECTION) {\n this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;\n this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;\n this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;\n }\n\n\n if (result.trackIdentifier && mediaType !== STATS.AUDIO_CORRELATE) {\n this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier = result.trackIdentifier;\n\n const jitterBufferDelay = result && result.jitterBufferDelay;\n const jitterBufferEmittedCount = result && result.jitterBufferEmittedCount;\n\n this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay = jitterBufferEmittedCount && (+jitterBufferDelay / +jitterBufferEmittedCount);\n\n // Used to calculate the jitter\n this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay = result.jitterBufferDelay;\n this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount = result.jitterBufferEmittedCount;\n }\n }\n\n /**\n *\n * @private\n * @param {*} result\n * @param {*} type\n * @returns {void}\n * @memberof StatsAnalyzer\n */\n compareSentAndReceived(result, type) {\n if (!type) {\n return;\n }\n\n const mediaType = type;\n\n if (!this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver) { this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost; }\n\n const currentPacketLoss = result.packetsLost - this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver;\n\n this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;\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 = this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0 ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver / this.statsResults[mediaType].send.totalPacketsSent : 0;\n this.statsResults[mediaType].send.currentPacketLossRatio = this.statsResults[mediaType].send.packetsLostOnReceiver > 0 ? this.statsResults[mediaType].send.packetsLostOnReceiver * 100 / (this.statsResults[mediaType].send.packetsSent + this.statsResults[mediaType].send.packetsLostOnReceiver) : 0;\n\n if (this.statsResults[mediaType].send.maxPacketLossRatio < this.statsResults[mediaType].send.currentPacketLossRatio) {\n this.statsResults[mediaType].send.maxPacketLossRatio = 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 +1 @@
1
- {"version":3,"sources":["mqaUtil.js"],"names":["getAudioReceiverMqa","audioReceiver","statsResults","lastMqaDataSent","mediaType","STATS","AUDIO_CORRELATE","sendrecvType","RECEIVE_DIRECTION","common","direction","transportType","connectionType","remote","transport","rtpPackets","totalPacketsReceived","streams","mediaHopByHopLost","totalPacketsLost","rtpHopByHopLost","maxRtpJitter","meanRtpJitter","rtpJitter","fecRecovered","fecPacketsReceived","fecPacketsDiscarded","rtpEndToEndLost","framesDropped","totalSamplesDecoded","renderedFrameRate","framesReceived","totalSamplesReceived","concealedFrames","concealedSamples","receivedBitrate","totalBytesReceived","rtpBitrate","getAudioSenderMqa","audioSender","SEND_DIRECTION","local","maxRemoteJitter","meanRemoteJitter","totalPacketsSent","availableBitrate","availableOutgoingBitrate","totalpacketsLostForaMin","totalPacketsLostOnReceiver","remoteLossRate","maxRoundTripTime","meanRoundTripTime","roundTripTime","totalBytesSentInaMin","totalBytesSent","transmittedBitrate","transmittedKeyFrames","totalKeyFramesEncoded","requestedKeyFrames","totalFirCount","getVideoReceiverMqa","videoReceiver","isShareStream","SHARE_CORRELATE","VIDEO_CORRELATE","totalPacketLoss","totalBytesReceivedInaMin","totalFrameReceivedInaMin","resolutions","totalFrameDecodedInaMin","framesDecoded","receivedFrameRate","receivedHeight","height","receivedWidth","width","receivedFrameSize","receivedKeyFrames","keyFramesDecoded","totalPliCount","getVideoSenderMqa","videoSender","totalFrameSentInaMin","framesSent","transmittedFrameRate","transmittedHeight","transmittedWidth","transmittedFrameSize"],"mappings":"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","sourcesContent":["\nimport {mean, max} from 'lodash';\n\nimport {STATS} from '../constants';\n\nexport const getAudioReceiverMqa = ({audioReceiver, statsResults, lastMqaDataSent}) => {\n const mediaType = STATS.AUDIO_CORRELATE;\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n audioReceiver.common.common.direction = statsResults[mediaType].direction;\n audioReceiver.common.transportType = statsResults.connectionType.remote.transport[0];\n // add rtpPacket info inside common as also for call analyzer\n audioReceiver.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastMqaDataSent[mediaType][sendrecvType].totalPacketsReceived || 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 = (statsResults[mediaType][sendrecvType].totalPacketsLost - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost) || 0;\n audioReceiver.common.rtpHopByHopLost = statsResults[mediaType][sendrecvType].totalPacketsLost - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost || 0;\n\n audioReceiver.streams[0].common.maxRtpJitter = max(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;\n audioReceiver.streams[0].common.meanRtpJitter = 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 = (statsResults[mediaType][sendrecvType].fecPacketsReceived - lastMqaDataSent[mediaType][sendrecvType].fecPacketsReceived) - (statsResults[mediaType][sendrecvType].fecPacketsDiscarded - lastMqaDataSent[mediaType][sendrecvType].fecPacketsDiscarded);\n\n audioReceiver.streams[0].common.rtpEndToEndLost = (statsResults[mediaType][sendrecvType].totalPacketsLost - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost) - fecRecovered || 0;\n\n audioReceiver.streams[0].common.framesDropped = statsResults[mediaType][sendrecvType].totalSamplesDecoded - lastMqaDataSent[mediaType][sendrecvType].totalSamplesDecoded || 0;\n audioReceiver.streams[0].common.renderedFrameRate = audioReceiver.streams[0].common.framesDropped * 100 / 60 || 0;\n audioReceiver.streams[0].common.framesReceived = statsResults[mediaType][sendrecvType].totalSamplesReceived - lastMqaDataSent[mediaType][sendrecvType].totalSamplesReceived || 0;\n audioReceiver.streams[0].common.concealedFrames = statsResults[mediaType][sendrecvType].concealedSamples - lastMqaDataSent[mediaType][sendrecvType].concealedSamples || 0;\n audioReceiver.streams[0].common.receivedBitrate = (statsResults[mediaType][sendrecvType].totalBytesReceived - lastMqaDataSent[mediaType][sendrecvType].totalBytesReceived) * 8 / 60 || 0;\n\n audioReceiver.common.rtpBitrate = audioReceiver.streams[0].common.receivedBitrate;\n};\n\n\nexport const getAudioSenderMqa = ({audioSender, statsResults, lastMqaDataSent}) => {\n const mediaType = STATS.AUDIO_CORRELATE;\n const sendrecvType = STATS.SEND_DIRECTION;\n\n audioSender.common.common.direction = statsResults[mediaType].direction;\n audioSender.common.transportType = statsResults.connectionType.local.transport[0];\n\n audioSender.common.maxRemoteJitter = max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n audioSender.common.meanRemoteJitter = mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n audioSender.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;\n audioSender.streams[0].common.rtpPackets = audioSender.common.rtpPackets;\n // From candidate-pair\n audioSender.common.availableBitrate = 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 = statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLostOnReceiver;\n\n audioSender.common.remoteLossRate = totalpacketsLostForaMin > 0 ? (totalpacketsLostForaMin * 100 / audioSender.common.rtpPackets) : 0; // This is the packets sent with in last min || 0;\n\n audioSender.common.maxRoundTripTime = max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n audioSender.common.meanRoundTripTime = mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;\n\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastMqaDataSent[mediaType][sendrecvType].totalBytesSent;\n\n audioSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin ? (totalBytesSentInaMin) * 8 / 60 : 0;\n audioSender.common.rtpBitrate = audioSender.streams[0].common.transmittedBitrate;\n\n\n audioSender.streams[0].transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastMqaDataSent[mediaType][sendrecvType].totalKeyFramesEncoded || 0;\n audioSender.streams[0].requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastMqaDataSent[mediaType][sendrecvType].totalFirCount || 0;\n};\n\n\nexport const getVideoReceiverMqa = ({\n videoReceiver, statsResults, lastMqaDataSent, isShareStream = false\n}) => {\n const mediaType = isShareStream ? STATS.SHARE_CORRELATE : STATS.VIDEO_CORRELATE;\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n videoReceiver.common.common.direction = statsResults[mediaType].direction;\n videoReceiver.common.transportType = statsResults.connectionType.remote.transport[0];\n // collect the packets received for the last min\n videoReceiver.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastMqaDataSent[mediaType][sendrecvType].totalPacketsReceived || 0;\n videoReceiver.streams[0].common.rtpPackets = videoReceiver.common.rtpPackets;\n\n const totalPacketLoss = (statsResults[mediaType][sendrecvType].totalPacketsLost - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost) || 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 = max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n videoReceiver.common.meanRemoteJitter = mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n videoReceiver.streams[0].common.rtpJitter = videoReceiver.common.maxRemoteJitter;\n // videoReceiver.streams[0].common.rtpJitter = (statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay - lastMqaDataSent.resolutions[mediaType][sendrecvType].jitterBufferDelay) / (statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount - lastMqaDataSent.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount) * 1000 || 0;\n\n // Calculate the outgoing bitrate\n const totalBytesReceivedInaMin = statsResults[mediaType][sendrecvType].totalBytesReceived - lastMqaDataSent[mediaType][sendrecvType].totalBytesReceived;\n\n videoReceiver.streams[0].common.receivedBitrate = totalBytesReceivedInaMin ? (totalBytesReceivedInaMin) * 8 / 60 : 0;\n videoReceiver.common.rtpBitrate = videoReceiver.streams[0].common.receivedBitrate;\n\n // From tracks //TODO: calculate a proper one\n const totalFrameReceivedInaMin = statsResults.resolutions[mediaType][sendrecvType].framesReceived - lastMqaDataSent.resolutions[mediaType][sendrecvType].framesReceived;\n const totalFrameDecodedInaMin = statsResults.resolutions[mediaType][sendrecvType].framesDecoded - lastMqaDataSent.resolutions[mediaType][sendrecvType].framesDecoded;\n\n videoReceiver.streams[0].common.receivedFrameRate = totalFrameReceivedInaMin ? totalFrameReceivedInaMin * 100 / 60 : 0;\n videoReceiver.streams[0].common.renderedFrameRate = totalFrameDecodedInaMin ? totalFrameDecodedInaMin * 100 / 60 : 0;\n\n videoReceiver.streams[0].common.framesDropped = statsResults.resolutions[mediaType][sendrecvType].framesDropped - lastMqaDataSent.resolutions[mediaType][sendrecvType].framesDropped;\n videoReceiver.streams[0].receivedHeight = statsResults.resolutions[mediaType][sendrecvType].height;\n videoReceiver.streams[0].receivedWidth = statsResults.resolutions[mediaType][sendrecvType].width;\n videoReceiver.streams[0].receivedFrameSize = statsResults.resolutions[mediaType][sendrecvType].height * statsResults.resolutions[mediaType][sendrecvType].height / 256;\n\n videoReceiver.streams[0].receivedKeyFrames = statsResults[mediaType][sendrecvType].keyFramesDecoded - lastMqaDataSent[mediaType][sendrecvType].keyFramesDecoded || 0;\n videoReceiver.streams[0].requestedKeyFrames = statsResults[mediaType][sendrecvType].totalPliCount - lastMqaDataSent[mediaType][sendrecvType].totalPliCount || 0;\n};\n\nexport const getVideoSenderMqa = ({\n videoSender, statsResults, lastMqaDataSent, isShareStream = false\n}) => {\n const mediaType = isShareStream ? STATS.SHARE_CORRELATE : STATS.VIDEO_CORRELATE;\n const sendrecvType = STATS.SEND_DIRECTION;\n\n videoSender.common.common.direction = statsResults[mediaType].direction;\n videoSender.common.transportType = statsResults.connectionType.local.transport[0];\n\n videoSender.common.maxRemoteJitter = max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n videoSender.common.meanRemoteJitter = mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n\n videoSender.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;\n videoSender.common.availableBitrate = 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 = statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLostOnReceiver;\n\n videoSender.common.remoteLossRate = totalpacketsLostForaMin > 0 ? (totalpacketsLostForaMin) * 100 / (videoSender.common.rtpPackets + totalpacketsLostForaMin) : 0; // This is the packets sent with in last min || 0;\n\n videoSender.common.maxRoundTripTime = max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n videoSender.common.meanRoundTripTime = mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;\n\n videoSender.streams[0].common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastMqaDataSent[mediaType][sendrecvType].totalBytesSent;\n\n videoSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin ? (totalBytesSentInaMin) * 8 / 60 : 0;\n\n videoSender.common.rtpBitrate = videoSender.streams[0].common.transmittedBitrate;\n\n\n videoSender.streams[0].transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastMqaDataSent[mediaType][sendrecvType].totalKeyFramesEncoded || 0;\n videoSender.streams[0].requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastMqaDataSent[mediaType][sendrecvType].totalFirCount || 0;\n\n // From tracks //TODO: calculate a proper one\n const totalFrameSentInaMin = statsResults.resolutions[mediaType][sendrecvType].framesSent - (lastMqaDataSent.resolutions[mediaType][sendrecvType].framesSent || 0);\n\n videoSender.streams[0].common.transmittedFrameRate = totalFrameSentInaMin ? totalFrameSentInaMin * 100 / 60 : 0;\n videoSender.streams[0].transmittedHeight = statsResults.resolutions[mediaType][sendrecvType].height;\n videoSender.streams[0].transmittedWidth = statsResults.resolutions[mediaType][sendrecvType].width;\n videoSender.streams[0].transmittedFrameSize = statsResults.resolutions[mediaType][sendrecvType].height * statsResults.resolutions[mediaType][sendrecvType].width / 254;\n};\n"]}
1
+ {"version":3,"names":["getAudioReceiverMqa","audioReceiver","statsResults","lastMqaDataSent","mediaType","STATS","AUDIO_CORRELATE","sendrecvType","RECEIVE_DIRECTION","common","direction","transportType","connectionType","remote","transport","rtpPackets","totalPacketsReceived","streams","mediaHopByHopLost","totalPacketsLost","rtpHopByHopLost","maxRtpJitter","meanRtpJitter","rtpJitter","fecRecovered","fecPacketsReceived","fecPacketsDiscarded","rtpEndToEndLost","framesDropped","totalSamplesDecoded","renderedFrameRate","framesReceived","totalSamplesReceived","concealedFrames","concealedSamples","receivedBitrate","totalBytesReceived","rtpBitrate","getAudioSenderMqa","audioSender","SEND_DIRECTION","local","maxRemoteJitter","meanRemoteJitter","totalPacketsSent","availableBitrate","availableOutgoingBitrate","totalpacketsLostForaMin","totalPacketsLostOnReceiver","remoteLossRate","maxRoundTripTime","meanRoundTripTime","roundTripTime","totalBytesSentInaMin","totalBytesSent","transmittedBitrate","transmittedKeyFrames","totalKeyFramesEncoded","requestedKeyFrames","totalFirCount","getVideoReceiverMqa","videoReceiver","isShareStream","SHARE_CORRELATE","VIDEO_CORRELATE","totalPacketLoss","totalBytesReceivedInaMin","totalFrameReceivedInaMin","resolutions","totalFrameDecodedInaMin","framesDecoded","receivedFrameRate","receivedHeight","height","receivedWidth","width","receivedFrameSize","receivedKeyFrames","keyFramesDecoded","totalPliCount","getVideoSenderMqa","videoSender","totalFrameSentInaMin","framesSent","transmittedFrameRate","transmittedHeight","transmittedWidth","transmittedFrameSize"],"sources":["mqaUtil.js"],"sourcesContent":["\nimport {mean, max} from 'lodash';\n\nimport {STATS} from '../constants';\n\nexport const getAudioReceiverMqa = ({audioReceiver, statsResults, lastMqaDataSent}) => {\n const mediaType = STATS.AUDIO_CORRELATE;\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n audioReceiver.common.common.direction = statsResults[mediaType].direction;\n audioReceiver.common.transportType = statsResults.connectionType.remote.transport[0];\n // add rtpPacket info inside common as also for call analyzer\n audioReceiver.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastMqaDataSent[mediaType][sendrecvType].totalPacketsReceived || 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 = (statsResults[mediaType][sendrecvType].totalPacketsLost - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost) || 0;\n audioReceiver.common.rtpHopByHopLost = statsResults[mediaType][sendrecvType].totalPacketsLost - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost || 0;\n\n audioReceiver.streams[0].common.maxRtpJitter = max(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;\n audioReceiver.streams[0].common.meanRtpJitter = 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 = (statsResults[mediaType][sendrecvType].fecPacketsReceived - lastMqaDataSent[mediaType][sendrecvType].fecPacketsReceived) - (statsResults[mediaType][sendrecvType].fecPacketsDiscarded - lastMqaDataSent[mediaType][sendrecvType].fecPacketsDiscarded);\n\n audioReceiver.streams[0].common.rtpEndToEndLost = (statsResults[mediaType][sendrecvType].totalPacketsLost - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost) - fecRecovered || 0;\n\n audioReceiver.streams[0].common.framesDropped = statsResults[mediaType][sendrecvType].totalSamplesDecoded - lastMqaDataSent[mediaType][sendrecvType].totalSamplesDecoded || 0;\n audioReceiver.streams[0].common.renderedFrameRate = audioReceiver.streams[0].common.framesDropped * 100 / 60 || 0;\n audioReceiver.streams[0].common.framesReceived = statsResults[mediaType][sendrecvType].totalSamplesReceived - lastMqaDataSent[mediaType][sendrecvType].totalSamplesReceived || 0;\n audioReceiver.streams[0].common.concealedFrames = statsResults[mediaType][sendrecvType].concealedSamples - lastMqaDataSent[mediaType][sendrecvType].concealedSamples || 0;\n audioReceiver.streams[0].common.receivedBitrate = (statsResults[mediaType][sendrecvType].totalBytesReceived - lastMqaDataSent[mediaType][sendrecvType].totalBytesReceived) * 8 / 60 || 0;\n\n audioReceiver.common.rtpBitrate = audioReceiver.streams[0].common.receivedBitrate;\n};\n\n\nexport const getAudioSenderMqa = ({audioSender, statsResults, lastMqaDataSent}) => {\n const mediaType = STATS.AUDIO_CORRELATE;\n const sendrecvType = STATS.SEND_DIRECTION;\n\n audioSender.common.common.direction = statsResults[mediaType].direction;\n audioSender.common.transportType = statsResults.connectionType.local.transport[0];\n\n audioSender.common.maxRemoteJitter = max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n audioSender.common.meanRemoteJitter = mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n audioSender.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;\n audioSender.streams[0].common.rtpPackets = audioSender.common.rtpPackets;\n // From candidate-pair\n audioSender.common.availableBitrate = 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 = statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLostOnReceiver;\n\n audioSender.common.remoteLossRate = totalpacketsLostForaMin > 0 ? (totalpacketsLostForaMin * 100 / audioSender.common.rtpPackets) : 0; // This is the packets sent with in last min || 0;\n\n audioSender.common.maxRoundTripTime = max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n audioSender.common.meanRoundTripTime = mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;\n\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastMqaDataSent[mediaType][sendrecvType].totalBytesSent;\n\n audioSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin ? (totalBytesSentInaMin) * 8 / 60 : 0;\n audioSender.common.rtpBitrate = audioSender.streams[0].common.transmittedBitrate;\n\n\n audioSender.streams[0].transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastMqaDataSent[mediaType][sendrecvType].totalKeyFramesEncoded || 0;\n audioSender.streams[0].requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastMqaDataSent[mediaType][sendrecvType].totalFirCount || 0;\n};\n\n\nexport const getVideoReceiverMqa = ({\n videoReceiver, statsResults, lastMqaDataSent, isShareStream = false\n}) => {\n const mediaType = isShareStream ? STATS.SHARE_CORRELATE : STATS.VIDEO_CORRELATE;\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n videoReceiver.common.common.direction = statsResults[mediaType].direction;\n videoReceiver.common.transportType = statsResults.connectionType.remote.transport[0];\n // collect the packets received for the last min\n videoReceiver.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastMqaDataSent[mediaType][sendrecvType].totalPacketsReceived || 0;\n videoReceiver.streams[0].common.rtpPackets = videoReceiver.common.rtpPackets;\n\n const totalPacketLoss = (statsResults[mediaType][sendrecvType].totalPacketsLost - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost) || 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 = max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n videoReceiver.common.meanRemoteJitter = mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n videoReceiver.streams[0].common.rtpJitter = videoReceiver.common.maxRemoteJitter;\n // videoReceiver.streams[0].common.rtpJitter = (statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay - lastMqaDataSent.resolutions[mediaType][sendrecvType].jitterBufferDelay) / (statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount - lastMqaDataSent.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount) * 1000 || 0;\n\n // Calculate the outgoing bitrate\n const totalBytesReceivedInaMin = statsResults[mediaType][sendrecvType].totalBytesReceived - lastMqaDataSent[mediaType][sendrecvType].totalBytesReceived;\n\n videoReceiver.streams[0].common.receivedBitrate = totalBytesReceivedInaMin ? (totalBytesReceivedInaMin) * 8 / 60 : 0;\n videoReceiver.common.rtpBitrate = videoReceiver.streams[0].common.receivedBitrate;\n\n // From tracks //TODO: calculate a proper one\n const totalFrameReceivedInaMin = statsResults.resolutions[mediaType][sendrecvType].framesReceived - lastMqaDataSent.resolutions[mediaType][sendrecvType].framesReceived;\n const totalFrameDecodedInaMin = statsResults.resolutions[mediaType][sendrecvType].framesDecoded - lastMqaDataSent.resolutions[mediaType][sendrecvType].framesDecoded;\n\n videoReceiver.streams[0].common.receivedFrameRate = totalFrameReceivedInaMin ? totalFrameReceivedInaMin * 100 / 60 : 0;\n videoReceiver.streams[0].common.renderedFrameRate = totalFrameDecodedInaMin ? totalFrameDecodedInaMin * 100 / 60 : 0;\n\n videoReceiver.streams[0].common.framesDropped = statsResults.resolutions[mediaType][sendrecvType].framesDropped - lastMqaDataSent.resolutions[mediaType][sendrecvType].framesDropped;\n videoReceiver.streams[0].receivedHeight = statsResults.resolutions[mediaType][sendrecvType].height;\n videoReceiver.streams[0].receivedWidth = statsResults.resolutions[mediaType][sendrecvType].width;\n videoReceiver.streams[0].receivedFrameSize = statsResults.resolutions[mediaType][sendrecvType].height * statsResults.resolutions[mediaType][sendrecvType].height / 256;\n\n videoReceiver.streams[0].receivedKeyFrames = statsResults[mediaType][sendrecvType].keyFramesDecoded - lastMqaDataSent[mediaType][sendrecvType].keyFramesDecoded || 0;\n videoReceiver.streams[0].requestedKeyFrames = statsResults[mediaType][sendrecvType].totalPliCount - lastMqaDataSent[mediaType][sendrecvType].totalPliCount || 0;\n};\n\nexport const getVideoSenderMqa = ({\n videoSender, statsResults, lastMqaDataSent, isShareStream = false\n}) => {\n const mediaType = isShareStream ? STATS.SHARE_CORRELATE : STATS.VIDEO_CORRELATE;\n const sendrecvType = STATS.SEND_DIRECTION;\n\n videoSender.common.common.direction = statsResults[mediaType].direction;\n videoSender.common.transportType = statsResults.connectionType.local.transport[0];\n\n videoSender.common.maxRemoteJitter = max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n videoSender.common.meanRemoteJitter = mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n\n videoSender.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;\n videoSender.common.availableBitrate = 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 = statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLostOnReceiver;\n\n videoSender.common.remoteLossRate = totalpacketsLostForaMin > 0 ? (totalpacketsLostForaMin) * 100 / (videoSender.common.rtpPackets + totalpacketsLostForaMin) : 0; // This is the packets sent with in last min || 0;\n\n videoSender.common.maxRoundTripTime = max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n videoSender.common.meanRoundTripTime = mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;\n\n videoSender.streams[0].common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastMqaDataSent[mediaType][sendrecvType].totalBytesSent;\n\n videoSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin ? (totalBytesSentInaMin) * 8 / 60 : 0;\n\n videoSender.common.rtpBitrate = videoSender.streams[0].common.transmittedBitrate;\n\n\n videoSender.streams[0].transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastMqaDataSent[mediaType][sendrecvType].totalKeyFramesEncoded || 0;\n videoSender.streams[0].requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastMqaDataSent[mediaType][sendrecvType].totalFirCount || 0;\n\n // From tracks //TODO: calculate a proper one\n const totalFrameSentInaMin = statsResults.resolutions[mediaType][sendrecvType].framesSent - (lastMqaDataSent.resolutions[mediaType][sendrecvType].framesSent || 0);\n\n videoSender.streams[0].common.transmittedFrameRate = totalFrameSentInaMin ? totalFrameSentInaMin * 100 / 60 : 0;\n videoSender.streams[0].transmittedHeight = statsResults.resolutions[mediaType][sendrecvType].height;\n videoSender.streams[0].transmittedWidth = statsResults.resolutions[mediaType][sendrecvType].width;\n videoSender.streams[0].transmittedFrameSize = statsResults.resolutions[mediaType][sendrecvType].height * statsResults.resolutions[mediaType][sendrecvType].width / 254;\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["index.js"],"names":["Transcription","webSocketUrl","sessionId","members","sessionID","memberCSIs","params","webSocket","WebSocket","token","onopen","send","id","type","data","trackingId","toString","callback","onclose","event","onerror","csis","csi","member","membersCollection","find","participant","status","selfIsSpeaking","includes","speaker","transcription","onmessage","JSON","parse","voiceaPayload","getSpeaker","messageID","transcript_id","personID","timestamp","close"],"mappings":"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","sourcesContent":["import {v4 as uuidv4} from 'uuid';\n\n/**\n * @description Meeting Webex assistance transcription feature.\n * @exports\n * @class Transcription\n */\nexport default class Transcription {\n /**\n * @param {string} webSocketUrl\n * @param {sessionID} sessionId\n * @param {object} members\n * @constructor\n * @memberof Transcription\n */\n constructor(webSocketUrl, sessionId, members) {\n this.webSocketUrl = webSocketUrl;\n this.sessionID = sessionId;\n this.members = members;\n this.memberCSIs = {};\n\n const params = '?outboundWireFormat=text&bufferStates=true&aliasHttpStatus=true';\n\n this.webSocket = new WebSocket(`${this.webSocketUrl}${params}`);\n }\n\n /**\n * open the Low Latency Mercury connection\n * An event parameter will be send to the callback.\n *\n * @param {string} token\n * @param {string} sessionID\n * @returns {void}\n */\n connect(token) {\n this.webSocket.onopen = () => {\n this.webSocket.send(JSON.stringify({\n id: uuidv4(),\n type: 'authorization',\n data: {token: `Bearer ${token}`},\n trackingId: `webex-js-sdk_${this.sessionID}${Date.now.toString()}`\n }));\n };\n }\n\n /**\n * Sets callback to invoke when the web socket connection is closed.\n *\n * @param {function} callback\n * @returns {void}\n */\n onCloseSocket(callback) {\n if (callback) {\n this.webSocket.onclose = (event) => {\n callback(event);\n };\n }\n }\n\n /**\n * Sets callback to invoke when a web socket connection error occurs.\n * An event parameter will be send to the callback.\n *\n * @param {function} callback\n * @returns {void}\n */\n onErrorSocket(callback) {\n if (callback) {\n this.webSocket.onerror = (event) => {\n callback(event);\n };\n }\n }\n\n /**\n * Get current speaker from the given csis payload and update the global csis map\n *\n * @private\n * @param {object} csis\n * @returns {object}\n */\n getSpeaker(csis) {\n for (const csi of csis) {\n const member = this.memberCSIs[csi];\n\n if (member) {\n return member;\n }\n }\n\n return Object.values(this.members.membersCollection.members)\n .find((member) => {\n const memberCSIs = member.participant.status.csis;\n let selfIsSpeaking = false;\n\n for (const csi of csis) {\n if (memberCSIs.includes(csi)) {\n this.memberCSIs[csi] = member;\n selfIsSpeaking = true;\n break;\n }\n }\n\n return selfIsSpeaking;\n });\n }\n\n /**\n * Sends transcription data to given callback as it arrives.\n *\n * @param {function} callback\n * @returns {void}\n */\n subscribe(callback) {\n let data, csis, speaker, transcription;\n\n this.webSocket.onmessage = (event) => {\n data = JSON.parse(event.data);\n csis = data.data?.voiceaPayload?.csis || [];\n speaker = this.getSpeaker(csis);\n transcription = data.data?.voiceaPayload?.data || '';\n\n this.webSocket.send(JSON.stringify({messageID: data.id, type: 'ack'}));\n\n if (transcription) {\n callback(\n {\n id: data.data?.voiceaPayload?.transcript_id,\n personID: speaker?.id,\n transcription,\n timestamp: data.timestamp,\n type: data?.data?.voiceaPayload?.type\n }\n );\n }\n };\n }\n\n /**\n * Close the LLM web socket connection\n * @returns {void}\n */\n closeSocket() {\n this.webSocket.close();\n }\n}\n\n"]}
1
+ {"version":3,"names":["Transcription","webSocketUrl","sessionId","members","sessionID","memberCSIs","params","webSocket","WebSocket","token","onopen","send","id","type","data","trackingId","toString","callback","onclose","event","onerror","csis","csi","member","membersCollection","find","participant","status","selfIsSpeaking","includes","speaker","transcription","onmessage","JSON","parse","voiceaPayload","getSpeaker","messageID","transcript_id","personID","timestamp","close"],"sources":["index.js"],"sourcesContent":["import {v4 as uuidv4} from 'uuid';\n\n/**\n * @description Meeting Webex assistance transcription feature.\n * @exports\n * @class Transcription\n */\nexport default class Transcription {\n /**\n * @param {string} webSocketUrl\n * @param {sessionID} sessionId\n * @param {object} members\n * @constructor\n * @memberof Transcription\n */\n constructor(webSocketUrl, sessionId, members) {\n this.webSocketUrl = webSocketUrl;\n this.sessionID = sessionId;\n this.members = members;\n this.memberCSIs = {};\n\n const params = '?outboundWireFormat=text&bufferStates=true&aliasHttpStatus=true';\n\n this.webSocket = new WebSocket(`${this.webSocketUrl}${params}`);\n }\n\n /**\n * open the Low Latency Mercury connection\n * An event parameter will be send to the callback.\n *\n * @param {string} token\n * @param {string} sessionID\n * @returns {void}\n */\n connect(token) {\n this.webSocket.onopen = () => {\n this.webSocket.send(JSON.stringify({\n id: uuidv4(),\n type: 'authorization',\n data: {token: `Bearer ${token}`},\n trackingId: `webex-js-sdk_${this.sessionID}${Date.now.toString()}`\n }));\n };\n }\n\n /**\n * Sets callback to invoke when the web socket connection is closed.\n *\n * @param {function} callback\n * @returns {void}\n */\n onCloseSocket(callback) {\n if (callback) {\n this.webSocket.onclose = (event) => {\n callback(event);\n };\n }\n }\n\n /**\n * Sets callback to invoke when a web socket connection error occurs.\n * An event parameter will be send to the callback.\n *\n * @param {function} callback\n * @returns {void}\n */\n onErrorSocket(callback) {\n if (callback) {\n this.webSocket.onerror = (event) => {\n callback(event);\n };\n }\n }\n\n /**\n * Get current speaker from the given csis payload and update the global csis map\n *\n * @private\n * @param {object} csis\n * @returns {object}\n */\n getSpeaker(csis) {\n for (const csi of csis) {\n const member = this.memberCSIs[csi];\n\n if (member) {\n return member;\n }\n }\n\n return Object.values(this.members.membersCollection.members)\n .find((member) => {\n const memberCSIs = member.participant.status.csis;\n let selfIsSpeaking = false;\n\n for (const csi of csis) {\n if (memberCSIs.includes(csi)) {\n this.memberCSIs[csi] = member;\n selfIsSpeaking = true;\n break;\n }\n }\n\n return selfIsSpeaking;\n });\n }\n\n /**\n * Sends transcription data to given callback as it arrives.\n *\n * @param {function} callback\n * @returns {void}\n */\n subscribe(callback) {\n let data, csis, speaker, transcription;\n\n this.webSocket.onmessage = (event) => {\n data = JSON.parse(event.data);\n csis = data.data?.voiceaPayload?.csis || [];\n speaker = this.getSpeaker(csis);\n transcription = data.data?.voiceaPayload?.data || '';\n\n this.webSocket.send(JSON.stringify({messageID: data.id, type: 'ack'}));\n\n if (transcription) {\n callback(\n {\n id: data.data?.voiceaPayload?.transcript_id,\n personID: speaker?.id,\n transcription,\n timestamp: data.timestamp,\n type: data?.data?.voiceaPayload?.type\n }\n );\n }\n };\n }\n\n /**\n * Close the LLM web socket connection\n * @returns {void}\n */\n closeSocket() {\n this.webSocket.close();\n }\n}\n\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/plugin-meetings",
3
- "version": "1.159.5",
3
+ "version": "1.161.0",
4
4
  "description": "",
5
5
  "license": "MIT",
6
6
  "contributors": [
@@ -24,19 +24,19 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@babel/runtime-corejs2": "^7.14.8",
27
- "@webex/webex-core": "1.159.5",
28
- "@webex/internal-plugin-mercury": "1.159.5",
29
- "@webex/internal-plugin-conversation": "1.159.5",
27
+ "@webex/webex-core": "1.161.0",
28
+ "@webex/internal-plugin-mercury": "1.161.0",
29
+ "@webex/internal-plugin-conversation": "1.161.0",
30
30
  "webrtc-adapter": "^7.7.0",
31
31
  "lodash": "^4.17.21",
32
32
  "uuid": "^3.3.2",
33
33
  "global": "^4.4.0",
34
34
  "ip-anonymize": "^0.1.0",
35
- "@webex/common": "1.159.5",
35
+ "@webex/common": "1.161.0",
36
36
  "bowser": "^2.11.0",
37
37
  "sdp-transform": "^2.12.0",
38
38
  "readable-stream": "^3.6.0",
39
- "@webex/common-timers": "1.159.5",
39
+ "@webex/common-timers": "1.161.0",
40
40
  "btoa": "^1.2.1",
41
41
  "javascript-state-machine": "^3.1.0",
42
42
  "envify": "^4.1.0"
@@ -72,7 +72,7 @@ WebExMeetingsErrors[UserNotJoinedError.CODE] = UserNotJoinedError;
72
72
  * @property {string} message - 'User has not established media yet'
73
73
  */
74
74
  class NoMediaEstablishedYetError extends WebexMeetingsError {
75
- static CODE= 30103;
75
+ static CODE = 30103;
76
76
 
77
77
  constructor() {
78
78
  super(NoMediaEstablishedYetError.CODE, 'User has not established media yet');