@webex/plugin-meetings 2.60.1-next.13 → 2.60.1-next.15
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/mediaQualityMetrics/config.d.ts +103 -99
- package/dist/mediaQualityMetrics/config.js +133 -129
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/index.d.ts +0 -1
- package/dist/meeting/index.js +7 -15
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/request.d.ts +2 -0
- package/dist/meeting/request.js +4 -0
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/voicea-meeting.d.ts +0 -4
- package/dist/meeting/voicea-meeting.js +26 -58
- package/dist/meeting/voicea-meeting.js.map +1 -1
- package/dist/meetings/index.js +19 -0
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/util.js +1 -1
- package/dist/meetings/util.js.map +1 -1
- package/dist/metrics/constants.d.ts +2 -0
- package/dist/metrics/constants.js +3 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/reachability/index.js +14 -20
- package/dist/reachability/index.js.map +1 -1
- package/dist/reconnection-manager/index.js +63 -43
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/roap/turnDiscovery.d.ts +18 -2
- package/dist/roap/turnDiscovery.js +163 -69
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/index.d.ts +7 -0
- package/dist/rtcMetrics/index.js +38 -1
- package/dist/rtcMetrics/index.js.map +1 -1
- package/dist/statsAnalyzer/index.js +135 -23
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +28 -4
- package/dist/statsAnalyzer/mqaUtil.js +278 -148
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/webinar/index.js +1 -1
- package/package.json +21 -21
- package/src/mediaQualityMetrics/config.ts +107 -107
- package/src/meeting/index.ts +5 -18
- package/src/meeting/request.ts +6 -0
- package/src/meeting/voicea-meeting.ts +26 -65
- package/src/meetings/index.ts +22 -0
- package/src/meetings/util.ts +1 -1
- package/src/metrics/constants.ts +2 -0
- package/src/reachability/index.ts +0 -6
- package/src/reconnection-manager/index.ts +18 -7
- package/src/roap/turnDiscovery.ts +100 -24
- package/src/rtcMetrics/index.ts +43 -1
- package/src/statsAnalyzer/index.ts +158 -24
- package/src/statsAnalyzer/mqaUtil.ts +302 -154
- package/test/unit/spec/meeting/index.js +195 -4
- package/test/unit/spec/meeting/request.js +2 -0
- package/test/unit/spec/meeting/voicea-meeting.ts +266 -0
- package/test/unit/spec/meetings/utils.js +35 -8
- package/test/unit/spec/reachability/index.ts +74 -0
- package/test/unit/spec/reconnection-manager/index.js +36 -1
- package/test/unit/spec/roap/turnDiscovery.ts +326 -76
- package/test/unit/spec/rtcMetrics/index.ts +32 -3
- package/test/unit/spec/stats-analyzer/index.js +439 -1
- package/test/utils/webex-test-users.js +12 -4
|
@@ -1,221 +1,351 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
4
5
|
_Object$defineProperty(exports, "__esModule", {
|
|
5
6
|
value: true
|
|
6
7
|
});
|
|
7
|
-
exports.getVideoSenderMqa = exports.getVideoReceiverMqa = exports.getAudioSenderMqa = exports.getAudioReceiverMqa = void 0;
|
|
8
|
+
exports.getVideoSenderStreamMqa = exports.getVideoSenderMqa = exports.getVideoReceiverStreamMqa = exports.getVideoReceiverMqa = exports.getAudioSenderStreamMqa = exports.getAudioSenderMqa = exports.getAudioReceiverStreamMqa = exports.getAudioReceiverMqa = void 0;
|
|
9
|
+
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
|
|
8
10
|
var _lodash = require("lodash");
|
|
9
11
|
var _constants = require("../constants");
|
|
10
12
|
/* eslint-disable no-param-reassign, prefer-destructuring */
|
|
11
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Get the totals of a certain value from a certain media type.
|
|
16
|
+
*
|
|
17
|
+
* @param {object} stats - The large stats object.
|
|
18
|
+
* @param {string} sendrecvType - "send" or "recv".
|
|
19
|
+
* @param {string} baseMediaType - audio or video _and_ share or non-share.
|
|
20
|
+
* @param {string} value - The value we want to get the totals of.
|
|
21
|
+
* @returns {number}
|
|
22
|
+
*/
|
|
23
|
+
var getTotalValueFromBaseType = function getTotalValueFromBaseType(stats, sendrecvType, baseMediaType, value) {
|
|
24
|
+
return (0, _keys.default)(stats).filter(function (mt) {
|
|
25
|
+
return mt.includes(baseMediaType);
|
|
26
|
+
}).reduce(function (acc, mt) {
|
|
27
|
+
var _stats$mt, _stats$mt$sendrecvTyp;
|
|
28
|
+
return acc + (((_stats$mt = stats[mt]) === null || _stats$mt === void 0 ? void 0 : (_stats$mt$sendrecvTyp = _stats$mt[sendrecvType]) === null || _stats$mt$sendrecvTyp === void 0 ? void 0 : _stats$mt$sendrecvTyp[value]) || 0);
|
|
29
|
+
}, 0);
|
|
30
|
+
};
|
|
12
31
|
var getAudioReceiverMqa = exports.getAudioReceiverMqa = function getAudioReceiverMqa(_ref) {
|
|
13
|
-
var
|
|
32
|
+
var _statsResults$Object$;
|
|
14
33
|
var audioReceiver = _ref.audioReceiver,
|
|
15
34
|
statsResults = _ref.statsResults,
|
|
16
35
|
lastMqaDataSent = _ref.lastMqaDataSent,
|
|
17
|
-
|
|
36
|
+
baseMediaType = _ref.baseMediaType;
|
|
18
37
|
var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
|
|
19
|
-
var
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
var
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
var
|
|
26
|
-
var
|
|
27
|
-
var
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
38
|
+
var getLastTotalValue = function getLastTotalValue(value) {
|
|
39
|
+
return getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
|
|
40
|
+
};
|
|
41
|
+
var getTotalValue = function getTotalValue(value) {
|
|
42
|
+
return getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
|
|
43
|
+
};
|
|
44
|
+
var lastPacketsReceived = getLastTotalValue('totalPacketsReceived');
|
|
45
|
+
var lastPacketsLost = getLastTotalValue('totalPacketsLost');
|
|
46
|
+
var lastBytesReceived = getLastTotalValue('totalBytesReceived');
|
|
47
|
+
var lastFecPacketsReceived = getLastTotalValue('fecPacketsReceived');
|
|
48
|
+
var lastFecPacketsDiscarded = getLastTotalValue('fecPacketsDiscarded');
|
|
49
|
+
var totalPacketsReceived = getTotalValue('totalPacketsReceived');
|
|
50
|
+
var packetsLost = getTotalValue('totalPacketsLost');
|
|
51
|
+
var totalBytesReceived = getTotalValue('totalBytesReceived');
|
|
52
|
+
var totalFecPacketsReceived = getTotalValue('fecPacketsReceived');
|
|
53
|
+
var totalFecPacketsDiscarded = getTotalValue('fecPacketsDiscarded');
|
|
54
|
+
audioReceiver.common.common.direction = ((_statsResults$Object$ = statsResults[(0, _keys.default)(statsResults).find(function (mediaType) {
|
|
55
|
+
return mediaType.includes(baseMediaType);
|
|
56
|
+
})]) === null || _statsResults$Object$ === void 0 ? void 0 : _statsResults$Object$.direction) || 'inactive';
|
|
57
|
+
audioReceiver.common.common.isMain = !baseMediaType.includes('-share');
|
|
33
58
|
audioReceiver.common.transportType = statsResults.connectionType.local.transport;
|
|
34
59
|
|
|
35
60
|
// add rtpPacket info inside common as also for call analyzer
|
|
36
|
-
audioReceiver.common.rtpPackets =
|
|
37
|
-
audioReceiver.streams[0].common.rtpPackets = audioReceiver.common.rtpPackets;
|
|
61
|
+
audioReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived;
|
|
38
62
|
|
|
39
63
|
// Hop by hop are numbers and not percentage so we compare on what we sent the last min
|
|
40
64
|
// collect the packets received for the last min
|
|
41
|
-
var totalPacketsLost =
|
|
65
|
+
var totalPacketsLost = packetsLost - lastPacketsLost;
|
|
42
66
|
audioReceiver.common.mediaHopByHopLost = totalPacketsLost;
|
|
43
67
|
audioReceiver.common.rtpHopByHopLost = totalPacketsLost;
|
|
44
|
-
|
|
68
|
+
var fecRecovered = totalFecPacketsReceived - lastFecPacketsReceived - (totalFecPacketsDiscarded - lastFecPacketsDiscarded);
|
|
69
|
+
audioReceiver.common.fecPackets = fecRecovered;
|
|
70
|
+
audioReceiver.common.rtpBitrate = (totalBytesReceived - lastBytesReceived) * 8 / 60 || 0;
|
|
71
|
+
};
|
|
72
|
+
var getAudioReceiverStreamMqa = exports.getAudioReceiverStreamMqa = function getAudioReceiverStreamMqa(_ref2) {
|
|
73
|
+
var _lastMqaDataSent$medi, _lastMqaDataSent$medi2, _lastMqaDataSent$medi3, _lastMqaDataSent$medi4, _lastMqaDataSent$medi5, _lastMqaDataSent$medi6, _lastMqaDataSent$medi7, _lastMqaDataSent$medi8;
|
|
74
|
+
var audioReceiverStream = _ref2.audioReceiverStream,
|
|
75
|
+
statsResults = _ref2.statsResults,
|
|
76
|
+
lastMqaDataSent = _ref2.lastMqaDataSent,
|
|
77
|
+
mediaType = _ref2.mediaType;
|
|
78
|
+
var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
|
|
79
|
+
var lastPacketsDecoded = ((_lastMqaDataSent$medi = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi === void 0 ? void 0 : _lastMqaDataSent$medi[sendrecvType].totalSamplesDecoded) || 0;
|
|
80
|
+
var lastSamplesReceived = ((_lastMqaDataSent$medi2 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi2 === void 0 ? void 0 : _lastMqaDataSent$medi2[sendrecvType].totalSamplesReceived) || 0;
|
|
81
|
+
var lastConcealedSamples = ((_lastMqaDataSent$medi3 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi3 === void 0 ? void 0 : _lastMqaDataSent$medi3[sendrecvType].concealedSamples) || 0;
|
|
82
|
+
var lastBytesReceived = ((_lastMqaDataSent$medi4 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi4 === void 0 ? void 0 : _lastMqaDataSent$medi4[sendrecvType].totalBytesReceived) || 0;
|
|
83
|
+
var lastFecPacketsReceived = ((_lastMqaDataSent$medi5 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi5 === void 0 ? void 0 : _lastMqaDataSent$medi5[sendrecvType].fecPacketsReceived) || 0;
|
|
84
|
+
var lastFecPacketsDiscarded = ((_lastMqaDataSent$medi6 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi6 === void 0 ? void 0 : _lastMqaDataSent$medi6[sendrecvType].fecPacketsDiscarded) || 0;
|
|
85
|
+
var lastPacketsReceived = ((_lastMqaDataSent$medi7 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi7 === void 0 ? void 0 : _lastMqaDataSent$medi7[sendrecvType].totalPacketsReceived) || 0;
|
|
86
|
+
var lastPacketsLost = ((_lastMqaDataSent$medi8 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi8 === void 0 ? void 0 : _lastMqaDataSent$medi8[sendrecvType].totalPacketsLost) || 0;
|
|
87
|
+
var csi = statsResults[mediaType].csi;
|
|
88
|
+
if (csi && !audioReceiverStream.common.csi.includes(csi)) {
|
|
89
|
+
audioReceiverStream.common.csi.push(csi);
|
|
90
|
+
}
|
|
91
|
+
audioReceiverStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;
|
|
92
|
+
audioReceiverStream.common.maxRtpJitter =
|
|
45
93
|
// @ts-ignore
|
|
46
94
|
(0, _lodash.max)(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;
|
|
47
|
-
|
|
48
|
-
|
|
95
|
+
audioReceiverStream.common.meanRtpJitter = (0, _lodash.mean)(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;
|
|
96
|
+
audioReceiverStream.common.rtpJitter = audioReceiverStream.common.maxRtpJitter;
|
|
49
97
|
|
|
50
98
|
// Fec packets do come in as part of the FEC only for audio
|
|
51
99
|
var fecRecovered = statsResults[mediaType][sendrecvType].fecPacketsReceived - lastFecPacketsReceived - (statsResults[mediaType][sendrecvType].fecPacketsDiscarded - lastFecPacketsDiscarded);
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
audioReceiver.streams[0].common.receivedBitrate = (statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived) * 8 / 60 || 0;
|
|
59
|
-
audioReceiver.common.rtpBitrate = audioReceiver.streams[0].common.receivedBitrate;
|
|
100
|
+
audioReceiverStream.common.rtpEndToEndLost = statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost - fecRecovered || 0;
|
|
101
|
+
audioReceiverStream.common.framesDropped = statsResults[mediaType][sendrecvType].totalSamplesDecoded - lastPacketsDecoded || 0;
|
|
102
|
+
audioReceiverStream.common.renderedFrameRate = audioReceiverStream.common.framesDropped * 100 / 60 || 0;
|
|
103
|
+
audioReceiverStream.common.framesReceived = statsResults[mediaType][sendrecvType].totalSamplesReceived - lastSamplesReceived || 0;
|
|
104
|
+
audioReceiverStream.common.concealedFrames = statsResults[mediaType][sendrecvType].concealedSamples - lastConcealedSamples || 0;
|
|
105
|
+
audioReceiverStream.common.receivedBitrate = (statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived) * 8 / 60 || 0;
|
|
60
106
|
};
|
|
61
|
-
var getAudioSenderMqa = exports.getAudioSenderMqa = function getAudioSenderMqa(
|
|
62
|
-
var
|
|
63
|
-
var audioSender =
|
|
64
|
-
statsResults =
|
|
65
|
-
lastMqaDataSent =
|
|
66
|
-
|
|
107
|
+
var getAudioSenderMqa = exports.getAudioSenderMqa = function getAudioSenderMqa(_ref3) {
|
|
108
|
+
var _statsResults$Object$2;
|
|
109
|
+
var audioSender = _ref3.audioSender,
|
|
110
|
+
statsResults = _ref3.statsResults,
|
|
111
|
+
lastMqaDataSent = _ref3.lastMqaDataSent,
|
|
112
|
+
baseMediaType = _ref3.baseMediaType;
|
|
67
113
|
var sendrecvType = _constants.STATS.SEND_DIRECTION;
|
|
68
|
-
var
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
var
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
114
|
+
var getLastTotalValue = function getLastTotalValue(value) {
|
|
115
|
+
return getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
|
|
116
|
+
};
|
|
117
|
+
var getTotalValue = function getTotalValue(value) {
|
|
118
|
+
return getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
|
|
119
|
+
};
|
|
120
|
+
var lastPacketsSent = getLastTotalValue('totalPacketsSent');
|
|
121
|
+
var lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');
|
|
122
|
+
var totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');
|
|
123
|
+
var totalPacketsSent = getTotalValue('totalPacketsSent');
|
|
124
|
+
var meanRemoteJitter = (0, _keys.default)(statsResults).filter(function (mt) {
|
|
125
|
+
return mt.includes(baseMediaType);
|
|
126
|
+
}).reduce(function (acc, mt) {
|
|
127
|
+
return acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter);
|
|
128
|
+
}, []);
|
|
129
|
+
var meanRoundTripTime = (0, _keys.default)(statsResults).filter(function (mt) {
|
|
130
|
+
return mt.includes(baseMediaType);
|
|
131
|
+
}).reduce(function (acc, mt) {
|
|
132
|
+
return acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime);
|
|
133
|
+
}, []);
|
|
134
|
+
audioSender.common.common.direction = ((_statsResults$Object$2 = statsResults[(0, _keys.default)(statsResults).find(function (mediaType) {
|
|
135
|
+
return mediaType.includes(baseMediaType);
|
|
136
|
+
})]) === null || _statsResults$Object$2 === void 0 ? void 0 : _statsResults$Object$2.direction) || 'inactive';
|
|
137
|
+
audioSender.common.common.isMain = !baseMediaType.includes('-share');
|
|
79
138
|
audioSender.common.transportType = statsResults.connectionType.local.transport;
|
|
80
|
-
audioSender.common.maxRemoteJitter =
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
audioSender.common.
|
|
84
|
-
audioSender.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;
|
|
85
|
-
audioSender.streams[0].common.rtpPackets = audioSender.common.rtpPackets;
|
|
139
|
+
audioSender.common.maxRemoteJitter = (0, _lodash.max)(meanRemoteJitter) * 1000 || 0;
|
|
140
|
+
audioSender.common.meanRemoteJitter = (0, _lodash.mean)(meanRemoteJitter) * 1000 || 0;
|
|
141
|
+
audioSender.common.rtpPackets = totalPacketsSent - lastPacketsSent || 0;
|
|
142
|
+
// audioSender.streams[0].common.rtpPackets = audioSender.common.rtpPackets;
|
|
86
143
|
// From candidate-pair
|
|
87
|
-
audioSender.common.availableBitrate = statsResults
|
|
144
|
+
audioSender.common.availableBitrate = getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, 'availableOutgoingBitrate');
|
|
88
145
|
// Calculate based on how much packets lost of received compated to how to the client sent
|
|
89
146
|
|
|
90
|
-
var
|
|
91
|
-
audioSender.common.remoteLossRate =
|
|
147
|
+
var totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;
|
|
148
|
+
audioSender.common.remoteLossRate = totalPacketsSent - lastPacketsSent > 0 ? totalPacketsLostForaMin * 100 / (totalPacketsSent - lastPacketsSent) : 0; // This is the packets sent with in last min
|
|
92
149
|
|
|
93
|
-
audioSender.common.maxRoundTripTime =
|
|
94
|
-
|
|
95
|
-
(0, _lodash.max)(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
|
|
96
|
-
audioSender.common.meanRoundTripTime = (0, _lodash.mean)(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
|
|
150
|
+
audioSender.common.maxRoundTripTime = (0, _lodash.max)(meanRoundTripTime) * 1000 || 0;
|
|
151
|
+
audioSender.common.meanRoundTripTime = (0, _lodash.mean)(meanRoundTripTime) * 1000 || 0;
|
|
97
152
|
audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;
|
|
98
153
|
|
|
99
154
|
// Calculate the outgoing bitrate
|
|
100
|
-
var totalBytesSentInaMin = statsResults
|
|
101
|
-
audioSender.
|
|
102
|
-
audioSender.common.rtpBitrate = audioSender.streams[0].common.transmittedBitrate;
|
|
103
|
-
audioSender.streams[0].transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastFramesEncoded || 0;
|
|
104
|
-
audioSender.streams[0].requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;
|
|
155
|
+
var totalBytesSentInaMin = getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, 'totalBytesSent') - getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, 'totalBytesSent');
|
|
156
|
+
audioSender.common.rtpBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
|
|
105
157
|
};
|
|
106
|
-
var
|
|
107
|
-
var _lastMqaDataSent$
|
|
108
|
-
var
|
|
109
|
-
statsResults =
|
|
110
|
-
lastMqaDataSent =
|
|
111
|
-
mediaType =
|
|
112
|
-
var sendrecvType = _constants.STATS.
|
|
113
|
-
var
|
|
114
|
-
var
|
|
115
|
-
var
|
|
116
|
-
var
|
|
117
|
-
var lastFramesDecoded = ((_lastMqaDataSent$medi18 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi18 === void 0 ? void 0 : _lastMqaDataSent$medi18[sendrecvType].framesDecoded) || 0;
|
|
118
|
-
var lastFramesDropped = ((_lastMqaDataSent$medi19 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi19 === void 0 ? void 0 : _lastMqaDataSent$medi19[sendrecvType].framesDropped) || 0;
|
|
119
|
-
var lastKeyFramesDecoded = ((_lastMqaDataSent$medi20 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi20 === void 0 ? void 0 : _lastMqaDataSent$medi20[sendrecvType].keyFramesDecoded) || 0;
|
|
120
|
-
var lastPliCount = ((_lastMqaDataSent$medi21 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi21 === void 0 ? void 0 : _lastMqaDataSent$medi21[sendrecvType].totalPliCount) || 0;
|
|
158
|
+
var getAudioSenderStreamMqa = exports.getAudioSenderStreamMqa = function getAudioSenderStreamMqa(_ref4) {
|
|
159
|
+
var _lastMqaDataSent$medi9, _lastMqaDataSent$medi10, _lastMqaDataSent$medi11, _lastMqaDataSent$medi12;
|
|
160
|
+
var audioSenderStream = _ref4.audioSenderStream,
|
|
161
|
+
statsResults = _ref4.statsResults,
|
|
162
|
+
lastMqaDataSent = _ref4.lastMqaDataSent,
|
|
163
|
+
mediaType = _ref4.mediaType;
|
|
164
|
+
var sendrecvType = _constants.STATS.SEND_DIRECTION;
|
|
165
|
+
var lastBytesSent = ((_lastMqaDataSent$medi9 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi9 === void 0 ? void 0 : _lastMqaDataSent$medi9[sendrecvType].totalBytesSent) || 0;
|
|
166
|
+
var lastFramesEncoded = ((_lastMqaDataSent$medi10 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi10 === void 0 ? void 0 : _lastMqaDataSent$medi10[sendrecvType].totalKeyFramesEncoded) || 0;
|
|
167
|
+
var lastFirCount = ((_lastMqaDataSent$medi11 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi11 === void 0 ? void 0 : _lastMqaDataSent$medi11[sendrecvType].totalFirCount) || 0;
|
|
168
|
+
var lastPacketsSent = ((_lastMqaDataSent$medi12 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi12 === void 0 ? void 0 : _lastMqaDataSent$medi12[sendrecvType].totalPacketsSent) || 0;
|
|
121
169
|
var csi = statsResults[mediaType].csi;
|
|
122
|
-
if (csi && !
|
|
123
|
-
|
|
170
|
+
if (csi && !audioSenderStream.common.csi.includes(csi)) {
|
|
171
|
+
audioSenderStream.common.csi.push(csi);
|
|
124
172
|
}
|
|
125
|
-
|
|
126
|
-
|
|
173
|
+
audioSenderStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;
|
|
174
|
+
var totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;
|
|
175
|
+
audioSenderStream.common.transmittedBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
|
|
176
|
+
audioSenderStream.transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastFramesEncoded || 0;
|
|
177
|
+
audioSenderStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;
|
|
178
|
+
};
|
|
179
|
+
var getVideoReceiverMqa = exports.getVideoReceiverMqa = function getVideoReceiverMqa(_ref5) {
|
|
180
|
+
var _statsResults$Object$3;
|
|
181
|
+
var videoReceiver = _ref5.videoReceiver,
|
|
182
|
+
statsResults = _ref5.statsResults,
|
|
183
|
+
lastMqaDataSent = _ref5.lastMqaDataSent,
|
|
184
|
+
baseMediaType = _ref5.baseMediaType;
|
|
185
|
+
var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
|
|
186
|
+
var getLastTotalValue = function getLastTotalValue(value) {
|
|
187
|
+
return getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
|
|
188
|
+
};
|
|
189
|
+
var getTotalValue = function getTotalValue(value) {
|
|
190
|
+
return getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
|
|
191
|
+
};
|
|
192
|
+
var lastPacketsReceived = getLastTotalValue('totalPacketsReceived');
|
|
193
|
+
var lastPacketsLost = getLastTotalValue('totalPacketsLost');
|
|
194
|
+
var lastBytesReceived = getLastTotalValue('totalBytesReceived');
|
|
195
|
+
var packetsLost = getTotalValue('totalPacketsLost');
|
|
196
|
+
var totalPacketsReceived = getTotalValue('totalPacketsReceived');
|
|
197
|
+
var totalBytesReceived = getTotalValue('totalBytesReceived');
|
|
198
|
+
var meanRemoteJitter = (0, _keys.default)(statsResults).filter(function (mt) {
|
|
199
|
+
return mt.includes(baseMediaType);
|
|
200
|
+
}).reduce(function (acc, mt) {
|
|
201
|
+
return acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter);
|
|
202
|
+
}, []);
|
|
203
|
+
videoReceiver.common.common.direction = ((_statsResults$Object$3 = statsResults[(0, _keys.default)(statsResults).find(function (mediaType) {
|
|
204
|
+
return mediaType.includes(baseMediaType);
|
|
205
|
+
})]) === null || _statsResults$Object$3 === void 0 ? void 0 : _statsResults$Object$3.direction) || 'inactive';
|
|
206
|
+
videoReceiver.common.common.isMain = !baseMediaType.includes('-share');
|
|
127
207
|
videoReceiver.common.transportType = statsResults.connectionType.local.transport;
|
|
128
208
|
|
|
129
209
|
// collect the packets received for the last min
|
|
130
|
-
videoReceiver.common.rtpPackets =
|
|
131
|
-
videoReceiver.streams[0].common.rtpPackets = videoReceiver.common.rtpPackets;
|
|
210
|
+
videoReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived || 0;
|
|
132
211
|
|
|
133
212
|
// Hop by hop are numbers and not percentage so we compare on what we sent the last min
|
|
134
213
|
// this is including packet lost
|
|
135
|
-
var totalPacketsLost =
|
|
214
|
+
var totalPacketsLost = packetsLost - lastPacketsLost;
|
|
136
215
|
videoReceiver.common.mediaHopByHopLost = totalPacketsLost;
|
|
137
216
|
videoReceiver.common.rtpHopByHopLost = totalPacketsLost;
|
|
138
217
|
|
|
139
|
-
// End to end packetloss is after recovery
|
|
140
|
-
videoReceiver.streams[0].common.rtpEndToEndLost = totalPacketsLost;
|
|
141
|
-
|
|
142
218
|
// calculate this values
|
|
219
|
+
videoReceiver.common.maxRemoteJitter = (0, _lodash.max)(meanRemoteJitter) * 1000 || 0;
|
|
220
|
+
videoReceiver.common.meanRemoteJitter = (0, _lodash.mean)(meanRemoteJitter) * 1000 || 0;
|
|
221
|
+
|
|
222
|
+
// Calculate the outgoing bitrate
|
|
223
|
+
var totalBytesReceivedInaMin = totalBytesReceived - lastBytesReceived;
|
|
224
|
+
videoReceiver.common.rtpBitrate = totalBytesReceivedInaMin ? totalBytesReceivedInaMin * 8 / 60 : 0;
|
|
225
|
+
};
|
|
226
|
+
var getVideoReceiverStreamMqa = exports.getVideoReceiverStreamMqa = function getVideoReceiverStreamMqa(_ref6) {
|
|
227
|
+
var _lastMqaDataSent$medi13, _lastMqaDataSent$medi14, _lastMqaDataSent$medi15, _lastMqaDataSent$medi16, _lastMqaDataSent$medi17, _lastMqaDataSent$medi18, _lastMqaDataSent$medi19, _lastMqaDataSent$medi20;
|
|
228
|
+
var videoReceiverStream = _ref6.videoReceiverStream,
|
|
229
|
+
statsResults = _ref6.statsResults,
|
|
230
|
+
lastMqaDataSent = _ref6.lastMqaDataSent,
|
|
231
|
+
mediaType = _ref6.mediaType;
|
|
232
|
+
var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
|
|
233
|
+
var lastPacketsReceived = ((_lastMqaDataSent$medi13 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi13 === void 0 ? void 0 : _lastMqaDataSent$medi13[sendrecvType].totalPacketsReceived) || 0;
|
|
234
|
+
var lastPacketsLost = ((_lastMqaDataSent$medi14 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi14 === void 0 ? void 0 : _lastMqaDataSent$medi14[sendrecvType].totalPacketsLost) || 0;
|
|
235
|
+
var lastBytesReceived = ((_lastMqaDataSent$medi15 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi15 === void 0 ? void 0 : _lastMqaDataSent$medi15[sendrecvType].totalBytesReceived) || 0;
|
|
236
|
+
var lastFramesReceived = ((_lastMqaDataSent$medi16 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi16 === void 0 ? void 0 : _lastMqaDataSent$medi16[sendrecvType].framesReceived) || 0;
|
|
237
|
+
var lastFramesDecoded = ((_lastMqaDataSent$medi17 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi17 === void 0 ? void 0 : _lastMqaDataSent$medi17[sendrecvType].framesDecoded) || 0;
|
|
238
|
+
var lastFramesDropped = ((_lastMqaDataSent$medi18 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi18 === void 0 ? void 0 : _lastMqaDataSent$medi18[sendrecvType].framesDropped) || 0;
|
|
239
|
+
var lastKeyFramesDecoded = ((_lastMqaDataSent$medi19 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi19 === void 0 ? void 0 : _lastMqaDataSent$medi19[sendrecvType].keyFramesDecoded) || 0;
|
|
240
|
+
var lastPliCount = ((_lastMqaDataSent$medi20 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi20 === void 0 ? void 0 : _lastMqaDataSent$medi20[sendrecvType].totalPliCount) || 0;
|
|
241
|
+
var csi = statsResults[mediaType].csi;
|
|
242
|
+
if (csi && !videoReceiverStream.common.csi.includes(csi)) {
|
|
243
|
+
videoReceiverStream.common.csi.push(csi);
|
|
244
|
+
}
|
|
245
|
+
videoReceiverStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;
|
|
246
|
+
var totalPacketLoss = statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;
|
|
143
247
|
|
|
144
|
-
|
|
248
|
+
// End to end packetloss is after recovery
|
|
249
|
+
videoReceiverStream.common.rtpEndToEndLost = totalPacketLoss;
|
|
250
|
+
videoReceiverStream.common.rtpJitter =
|
|
145
251
|
// @ts-ignore
|
|
146
252
|
(0, _lodash.max)(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
|
|
147
|
-
videoReceiver.common.meanRemoteJitter = (0, _lodash.mean)(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
|
|
148
|
-
videoReceiver.streams[0].common.rtpJitter = videoReceiver.common.maxRemoteJitter;
|
|
149
|
-
|
|
150
|
-
// Calculate the outgoing bitrate
|
|
151
253
|
var totalBytesReceivedInaMin = statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived;
|
|
152
|
-
|
|
153
|
-
videoReceiver.common.rtpBitrate = videoReceiver.streams[0].common.receivedBitrate;
|
|
154
|
-
|
|
155
|
-
// From tracks //TODO: calculate a proper one
|
|
254
|
+
videoReceiverStream.common.receivedBitrate = totalBytesReceivedInaMin ? totalBytesReceivedInaMin * 8 / 60 : 0;
|
|
156
255
|
var totalFrameReceivedInaMin = statsResults[mediaType][sendrecvType].framesReceived - lastFramesReceived;
|
|
157
256
|
var totalFrameDecodedInaMin = statsResults[mediaType][sendrecvType].framesDecoded - lastFramesDecoded;
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
257
|
+
videoReceiverStream.common.receivedFrameRate = Math.round(totalFrameReceivedInaMin ? totalFrameReceivedInaMin / 60 : 0);
|
|
258
|
+
videoReceiverStream.common.renderedFrameRate = Math.round(totalFrameDecodedInaMin ? totalFrameDecodedInaMin / 60 : 0);
|
|
259
|
+
videoReceiverStream.common.framesDropped = statsResults[mediaType][sendrecvType].framesDropped - lastFramesDropped || 0;
|
|
260
|
+
videoReceiverStream.receivedHeight = statsResults[mediaType][sendrecvType].height || 0;
|
|
261
|
+
videoReceiverStream.receivedWidth = statsResults[mediaType][sendrecvType].width || 0;
|
|
262
|
+
videoReceiverStream.receivedFrameSize = videoReceiverStream.receivedHeight * videoReceiverStream.receivedWidth / 256;
|
|
263
|
+
videoReceiverStream.receivedKeyFrames = statsResults[mediaType][sendrecvType].keyFramesDecoded - lastKeyFramesDecoded || 0;
|
|
264
|
+
videoReceiverStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalPliCount - lastPliCount || 0;
|
|
166
265
|
};
|
|
167
|
-
var getVideoSenderMqa = exports.getVideoSenderMqa = function getVideoSenderMqa(
|
|
168
|
-
var
|
|
169
|
-
var videoSender =
|
|
170
|
-
statsResults =
|
|
171
|
-
lastMqaDataSent =
|
|
172
|
-
|
|
266
|
+
var getVideoSenderMqa = exports.getVideoSenderMqa = function getVideoSenderMqa(_ref7) {
|
|
267
|
+
var _statsResults$Object$4;
|
|
268
|
+
var videoSender = _ref7.videoSender,
|
|
269
|
+
statsResults = _ref7.statsResults,
|
|
270
|
+
lastMqaDataSent = _ref7.lastMqaDataSent,
|
|
271
|
+
baseMediaType = _ref7.baseMediaType;
|
|
173
272
|
var sendrecvType = _constants.STATS.SEND_DIRECTION;
|
|
174
|
-
var
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
var
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
var
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
273
|
+
var getLastTotalValue = function getLastTotalValue(value) {
|
|
274
|
+
return getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
|
|
275
|
+
};
|
|
276
|
+
var getTotalValue = function getTotalValue(value) {
|
|
277
|
+
return getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
|
|
278
|
+
};
|
|
279
|
+
var lastPacketsSent = getLastTotalValue('totalPacketsSent');
|
|
280
|
+
var lastBytesSent = getLastTotalValue('totalBytesSent');
|
|
281
|
+
var lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');
|
|
282
|
+
var totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');
|
|
283
|
+
var totalPacketsSent = getTotalValue('totalPacketsSent');
|
|
284
|
+
var totalBytesSent = getTotalValue('totalBytesSent');
|
|
285
|
+
var availableOutgoingBitrate = getTotalValue('availableOutgoingBitrate');
|
|
286
|
+
videoSender.common.common.direction = ((_statsResults$Object$4 = statsResults[(0, _keys.default)(statsResults).find(function (mediaType) {
|
|
287
|
+
return mediaType.includes(baseMediaType);
|
|
288
|
+
})]) === null || _statsResults$Object$4 === void 0 ? void 0 : _statsResults$Object$4.direction) || 'inactive';
|
|
289
|
+
videoSender.common.common.isMain = !baseMediaType.includes('-share');
|
|
186
290
|
videoSender.common.transportType = statsResults.connectionType.local.transport;
|
|
291
|
+
var meanRemoteJitter = (0, _keys.default)(statsResults).filter(function (mt) {
|
|
292
|
+
return mt.includes(baseMediaType);
|
|
293
|
+
}).reduce(function (acc, mt) {
|
|
294
|
+
return acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter);
|
|
295
|
+
}, []);
|
|
296
|
+
var meanRoundTripTime = (0, _keys.default)(statsResults).filter(function (mt) {
|
|
297
|
+
return mt.includes(baseMediaType);
|
|
298
|
+
}).reduce(function (acc, mt) {
|
|
299
|
+
return acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime);
|
|
300
|
+
}, []);
|
|
187
301
|
|
|
188
302
|
// @ts-ignore
|
|
189
|
-
videoSender.common.maxRemoteJitter =
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
videoSender.common.
|
|
193
|
-
videoSender.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;
|
|
194
|
-
videoSender.common.availableBitrate = statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;
|
|
195
|
-
// Calculate based on how much packets lost of received compated to how to the client sent
|
|
303
|
+
videoSender.common.maxRemoteJitter = (0, _lodash.max)(meanRemoteJitter) * 1000 || 0;
|
|
304
|
+
videoSender.common.meanRemoteJitter = (0, _lodash.mean)(meanRemoteJitter) * 1000 || 0;
|
|
305
|
+
videoSender.common.rtpPackets = totalPacketsSent - lastPacketsSent;
|
|
306
|
+
videoSender.common.availableBitrate = availableOutgoingBitrate;
|
|
196
307
|
|
|
197
|
-
|
|
198
|
-
|
|
308
|
+
// Calculate based on how much packets lost of received compated to how to the client sent
|
|
309
|
+
var totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;
|
|
310
|
+
videoSender.common.remoteLossRate = totalPacketsSent - lastPacketsSent > 0 ? totalPacketsLostForaMin * 100 / (totalPacketsSent - lastPacketsSent) : 0; // This is the packets sent with in last min || 0;
|
|
199
311
|
|
|
200
|
-
videoSender.common.maxRoundTripTime =
|
|
201
|
-
|
|
202
|
-
(0, _lodash.max)(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
|
|
203
|
-
videoSender.common.meanRoundTripTime = (0, _lodash.mean)(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
|
|
312
|
+
videoSender.common.maxRoundTripTime = (0, _lodash.max)(meanRoundTripTime) * 1000 || 0;
|
|
313
|
+
videoSender.common.meanRoundTripTime = (0, _lodash.mean)(meanRoundTripTime) * 1000 || 0;
|
|
204
314
|
videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;
|
|
205
|
-
|
|
315
|
+
|
|
316
|
+
// Calculate the outgoing bitrate
|
|
317
|
+
var totalBytesSentInaMin = totalBytesSent - lastBytesSent;
|
|
318
|
+
videoSender.common.rtpBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
|
|
319
|
+
};
|
|
320
|
+
var getVideoSenderStreamMqa = exports.getVideoSenderStreamMqa = function getVideoSenderStreamMqa(_ref8) {
|
|
321
|
+
var _lastMqaDataSent$medi21, _lastMqaDataSent$medi22, _lastMqaDataSent$medi23, _lastMqaDataSent$medi24, _lastMqaDataSent$medi25;
|
|
322
|
+
var videoSenderStream = _ref8.videoSenderStream,
|
|
323
|
+
statsResults = _ref8.statsResults,
|
|
324
|
+
lastMqaDataSent = _ref8.lastMqaDataSent,
|
|
325
|
+
mediaType = _ref8.mediaType;
|
|
326
|
+
var sendrecvType = _constants.STATS.SEND_DIRECTION;
|
|
327
|
+
var lastPacketsSent = ((_lastMqaDataSent$medi21 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi21 === void 0 ? void 0 : _lastMqaDataSent$medi21[sendrecvType].totalPacketsSent) || 0;
|
|
328
|
+
var lastBytesSent = ((_lastMqaDataSent$medi22 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi22 === void 0 ? void 0 : _lastMqaDataSent$medi22[sendrecvType].totalBytesSent) || 0;
|
|
329
|
+
var lastKeyFramesEncoded = ((_lastMqaDataSent$medi23 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi23 === void 0 ? void 0 : _lastMqaDataSent$medi23[sendrecvType].totalKeyFramesEncoded) || 0;
|
|
330
|
+
var lastFirCount = ((_lastMqaDataSent$medi24 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi24 === void 0 ? void 0 : _lastMqaDataSent$medi24[sendrecvType].totalFirCount) || 0;
|
|
331
|
+
var lastFramesSent = ((_lastMqaDataSent$medi25 = lastMqaDataSent[mediaType]) === null || _lastMqaDataSent$medi25 === void 0 ? void 0 : _lastMqaDataSent$medi25[sendrecvType].framesSent) || 0;
|
|
332
|
+
var csi = statsResults[mediaType].csi;
|
|
333
|
+
if (csi && !videoSenderStream.common.csi.includes(csi)) {
|
|
334
|
+
videoSenderStream.common.csi.push(csi);
|
|
335
|
+
}
|
|
336
|
+
videoSenderStream.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;
|
|
206
337
|
|
|
207
338
|
// Calculate the outgoing bitrate
|
|
208
339
|
var totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
videoSender.streams[0].requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;
|
|
340
|
+
videoSenderStream.common.transmittedBitrate = totalBytesSentInaMin ? totalBytesSentInaMin * 8 / 60 : 0;
|
|
341
|
+
videoSenderStream.transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastKeyFramesEncoded || 0;
|
|
342
|
+
videoSenderStream.requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;
|
|
213
343
|
|
|
214
344
|
// From tracks //TODO: calculate a proper one
|
|
215
345
|
var totalFrameSentInaMin = statsResults[mediaType][sendrecvType].framesSent - (lastFramesSent || 0);
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
346
|
+
videoSenderStream.common.transmittedFrameRate = Math.round(totalFrameSentInaMin ? totalFrameSentInaMin / 60 : 0);
|
|
347
|
+
videoSenderStream.transmittedHeight = statsResults[mediaType][sendrecvType].height || 0;
|
|
348
|
+
videoSenderStream.transmittedWidth = statsResults[mediaType][sendrecvType].width || 0;
|
|
349
|
+
videoSenderStream.transmittedFrameSize = videoSenderStream.transmittedHeight * videoSenderStream.transmittedWidth / 256;
|
|
220
350
|
};
|
|
221
351
|
//# sourceMappingURL=mqaUtil.js.map
|