@webex/plugin-meetings 3.0.0-beta.337 → 3.0.0-beta.338
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +4 -0
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/webinar/index.js +1 -1
- package/package.json +19 -19
- package/src/statsAnalyzer/mqaUtil.ts +4 -0
- package/test/unit/spec/stats-analyzer/index.js +47 -20
package/dist/breakouts/index.js
CHANGED
|
@@ -1041,7 +1041,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
|
|
|
1041
1041
|
this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
|
|
1042
1042
|
}
|
|
1043
1043
|
},
|
|
1044
|
-
version: "3.0.0-beta.
|
|
1044
|
+
version: "3.0.0-beta.338"
|
|
1045
1045
|
});
|
|
1046
1046
|
var _default = Breakouts;
|
|
1047
1047
|
exports.default = _default;
|
|
@@ -29,6 +29,7 @@ var getAudioReceiverMqa = function getAudioReceiverMqa(_ref) {
|
|
|
29
29
|
audioReceiver.streams[0].common.csi.push(csi);
|
|
30
30
|
}
|
|
31
31
|
audioReceiver.common.common.direction = statsResults[mediaType].direction;
|
|
32
|
+
audioReceiver.common.common.isMain = !mediaType.includes('-share');
|
|
32
33
|
audioReceiver.common.transportType = statsResults.connectionType.local.transport;
|
|
33
34
|
|
|
34
35
|
// add rtpPacket info inside common as also for call analyzer
|
|
@@ -72,6 +73,7 @@ var getAudioSenderMqa = function getAudioSenderMqa(_ref2) {
|
|
|
72
73
|
audioSender.streams[0].common.csi.push(csi);
|
|
73
74
|
}
|
|
74
75
|
audioSender.common.common.direction = statsResults[mediaType].direction;
|
|
76
|
+
audioSender.common.common.isMain = !mediaType.includes('-share');
|
|
75
77
|
audioSender.common.transportType = statsResults.connectionType.local.transport;
|
|
76
78
|
audioSender.common.maxRemoteJitter =
|
|
77
79
|
// @ts-ignore
|
|
@@ -120,6 +122,7 @@ var getVideoReceiverMqa = function getVideoReceiverMqa(_ref3) {
|
|
|
120
122
|
videoReceiver.streams[0].common.csi.push(csi);
|
|
121
123
|
}
|
|
122
124
|
videoReceiver.common.common.direction = statsResults[mediaType].direction;
|
|
125
|
+
videoReceiver.common.common.isMain = !mediaType.includes('-share');
|
|
123
126
|
videoReceiver.common.transportType = statsResults.connectionType.local.transport;
|
|
124
127
|
|
|
125
128
|
// collect the packets received for the last min
|
|
@@ -179,6 +182,7 @@ var getVideoSenderMqa = function getVideoSenderMqa(_ref4) {
|
|
|
179
182
|
videoSender.streams[0].common.csi.push(csi);
|
|
180
183
|
}
|
|
181
184
|
videoSender.common.common.direction = statsResults[mediaType].direction;
|
|
185
|
+
videoSender.common.common.isMain = !mediaType.includes('-share');
|
|
182
186
|
videoSender.common.transportType = statsResults.connectionType.local.transport;
|
|
183
187
|
|
|
184
188
|
// @ts-ignore
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getAudioReceiverMqa","audioReceiver","statsResults","lastMqaDataSent","mediaType","sendrecvType","STATS","RECEIVE_DIRECTION","lastPacketsReceived","totalPacketsReceived","lastPacketsLost","totalPacketsLost","lastPacketsDecoded","totalSamplesDecoded","lastSamplesReceived","totalSamplesReceived","lastConcealedSamples","concealedSamples","lastBytesReceived","totalBytesReceived","lastFecPacketsReceived","fecPacketsReceived","lastFecPacketsDiscarded","fecPacketsDiscarded","csi","streams","common","includes","push","direction","transportType","connectionType","local","transport","rtpPackets","mediaHopByHopLost","rtpHopByHopLost","maxRtpJitter","meanRtpJitter","rtpJitter","fecRecovered","rtpEndToEndLost","framesDropped","renderedFrameRate","framesReceived","concealedFrames","receivedBitrate","rtpBitrate","getAudioSenderMqa","audioSender","SEND_DIRECTION","lastPacketsSent","totalPacketsSent","totalPacketsLostOnReceiver","lastBytesSent","totalBytesSent","lastFramesEncoded","totalKeyFramesEncoded","lastFirCount","totalFirCount","maxRemoteJitter","meanRemoteJitter","availableBitrate","availableOutgoingBitrate","totalpacketsLostForaMin","remoteLossRate","maxRoundTripTime","meanRoundTripTime","roundTripTime","totalBytesSentInaMin","transmittedBitrate","transmittedKeyFrames","requestedKeyFrames","getVideoReceiverMqa","videoReceiver","lastFramesReceived","lastFramesDecoded","framesDecoded","lastFramesDropped","lastKeyFramesDecoded","keyFramesDecoded","lastPliCount","totalPliCount","totalPacketLoss","totalBytesReceivedInaMin","totalFrameReceivedInaMin","totalFrameDecodedInaMin","receivedFrameRate","Math","round","receivedHeight","height","receivedWidth","width","receivedFrameSize","receivedKeyFrames","getVideoSenderMqa","videoSender","lastKeyFramesEncoded","lastFramesSent","framesSent","totalFrameSentInaMin","transmittedFrameRate","transmittedHeight","transmittedWidth","transmittedFrameSize"],"sources":["mqaUtil.ts"],"sourcesContent":["/* eslint-disable no-param-reassign, prefer-destructuring */\n\nimport {mean, max} from 'lodash';\n\nimport {STATS} from '../constants';\n\nexport const getAudioReceiverMqa = ({audioReceiver, statsResults, lastMqaDataSent, mediaType}) => {\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n const lastPacketsReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsReceived || 0;\n const lastPacketsLost = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLost || 0;\n const lastPacketsDecoded = lastMqaDataSent[mediaType]?.[sendrecvType].totalSamplesDecoded || 0;\n const lastSamplesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalSamplesReceived || 0;\n const lastConcealedSamples = lastMqaDataSent[mediaType]?.[sendrecvType].concealedSamples || 0;\n const lastBytesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesReceived || 0;\n const lastFecPacketsReceived = lastMqaDataSent[mediaType]?.[sendrecvType].fecPacketsReceived || 0;\n const lastFecPacketsDiscarded =\n lastMqaDataSent[mediaType]?.[sendrecvType].fecPacketsDiscarded || 0;\n\n const {csi} = statsResults[mediaType];\n if (csi && !audioReceiver.streams[0].common.csi.includes(csi)) {\n audioReceiver.streams[0].common.csi.push(csi);\n }\n\n audioReceiver.common.common.direction = statsResults[mediaType].direction;\n audioReceiver.common.transportType = statsResults.connectionType.local.transport;\n\n // add rtpPacket info inside common as also for call analyzer\n audioReceiver.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;\n // Hop by hop are numbers and not percentage so we compare on what we sent the last min\n // collect the packets received for the last min\n audioReceiver.streams[0].common.rtpPackets = audioReceiver.common.rtpPackets;\n audioReceiver.common.mediaHopByHopLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;\n audioReceiver.common.rtpHopByHopLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;\n\n audioReceiver.streams[0].common.maxRtpJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;\n audioReceiver.streams[0].common.meanRtpJitter =\n mean(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;\n audioReceiver.streams[0].common.rtpJitter = audioReceiver.streams[0].common.maxRtpJitter;\n\n // Fec packets do come in as part of the FEC only for audio\n const fecRecovered =\n statsResults[mediaType][sendrecvType].fecPacketsReceived -\n lastFecPacketsReceived -\n (statsResults[mediaType][sendrecvType].fecPacketsDiscarded - lastFecPacketsDiscarded);\n\n audioReceiver.streams[0].common.rtpEndToEndLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost - fecRecovered || 0;\n\n audioReceiver.streams[0].common.framesDropped =\n statsResults[mediaType][sendrecvType].totalSamplesDecoded - lastPacketsDecoded || 0;\n audioReceiver.streams[0].common.renderedFrameRate =\n (audioReceiver.streams[0].common.framesDropped * 100) / 60 || 0;\n\n audioReceiver.streams[0].common.framesReceived =\n statsResults[mediaType][sendrecvType].totalSamplesReceived - lastSamplesReceived || 0;\n audioReceiver.streams[0].common.concealedFrames =\n statsResults[mediaType][sendrecvType].concealedSamples - lastConcealedSamples || 0;\n audioReceiver.streams[0].common.receivedBitrate =\n ((statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived) * 8) / 60 || 0;\n\n audioReceiver.common.rtpBitrate = audioReceiver.streams[0].common.receivedBitrate;\n};\n\nexport const getAudioSenderMqa = ({audioSender, statsResults, lastMqaDataSent, mediaType}) => {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n const lastPacketsSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsSent || 0;\n const lastPacketsLost =\n lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLostOnReceiver || 0;\n const lastBytesSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesSent || 0;\n const lastFramesEncoded = lastMqaDataSent[mediaType]?.[sendrecvType].totalKeyFramesEncoded || 0;\n const lastFirCount = lastMqaDataSent[mediaType]?.[sendrecvType].totalFirCount || 0;\n\n const {csi} = statsResults[mediaType];\n if (csi && !audioSender.streams[0].common.csi.includes(csi)) {\n audioSender.streams[0].common.csi.push(csi);\n }\n\n audioSender.common.common.direction = statsResults[mediaType].direction;\n audioSender.common.transportType = statsResults.connectionType.local.transport;\n\n audioSender.common.maxRemoteJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n audioSender.common.meanRemoteJitter =\n mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n audioSender.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;\n audioSender.streams[0].common.rtpPackets = audioSender.common.rtpPackets;\n // From candidate-pair\n audioSender.common.availableBitrate =\n statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;\n // Calculate based on how much packets lost of received compated to how to the client sent\n\n const totalpacketsLostForaMin =\n statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver - lastPacketsLost;\n\n audioSender.common.remoteLossRate =\n totalpacketsLostForaMin > 0\n ? (totalpacketsLostForaMin * 100) / audioSender.common.rtpPackets\n : 0; // This is the packets sent with in last min || 0;\n\n audioSender.common.maxRoundTripTime =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n audioSender.common.meanRoundTripTime =\n mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;\n\n audioSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin\n ? (totalBytesSentInaMin * 8) / 60\n : 0;\n audioSender.common.rtpBitrate = audioSender.streams[0].common.transmittedBitrate;\n\n audioSender.streams[0].transmittedKeyFrames =\n statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastFramesEncoded || 0;\n audioSender.streams[0].requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;\n};\n\nexport const getVideoReceiverMqa = ({videoReceiver, statsResults, lastMqaDataSent, mediaType}) => {\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n const lastPacketsReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsReceived || 0;\n const lastPacketsLost = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLost || 0;\n const lastBytesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesReceived || 0;\n const lastFramesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].framesReceived || 0;\n const lastFramesDecoded = lastMqaDataSent[mediaType]?.[sendrecvType].framesDecoded || 0;\n const lastFramesDropped = lastMqaDataSent[mediaType]?.[sendrecvType].framesDropped || 0;\n const lastKeyFramesDecoded = lastMqaDataSent[mediaType]?.[sendrecvType].keyFramesDecoded || 0;\n const lastPliCount = lastMqaDataSent[mediaType]?.[sendrecvType].totalPliCount || 0;\n\n const {csi} = statsResults[mediaType];\n if (csi && !videoReceiver.streams[0].common.csi.includes(csi)) {\n videoReceiver.streams[0].common.csi.push(csi);\n }\n\n videoReceiver.common.common.direction = statsResults[mediaType].direction;\n videoReceiver.common.transportType = statsResults.connectionType.local.transport;\n\n // collect the packets received for the last min\n videoReceiver.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;\n videoReceiver.streams[0].common.rtpPackets = videoReceiver.common.rtpPackets;\n\n const totalPacketLoss =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;\n\n // Hope by hop are numbers and not percentage so we compare on what we sent the last min\n // this is including packet lost\n videoReceiver.common.mediaHopByHopLost = totalPacketLoss;\n videoReceiver.common.rtpHopByHopLost = totalPacketLoss;\n\n // End to end packetloss is after recovery\n videoReceiver.streams[0].common.rtpEndToEndLost = totalPacketLoss;\n\n // calculate this values\n\n videoReceiver.common.maxRemoteJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n videoReceiver.common.meanRemoteJitter =\n mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n videoReceiver.streams[0].common.rtpJitter = videoReceiver.common.maxRemoteJitter;\n\n // Calculate the outgoing bitrate\n const totalBytesReceivedInaMin =\n statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived;\n\n videoReceiver.streams[0].common.receivedBitrate = totalBytesReceivedInaMin\n ? (totalBytesReceivedInaMin * 8) / 60\n : 0;\n videoReceiver.common.rtpBitrate = videoReceiver.streams[0].common.receivedBitrate;\n\n // From tracks //TODO: calculate a proper one\n const totalFrameReceivedInaMin =\n statsResults[mediaType][sendrecvType].framesReceived - lastFramesReceived;\n const totalFrameDecodedInaMin =\n statsResults[mediaType][sendrecvType].framesDecoded - lastFramesDecoded;\n\n videoReceiver.streams[0].common.receivedFrameRate = Math.round(\n totalFrameReceivedInaMin ? totalFrameReceivedInaMin / 60 : 0\n );\n videoReceiver.streams[0].common.renderedFrameRate = Math.round(\n totalFrameDecodedInaMin ? totalFrameDecodedInaMin / 60 : 0\n );\n\n videoReceiver.streams[0].common.framesDropped =\n statsResults[mediaType][sendrecvType].framesDropped - lastFramesDropped;\n videoReceiver.streams[0].receivedHeight = statsResults[mediaType][sendrecvType].height || 0;\n videoReceiver.streams[0].receivedWidth = statsResults[mediaType][sendrecvType].width || 0;\n videoReceiver.streams[0].receivedFrameSize =\n (videoReceiver.streams[0].receivedHeight * videoReceiver.streams[0].receivedWidth) / 256;\n\n videoReceiver.streams[0].receivedKeyFrames =\n statsResults[mediaType][sendrecvType].keyFramesDecoded - lastKeyFramesDecoded || 0;\n videoReceiver.streams[0].requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalPliCount - lastPliCount || 0;\n};\n\nexport const getVideoSenderMqa = ({videoSender, statsResults, lastMqaDataSent, mediaType}) => {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n const lastPacketsSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsSent || 0;\n const lastPacketsLost =\n lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLostOnReceiver || 0;\n const lastBytesSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesSent || 0;\n const lastKeyFramesEncoded =\n lastMqaDataSent[mediaType]?.[sendrecvType].totalKeyFramesEncoded || 0;\n const lastFirCount = lastMqaDataSent[mediaType]?.[sendrecvType].totalFirCount || 0;\n const lastFramesSent = lastMqaDataSent[mediaType]?.[sendrecvType].framesSent || 0;\n const {csi} = statsResults[mediaType];\n if (csi && !videoSender.streams[0].common.csi.includes(csi)) {\n videoSender.streams[0].common.csi.push(csi);\n }\n\n videoSender.common.common.direction = statsResults[mediaType].direction;\n videoSender.common.transportType = statsResults.connectionType.local.transport;\n\n // @ts-ignore\n videoSender.common.maxRemoteJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n videoSender.common.meanRemoteJitter =\n mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n videoSender.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;\n videoSender.common.availableBitrate =\n statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;\n // Calculate based on how much packets lost of received compated to how to the client sent\n\n const totalpacketsLostForaMin =\n statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver - lastPacketsLost;\n\n videoSender.common.remoteLossRate =\n totalpacketsLostForaMin > 0\n ? (totalpacketsLostForaMin * 100) / (videoSender.common.rtpPackets + totalpacketsLostForaMin)\n : 0; // This is the packets sent with in last min || 0;\n\n videoSender.common.maxRoundTripTime =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n videoSender.common.meanRoundTripTime =\n mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;\n\n videoSender.streams[0].common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;\n\n videoSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin\n ? (totalBytesSentInaMin * 8) / 60\n : 0;\n\n videoSender.common.rtpBitrate = videoSender.streams[0].common.transmittedBitrate;\n\n videoSender.streams[0].transmittedKeyFrames =\n statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastKeyFramesEncoded || 0;\n videoSender.streams[0].requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;\n\n // From tracks //TODO: calculate a proper one\n const totalFrameSentInaMin =\n statsResults[mediaType][sendrecvType].framesSent - (lastFramesSent || 0);\n\n videoSender.streams[0].common.transmittedFrameRate = Math.round(\n totalFrameSentInaMin ? totalFrameSentInaMin / 60 : 0\n );\n videoSender.streams[0].transmittedHeight = statsResults[mediaType][sendrecvType].height || 0;\n videoSender.streams[0].transmittedWidth = statsResults[mediaType][sendrecvType].width || 0;\n videoSender.streams[0].transmittedFrameSize =\n (videoSender.streams[0].transmittedHeight * videoSender.streams[0].transmittedWidth) / 256;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["getAudioReceiverMqa","audioReceiver","statsResults","lastMqaDataSent","mediaType","sendrecvType","STATS","RECEIVE_DIRECTION","lastPacketsReceived","totalPacketsReceived","lastPacketsLost","totalPacketsLost","lastPacketsDecoded","totalSamplesDecoded","lastSamplesReceived","totalSamplesReceived","lastConcealedSamples","concealedSamples","lastBytesReceived","totalBytesReceived","lastFecPacketsReceived","fecPacketsReceived","lastFecPacketsDiscarded","fecPacketsDiscarded","csi","streams","common","includes","push","direction","isMain","transportType","connectionType","local","transport","rtpPackets","mediaHopByHopLost","rtpHopByHopLost","maxRtpJitter","meanRtpJitter","rtpJitter","fecRecovered","rtpEndToEndLost","framesDropped","renderedFrameRate","framesReceived","concealedFrames","receivedBitrate","rtpBitrate","getAudioSenderMqa","audioSender","SEND_DIRECTION","lastPacketsSent","totalPacketsSent","totalPacketsLostOnReceiver","lastBytesSent","totalBytesSent","lastFramesEncoded","totalKeyFramesEncoded","lastFirCount","totalFirCount","maxRemoteJitter","meanRemoteJitter","availableBitrate","availableOutgoingBitrate","totalpacketsLostForaMin","remoteLossRate","maxRoundTripTime","meanRoundTripTime","roundTripTime","totalBytesSentInaMin","transmittedBitrate","transmittedKeyFrames","requestedKeyFrames","getVideoReceiverMqa","videoReceiver","lastFramesReceived","lastFramesDecoded","framesDecoded","lastFramesDropped","lastKeyFramesDecoded","keyFramesDecoded","lastPliCount","totalPliCount","totalPacketLoss","totalBytesReceivedInaMin","totalFrameReceivedInaMin","totalFrameDecodedInaMin","receivedFrameRate","Math","round","receivedHeight","height","receivedWidth","width","receivedFrameSize","receivedKeyFrames","getVideoSenderMqa","videoSender","lastKeyFramesEncoded","lastFramesSent","framesSent","totalFrameSentInaMin","transmittedFrameRate","transmittedHeight","transmittedWidth","transmittedFrameSize"],"sources":["mqaUtil.ts"],"sourcesContent":["/* eslint-disable no-param-reassign, prefer-destructuring */\n\nimport {mean, max} from 'lodash';\n\nimport {STATS} from '../constants';\n\nexport const getAudioReceiverMqa = ({audioReceiver, statsResults, lastMqaDataSent, mediaType}) => {\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n const lastPacketsReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsReceived || 0;\n const lastPacketsLost = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLost || 0;\n const lastPacketsDecoded = lastMqaDataSent[mediaType]?.[sendrecvType].totalSamplesDecoded || 0;\n const lastSamplesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalSamplesReceived || 0;\n const lastConcealedSamples = lastMqaDataSent[mediaType]?.[sendrecvType].concealedSamples || 0;\n const lastBytesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesReceived || 0;\n const lastFecPacketsReceived = lastMqaDataSent[mediaType]?.[sendrecvType].fecPacketsReceived || 0;\n const lastFecPacketsDiscarded =\n lastMqaDataSent[mediaType]?.[sendrecvType].fecPacketsDiscarded || 0;\n\n const {csi} = statsResults[mediaType];\n if (csi && !audioReceiver.streams[0].common.csi.includes(csi)) {\n audioReceiver.streams[0].common.csi.push(csi);\n }\n\n audioReceiver.common.common.direction = statsResults[mediaType].direction;\n audioReceiver.common.common.isMain = !mediaType.includes('-share');\n audioReceiver.common.transportType = statsResults.connectionType.local.transport;\n\n // add rtpPacket info inside common as also for call analyzer\n audioReceiver.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;\n // Hop by hop are numbers and not percentage so we compare on what we sent the last min\n // collect the packets received for the last min\n audioReceiver.streams[0].common.rtpPackets = audioReceiver.common.rtpPackets;\n audioReceiver.common.mediaHopByHopLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;\n audioReceiver.common.rtpHopByHopLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;\n\n audioReceiver.streams[0].common.maxRtpJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;\n audioReceiver.streams[0].common.meanRtpJitter =\n mean(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;\n audioReceiver.streams[0].common.rtpJitter = audioReceiver.streams[0].common.maxRtpJitter;\n\n // Fec packets do come in as part of the FEC only for audio\n const fecRecovered =\n statsResults[mediaType][sendrecvType].fecPacketsReceived -\n lastFecPacketsReceived -\n (statsResults[mediaType][sendrecvType].fecPacketsDiscarded - lastFecPacketsDiscarded);\n\n audioReceiver.streams[0].common.rtpEndToEndLost =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost - fecRecovered || 0;\n\n audioReceiver.streams[0].common.framesDropped =\n statsResults[mediaType][sendrecvType].totalSamplesDecoded - lastPacketsDecoded || 0;\n audioReceiver.streams[0].common.renderedFrameRate =\n (audioReceiver.streams[0].common.framesDropped * 100) / 60 || 0;\n\n audioReceiver.streams[0].common.framesReceived =\n statsResults[mediaType][sendrecvType].totalSamplesReceived - lastSamplesReceived || 0;\n audioReceiver.streams[0].common.concealedFrames =\n statsResults[mediaType][sendrecvType].concealedSamples - lastConcealedSamples || 0;\n audioReceiver.streams[0].common.receivedBitrate =\n ((statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived) * 8) / 60 || 0;\n\n audioReceiver.common.rtpBitrate = audioReceiver.streams[0].common.receivedBitrate;\n};\n\nexport const getAudioSenderMqa = ({audioSender, statsResults, lastMqaDataSent, mediaType}) => {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n const lastPacketsSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsSent || 0;\n const lastPacketsLost =\n lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLostOnReceiver || 0;\n const lastBytesSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesSent || 0;\n const lastFramesEncoded = lastMqaDataSent[mediaType]?.[sendrecvType].totalKeyFramesEncoded || 0;\n const lastFirCount = lastMqaDataSent[mediaType]?.[sendrecvType].totalFirCount || 0;\n\n const {csi} = statsResults[mediaType];\n if (csi && !audioSender.streams[0].common.csi.includes(csi)) {\n audioSender.streams[0].common.csi.push(csi);\n }\n\n audioSender.common.common.direction = statsResults[mediaType].direction;\n audioSender.common.common.isMain = !mediaType.includes('-share');\n audioSender.common.transportType = statsResults.connectionType.local.transport;\n\n audioSender.common.maxRemoteJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n audioSender.common.meanRemoteJitter =\n mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n audioSender.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;\n audioSender.streams[0].common.rtpPackets = audioSender.common.rtpPackets;\n // From candidate-pair\n audioSender.common.availableBitrate =\n statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;\n // Calculate based on how much packets lost of received compated to how to the client sent\n\n const totalpacketsLostForaMin =\n statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver - lastPacketsLost;\n\n audioSender.common.remoteLossRate =\n totalpacketsLostForaMin > 0\n ? (totalpacketsLostForaMin * 100) / audioSender.common.rtpPackets\n : 0; // This is the packets sent with in last min || 0;\n\n audioSender.common.maxRoundTripTime =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n audioSender.common.meanRoundTripTime =\n mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;\n\n audioSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin\n ? (totalBytesSentInaMin * 8) / 60\n : 0;\n audioSender.common.rtpBitrate = audioSender.streams[0].common.transmittedBitrate;\n\n audioSender.streams[0].transmittedKeyFrames =\n statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastFramesEncoded || 0;\n audioSender.streams[0].requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;\n};\n\nexport const getVideoReceiverMqa = ({videoReceiver, statsResults, lastMqaDataSent, mediaType}) => {\n const sendrecvType = STATS.RECEIVE_DIRECTION;\n\n const lastPacketsReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsReceived || 0;\n const lastPacketsLost = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLost || 0;\n const lastBytesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesReceived || 0;\n const lastFramesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].framesReceived || 0;\n const lastFramesDecoded = lastMqaDataSent[mediaType]?.[sendrecvType].framesDecoded || 0;\n const lastFramesDropped = lastMqaDataSent[mediaType]?.[sendrecvType].framesDropped || 0;\n const lastKeyFramesDecoded = lastMqaDataSent[mediaType]?.[sendrecvType].keyFramesDecoded || 0;\n const lastPliCount = lastMqaDataSent[mediaType]?.[sendrecvType].totalPliCount || 0;\n\n const {csi} = statsResults[mediaType];\n if (csi && !videoReceiver.streams[0].common.csi.includes(csi)) {\n videoReceiver.streams[0].common.csi.push(csi);\n }\n\n videoReceiver.common.common.direction = statsResults[mediaType].direction;\n videoReceiver.common.common.isMain = !mediaType.includes('-share');\n videoReceiver.common.transportType = statsResults.connectionType.local.transport;\n\n // collect the packets received for the last min\n videoReceiver.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;\n videoReceiver.streams[0].common.rtpPackets = videoReceiver.common.rtpPackets;\n\n const totalPacketLoss =\n statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;\n\n // Hope by hop are numbers and not percentage so we compare on what we sent the last min\n // this is including packet lost\n videoReceiver.common.mediaHopByHopLost = totalPacketLoss;\n videoReceiver.common.rtpHopByHopLost = totalPacketLoss;\n\n // End to end packetloss is after recovery\n videoReceiver.streams[0].common.rtpEndToEndLost = totalPacketLoss;\n\n // calculate this values\n\n videoReceiver.common.maxRemoteJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n videoReceiver.common.meanRemoteJitter =\n mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n videoReceiver.streams[0].common.rtpJitter = videoReceiver.common.maxRemoteJitter;\n\n // Calculate the outgoing bitrate\n const totalBytesReceivedInaMin =\n statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived;\n\n videoReceiver.streams[0].common.receivedBitrate = totalBytesReceivedInaMin\n ? (totalBytesReceivedInaMin * 8) / 60\n : 0;\n videoReceiver.common.rtpBitrate = videoReceiver.streams[0].common.receivedBitrate;\n\n // From tracks //TODO: calculate a proper one\n const totalFrameReceivedInaMin =\n statsResults[mediaType][sendrecvType].framesReceived - lastFramesReceived;\n const totalFrameDecodedInaMin =\n statsResults[mediaType][sendrecvType].framesDecoded - lastFramesDecoded;\n\n videoReceiver.streams[0].common.receivedFrameRate = Math.round(\n totalFrameReceivedInaMin ? totalFrameReceivedInaMin / 60 : 0\n );\n videoReceiver.streams[0].common.renderedFrameRate = Math.round(\n totalFrameDecodedInaMin ? totalFrameDecodedInaMin / 60 : 0\n );\n\n videoReceiver.streams[0].common.framesDropped =\n statsResults[mediaType][sendrecvType].framesDropped - lastFramesDropped;\n videoReceiver.streams[0].receivedHeight = statsResults[mediaType][sendrecvType].height || 0;\n videoReceiver.streams[0].receivedWidth = statsResults[mediaType][sendrecvType].width || 0;\n videoReceiver.streams[0].receivedFrameSize =\n (videoReceiver.streams[0].receivedHeight * videoReceiver.streams[0].receivedWidth) / 256;\n\n videoReceiver.streams[0].receivedKeyFrames =\n statsResults[mediaType][sendrecvType].keyFramesDecoded - lastKeyFramesDecoded || 0;\n videoReceiver.streams[0].requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalPliCount - lastPliCount || 0;\n};\n\nexport const getVideoSenderMqa = ({videoSender, statsResults, lastMqaDataSent, mediaType}) => {\n const sendrecvType = STATS.SEND_DIRECTION;\n\n const lastPacketsSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsSent || 0;\n const lastPacketsLost =\n lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLostOnReceiver || 0;\n const lastBytesSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesSent || 0;\n const lastKeyFramesEncoded =\n lastMqaDataSent[mediaType]?.[sendrecvType].totalKeyFramesEncoded || 0;\n const lastFirCount = lastMqaDataSent[mediaType]?.[sendrecvType].totalFirCount || 0;\n const lastFramesSent = lastMqaDataSent[mediaType]?.[sendrecvType].framesSent || 0;\n const {csi} = statsResults[mediaType];\n if (csi && !videoSender.streams[0].common.csi.includes(csi)) {\n videoSender.streams[0].common.csi.push(csi);\n }\n\n videoSender.common.common.direction = statsResults[mediaType].direction;\n videoSender.common.common.isMain = !mediaType.includes('-share');\n videoSender.common.transportType = statsResults.connectionType.local.transport;\n\n // @ts-ignore\n videoSender.common.maxRemoteJitter =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n videoSender.common.meanRemoteJitter =\n mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;\n\n videoSender.common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;\n videoSender.common.availableBitrate =\n statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;\n // Calculate based on how much packets lost of received compated to how to the client sent\n\n const totalpacketsLostForaMin =\n statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver - lastPacketsLost;\n\n videoSender.common.remoteLossRate =\n totalpacketsLostForaMin > 0\n ? (totalpacketsLostForaMin * 100) / (videoSender.common.rtpPackets + totalpacketsLostForaMin)\n : 0; // This is the packets sent with in last min || 0;\n\n videoSender.common.maxRoundTripTime =\n // @ts-ignore\n max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n videoSender.common.meanRoundTripTime =\n mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;\n videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;\n\n videoSender.streams[0].common.rtpPackets =\n statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;\n\n // Calculate the outgoing bitrate\n const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;\n\n videoSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin\n ? (totalBytesSentInaMin * 8) / 60\n : 0;\n\n videoSender.common.rtpBitrate = videoSender.streams[0].common.transmittedBitrate;\n\n videoSender.streams[0].transmittedKeyFrames =\n statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastKeyFramesEncoded || 0;\n videoSender.streams[0].requestedKeyFrames =\n statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;\n\n // From tracks //TODO: calculate a proper one\n const totalFrameSentInaMin =\n statsResults[mediaType][sendrecvType].framesSent - (lastFramesSent || 0);\n\n videoSender.streams[0].common.transmittedFrameRate = Math.round(\n totalFrameSentInaMin ? totalFrameSentInaMin / 60 : 0\n );\n videoSender.streams[0].transmittedHeight = statsResults[mediaType][sendrecvType].height || 0;\n videoSender.streams[0].transmittedWidth = statsResults[mediaType][sendrecvType].width || 0;\n videoSender.streams[0].transmittedFrameSize =\n (videoSender.streams[0].transmittedHeight * videoSender.streams[0].transmittedWidth) / 256;\n};\n"],"mappings":"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"}
|
package/dist/webinar/index.js
CHANGED
|
@@ -62,7 +62,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
|
|
|
62
62
|
updateCanManageWebcast: function updateCanManageWebcast(canManageWebcast) {
|
|
63
63
|
this.set('canManageWebcast', canManageWebcast);
|
|
64
64
|
},
|
|
65
|
-
version: "3.0.0-beta.
|
|
65
|
+
version: "3.0.0-beta.338"
|
|
66
66
|
});
|
|
67
67
|
var _default = Webinar;
|
|
68
68
|
exports.default = _default;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webex/plugin-meetings",
|
|
3
|
-
"version": "3.0.0-beta.
|
|
3
|
+
"version": "3.0.0-beta.338",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "Cisco EULA (https://www.cisco.com/c/en/us/products/end-user-license-agreement.html)",
|
|
6
6
|
"contributors": [
|
|
@@ -33,12 +33,12 @@
|
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@peculiar/webcrypto": "^1.4.3",
|
|
36
|
-
"@webex/plugin-meetings": "3.0.0-beta.
|
|
37
|
-
"@webex/test-helper-chai": "3.0.0-beta.
|
|
38
|
-
"@webex/test-helper-mocha": "3.0.0-beta.
|
|
39
|
-
"@webex/test-helper-mock-webex": "3.0.0-beta.
|
|
40
|
-
"@webex/test-helper-retry": "3.0.0-beta.
|
|
41
|
-
"@webex/test-helper-test-users": "3.0.0-beta.
|
|
36
|
+
"@webex/plugin-meetings": "3.0.0-beta.338",
|
|
37
|
+
"@webex/test-helper-chai": "3.0.0-beta.338",
|
|
38
|
+
"@webex/test-helper-mocha": "3.0.0-beta.338",
|
|
39
|
+
"@webex/test-helper-mock-webex": "3.0.0-beta.338",
|
|
40
|
+
"@webex/test-helper-retry": "3.0.0-beta.338",
|
|
41
|
+
"@webex/test-helper-test-users": "3.0.0-beta.338",
|
|
42
42
|
"chai": "^4.3.4",
|
|
43
43
|
"chai-as-promised": "^7.1.1",
|
|
44
44
|
"jsdom-global": "3.0.2",
|
|
@@ -47,19 +47,19 @@
|
|
|
47
47
|
"typescript": "^4.7.4"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@webex/common": "3.0.0-beta.
|
|
50
|
+
"@webex/common": "3.0.0-beta.338",
|
|
51
51
|
"@webex/internal-media-core": "2.2.3",
|
|
52
|
-
"@webex/internal-plugin-conversation": "3.0.0-beta.
|
|
53
|
-
"@webex/internal-plugin-device": "3.0.0-beta.
|
|
54
|
-
"@webex/internal-plugin-llm": "3.0.0-beta.
|
|
55
|
-
"@webex/internal-plugin-mercury": "3.0.0-beta.
|
|
56
|
-
"@webex/internal-plugin-metrics": "3.0.0-beta.
|
|
57
|
-
"@webex/internal-plugin-support": "3.0.0-beta.
|
|
58
|
-
"@webex/internal-plugin-user": "3.0.0-beta.
|
|
59
|
-
"@webex/media-helpers": "3.0.0-beta.
|
|
60
|
-
"@webex/plugin-people": "3.0.0-beta.
|
|
61
|
-
"@webex/plugin-rooms": "3.0.0-beta.
|
|
62
|
-
"@webex/webex-core": "3.0.0-beta.
|
|
52
|
+
"@webex/internal-plugin-conversation": "3.0.0-beta.338",
|
|
53
|
+
"@webex/internal-plugin-device": "3.0.0-beta.338",
|
|
54
|
+
"@webex/internal-plugin-llm": "3.0.0-beta.338",
|
|
55
|
+
"@webex/internal-plugin-mercury": "3.0.0-beta.338",
|
|
56
|
+
"@webex/internal-plugin-metrics": "3.0.0-beta.338",
|
|
57
|
+
"@webex/internal-plugin-support": "3.0.0-beta.338",
|
|
58
|
+
"@webex/internal-plugin-user": "3.0.0-beta.338",
|
|
59
|
+
"@webex/media-helpers": "3.0.0-beta.338",
|
|
60
|
+
"@webex/plugin-people": "3.0.0-beta.338",
|
|
61
|
+
"@webex/plugin-rooms": "3.0.0-beta.338",
|
|
62
|
+
"@webex/webex-core": "3.0.0-beta.338",
|
|
63
63
|
"ampersand-collection": "^2.0.2",
|
|
64
64
|
"bowser": "^2.11.0",
|
|
65
65
|
"btoa": "^1.2.1",
|
|
@@ -23,6 +23,7 @@ export const getAudioReceiverMqa = ({audioReceiver, statsResults, lastMqaDataSen
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
audioReceiver.common.common.direction = statsResults[mediaType].direction;
|
|
26
|
+
audioReceiver.common.common.isMain = !mediaType.includes('-share');
|
|
26
27
|
audioReceiver.common.transportType = statsResults.connectionType.local.transport;
|
|
27
28
|
|
|
28
29
|
// add rtpPacket info inside common as also for call analyzer
|
|
@@ -83,6 +84,7 @@ export const getAudioSenderMqa = ({audioSender, statsResults, lastMqaDataSent, m
|
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
audioSender.common.common.direction = statsResults[mediaType].direction;
|
|
87
|
+
audioSender.common.common.isMain = !mediaType.includes('-share');
|
|
86
88
|
audioSender.common.transportType = statsResults.connectionType.local.transport;
|
|
87
89
|
|
|
88
90
|
audioSender.common.maxRemoteJitter =
|
|
@@ -146,6 +148,7 @@ export const getVideoReceiverMqa = ({videoReceiver, statsResults, lastMqaDataSen
|
|
|
146
148
|
}
|
|
147
149
|
|
|
148
150
|
videoReceiver.common.common.direction = statsResults[mediaType].direction;
|
|
151
|
+
videoReceiver.common.common.isMain = !mediaType.includes('-share');
|
|
149
152
|
videoReceiver.common.transportType = statsResults.connectionType.local.transport;
|
|
150
153
|
|
|
151
154
|
// collect the packets received for the last min
|
|
@@ -226,6 +229,7 @@ export const getVideoSenderMqa = ({videoSender, statsResults, lastMqaDataSent, m
|
|
|
226
229
|
}
|
|
227
230
|
|
|
228
231
|
videoSender.common.common.direction = statsResults[mediaType].direction;
|
|
232
|
+
videoSender.common.common.isMain = !mediaType.includes('-share');
|
|
229
233
|
videoSender.common.transportType = statsResults.connectionType.local.transport;
|
|
230
234
|
|
|
231
235
|
// @ts-ignore
|
|
@@ -130,17 +130,17 @@ describe('plugin-meetings', () => {
|
|
|
130
130
|
{
|
|
131
131
|
type: 'candidate-pair',
|
|
132
132
|
state: 'succeeded',
|
|
133
|
-
localCandidateId: 'fake-candidate-id'
|
|
133
|
+
localCandidateId: 'fake-candidate-id',
|
|
134
134
|
},
|
|
135
135
|
{
|
|
136
136
|
type: 'candidate-pair',
|
|
137
137
|
state: 'failed',
|
|
138
|
-
localCandidateId: 'bad-candidate-id'
|
|
138
|
+
localCandidateId: 'bad-candidate-id',
|
|
139
139
|
},
|
|
140
140
|
{
|
|
141
141
|
type: 'local-candidate',
|
|
142
142
|
id: 'fake-candidate-id',
|
|
143
|
-
protocol: 'tcp'
|
|
143
|
+
protocol: 'tcp',
|
|
144
144
|
},
|
|
145
145
|
],
|
|
146
146
|
},
|
|
@@ -156,17 +156,17 @@ describe('plugin-meetings', () => {
|
|
|
156
156
|
{
|
|
157
157
|
type: 'candidate-pair',
|
|
158
158
|
state: 'succeeded',
|
|
159
|
-
localCandidateId: 'fake-candidate-id'
|
|
159
|
+
localCandidateId: 'fake-candidate-id',
|
|
160
160
|
},
|
|
161
161
|
{
|
|
162
162
|
type: 'candidate-pair',
|
|
163
163
|
state: 'failed',
|
|
164
|
-
localCandidateId: 'bad-candidate-id'
|
|
164
|
+
localCandidateId: 'bad-candidate-id',
|
|
165
165
|
},
|
|
166
166
|
{
|
|
167
167
|
type: 'local-candidate',
|
|
168
168
|
id: 'fake-candidate-id',
|
|
169
|
-
protocol: 'tcp'
|
|
169
|
+
protocol: 'tcp',
|
|
170
170
|
},
|
|
171
171
|
],
|
|
172
172
|
},
|
|
@@ -185,17 +185,17 @@ describe('plugin-meetings', () => {
|
|
|
185
185
|
{
|
|
186
186
|
type: 'candidate-pair',
|
|
187
187
|
state: 'succeeded',
|
|
188
|
-
localCandidateId: 'fake-candidate-id'
|
|
188
|
+
localCandidateId: 'fake-candidate-id',
|
|
189
189
|
},
|
|
190
190
|
{
|
|
191
191
|
type: 'candidate-pair',
|
|
192
192
|
state: 'failed',
|
|
193
|
-
localCandidateId: 'bad-candidate-id'
|
|
193
|
+
localCandidateId: 'bad-candidate-id',
|
|
194
194
|
},
|
|
195
195
|
{
|
|
196
196
|
type: 'local-candidate',
|
|
197
197
|
id: 'fake-candidate-id',
|
|
198
|
-
protocol: 'tcp'
|
|
198
|
+
protocol: 'tcp',
|
|
199
199
|
},
|
|
200
200
|
],
|
|
201
201
|
},
|
|
@@ -214,17 +214,17 @@ describe('plugin-meetings', () => {
|
|
|
214
214
|
{
|
|
215
215
|
type: 'candidate-pair',
|
|
216
216
|
state: 'succeeded',
|
|
217
|
-
localCandidateId: 'fake-candidate-id'
|
|
217
|
+
localCandidateId: 'fake-candidate-id',
|
|
218
218
|
},
|
|
219
219
|
{
|
|
220
220
|
type: 'candidate-pair',
|
|
221
221
|
state: 'failed',
|
|
222
|
-
localCandidateId: 'bad-candidate-id'
|
|
222
|
+
localCandidateId: 'bad-candidate-id',
|
|
223
223
|
},
|
|
224
224
|
{
|
|
225
225
|
type: 'local-candidate',
|
|
226
226
|
id: 'fake-candidate-id',
|
|
227
|
-
protocol: 'tcp'
|
|
227
|
+
protocol: 'tcp',
|
|
228
228
|
},
|
|
229
229
|
],
|
|
230
230
|
},
|
|
@@ -244,12 +244,12 @@ describe('plugin-meetings', () => {
|
|
|
244
244
|
receivers: [fakeStats.video.receivers[0]],
|
|
245
245
|
},
|
|
246
246
|
screenShareAudio: {
|
|
247
|
-
senders: [],
|
|
248
|
-
receivers: [],
|
|
247
|
+
senders: [fakeStats.audio.senders[0]],
|
|
248
|
+
receivers: [fakeStats.audio.receivers[0]],
|
|
249
249
|
},
|
|
250
250
|
screenShareVideo: {
|
|
251
|
-
senders: [],
|
|
252
|
-
receivers: [],
|
|
251
|
+
senders: [fakeStats.video.senders[0]],
|
|
252
|
+
receivers: [fakeStats.video.receivers[0]],
|
|
253
253
|
},
|
|
254
254
|
}),
|
|
255
255
|
};
|
|
@@ -300,6 +300,17 @@ describe('plugin-meetings', () => {
|
|
|
300
300
|
};
|
|
301
301
|
|
|
302
302
|
const checkMqeData = () => {
|
|
303
|
+
for (const data of [
|
|
304
|
+
mqeData.audioTransmit,
|
|
305
|
+
mqeData.audioReceive,
|
|
306
|
+
mqeData.videoTransmit,
|
|
307
|
+
mqeData.videoReceive,
|
|
308
|
+
]) {
|
|
309
|
+
assert.strictEqual(data.length, 2);
|
|
310
|
+
assert.strictEqual(data[0].common.common.isMain, true);
|
|
311
|
+
assert.strictEqual(data[1].common.common.isMain, false);
|
|
312
|
+
}
|
|
313
|
+
|
|
303
314
|
assert.strictEqual(mqeData.videoReceive[0].streams[0].receivedFrameSize, 3600);
|
|
304
315
|
assert.strictEqual(mqeData.videoReceive[0].streams[0].receivedHeight, 720);
|
|
305
316
|
assert.strictEqual(mqeData.videoReceive[0].streams[0].receivedWidth, 1280);
|
|
@@ -422,8 +433,16 @@ describe('plugin-meetings', () => {
|
|
|
422
433
|
|
|
423
434
|
await progressTime();
|
|
424
435
|
|
|
425
|
-
assert.strictEqual(
|
|
426
|
-
|
|
436
|
+
assert.strictEqual(
|
|
437
|
+
mqeData.intervalMetadata.peripherals.find((val) => val.name === MEDIA_DEVICES.MICROPHONE)
|
|
438
|
+
.information,
|
|
439
|
+
'fake-microphone'
|
|
440
|
+
);
|
|
441
|
+
assert.strictEqual(
|
|
442
|
+
mqeData.intervalMetadata.peripherals.find((val) => val.name === MEDIA_DEVICES.CAMERA)
|
|
443
|
+
.information,
|
|
444
|
+
'fake-camera'
|
|
445
|
+
);
|
|
427
446
|
});
|
|
428
447
|
|
|
429
448
|
it('emits the correct peripherals in MEDIA_QUALITY events when localTrackLabel is undefined', async () => {
|
|
@@ -434,8 +453,16 @@ describe('plugin-meetings', () => {
|
|
|
434
453
|
|
|
435
454
|
await progressTime();
|
|
436
455
|
|
|
437
|
-
assert.strictEqual(
|
|
438
|
-
|
|
456
|
+
assert.strictEqual(
|
|
457
|
+
mqeData.intervalMetadata.peripherals.find((val) => val.name === MEDIA_DEVICES.MICROPHONE)
|
|
458
|
+
.information,
|
|
459
|
+
_UNKNOWN_
|
|
460
|
+
);
|
|
461
|
+
assert.strictEqual(
|
|
462
|
+
mqeData.intervalMetadata.peripherals.find((val) => val.name === MEDIA_DEVICES.CAMERA)
|
|
463
|
+
.information,
|
|
464
|
+
_UNKNOWN_
|
|
465
|
+
);
|
|
439
466
|
});
|
|
440
467
|
|
|
441
468
|
it('emits the correct frameRate', async () => {
|