@webex/plugin-meetings 3.0.0-beta.39 → 3.0.0-beta.391
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/README.md +58 -8
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +342 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +94 -15
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/events.js +45 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +671 -81
- package/dist/breakouts/index.js.map +1 -1
- package/dist/breakouts/utils.js +45 -1
- package/dist/breakouts/utils.js.map +1 -1
- package/dist/common/errors/no-meeting-info.js +51 -0
- package/dist/common/errors/no-meeting-info.js.map +1 -0
- package/dist/common/errors/reclaim-host-role-errors.js +158 -0
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
- package/dist/common/errors/webex-errors.js +48 -7
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -1
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +5 -1
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +24 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +5 -10
- package/dist/config.js.map +1 -1
- package/dist/constants.js +242 -33
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +14 -2
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +109 -15
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +309 -18
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.js +110 -2
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.js +15 -0
- package/dist/interceptors/index.js.map +1 -0
- package/dist/interceptors/locusRetry.js +93 -0
- package/dist/interceptors/locusRetry.js.map +1 -0
- package/dist/interpretation/collection.js +23 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +380 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +25 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +91 -2
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +386 -62
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +7 -1
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +71 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +249 -72
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +89 -14
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +65 -102
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +73 -124
- package/dist/media/properties.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +135 -330
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +86 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +4075 -2827
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +292 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +224 -136
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +177 -152
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +672 -417
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/index.js +73 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +192 -51
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/util.js +1 -1
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +36 -36
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +39 -0
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +484 -119
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +2 -0
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +73 -7
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +58 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +25 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +132 -25
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +10 -0
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +102 -6
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +106 -38
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +326 -232
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +18 -1
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +1 -446
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +223 -32
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +10 -0
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +39 -36
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +3 -1
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +76 -5
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +366 -104
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +255 -0
- package/dist/multistream/sendSlotManager.js.map +1 -0
- package/dist/reachability/clusterReachability.js +356 -0
- package/dist/reachability/clusterReachability.js.map +1 -0
- package/dist/reachability/index.js +263 -390
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +6 -4
- package/dist/reachability/request.js.map +1 -1
- package/dist/reachability/util.js +29 -0
- package/dist/reachability/util.js.map +1 -0
- package/dist/reconnection-manager/index.js +266 -202
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/index.js +21 -2
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +9 -8
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +51 -28
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +48 -64
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +220 -70
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +12 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +179 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/index.js +357 -295
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +296 -156
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +42 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/utils.d.ts +14 -0
- package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
- package/dist/types/common/errors/webex-errors.d.ts +25 -1
- package/dist/types/common/logs/request.d.ts +2 -0
- package/dist/types/common/queue.d.ts +9 -7
- package/dist/types/config.d.ts +2 -7
- package/dist/types/constants.d.ts +203 -31
- package/dist/types/controls-options-manager/enums.d.ts +11 -1
- package/dist/types/controls-options-manager/index.d.ts +17 -1
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -7
- package/dist/types/index.d.ts +6 -5
- package/dist/types/interceptors/index.d.ts +2 -0
- package/dist/types/interceptors/locusRetry.d.ts +27 -0
- package/dist/types/interpretation/collection.d.ts +5 -0
- package/dist/types/interpretation/index.d.ts +5 -0
- package/dist/types/interpretation/siLanguage.d.ts +5 -0
- package/dist/types/locus-info/index.d.ts +57 -4
- package/dist/types/locus-info/parser.d.ts +66 -6
- package/dist/types/media/index.d.ts +2 -0
- package/dist/types/media/properties.d.ts +34 -49
- package/dist/types/mediaQualityMetrics/config.d.ts +99 -223
- package/dist/types/meeting/in-meeting-actions.d.ts +86 -2
- package/dist/types/meeting/index.d.ts +567 -496
- package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/types/meeting/muteState.d.ts +93 -25
- package/dist/types/meeting/request.d.ts +64 -43
- package/dist/types/meeting/util.d.ts +117 -1
- package/dist/types/meeting-info/index.d.ts +13 -1
- package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
- package/dist/types/meetings/collection.d.ts +17 -0
- package/dist/types/meetings/index.d.ts +113 -21
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/member/index.d.ts +14 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/members/collection.d.ts +5 -0
- package/dist/types/members/index.d.ts +35 -2
- package/dist/types/members/request.d.ts +73 -9
- package/dist/types/members/types.d.ts +25 -0
- package/dist/types/members/util.d.ts +214 -1
- package/dist/types/metrics/constants.d.ts +17 -0
- package/dist/types/metrics/index.d.ts +4 -111
- package/dist/types/multistream/mediaRequestManager.d.ts +72 -3
- package/dist/types/multistream/receiveSlot.d.ts +7 -3
- package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
- package/dist/types/multistream/remoteMedia.d.ts +3 -31
- package/dist/types/multistream/remoteMediaGroup.d.ts +2 -9
- package/dist/types/multistream/remoteMediaManager.d.ts +62 -2
- package/dist/types/multistream/sendSlotManager.d.ts +70 -0
- package/dist/types/reachability/clusterReachability.d.ts +109 -0
- package/dist/types/reachability/index.d.ts +60 -95
- package/dist/types/reachability/request.d.ts +3 -1
- package/dist/types/reachability/util.d.ts +8 -0
- package/dist/types/reconnection-manager/index.d.ts +19 -0
- package/dist/types/recording-controller/index.d.ts +15 -1
- package/dist/types/recording-controller/util.d.ts +5 -4
- package/dist/types/roap/index.d.ts +2 -1
- package/dist/types/roap/request.d.ts +9 -8
- package/dist/types/roap/turnDiscovery.d.ts +39 -5
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +61 -0
- package/dist/types/statsAnalyzer/index.d.ts +34 -12
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +28 -4
- package/dist/types/webinar/collection.d.ts +16 -0
- package/dist/types/webinar/index.d.ts +5 -0
- package/dist/webinar/collection.js +44 -0
- package/dist/webinar/collection.js.map +1 -0
- package/dist/webinar/index.js +69 -0
- package/dist/webinar/index.js.map +1 -0
- package/package.json +22 -19
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +35 -11
- package/src/breakouts/breakout.ts +67 -9
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +558 -59
- package/src/breakouts/utils.ts +42 -0
- package/src/common/errors/no-meeting-info.ts +24 -0
- package/src/common/errors/reclaim-host-role-errors.ts +134 -0
- package/src/common/errors/webex-errors.ts +44 -2
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/logs/request.ts +5 -1
- package/src/common/queue.ts +22 -8
- package/src/config.ts +4 -9
- package/src/constants.ts +229 -21
- package/src/controls-options-manager/enums.ts +12 -0
- package/src/controls-options-manager/index.ts +116 -21
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +294 -14
- package/src/index.ts +44 -0
- package/src/interceptors/index.ts +3 -0
- package/src/interceptors/locusRetry.ts +67 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +349 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +108 -0
- package/src/locus-info/index.ts +417 -59
- package/src/locus-info/infoUtils.ts +10 -2
- package/src/locus-info/mediaSharesUtils.ts +80 -0
- package/src/locus-info/parser.ts +258 -47
- package/src/locus-info/selfUtils.ts +81 -5
- package/src/media/index.ts +100 -108
- package/src/media/properties.ts +88 -117
- package/src/mediaQualityMetrics/config.ts +103 -238
- package/src/meeting/in-meeting-actions.ts +171 -3
- package/src/meeting/index.ts +3411 -2435
- package/src/meeting/locusMediaRequest.ts +313 -0
- package/src/meeting/muteState.ts +223 -136
- package/src/meeting/request.ts +155 -120
- package/src/meeting/util.ts +685 -395
- package/src/meeting-info/index.ts +81 -8
- package/src/meeting-info/meeting-info-v2.ts +170 -14
- package/src/meeting-info/util.ts +1 -1
- package/src/meeting-info/utilv2.ts +23 -23
- package/src/meetings/collection.ts +33 -0
- package/src/meetings/index.ts +507 -127
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +81 -12
- package/src/member/index.ts +58 -0
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +141 -25
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +134 -8
- package/src/members/request.ts +97 -17
- package/src/members/types.ts +29 -0
- package/src/members/util.ts +333 -240
- package/src/metrics/constants.ts +17 -0
- package/src/metrics/index.ts +1 -469
- package/src/multistream/mediaRequestManager.ts +271 -56
- package/src/multistream/receiveSlot.ts +11 -4
- package/src/multistream/receiveSlotManager.ts +34 -24
- package/src/multistream/remoteMedia.ts +5 -3
- package/src/multistream/remoteMediaGroup.ts +78 -0
- package/src/multistream/remoteMediaManager.ts +248 -44
- package/src/multistream/sendSlotManager.ts +199 -0
- package/src/reachability/clusterReachability.ts +320 -0
- package/src/reachability/index.ts +229 -346
- package/src/reachability/request.ts +8 -4
- package/src/reachability/util.ts +24 -0
- package/src/reconnection-manager/index.ts +128 -97
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +52 -23
- package/src/roap/request.ts +48 -67
- package/src/roap/turnDiscovery.ts +147 -49
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +166 -0
- package/src/statsAnalyzer/index.ts +457 -416
- package/src/statsAnalyzer/mqaUtil.ts +317 -170
- package/src/webinar/collection.ts +31 -0
- package/src/webinar/index.ts +62 -0
- package/test/integration/spec/converged-space-meetings.js +60 -3
- package/test/integration/spec/journey.js +320 -261
- package/test/integration/spec/space-meeting.js +76 -3
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +118 -28
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1349 -114
- package/test/unit/spec/breakouts/utils.js +52 -1
- package/test/unit/spec/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +163 -0
- package/test/unit/spec/controls-options-manager/util.js +576 -60
- package/test/unit/spec/fixture/locus.js +1 -0
- package/test/unit/spec/interceptors/locusRetry.ts +131 -0
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +625 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +316 -43
- package/test/unit/spec/locus-info/index.js +1363 -37
- package/test/unit/spec/locus-info/infoUtils.js +37 -15
- package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +41 -0
- package/test/unit/spec/locus-info/parser.js +116 -35
- package/test/unit/spec/locus-info/selfConstant.js +27 -4
- package/test/unit/spec/locus-info/selfUtils.js +208 -17
- package/test/unit/spec/media/index.ts +173 -81
- package/test/unit/spec/media/properties.ts +2 -2
- package/test/unit/spec/meeting/in-meeting-actions.ts +85 -3
- package/test/unit/spec/meeting/index.js +6821 -2172
- package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
- package/test/unit/spec/meeting/muteState.js +402 -212
- package/test/unit/spec/meeting/request.js +473 -54
- package/test/unit/spec/meeting/utils.js +773 -67
- package/test/unit/spec/meeting-info/index.js +300 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +526 -5
- package/test/unit/spec/meeting-info/utilv2.js +21 -0
- package/test/unit/spec/meetings/collection.js +26 -0
- package/test/unit/spec/meetings/index.js +1415 -213
- package/test/unit/spec/meetings/utils.js +229 -2
- package/test/unit/spec/member/index.js +61 -6
- package/test/unit/spec/member/util.js +510 -34
- package/test/unit/spec/members/index.js +432 -1
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +210 -0
- package/test/unit/spec/metrics/index.js +1 -50
- package/test/unit/spec/multistream/mediaRequestManager.ts +781 -114
- package/test/unit/spec/multistream/receiveSlot.ts +9 -1
- package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
- package/test/unit/spec/multistream/remoteMedia.ts +2 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +345 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +525 -0
- package/test/unit/spec/multistream/sendSlotManager.ts +274 -0
- package/test/unit/spec/reachability/clusterReachability.ts +279 -0
- package/test/unit/spec/reachability/index.ts +551 -14
- package/test/unit/spec/reachability/request.js +3 -1
- package/test/unit/spec/reachability/util.ts +40 -0
- package/test/unit/spec/reconnection-manager/index.js +171 -11
- package/test/unit/spec/recording-controller/index.js +294 -218
- package/test/unit/spec/recording-controller/util.js +223 -96
- package/test/unit/spec/roap/index.ts +180 -83
- package/test/unit/spec/roap/request.ts +100 -62
- package/test/unit/spec/roap/turnDiscovery.ts +388 -96
- package/test/unit/spec/rtcMetrics/index.ts +122 -0
- package/test/unit/spec/stats-analyzer/index.js +1252 -12
- package/test/unit/spec/webinar/collection.ts +13 -0
- package/test/unit/spec/webinar/index.ts +60 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +0 -57
- package/test/utils/webex-test-users.js +12 -4
- package/dist/metrics/config.js +0 -289
- package/dist/metrics/config.js.map +0 -1
- package/dist/types/metrics/config.d.ts +0 -169
- package/src/index.js +0 -18
- package/src/metrics/config.ts +0 -485
|
@@ -4,11 +4,82 @@ import {mean, max} from 'lodash';
|
|
|
4
4
|
|
|
5
5
|
import {STATS} from '../constants';
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Get the totals of a certain value from a certain media type.
|
|
9
|
+
*
|
|
10
|
+
* @param {object} stats - The large stats object.
|
|
11
|
+
* @param {string} sendrecvType - "send" or "recv".
|
|
12
|
+
* @param {string} baseMediaType - audio or video _and_ share or non-share.
|
|
13
|
+
* @param {string} value - The value we want to get the totals of.
|
|
14
|
+
* @returns {number}
|
|
15
|
+
*/
|
|
16
|
+
const getTotalValueFromBaseType = (
|
|
17
|
+
stats: object,
|
|
18
|
+
sendrecvType: string,
|
|
19
|
+
baseMediaType: string,
|
|
20
|
+
value: string
|
|
21
|
+
): number =>
|
|
22
|
+
Object.keys(stats)
|
|
23
|
+
.filter((mt) => mt.includes(baseMediaType))
|
|
24
|
+
.reduce((acc, mt) => acc + (stats[mt]?.[sendrecvType]?.[value] || 0), 0);
|
|
25
|
+
|
|
26
|
+
export const getAudioReceiverMqa = ({
|
|
27
|
+
audioReceiver,
|
|
28
|
+
statsResults,
|
|
29
|
+
lastMqaDataSent,
|
|
30
|
+
baseMediaType,
|
|
31
|
+
}) => {
|
|
32
|
+
const sendrecvType = STATS.RECEIVE_DIRECTION;
|
|
33
|
+
|
|
34
|
+
const getLastTotalValue = (value: string) =>
|
|
35
|
+
getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
|
|
36
|
+
const getTotalValue = (value: string) =>
|
|
37
|
+
getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
|
|
38
|
+
|
|
39
|
+
const lastPacketsReceived = getLastTotalValue('totalPacketsReceived');
|
|
40
|
+
const lastPacketsLost = getLastTotalValue('totalPacketsLost');
|
|
41
|
+
const lastBytesReceived = getLastTotalValue('totalBytesReceived');
|
|
42
|
+
const lastFecPacketsReceived = getLastTotalValue('fecPacketsReceived');
|
|
43
|
+
const lastFecPacketsDiscarded = getLastTotalValue('fecPacketsDiscarded');
|
|
44
|
+
|
|
45
|
+
const totalPacketsReceived = getTotalValue('totalPacketsReceived');
|
|
46
|
+
const packetsLost = getTotalValue('totalPacketsLost');
|
|
47
|
+
const totalBytesReceived = getTotalValue('totalBytesReceived');
|
|
48
|
+
const totalFecPacketsReceived = getTotalValue('fecPacketsReceived');
|
|
49
|
+
const totalFecPacketsDiscarded = getTotalValue('fecPacketsDiscarded');
|
|
50
|
+
|
|
51
|
+
audioReceiver.common.common.direction =
|
|
52
|
+
statsResults[Object.keys(statsResults).find((mediaType) => mediaType.includes(baseMediaType))]
|
|
53
|
+
?.direction || 'inactive';
|
|
54
|
+
audioReceiver.common.common.isMain = !baseMediaType.includes('-share');
|
|
55
|
+
audioReceiver.common.transportType = statsResults.connectionType.local.transport;
|
|
56
|
+
|
|
57
|
+
// add rtpPacket info inside common as also for call analyzer
|
|
58
|
+
audioReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived;
|
|
59
|
+
|
|
60
|
+
// Hop by hop are numbers and not percentage so we compare on what we sent the last min
|
|
61
|
+
// collect the packets received for the last min
|
|
62
|
+
const totalPacketsLost = packetsLost - lastPacketsLost;
|
|
63
|
+
audioReceiver.common.mediaHopByHopLost = totalPacketsLost;
|
|
64
|
+
audioReceiver.common.rtpHopByHopLost = totalPacketsLost;
|
|
65
|
+
|
|
66
|
+
const fecRecovered =
|
|
67
|
+
totalFecPacketsReceived -
|
|
68
|
+
lastFecPacketsReceived -
|
|
69
|
+
(totalFecPacketsDiscarded - lastFecPacketsDiscarded);
|
|
70
|
+
audioReceiver.common.fecPackets = fecRecovered;
|
|
71
|
+
|
|
72
|
+
audioReceiver.common.rtpBitrate = ((totalBytesReceived - lastBytesReceived) * 8) / 60 || 0;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export const getAudioReceiverStreamMqa = ({
|
|
76
|
+
audioReceiverStream,
|
|
77
|
+
statsResults,
|
|
78
|
+
lastMqaDataSent,
|
|
79
|
+
mediaType,
|
|
80
|
+
}) => {
|
|
8
81
|
const sendrecvType = STATS.RECEIVE_DIRECTION;
|
|
9
82
|
|
|
10
|
-
const lastPacketsReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsReceived || 0;
|
|
11
|
-
const lastPacketsLost = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLost || 0;
|
|
12
83
|
const lastPacketsDecoded = lastMqaDataSent[mediaType]?.[sendrecvType].totalSamplesDecoded || 0;
|
|
13
84
|
const lastSamplesReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalSamplesReceived || 0;
|
|
14
85
|
const lastConcealedSamples = lastMqaDataSent[mediaType]?.[sendrecvType].concealedSamples || 0;
|
|
@@ -16,32 +87,23 @@ export const getAudioReceiverMqa = ({audioReceiver, statsResults, lastMqaDataSen
|
|
|
16
87
|
const lastFecPacketsReceived = lastMqaDataSent[mediaType]?.[sendrecvType].fecPacketsReceived || 0;
|
|
17
88
|
const lastFecPacketsDiscarded =
|
|
18
89
|
lastMqaDataSent[mediaType]?.[sendrecvType].fecPacketsDiscarded || 0;
|
|
90
|
+
const lastPacketsReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsReceived || 0;
|
|
91
|
+
const lastPacketsLost = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsLost || 0;
|
|
19
92
|
|
|
20
93
|
const {csi} = statsResults[mediaType];
|
|
21
|
-
if (csi && !
|
|
22
|
-
|
|
94
|
+
if (csi && !audioReceiverStream.common.csi.includes(csi)) {
|
|
95
|
+
audioReceiverStream.common.csi.push(csi);
|
|
23
96
|
}
|
|
24
97
|
|
|
25
|
-
|
|
26
|
-
audioReceiver.common.transportType = statsResults.connectionType.remote.transport[0];
|
|
27
|
-
|
|
28
|
-
// add rtpPacket info inside common as also for call analyzer
|
|
29
|
-
audioReceiver.common.rtpPackets =
|
|
98
|
+
audioReceiverStream.common.rtpPackets =
|
|
30
99
|
statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;
|
|
31
|
-
// Hop by hop are numbers and not percentage so we compare on what we sent the last min
|
|
32
|
-
// collect the packets received for the last min
|
|
33
|
-
audioReceiver.streams[0].common.rtpPackets = audioReceiver.common.rtpPackets;
|
|
34
|
-
audioReceiver.common.mediaHopByHopLost =
|
|
35
|
-
statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;
|
|
36
|
-
audioReceiver.common.rtpHopByHopLost =
|
|
37
|
-
statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;
|
|
38
100
|
|
|
39
|
-
|
|
101
|
+
audioReceiverStream.common.maxRtpJitter =
|
|
40
102
|
// @ts-ignore
|
|
41
103
|
max(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;
|
|
42
|
-
|
|
104
|
+
audioReceiverStream.common.meanRtpJitter =
|
|
43
105
|
mean(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;
|
|
44
|
-
|
|
106
|
+
audioReceiverStream.common.rtpJitter = audioReceiverStream.common.maxRtpJitter;
|
|
45
107
|
|
|
46
108
|
// Fec packets do come in as part of the FEC only for audio
|
|
47
109
|
const fecRecovered =
|
|
@@ -49,86 +111,171 @@ export const getAudioReceiverMqa = ({audioReceiver, statsResults, lastMqaDataSen
|
|
|
49
111
|
lastFecPacketsReceived -
|
|
50
112
|
(statsResults[mediaType][sendrecvType].fecPacketsDiscarded - lastFecPacketsDiscarded);
|
|
51
113
|
|
|
52
|
-
|
|
114
|
+
audioReceiverStream.common.rtpEndToEndLost =
|
|
53
115
|
statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost - fecRecovered || 0;
|
|
54
116
|
|
|
55
|
-
|
|
117
|
+
audioReceiverStream.common.framesDropped =
|
|
56
118
|
statsResults[mediaType][sendrecvType].totalSamplesDecoded - lastPacketsDecoded || 0;
|
|
57
|
-
|
|
58
|
-
(
|
|
119
|
+
audioReceiverStream.common.renderedFrameRate =
|
|
120
|
+
(audioReceiverStream.common.framesDropped * 100) / 60 || 0;
|
|
59
121
|
|
|
60
|
-
|
|
122
|
+
audioReceiverStream.common.framesReceived =
|
|
61
123
|
statsResults[mediaType][sendrecvType].totalSamplesReceived - lastSamplesReceived || 0;
|
|
62
|
-
|
|
124
|
+
audioReceiverStream.common.concealedFrames =
|
|
63
125
|
statsResults[mediaType][sendrecvType].concealedSamples - lastConcealedSamples || 0;
|
|
64
|
-
|
|
126
|
+
audioReceiverStream.common.receivedBitrate =
|
|
65
127
|
((statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived) * 8) / 60 || 0;
|
|
66
|
-
|
|
67
|
-
audioReceiver.common.rtpBitrate = audioReceiver.streams[0].common.receivedBitrate;
|
|
68
128
|
};
|
|
69
129
|
|
|
70
|
-
export const getAudioSenderMqa = ({audioSender, statsResults, lastMqaDataSent,
|
|
130
|
+
export const getAudioSenderMqa = ({audioSender, statsResults, lastMqaDataSent, baseMediaType}) => {
|
|
71
131
|
const sendrecvType = STATS.SEND_DIRECTION;
|
|
72
132
|
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const lastFramesEncoded = lastMqaDataSent[mediaType]?.[sendrecvType].totalKeyFramesEncoded || 0;
|
|
78
|
-
const lastFirCount = lastMqaDataSent[mediaType]?.[sendrecvType].totalFirCount || 0;
|
|
133
|
+
const getLastTotalValue = (value: string) =>
|
|
134
|
+
getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
|
|
135
|
+
const getTotalValue = (value: string) =>
|
|
136
|
+
getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
|
|
79
137
|
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
audioSender.streams[0].common.csi.push(csi);
|
|
83
|
-
}
|
|
138
|
+
const lastPacketsSent = getLastTotalValue('totalPacketsSent');
|
|
139
|
+
const lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');
|
|
84
140
|
|
|
85
|
-
|
|
86
|
-
|
|
141
|
+
const totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');
|
|
142
|
+
const totalPacketsSent = getTotalValue('totalPacketsSent');
|
|
87
143
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
144
|
+
const meanRemoteJitter = Object.keys(statsResults)
|
|
145
|
+
.filter((mt) => mt.includes(baseMediaType))
|
|
146
|
+
.reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);
|
|
147
|
+
const meanRoundTripTime = Object.keys(statsResults)
|
|
148
|
+
.filter((mt) => mt.includes(baseMediaType))
|
|
149
|
+
.reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);
|
|
93
150
|
|
|
94
|
-
audioSender.common.
|
|
95
|
-
statsResults[mediaType
|
|
96
|
-
|
|
151
|
+
audioSender.common.common.direction =
|
|
152
|
+
statsResults[Object.keys(statsResults).find((mediaType) => mediaType.includes(baseMediaType))]
|
|
153
|
+
?.direction || 'inactive';
|
|
154
|
+
audioSender.common.common.isMain = !baseMediaType.includes('-share');
|
|
155
|
+
audioSender.common.transportType = statsResults.connectionType.local.transport;
|
|
156
|
+
|
|
157
|
+
audioSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000 || 0;
|
|
158
|
+
audioSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000 || 0;
|
|
159
|
+
|
|
160
|
+
audioSender.common.rtpPackets = totalPacketsSent - lastPacketsSent || 0;
|
|
161
|
+
// audioSender.streams[0].common.rtpPackets = audioSender.common.rtpPackets;
|
|
97
162
|
// From candidate-pair
|
|
98
|
-
audioSender.common.availableBitrate =
|
|
99
|
-
statsResults
|
|
163
|
+
audioSender.common.availableBitrate = getTotalValueFromBaseType(
|
|
164
|
+
statsResults,
|
|
165
|
+
sendrecvType,
|
|
166
|
+
baseMediaType,
|
|
167
|
+
'availableOutgoingBitrate'
|
|
168
|
+
);
|
|
100
169
|
// Calculate based on how much packets lost of received compated to how to the client sent
|
|
101
170
|
|
|
102
|
-
const
|
|
103
|
-
statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver - lastPacketsLost;
|
|
104
|
-
|
|
171
|
+
const totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;
|
|
105
172
|
audioSender.common.remoteLossRate =
|
|
106
|
-
|
|
107
|
-
? (
|
|
108
|
-
: 0; // This is the packets sent with in last min
|
|
173
|
+
totalPacketsSent - lastPacketsSent > 0
|
|
174
|
+
? (totalPacketsLostForaMin * 100) / (totalPacketsSent - lastPacketsSent)
|
|
175
|
+
: 0; // This is the packets sent with in last min
|
|
109
176
|
|
|
110
|
-
audioSender.common.maxRoundTripTime =
|
|
111
|
-
|
|
112
|
-
max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
|
|
113
|
-
audioSender.common.meanRoundTripTime =
|
|
114
|
-
mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
|
|
177
|
+
audioSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000 || 0;
|
|
178
|
+
audioSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000 || 0;
|
|
115
179
|
audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;
|
|
116
180
|
|
|
117
181
|
// Calculate the outgoing bitrate
|
|
118
|
-
const totalBytesSentInaMin =
|
|
182
|
+
const totalBytesSentInaMin =
|
|
183
|
+
getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, 'totalBytesSent') -
|
|
184
|
+
getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, 'totalBytesSent');
|
|
185
|
+
|
|
186
|
+
audioSender.common.rtpBitrate = totalBytesSentInaMin ? (totalBytesSentInaMin * 8) / 60 : 0;
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
export const getAudioSenderStreamMqa = ({
|
|
190
|
+
audioSenderStream,
|
|
191
|
+
statsResults,
|
|
192
|
+
lastMqaDataSent,
|
|
193
|
+
mediaType,
|
|
194
|
+
}) => {
|
|
195
|
+
const sendrecvType = STATS.SEND_DIRECTION;
|
|
196
|
+
|
|
197
|
+
const lastBytesSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesSent || 0;
|
|
198
|
+
const lastFramesEncoded = lastMqaDataSent[mediaType]?.[sendrecvType].totalKeyFramesEncoded || 0;
|
|
199
|
+
const lastFirCount = lastMqaDataSent[mediaType]?.[sendrecvType].totalFirCount || 0;
|
|
200
|
+
const lastPacketsSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsSent || 0;
|
|
201
|
+
|
|
202
|
+
const {csi} = statsResults[mediaType];
|
|
203
|
+
if (csi && !audioSenderStream.common.csi.includes(csi)) {
|
|
204
|
+
audioSenderStream.common.csi.push(csi);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
audioSenderStream.common.rtpPackets =
|
|
208
|
+
statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;
|
|
119
209
|
|
|
120
|
-
|
|
210
|
+
const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;
|
|
211
|
+
audioSenderStream.common.transmittedBitrate = totalBytesSentInaMin
|
|
121
212
|
? (totalBytesSentInaMin * 8) / 60
|
|
122
213
|
: 0;
|
|
123
|
-
audioSender.common.rtpBitrate = audioSender.streams[0].common.transmittedBitrate;
|
|
124
214
|
|
|
125
|
-
|
|
215
|
+
audioSenderStream.transmittedKeyFrames =
|
|
126
216
|
statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastFramesEncoded || 0;
|
|
127
|
-
|
|
217
|
+
audioSenderStream.requestedKeyFrames =
|
|
128
218
|
statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;
|
|
129
219
|
};
|
|
130
220
|
|
|
131
|
-
export const getVideoReceiverMqa = ({
|
|
221
|
+
export const getVideoReceiverMqa = ({
|
|
222
|
+
videoReceiver,
|
|
223
|
+
statsResults,
|
|
224
|
+
lastMqaDataSent,
|
|
225
|
+
baseMediaType,
|
|
226
|
+
}) => {
|
|
227
|
+
const sendrecvType = STATS.RECEIVE_DIRECTION;
|
|
228
|
+
|
|
229
|
+
const getLastTotalValue = (value: string) =>
|
|
230
|
+
getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
|
|
231
|
+
const getTotalValue = (value: string) =>
|
|
232
|
+
getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
|
|
233
|
+
|
|
234
|
+
const lastPacketsReceived = getLastTotalValue('totalPacketsReceived');
|
|
235
|
+
const lastPacketsLost = getLastTotalValue('totalPacketsLost');
|
|
236
|
+
const lastBytesReceived = getLastTotalValue('totalBytesReceived');
|
|
237
|
+
|
|
238
|
+
const packetsLost = getTotalValue('totalPacketsLost');
|
|
239
|
+
const totalPacketsReceived = getTotalValue('totalPacketsReceived');
|
|
240
|
+
const totalBytesReceived = getTotalValue('totalBytesReceived');
|
|
241
|
+
|
|
242
|
+
const meanRemoteJitter = Object.keys(statsResults)
|
|
243
|
+
.filter((mt) => mt.includes(baseMediaType))
|
|
244
|
+
.reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);
|
|
245
|
+
|
|
246
|
+
videoReceiver.common.common.direction =
|
|
247
|
+
statsResults[Object.keys(statsResults).find((mediaType) => mediaType.includes(baseMediaType))]
|
|
248
|
+
?.direction || 'inactive';
|
|
249
|
+
videoReceiver.common.common.isMain = !baseMediaType.includes('-share');
|
|
250
|
+
videoReceiver.common.transportType = statsResults.connectionType.local.transport;
|
|
251
|
+
|
|
252
|
+
// collect the packets received for the last min
|
|
253
|
+
videoReceiver.common.rtpPackets = totalPacketsReceived - lastPacketsReceived || 0;
|
|
254
|
+
|
|
255
|
+
// Hop by hop are numbers and not percentage so we compare on what we sent the last min
|
|
256
|
+
// this is including packet lost
|
|
257
|
+
const totalPacketsLost = packetsLost - lastPacketsLost;
|
|
258
|
+
videoReceiver.common.mediaHopByHopLost = totalPacketsLost;
|
|
259
|
+
videoReceiver.common.rtpHopByHopLost = totalPacketsLost;
|
|
260
|
+
|
|
261
|
+
// calculate this values
|
|
262
|
+
videoReceiver.common.maxRemoteJitter = max(meanRemoteJitter) * 1000 || 0;
|
|
263
|
+
videoReceiver.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000 || 0;
|
|
264
|
+
|
|
265
|
+
// Calculate the outgoing bitrate
|
|
266
|
+
const totalBytesReceivedInaMin = totalBytesReceived - lastBytesReceived;
|
|
267
|
+
|
|
268
|
+
videoReceiver.common.rtpBitrate = totalBytesReceivedInaMin
|
|
269
|
+
? (totalBytesReceivedInaMin * 8) / 60
|
|
270
|
+
: 0;
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
export const getVideoReceiverStreamMqa = ({
|
|
274
|
+
videoReceiverStream,
|
|
275
|
+
statsResults,
|
|
276
|
+
lastMqaDataSent,
|
|
277
|
+
mediaType,
|
|
278
|
+
}) => {
|
|
132
279
|
const sendrecvType = STATS.RECEIVE_DIRECTION;
|
|
133
280
|
|
|
134
281
|
const lastPacketsReceived = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsReceived || 0;
|
|
@@ -141,153 +288,153 @@ export const getVideoReceiverMqa = ({videoReceiver, statsResults, lastMqaDataSen
|
|
|
141
288
|
const lastPliCount = lastMqaDataSent[mediaType]?.[sendrecvType].totalPliCount || 0;
|
|
142
289
|
|
|
143
290
|
const {csi} = statsResults[mediaType];
|
|
144
|
-
if (csi && !
|
|
145
|
-
|
|
291
|
+
if (csi && !videoReceiverStream.common.csi.includes(csi)) {
|
|
292
|
+
videoReceiverStream.common.csi.push(csi);
|
|
146
293
|
}
|
|
147
294
|
|
|
148
|
-
|
|
149
|
-
videoReceiver.common.transportType = statsResults.connectionType.remote.transport[0];
|
|
150
|
-
// collect the packets received for the last min
|
|
151
|
-
videoReceiver.common.rtpPackets =
|
|
295
|
+
videoReceiverStream.common.rtpPackets =
|
|
152
296
|
statsResults[mediaType][sendrecvType].totalPacketsReceived - lastPacketsReceived || 0;
|
|
153
|
-
videoReceiver.streams[0].common.rtpPackets = videoReceiver.common.rtpPackets;
|
|
154
297
|
|
|
155
298
|
const totalPacketLoss =
|
|
156
299
|
statsResults[mediaType][sendrecvType].totalPacketsLost - lastPacketsLost || 0;
|
|
157
300
|
|
|
158
|
-
// Hope by hop are numbers and not percentage so we compare on what we sent the last min
|
|
159
|
-
// this is including packet lost
|
|
160
|
-
videoReceiver.common.mediaHopByHopLost = totalPacketLoss;
|
|
161
|
-
videoReceiver.common.rtpHopByHopLost = totalPacketLoss;
|
|
162
|
-
|
|
163
301
|
// End to end packetloss is after recovery
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
// calculate this values
|
|
302
|
+
videoReceiverStream.common.rtpEndToEndLost = totalPacketLoss;
|
|
167
303
|
|
|
168
|
-
|
|
304
|
+
videoReceiverStream.common.rtpJitter =
|
|
169
305
|
// @ts-ignore
|
|
170
306
|
max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
|
|
171
|
-
videoReceiver.common.meanRemoteJitter =
|
|
172
|
-
mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
|
|
173
|
-
|
|
174
|
-
videoReceiver.streams[0].common.rtpJitter = videoReceiver.common.maxRemoteJitter;
|
|
175
|
-
// 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;
|
|
176
307
|
|
|
177
|
-
// Calculate the outgoing bitrate
|
|
178
308
|
const totalBytesReceivedInaMin =
|
|
179
309
|
statsResults[mediaType][sendrecvType].totalBytesReceived - lastBytesReceived;
|
|
180
|
-
|
|
181
|
-
videoReceiver.streams[0].common.receivedBitrate = totalBytesReceivedInaMin
|
|
310
|
+
videoReceiverStream.common.receivedBitrate = totalBytesReceivedInaMin
|
|
182
311
|
? (totalBytesReceivedInaMin * 8) / 60
|
|
183
312
|
: 0;
|
|
184
|
-
videoReceiver.common.rtpBitrate = videoReceiver.streams[0].common.receivedBitrate;
|
|
185
313
|
|
|
186
|
-
// From tracks //TODO: calculate a proper one
|
|
187
314
|
const totalFrameReceivedInaMin =
|
|
188
|
-
statsResults
|
|
315
|
+
statsResults[mediaType][sendrecvType].framesReceived - lastFramesReceived;
|
|
189
316
|
const totalFrameDecodedInaMin =
|
|
190
|
-
statsResults
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
?
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
?
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
statsResults
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
256;
|
|
208
|
-
|
|
209
|
-
videoReceiver.streams[0].receivedKeyFrames =
|
|
317
|
+
statsResults[mediaType][sendrecvType].framesDecoded - lastFramesDecoded;
|
|
318
|
+
|
|
319
|
+
videoReceiverStream.common.receivedFrameRate = Math.round(
|
|
320
|
+
totalFrameReceivedInaMin ? totalFrameReceivedInaMin / 60 : 0
|
|
321
|
+
);
|
|
322
|
+
videoReceiverStream.common.renderedFrameRate = Math.round(
|
|
323
|
+
totalFrameDecodedInaMin ? totalFrameDecodedInaMin / 60 : 0
|
|
324
|
+
);
|
|
325
|
+
|
|
326
|
+
videoReceiverStream.common.framesDropped =
|
|
327
|
+
statsResults[mediaType][sendrecvType].framesDropped - lastFramesDropped || 0;
|
|
328
|
+
videoReceiverStream.receivedHeight = statsResults[mediaType][sendrecvType].height || 0;
|
|
329
|
+
videoReceiverStream.receivedWidth = statsResults[mediaType][sendrecvType].width || 0;
|
|
330
|
+
videoReceiverStream.receivedFrameSize =
|
|
331
|
+
(videoReceiverStream.receivedHeight * videoReceiverStream.receivedWidth) / 256;
|
|
332
|
+
|
|
333
|
+
videoReceiverStream.receivedKeyFrames =
|
|
210
334
|
statsResults[mediaType][sendrecvType].keyFramesDecoded - lastKeyFramesDecoded || 0;
|
|
211
|
-
|
|
335
|
+
videoReceiverStream.requestedKeyFrames =
|
|
212
336
|
statsResults[mediaType][sendrecvType].totalPliCount - lastPliCount || 0;
|
|
213
337
|
};
|
|
214
338
|
|
|
215
|
-
export const getVideoSenderMqa = ({videoSender, statsResults, lastMqaDataSent,
|
|
339
|
+
export const getVideoSenderMqa = ({videoSender, statsResults, lastMqaDataSent, baseMediaType}) => {
|
|
216
340
|
const sendrecvType = STATS.SEND_DIRECTION;
|
|
217
341
|
|
|
218
|
-
const
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
const
|
|
225
|
-
const
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
videoSender.common.
|
|
342
|
+
const getLastTotalValue = (value: string) =>
|
|
343
|
+
getTotalValueFromBaseType(lastMqaDataSent, sendrecvType, baseMediaType, value);
|
|
344
|
+
const getTotalValue = (value: string) =>
|
|
345
|
+
getTotalValueFromBaseType(statsResults, sendrecvType, baseMediaType, value);
|
|
346
|
+
|
|
347
|
+
const lastPacketsSent = getLastTotalValue('totalPacketsSent');
|
|
348
|
+
const lastBytesSent = getLastTotalValue('totalBytesSent');
|
|
349
|
+
const lastPacketsLostTotal = getLastTotalValue('totalPacketsLostOnReceiver');
|
|
350
|
+
|
|
351
|
+
const totalPacketsLostOnReceiver = getTotalValue('totalPacketsLostOnReceiver');
|
|
352
|
+
const totalPacketsSent = getTotalValue('totalPacketsSent');
|
|
353
|
+
const totalBytesSent = getTotalValue('totalBytesSent');
|
|
354
|
+
const availableOutgoingBitrate = getTotalValue('availableOutgoingBitrate');
|
|
355
|
+
|
|
356
|
+
videoSender.common.common.direction =
|
|
357
|
+
statsResults[Object.keys(statsResults).find((mediaType) => mediaType.includes(baseMediaType))]
|
|
358
|
+
?.direction || 'inactive';
|
|
359
|
+
videoSender.common.common.isMain = !baseMediaType.includes('-share');
|
|
360
|
+
videoSender.common.transportType = statsResults.connectionType.local.transport;
|
|
361
|
+
|
|
362
|
+
const meanRemoteJitter = Object.keys(statsResults)
|
|
363
|
+
.filter((mt) => mt.includes(baseMediaType))
|
|
364
|
+
.reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRemoteJitter), []);
|
|
365
|
+
const meanRoundTripTime = Object.keys(statsResults)
|
|
366
|
+
.filter((mt) => mt.includes(baseMediaType))
|
|
367
|
+
.reduce((acc, mt) => acc.concat(statsResults[mt][sendrecvType].meanRoundTripTime), []);
|
|
233
368
|
|
|
234
369
|
// @ts-ignore
|
|
235
|
-
videoSender.common.maxRemoteJitter =
|
|
236
|
-
|
|
237
|
-
max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
|
|
238
|
-
videoSender.common.meanRemoteJitter =
|
|
239
|
-
mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
|
|
370
|
+
videoSender.common.maxRemoteJitter = max(meanRemoteJitter) * 1000 || 0;
|
|
371
|
+
videoSender.common.meanRemoteJitter = mean(meanRemoteJitter) * 1000 || 0;
|
|
240
372
|
|
|
241
|
-
videoSender.common.rtpPackets =
|
|
242
|
-
|
|
243
|
-
videoSender.common.availableBitrate =
|
|
244
|
-
statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;
|
|
245
|
-
// Calculate based on how much packets lost of received compated to how to the client sent
|
|
373
|
+
videoSender.common.rtpPackets = totalPacketsSent - lastPacketsSent;
|
|
374
|
+
videoSender.common.availableBitrate = availableOutgoingBitrate;
|
|
246
375
|
|
|
247
|
-
|
|
248
|
-
|
|
376
|
+
// Calculate based on how much packets lost of received compated to how to the client sent
|
|
377
|
+
const totalPacketsLostForaMin = totalPacketsLostOnReceiver - lastPacketsLostTotal;
|
|
249
378
|
|
|
250
379
|
videoSender.common.remoteLossRate =
|
|
251
|
-
|
|
252
|
-
? (
|
|
380
|
+
totalPacketsSent - lastPacketsSent > 0
|
|
381
|
+
? (totalPacketsLostForaMin * 100) / (totalPacketsSent - lastPacketsSent)
|
|
253
382
|
: 0; // This is the packets sent with in last min || 0;
|
|
254
383
|
|
|
255
|
-
videoSender.common.maxRoundTripTime =
|
|
256
|
-
|
|
257
|
-
max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
|
|
258
|
-
videoSender.common.meanRoundTripTime =
|
|
259
|
-
mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
|
|
384
|
+
videoSender.common.maxRoundTripTime = max(meanRoundTripTime) * 1000 || 0;
|
|
385
|
+
videoSender.common.meanRoundTripTime = mean(meanRoundTripTime) * 1000 || 0;
|
|
260
386
|
videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;
|
|
261
387
|
|
|
262
|
-
|
|
388
|
+
// Calculate the outgoing bitrate
|
|
389
|
+
const totalBytesSentInaMin = totalBytesSent - lastBytesSent;
|
|
390
|
+
|
|
391
|
+
videoSender.common.rtpBitrate = totalBytesSentInaMin ? (totalBytesSentInaMin * 8) / 60 : 0;
|
|
392
|
+
};
|
|
393
|
+
|
|
394
|
+
export const getVideoSenderStreamMqa = ({
|
|
395
|
+
videoSenderStream,
|
|
396
|
+
statsResults,
|
|
397
|
+
lastMqaDataSent,
|
|
398
|
+
mediaType,
|
|
399
|
+
}) => {
|
|
400
|
+
const sendrecvType = STATS.SEND_DIRECTION;
|
|
401
|
+
|
|
402
|
+
const lastPacketsSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalPacketsSent || 0;
|
|
403
|
+
const lastBytesSent = lastMqaDataSent[mediaType]?.[sendrecvType].totalBytesSent || 0;
|
|
404
|
+
const lastKeyFramesEncoded =
|
|
405
|
+
lastMqaDataSent[mediaType]?.[sendrecvType].totalKeyFramesEncoded || 0;
|
|
406
|
+
const lastFirCount = lastMqaDataSent[mediaType]?.[sendrecvType].totalFirCount || 0;
|
|
407
|
+
const lastFramesSent = lastMqaDataSent[mediaType]?.[sendrecvType].framesSent || 0;
|
|
408
|
+
|
|
409
|
+
const {csi} = statsResults[mediaType];
|
|
410
|
+
if (csi && !videoSenderStream.common.csi.includes(csi)) {
|
|
411
|
+
videoSenderStream.common.csi.push(csi);
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
videoSenderStream.common.rtpPackets =
|
|
263
415
|
statsResults[mediaType][sendrecvType].totalPacketsSent - lastPacketsSent || 0;
|
|
264
416
|
|
|
265
417
|
// Calculate the outgoing bitrate
|
|
266
418
|
const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastBytesSent;
|
|
267
419
|
|
|
268
|
-
|
|
420
|
+
videoSenderStream.common.transmittedBitrate = totalBytesSentInaMin
|
|
269
421
|
? (totalBytesSentInaMin * 8) / 60
|
|
270
422
|
: 0;
|
|
271
423
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
videoSender.streams[0].transmittedKeyFrames =
|
|
424
|
+
videoSenderStream.transmittedKeyFrames =
|
|
275
425
|
statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastKeyFramesEncoded || 0;
|
|
276
|
-
|
|
426
|
+
videoSenderStream.requestedKeyFrames =
|
|
277
427
|
statsResults[mediaType][sendrecvType].totalFirCount - lastFirCount || 0;
|
|
278
428
|
|
|
279
429
|
// From tracks //TODO: calculate a proper one
|
|
280
430
|
const totalFrameSentInaMin =
|
|
281
|
-
statsResults
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
?
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
(statsResults.resolutions[mediaType][sendrecvType].height *
|
|
291
|
-
statsResults.resolutions[mediaType][sendrecvType].width) /
|
|
292
|
-
254;
|
|
431
|
+
statsResults[mediaType][sendrecvType].framesSent - (lastFramesSent || 0);
|
|
432
|
+
|
|
433
|
+
videoSenderStream.common.transmittedFrameRate = Math.round(
|
|
434
|
+
totalFrameSentInaMin ? totalFrameSentInaMin / 60 : 0
|
|
435
|
+
);
|
|
436
|
+
videoSenderStream.transmittedHeight = statsResults[mediaType][sendrecvType].height || 0;
|
|
437
|
+
videoSenderStream.transmittedWidth = statsResults[mediaType][sendrecvType].width || 0;
|
|
438
|
+
videoSenderStream.transmittedFrameSize =
|
|
439
|
+
(videoSenderStream.transmittedHeight * videoSenderStream.transmittedWidth) / 256;
|
|
293
440
|
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) 2015-2023 Cisco Systems, Inc. See LICENSE file.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {MEETINGS} from '../constants';
|
|
6
|
+
|
|
7
|
+
class WebinarCollection {
|
|
8
|
+
webinarInfo: any;
|
|
9
|
+
|
|
10
|
+
namespace = MEETINGS;
|
|
11
|
+
|
|
12
|
+
mainIndex = 'sessionId';
|
|
13
|
+
|
|
14
|
+
constructor() {
|
|
15
|
+
this.webinarInfo = {};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
set(id, info) {
|
|
19
|
+
this.webinarInfo[id] = info;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @param {String} id
|
|
24
|
+
* @returns {Member}
|
|
25
|
+
*/
|
|
26
|
+
get(id: string) {
|
|
27
|
+
return this.webinarInfo[id];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export default WebinarCollection;
|