@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
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
+
var _Object$keys2 = require("@babel/runtime-corejs2/core-js/object/keys");
|
|
5
|
+
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
|
|
6
|
+
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
|
|
7
|
+
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
|
|
8
|
+
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
|
|
4
9
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
5
10
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
6
11
|
_Object$defineProperty(exports, "__esModule", {
|
|
@@ -17,6 +22,7 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/
|
|
|
17
22
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
18
23
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
19
24
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
25
|
+
var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty"));
|
|
20
26
|
var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
21
27
|
var _internalMediaCore = require("@webex/internal-media-core");
|
|
22
28
|
var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
|
|
@@ -25,6 +31,8 @@ var _config = require("../mediaQualityMetrics/config");
|
|
|
25
31
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
26
32
|
var _global = _interopRequireDefault(require("./global"));
|
|
27
33
|
var _mqaUtil = require("./mqaUtil");
|
|
34
|
+
function ownKeys(object, enumerableOnly) { var keys = _Object$keys2(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
35
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
28
36
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
29
37
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
30
38
|
var EVENTS = {
|
|
@@ -49,7 +57,6 @@ var emptyReceiver = {
|
|
|
49
57
|
meanRtpJitter: [],
|
|
50
58
|
meanRoundTripTime: []
|
|
51
59
|
};
|
|
52
|
-
|
|
53
60
|
/**
|
|
54
61
|
* Stats Analyzer class that will emit events based on detected quality
|
|
55
62
|
*
|
|
@@ -60,18 +67,24 @@ var emptyReceiver = {
|
|
|
60
67
|
var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
61
68
|
(0, _inherits2.default)(StatsAnalyzer, _EventsScope);
|
|
62
69
|
var _super = _createSuper(StatsAnalyzer);
|
|
70
|
+
// Returns the local IP address for diagnostics. this is the local IP of the interface used for the current media connection a host can have many local Ip Addresses
|
|
71
|
+
|
|
63
72
|
/**
|
|
64
73
|
* Creates a new instance of StatsAnalyzer
|
|
65
74
|
* @constructor
|
|
66
75
|
* @public
|
|
67
76
|
* @param {Object} config SDK Configuration Object
|
|
77
|
+
* @param {Function} receiveSlotCallback Callback used to access receive slots.
|
|
68
78
|
* @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)
|
|
69
79
|
* @param {Object} statsResults Default properties for stats
|
|
70
80
|
*/
|
|
71
81
|
function StatsAnalyzer(config) {
|
|
72
82
|
var _this;
|
|
73
|
-
var
|
|
74
|
-
|
|
83
|
+
var receiveSlotCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {
|
|
84
|
+
return undefined;
|
|
85
|
+
};
|
|
86
|
+
var networkQualityMonitor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
87
|
+
var statsResults = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _global.default;
|
|
75
88
|
(0, _classCallCheck2.default)(this, StatsAnalyzer);
|
|
76
89
|
_this = _super.call(this);
|
|
77
90
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "config", void 0);
|
|
@@ -87,6 +100,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
87
100
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsInterval", void 0);
|
|
88
101
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsResults", void 0);
|
|
89
102
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsStarted", void 0);
|
|
103
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "successfulCandidatePair", void 0);
|
|
104
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "localIpAddress", void 0);
|
|
105
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "receiveSlotCallback", void 0);
|
|
90
106
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "emitStartStopEvents", function (mediaType, previousValue, currentValue, isLocal) {
|
|
91
107
|
if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {
|
|
92
108
|
throw new Error("Unsupported mediaType: ".concat(mediaType));
|
|
@@ -120,57 +136,75 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
120
136
|
});
|
|
121
137
|
}
|
|
122
138
|
});
|
|
139
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "extractAndSetLocalIpAddressInfoForDiagnostics", function (successfulCandidatePairId, candidates) {
|
|
140
|
+
var newIpAddress = '';
|
|
141
|
+
if (successfulCandidatePairId && !(0, _isEmpty2.default)(candidates)) {
|
|
142
|
+
var localCandidate = candidates[successfulCandidatePairId];
|
|
143
|
+
if (localCandidate) {
|
|
144
|
+
if (localCandidate.candidateType === 'host') {
|
|
145
|
+
// if it's a host candidate, use the address property - it will be the local IP
|
|
146
|
+
newIpAddress = "".concat(localCandidate.address);
|
|
147
|
+
} else if (localCandidate.candidateType === 'prflx') {
|
|
148
|
+
// if it's a peer reflexive candidate and we're not using a relay (there is no relayProtocol set)
|
|
149
|
+
// then look at the relatedAddress - it will be the local
|
|
150
|
+
//
|
|
151
|
+
// Firefox doesn't populate the relayProtocol property
|
|
152
|
+
if (!localCandidate.relayProtocol) {
|
|
153
|
+
newIpAddress = "".concat(localCandidate.relatedAddress);
|
|
154
|
+
} else {
|
|
155
|
+
// if it's a peer reflexive candidate and we are using a relay -
|
|
156
|
+
// in that case the relatedAddress will be the IP of the TURN server (Linus),
|
|
157
|
+
// so we can only look at the address, but it might be local IP or public IP,
|
|
158
|
+
// depending on if the user is behind a NAT or not
|
|
159
|
+
newIpAddress = "".concat(localCandidate.address);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
_this.localIpAddress = newIpAddress;
|
|
165
|
+
});
|
|
123
166
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "parseCandidate", function (result, type, isSender, isRemote) {
|
|
167
|
+
var _this$successfulCandi;
|
|
124
168
|
if (!result || !result.id) {
|
|
125
169
|
return;
|
|
126
170
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
if (!result.id) return;
|
|
132
|
-
var sendRecvType = isSender ? _constants.STATS.SEND_DIRECTION : _constants.STATS.RECEIVE_DIRECTION;
|
|
133
|
-
var ipType = isRemote ? _constants.STATS.REMOTE : _constants.STATS.LOCAL;
|
|
134
|
-
if (!RemoteCandidateType[result.id]) {
|
|
135
|
-
RemoteCandidateType[result.id] = [];
|
|
136
|
-
}
|
|
137
|
-
if (!RemoteTransport[result.id]) {
|
|
138
|
-
RemoteTransport[result.id] = [];
|
|
139
|
-
}
|
|
140
|
-
if (!RemoteIpAddress[result.id]) {
|
|
141
|
-
RemoteIpAddress[result.id] = [];
|
|
142
|
-
}
|
|
143
|
-
if (!RemoteNetworkType[result.id]) {
|
|
144
|
-
RemoteNetworkType[result.id] = [];
|
|
145
|
-
}
|
|
146
|
-
if (result.candidateType && RemoteCandidateType[result.id].indexOf(result.candidateType) === -1) {
|
|
147
|
-
RemoteCandidateType[result.id].push(result.candidateType);
|
|
148
|
-
}
|
|
149
|
-
if (result.protocol && RemoteTransport[result.id].indexOf(result.protocol) === -1) {
|
|
150
|
-
RemoteTransport[result.id].push(result.protocol.toUpperCase());
|
|
171
|
+
|
|
172
|
+
// We only care about the successful local candidate
|
|
173
|
+
if (((_this$successfulCandi = _this.successfulCandidatePair) === null || _this$successfulCandi === void 0 ? void 0 : _this$successfulCandi.localCandidateId) !== result.id) {
|
|
174
|
+
return;
|
|
151
175
|
}
|
|
152
|
-
|
|
153
|
-
|
|
176
|
+
var transport;
|
|
177
|
+
if (result.relayProtocol) {
|
|
178
|
+
transport = result.relayProtocol.toUpperCase();
|
|
179
|
+
} else if (result.protocol) {
|
|
180
|
+
transport = result.protocol.toUpperCase();
|
|
154
181
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
182
|
+
var sendRecvType = isSender ? _constants.STATS.SEND_DIRECTION : _constants.STATS.RECEIVE_DIRECTION;
|
|
183
|
+
var ipType = isRemote ? _constants.STATS.REMOTE : _constants.STATS.LOCAL;
|
|
184
|
+
if (!_this.statsResults.candidates) {
|
|
185
|
+
_this.statsResults.candidates = {};
|
|
158
186
|
}
|
|
159
|
-
_this.statsResults.
|
|
160
|
-
candidateType:
|
|
161
|
-
ipAddress:
|
|
187
|
+
_this.statsResults.candidates[result.id] = {
|
|
188
|
+
candidateType: result.candidateType,
|
|
189
|
+
ipAddress: result.ip,
|
|
190
|
+
// TODO: add ports
|
|
191
|
+
relatedAddress: result.relatedAddress,
|
|
192
|
+
relatedPort: result.relatedPort,
|
|
193
|
+
relayProtocol: result.relayProtocol,
|
|
194
|
+
protocol: result.protocol,
|
|
195
|
+
address: result.address,
|
|
162
196
|
portNumber: result.port,
|
|
163
|
-
networkType:
|
|
197
|
+
networkType: result.networkType,
|
|
164
198
|
priority: result.priority,
|
|
165
|
-
transport:
|
|
199
|
+
transport: transport,
|
|
166
200
|
timestamp: result.time,
|
|
167
201
|
id: result.id,
|
|
168
202
|
type: result.type
|
|
169
203
|
};
|
|
170
|
-
_this.statsResults.connectionType[ipType].candidateType =
|
|
171
|
-
_this.statsResults.connectionType[ipType].ipAddress =
|
|
172
|
-
_this.statsResults.connectionType[ipType].networkType =
|
|
173
|
-
_this.statsResults.connectionType[ipType].transport =
|
|
204
|
+
_this.statsResults.connectionType[ipType].candidateType = result.candidateType;
|
|
205
|
+
_this.statsResults.connectionType[ipType].ipAddress = result.ipAddress;
|
|
206
|
+
_this.statsResults.connectionType[ipType].networkType = result.networkType === _constants.NETWORK_TYPE.VPN ? _constants.NETWORK_TYPE.UNKNOWN : result.networkType;
|
|
207
|
+
_this.statsResults.connectionType[ipType].transport = transport;
|
|
174
208
|
_this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;
|
|
175
209
|
});
|
|
176
210
|
_this.statsStarted = false;
|
|
@@ -182,6 +216,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
182
216
|
_this.mqaSentCount = -1;
|
|
183
217
|
_this.lastMqaDataSent = {};
|
|
184
218
|
_this.lastEmittedStartStopEvent = {};
|
|
219
|
+
_this.receiveSlotCallback = receiveSlotCallback;
|
|
220
|
+
_this.successfulCandidatePair = {};
|
|
221
|
+
_this.localIpAddress = '';
|
|
185
222
|
return _this;
|
|
186
223
|
}
|
|
187
224
|
|
|
@@ -218,7 +255,11 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
218
255
|
}, {
|
|
219
256
|
key: "updateMediaStatus",
|
|
220
257
|
value: function updateMediaStatus(status) {
|
|
221
|
-
|
|
258
|
+
var _this$meetingMediaSta, _this$meetingMediaSta2;
|
|
259
|
+
this.meetingMediaStatus = {
|
|
260
|
+
actual: _objectSpread(_objectSpread({}, (_this$meetingMediaSta = this.meetingMediaStatus) === null || _this$meetingMediaSta === void 0 ? void 0 : _this$meetingMediaSta.actual), status === null || status === void 0 ? void 0 : status.actual),
|
|
261
|
+
expected: _objectSpread(_objectSpread({}, (_this$meetingMediaSta2 = this.meetingMediaStatus) === null || _this$meetingMediaSta2 === void 0 ? void 0 : _this$meetingMediaSta2.expected), status === null || status === void 0 ? void 0 : status.expected)
|
|
262
|
+
};
|
|
222
263
|
}
|
|
223
264
|
|
|
224
265
|
/**
|
|
@@ -233,64 +274,186 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
233
274
|
value: function sendMqaData() {
|
|
234
275
|
var _this3 = this;
|
|
235
276
|
var newMqa = (0, _cloneDeep2.default)(_config.emptyMqaInterval);
|
|
277
|
+
|
|
278
|
+
// Fill in empty stats items for lastMqaDataSent
|
|
236
279
|
(0, _keys.default)(this.statsResults).forEach(function (mediaType) {
|
|
237
|
-
if (
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
280
|
+
if (!_this3.lastMqaDataSent[mediaType]) {
|
|
281
|
+
_this3.lastMqaDataSent[mediaType] = {};
|
|
282
|
+
}
|
|
283
|
+
if (!_this3.lastMqaDataSent[mediaType].send && mediaType.includes('-send')) {
|
|
284
|
+
_this3.lastMqaDataSent[mediaType].send = {};
|
|
285
|
+
}
|
|
286
|
+
if (!_this3.lastMqaDataSent[mediaType].recv && mediaType.includes('-recv')) {
|
|
287
|
+
_this3.lastMqaDataSent[mediaType].recv = {};
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
// Create stats the first level, totals for senders and receivers
|
|
292
|
+
var audioSender = (0, _cloneDeep2.default)(_config.emptyAudioTransmit);
|
|
293
|
+
var audioShareSender = (0, _cloneDeep2.default)(_config.emptyAudioTransmit);
|
|
294
|
+
var audioReceiver = (0, _cloneDeep2.default)(_config.emptyAudioReceive);
|
|
295
|
+
var audioShareReceiver = (0, _cloneDeep2.default)(_config.emptyAudioReceive);
|
|
296
|
+
var videoSender = (0, _cloneDeep2.default)(_config.emptyVideoTransmit);
|
|
297
|
+
var videoShareSender = (0, _cloneDeep2.default)(_config.emptyVideoTransmit);
|
|
298
|
+
var videoReceiver = (0, _cloneDeep2.default)(_config.emptyVideoReceive);
|
|
299
|
+
var videoShareReceiver = (0, _cloneDeep2.default)(_config.emptyVideoReceive);
|
|
300
|
+
(0, _mqaUtil.getAudioSenderMqa)({
|
|
301
|
+
audioSender: audioSender,
|
|
302
|
+
statsResults: this.statsResults,
|
|
303
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
304
|
+
baseMediaType: 'audio-send'
|
|
305
|
+
});
|
|
306
|
+
newMqa.audioTransmit.push(audioSender);
|
|
307
|
+
(0, _mqaUtil.getAudioSenderMqa)({
|
|
308
|
+
audioSender: audioShareSender,
|
|
309
|
+
statsResults: this.statsResults,
|
|
310
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
311
|
+
baseMediaType: 'audio-share-send'
|
|
312
|
+
});
|
|
313
|
+
newMqa.audioTransmit.push(audioShareSender);
|
|
314
|
+
(0, _mqaUtil.getAudioReceiverMqa)({
|
|
315
|
+
audioReceiver: audioReceiver,
|
|
316
|
+
statsResults: this.statsResults,
|
|
317
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
318
|
+
baseMediaType: 'audio-recv'
|
|
319
|
+
});
|
|
320
|
+
newMqa.audioReceive.push(audioReceiver);
|
|
321
|
+
(0, _mqaUtil.getAudioReceiverMqa)({
|
|
322
|
+
audioReceiver: audioShareReceiver,
|
|
323
|
+
statsResults: this.statsResults,
|
|
324
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
325
|
+
baseMediaType: 'audio-share-recv'
|
|
326
|
+
});
|
|
327
|
+
newMqa.audioReceive.push(audioShareReceiver);
|
|
328
|
+
(0, _mqaUtil.getVideoSenderMqa)({
|
|
329
|
+
videoSender: videoSender,
|
|
330
|
+
statsResults: this.statsResults,
|
|
331
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
332
|
+
baseMediaType: 'video-send'
|
|
333
|
+
});
|
|
334
|
+
newMqa.videoTransmit.push(videoSender);
|
|
335
|
+
(0, _mqaUtil.getVideoSenderMqa)({
|
|
336
|
+
videoSender: videoShareSender,
|
|
337
|
+
statsResults: this.statsResults,
|
|
338
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
339
|
+
baseMediaType: 'video-share-send'
|
|
340
|
+
});
|
|
341
|
+
newMqa.videoTransmit.push(videoShareSender);
|
|
342
|
+
(0, _mqaUtil.getVideoReceiverMqa)({
|
|
343
|
+
videoReceiver: videoReceiver,
|
|
344
|
+
statsResults: this.statsResults,
|
|
345
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
346
|
+
baseMediaType: 'video-recv'
|
|
347
|
+
});
|
|
348
|
+
newMqa.videoReceive.push(videoReceiver);
|
|
349
|
+
(0, _mqaUtil.getVideoReceiverMqa)({
|
|
350
|
+
videoReceiver: videoShareReceiver,
|
|
351
|
+
statsResults: this.statsResults,
|
|
352
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
353
|
+
baseMediaType: 'video-share-recv'
|
|
354
|
+
});
|
|
355
|
+
newMqa.videoReceive.push(videoShareReceiver);
|
|
356
|
+
|
|
357
|
+
// Add stats for individual streams
|
|
358
|
+
(0, _keys.default)(this.statsResults).forEach(function (mediaType) {
|
|
359
|
+
if (mediaType.includes('audio-send')) {
|
|
360
|
+
var audioSenderStream = (0, _cloneDeep2.default)(_config.emptyAudioTransmitStream);
|
|
361
|
+
(0, _mqaUtil.getAudioSenderStreamMqa)({
|
|
362
|
+
audioSenderStream: audioSenderStream,
|
|
363
|
+
statsResults: _this3.statsResults,
|
|
364
|
+
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
365
|
+
mediaType: mediaType
|
|
366
|
+
});
|
|
367
|
+
newMqa.audioTransmit[0].streams.push(audioSenderStream);
|
|
368
|
+
_this3.lastMqaDataSent[mediaType].send = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].send);
|
|
369
|
+
} else if (mediaType.includes('audio-share-send')) {
|
|
370
|
+
var _audioSenderStream = (0, _cloneDeep2.default)(_config.emptyAudioTransmitStream);
|
|
371
|
+
(0, _mqaUtil.getAudioSenderStreamMqa)({
|
|
372
|
+
audioSenderStream: _audioSenderStream,
|
|
373
|
+
statsResults: _this3.statsResults,
|
|
374
|
+
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
375
|
+
mediaType: mediaType
|
|
376
|
+
});
|
|
377
|
+
newMqa.audioTransmit[1].streams.push(_audioSenderStream);
|
|
378
|
+
_this3.lastMqaDataSent[mediaType].send = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].send);
|
|
379
|
+
} else if (mediaType.includes('audio-recv')) {
|
|
380
|
+
var audioReceiverStream = (0, _cloneDeep2.default)(_config.emptyAudioReceiveStream);
|
|
381
|
+
(0, _mqaUtil.getAudioReceiverStreamMqa)({
|
|
382
|
+
audioReceiverStream: audioReceiverStream,
|
|
383
|
+
statsResults: _this3.statsResults,
|
|
384
|
+
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
385
|
+
mediaType: mediaType
|
|
386
|
+
});
|
|
387
|
+
newMqa.audioReceive[0].streams.push(audioReceiverStream);
|
|
388
|
+
_this3.lastMqaDataSent[mediaType].recv = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].recv);
|
|
389
|
+
} else if (mediaType.includes('audio-share-recv')) {
|
|
390
|
+
var _audioReceiverStream = (0, _cloneDeep2.default)(_config.emptyAudioReceiveStream);
|
|
391
|
+
(0, _mqaUtil.getAudioReceiverStreamMqa)({
|
|
392
|
+
audioReceiverStream: _audioReceiverStream,
|
|
393
|
+
statsResults: _this3.statsResults,
|
|
394
|
+
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
395
|
+
mediaType: mediaType
|
|
396
|
+
});
|
|
397
|
+
newMqa.audioReceive[1].streams.push(_audioReceiverStream);
|
|
398
|
+
_this3.lastMqaDataSent[mediaType].recv = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].recv);
|
|
399
|
+
} else if (mediaType.includes('video-send')) {
|
|
400
|
+
var videoSenderStream = (0, _cloneDeep2.default)(_config.emptyVideoTransmitStream);
|
|
401
|
+
(0, _mqaUtil.getVideoSenderStreamMqa)({
|
|
402
|
+
videoSenderStream: videoSenderStream,
|
|
241
403
|
statsResults: _this3.statsResults,
|
|
242
404
|
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
243
405
|
mediaType: mediaType
|
|
244
406
|
});
|
|
245
|
-
newMqa.
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
(0,
|
|
249
|
-
|
|
407
|
+
newMqa.videoTransmit[0].streams.push(videoSenderStream);
|
|
408
|
+
_this3.lastMqaDataSent[mediaType].send = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].send);
|
|
409
|
+
} else if (mediaType.includes('video-share-send')) {
|
|
410
|
+
var _videoSenderStream = (0, _cloneDeep2.default)(_config.emptyVideoTransmitStream);
|
|
411
|
+
(0, _mqaUtil.getVideoSenderStreamMqa)({
|
|
412
|
+
videoSenderStream: _videoSenderStream,
|
|
250
413
|
statsResults: _this3.statsResults,
|
|
251
414
|
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
252
415
|
mediaType: mediaType
|
|
253
416
|
});
|
|
254
|
-
newMqa.
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
(0,
|
|
258
|
-
|
|
417
|
+
newMqa.videoTransmit[1].streams.push(_videoSenderStream);
|
|
418
|
+
_this3.lastMqaDataSent[mediaType].send = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].send);
|
|
419
|
+
} else if (mediaType.includes('video-recv')) {
|
|
420
|
+
var videoReceiverStream = (0, _cloneDeep2.default)(_config.emptyVideoReceiveStream);
|
|
421
|
+
(0, _mqaUtil.getVideoReceiverStreamMqa)({
|
|
422
|
+
videoReceiverStream: videoReceiverStream,
|
|
259
423
|
statsResults: _this3.statsResults,
|
|
260
424
|
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
261
425
|
mediaType: mediaType
|
|
262
426
|
});
|
|
263
|
-
newMqa.
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
(0,
|
|
267
|
-
|
|
427
|
+
newMqa.videoReceive[0].streams.push(videoReceiverStream);
|
|
428
|
+
_this3.lastMqaDataSent[mediaType].recv = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].recv);
|
|
429
|
+
} else if (mediaType.includes('video-share-recv')) {
|
|
430
|
+
var _videoReceiverStream = (0, _cloneDeep2.default)(_config.emptyVideoReceiveStream);
|
|
431
|
+
(0, _mqaUtil.getVideoReceiverStreamMqa)({
|
|
432
|
+
videoReceiverStream: _videoReceiverStream,
|
|
268
433
|
statsResults: _this3.statsResults,
|
|
269
434
|
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
270
435
|
mediaType: mediaType
|
|
271
436
|
});
|
|
272
|
-
newMqa.videoReceive.push(
|
|
437
|
+
newMqa.videoReceive[1].streams.push(_videoReceiverStream);
|
|
438
|
+
_this3.lastMqaDataSent[mediaType].recv = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].recv);
|
|
273
439
|
}
|
|
274
440
|
});
|
|
275
|
-
newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress
|
|
441
|
+
newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;
|
|
276
442
|
|
|
277
443
|
// Adding peripheral information
|
|
278
|
-
newMqa.intervalMetadata.peripherals = [];
|
|
279
444
|
newMqa.intervalMetadata.peripherals.push({
|
|
280
445
|
information: _constants._UNKNOWN_,
|
|
281
446
|
name: _constants.MEDIA_DEVICES.SPEAKER
|
|
282
447
|
});
|
|
283
448
|
if (this.statsResults['audio-send']) {
|
|
284
|
-
var _this$statsResults$au;
|
|
285
449
|
newMqa.intervalMetadata.peripherals.push({
|
|
286
|
-
information:
|
|
450
|
+
information: this.statsResults['audio-send'].trackLabel || _constants._UNKNOWN_,
|
|
287
451
|
name: _constants.MEDIA_DEVICES.MICROPHONE
|
|
288
452
|
});
|
|
289
453
|
}
|
|
290
454
|
if (this.statsResults['video-send']) {
|
|
291
|
-
var _this$statsResults$vi;
|
|
292
455
|
newMqa.intervalMetadata.peripherals.push({
|
|
293
|
-
information:
|
|
456
|
+
information: this.statsResults['video-send'].trackLabel || _constants._UNKNOWN_,
|
|
294
457
|
name: _constants.MEDIA_DEVICES.CAMERA
|
|
295
458
|
});
|
|
296
459
|
}
|
|
@@ -322,6 +485,18 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
322
485
|
this.mediaConnection = mediaConnection;
|
|
323
486
|
}
|
|
324
487
|
|
|
488
|
+
/**
|
|
489
|
+
* Returns the local IP address for diagnostics.
|
|
490
|
+
* this is the local IP of the interface used for the current media connection
|
|
491
|
+
* a host can have many local Ip Addresses
|
|
492
|
+
* @returns {string | undefined} The local IP address.
|
|
493
|
+
*/
|
|
494
|
+
}, {
|
|
495
|
+
key: "getLocalIpAddress",
|
|
496
|
+
value: function getLocalIpAddress() {
|
|
497
|
+
return this.localIpAddress;
|
|
498
|
+
}
|
|
499
|
+
|
|
325
500
|
/**
|
|
326
501
|
* Starts the stats analyzer on interval
|
|
327
502
|
*
|
|
@@ -345,7 +520,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
345
520
|
_this4.sendMqaData();
|
|
346
521
|
_this4.mqaInterval = setInterval(function () {
|
|
347
522
|
_this4.sendMqaData();
|
|
348
|
-
}, _constants.
|
|
523
|
+
}, _constants.MQA_INTERVAL);
|
|
349
524
|
});
|
|
350
525
|
}
|
|
351
526
|
return _promise.default.resolve();
|
|
@@ -377,7 +552,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
377
552
|
_this5.mediaConnection = null;
|
|
378
553
|
});
|
|
379
554
|
}
|
|
380
|
-
this.mediaConnection = null;
|
|
381
555
|
return _promise.default.resolve();
|
|
382
556
|
}
|
|
383
557
|
|
|
@@ -407,22 +581,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
407
581
|
} else if (!isSender && !this.statsResults[type].recv) {
|
|
408
582
|
this.statsResults[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
|
|
409
583
|
}
|
|
410
|
-
if (!this.statsResults.resolutions[type]) {
|
|
411
|
-
this.statsResults.resolutions[type] = {};
|
|
412
|
-
}
|
|
413
|
-
if (isSender && !this.statsResults.resolutions[type].send) {
|
|
414
|
-
this.statsResults.resolutions[type].send = (0, _cloneDeep2.default)(emptySender);
|
|
415
|
-
} else if (!isSender && !this.statsResults.resolutions[type].recv) {
|
|
416
|
-
this.statsResults.resolutions[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
|
|
417
|
-
}
|
|
418
|
-
if (!this.statsResults.internal[type]) {
|
|
419
|
-
this.statsResults.internal[type] = {};
|
|
420
|
-
}
|
|
421
|
-
if (isSender && !this.statsResults.internal[type].send) {
|
|
422
|
-
this.statsResults.internal[type].send = (0, _cloneDeep2.default)(emptySender);
|
|
423
|
-
} else if (!isSender && !this.statsResults.internal[type].recv) {
|
|
424
|
-
this.statsResults.internal[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
|
|
425
|
-
}
|
|
426
584
|
switch (getStatsResult.type) {
|
|
427
585
|
case 'outbound-rtp':
|
|
428
586
|
this.processOutboundRTPResult(getStatsResult, type);
|
|
@@ -430,13 +588,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
430
588
|
case 'inbound-rtp':
|
|
431
589
|
this.processInboundRTPResult(getStatsResult, type);
|
|
432
590
|
break;
|
|
433
|
-
case 'track':
|
|
434
|
-
this.processTrackResult(getStatsResult, type);
|
|
435
|
-
break;
|
|
436
591
|
case 'remote-inbound-rtp':
|
|
437
592
|
case 'remote-outbound-rtp':
|
|
438
|
-
|
|
439
|
-
this.compareSentAndReceived(getStatsResult, type, isSender);
|
|
593
|
+
this.compareSentAndReceived(getStatsResult, type);
|
|
440
594
|
break;
|
|
441
595
|
case 'remotecandidate':
|
|
442
596
|
case 'remote-candidate':
|
|
@@ -446,7 +600,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
446
600
|
this.parseCandidate(getStatsResult, type, isSender, false);
|
|
447
601
|
break;
|
|
448
602
|
case 'media-source':
|
|
449
|
-
// @ts-ignore
|
|
450
603
|
this.parseAudioSource(getStatsResult, type);
|
|
451
604
|
break;
|
|
452
605
|
default:
|
|
@@ -467,15 +620,26 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
467
620
|
value: function filterAndParseGetStatsResults(statsItem, type, isSender) {
|
|
468
621
|
var _this6 = this;
|
|
469
622
|
var types = _constants.DEFAULT_GET_STATS_FILTER.types;
|
|
623
|
+
|
|
624
|
+
// get the successful candidate pair before parsing stats.
|
|
625
|
+
statsItem.report.forEach(function (report) {
|
|
626
|
+
if (report.type === 'candidate-pair' && report.state === 'succeeded') {
|
|
627
|
+
_this6.successfulCandidatePair = report;
|
|
628
|
+
}
|
|
629
|
+
});
|
|
470
630
|
statsItem.report.forEach(function (result) {
|
|
471
631
|
if (types.includes(result.type)) {
|
|
472
632
|
_this6.parseGetStatsResult(result, type, isSender);
|
|
473
633
|
}
|
|
474
634
|
});
|
|
475
635
|
if (this.statsResults[type]) {
|
|
636
|
+
var _this$successfulCandi2, _this$statsResults;
|
|
476
637
|
this.statsResults[type].direction = statsItem.currentDirection;
|
|
477
638
|
this.statsResults[type].trackLabel = statsItem.localTrackLabel;
|
|
478
639
|
this.statsResults[type].csi = statsItem.csi;
|
|
640
|
+
this.extractAndSetLocalIpAddressInfoForDiagnostics((_this$successfulCandi2 = this.successfulCandidatePair) === null || _this$successfulCandi2 === void 0 ? void 0 : _this$successfulCandi2.localCandidateId, (_this$statsResults = this.statsResults) === null || _this$statsResults === void 0 ? void 0 : _this$statsResults.candidates);
|
|
641
|
+
// reset the successful candidate pair.
|
|
642
|
+
this.successfulCandidatePair = {};
|
|
479
643
|
}
|
|
480
644
|
}
|
|
481
645
|
|
|
@@ -540,138 +704,77 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
540
704
|
return prev + (((_this7$lastStatsResul = _this7.lastStatsResults[cur]) === null || _this7$lastStatsResul === void 0 ? void 0 : _this7$lastStatsResul.recv[value]) || 0);
|
|
541
705
|
}, 0);
|
|
542
706
|
};
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
}).reduce(function (prev, cur) {
|
|
547
|
-
var _this7$statsResults$r;
|
|
548
|
-
return prev + (((_this7$statsResults$r = _this7.statsResults.resolutions[cur]) === null || _this7$statsResults$r === void 0 ? void 0 : _this7$statsResults$r.recv[value]) || 0);
|
|
549
|
-
}, 0);
|
|
550
|
-
};
|
|
551
|
-
var getPreviousResolutionsStatsTotals = function getPreviousResolutionsStatsTotals(keyPrefix, value) {
|
|
552
|
-
return (0, _keys.default)(_this7.statsResults).filter(function (key) {
|
|
553
|
-
return key.startsWith(keyPrefix);
|
|
554
|
-
}).reduce(function (prev, cur) {
|
|
555
|
-
var _this7$lastStatsResul2;
|
|
556
|
-
return prev + (((_this7$lastStatsResul2 = _this7.lastStatsResults.resolutions[cur]) === null || _this7$lastStatsResul2 === void 0 ? void 0 : _this7$lastStatsResul2.recv[value]) || 0);
|
|
557
|
-
}, 0);
|
|
558
|
-
};
|
|
559
|
-
if (this.meetingMediaStatus.expected.sendAudio && this.lastStatsResults['audio-send']) {
|
|
707
|
+
|
|
708
|
+
// Audio Transmit
|
|
709
|
+
if (this.lastStatsResults['audio-send']) {
|
|
560
710
|
// compare audio stats sent
|
|
561
711
|
// NOTE: relies on there being only one sender.
|
|
562
712
|
var currentStats = this.statsResults['audio-send'].send;
|
|
563
713
|
var previousStats = this.lastStatsResults['audio-send'].send;
|
|
564
|
-
if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
|
|
565
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent");
|
|
714
|
+
if (this.meetingMediaStatus.expected.sendAudio && currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
|
|
715
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent", currentStats.totalPacketsSent);
|
|
566
716
|
} else {
|
|
567
|
-
if (currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
|
|
568
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present");
|
|
717
|
+
if (this.meetingMediaStatus.expected.sendAudio && currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
|
|
718
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present", currentStats.totalAudioEnergy);
|
|
569
719
|
}
|
|
570
|
-
if (currentStats.audioLevel === 0) {
|
|
720
|
+
if (this.meetingMediaStatus.expected.sendAudio && currentStats.audioLevel === 0) {
|
|
571
721
|
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user");
|
|
572
722
|
}
|
|
573
723
|
}
|
|
574
724
|
this.emitStartStopEvents('audio', previousStats.totalPacketsSent, currentStats.totalPacketsSent, true);
|
|
575
725
|
}
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
} else if (currentSamplesReceived === previousSamplesReceived || currentSamplesReceived === 0) {
|
|
585
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio samples received");
|
|
586
|
-
}
|
|
587
|
-
this.emitStartStopEvents('audio', previousPacketsReceived, currentPacketsReceived, false);
|
|
588
|
-
}
|
|
589
|
-
if (this.meetingMediaStatus.expected.sendVideo && this.lastStatsResults['video-send']) {
|
|
726
|
+
|
|
727
|
+
// Audio Receive
|
|
728
|
+
var currentAudioPacketsReceived = getCurrentStatsTotals('audio-recv', 'totalPacketsReceived');
|
|
729
|
+
var previousAudioPacketsReceived = getPreviousStatsTotals('audio-recv', 'totalPacketsReceived');
|
|
730
|
+
this.emitStartStopEvents('audio', previousAudioPacketsReceived, currentAudioPacketsReceived, false);
|
|
731
|
+
|
|
732
|
+
// Video Transmit
|
|
733
|
+
if (this.lastStatsResults['video-send']) {
|
|
590
734
|
// compare video stats sent
|
|
591
735
|
var _currentStats = this.statsResults['video-send'].send;
|
|
592
736
|
var _previousStats = this.lastStatsResults['video-send'].send;
|
|
593
|
-
if (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0) {
|
|
594
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent");
|
|
737
|
+
if (this.meetingMediaStatus.expected.sendVideo && (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0)) {
|
|
738
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent", _currentStats.totalPacketsSent);
|
|
595
739
|
} else {
|
|
596
|
-
if (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0) {
|
|
597
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded");
|
|
740
|
+
if (this.meetingMediaStatus.expected.sendVideo && (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0)) {
|
|
741
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded", _currentStats.framesEncoded);
|
|
598
742
|
}
|
|
599
|
-
if (this.statsResults
|
|
600
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent");
|
|
743
|
+
if (this.meetingMediaStatus.expected.sendVideo && (this.statsResults['video-send'].send.framesSent === this.lastStatsResults['video-send'].send.framesSent || this.statsResults['video-send'].send.framesSent === 0)) {
|
|
744
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent", this.statsResults['video-send'].send.framesSent);
|
|
601
745
|
}
|
|
602
746
|
}
|
|
603
747
|
this.emitStartStopEvents('video', _previousStats.framesSent, _currentStats.framesSent, true);
|
|
604
748
|
}
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
var currentFramesDropped = getCurrentResolutionsStatsTotals('video-recv', 'framesDropped');
|
|
614
|
-
var previousFramesDropped = getPreviousResolutionsStatsTotals('video-recv', 'framesDropped');
|
|
615
|
-
if (_currentPacketsReceived === _previousPacketsReceived || _currentPacketsReceived === 0) {
|
|
616
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received");
|
|
617
|
-
} else {
|
|
618
|
-
if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {
|
|
619
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames received");
|
|
620
|
-
}
|
|
621
|
-
if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {
|
|
622
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded");
|
|
623
|
-
}
|
|
624
|
-
if (currentFramesDropped - previousFramesDropped > 10) {
|
|
625
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped");
|
|
626
|
-
}
|
|
627
|
-
}
|
|
628
|
-
this.emitStartStopEvents('video', previousFramesDecoded, currentFramesDecoded, false);
|
|
629
|
-
}
|
|
630
|
-
if (this.meetingMediaStatus.expected.sendShare && this.lastStatsResults['video-share-send']) {
|
|
749
|
+
|
|
750
|
+
// Video Receive
|
|
751
|
+
var currentVideoFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');
|
|
752
|
+
var previousVideoFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');
|
|
753
|
+
this.emitStartStopEvents('video', previousVideoFramesDecoded, currentVideoFramesDecoded, false);
|
|
754
|
+
|
|
755
|
+
// Share Transmit
|
|
756
|
+
if (this.lastStatsResults['video-share-send']) {
|
|
631
757
|
// compare share stats sent
|
|
632
758
|
|
|
633
759
|
var _currentStats2 = this.statsResults['video-share-send'].send;
|
|
634
760
|
var _previousStats2 = this.lastStatsResults['video-share-send'].send;
|
|
635
|
-
if (_currentStats2.totalPacketsSent === _previousStats2.totalPacketsSent || _currentStats2.totalPacketsSent === 0) {
|
|
636
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent");
|
|
761
|
+
if (this.meetingMediaStatus.expected.sendShare && (_currentStats2.totalPacketsSent === _previousStats2.totalPacketsSent || _currentStats2.totalPacketsSent === 0)) {
|
|
762
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent", _currentStats2.totalPacketsSent);
|
|
637
763
|
} else {
|
|
638
|
-
if (_currentStats2.framesEncoded === _previousStats2.framesEncoded || _currentStats2.framesEncoded === 0) {
|
|
639
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded");
|
|
764
|
+
if (this.meetingMediaStatus.expected.sendShare && (_currentStats2.framesEncoded === _previousStats2.framesEncoded || _currentStats2.framesEncoded === 0)) {
|
|
765
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded", _currentStats2.framesEncoded);
|
|
640
766
|
}
|
|
641
|
-
if (this.statsResults
|
|
642
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames sent");
|
|
767
|
+
if (this.meetingMediaStatus.expected.sendShare && (this.statsResults['video-share-send'].send.framesSent === this.lastStatsResults['video-share-send'].send.framesSent || this.statsResults['video-share-send'].send.framesSent === 0)) {
|
|
768
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames sent", this.statsResults['video-share-send'].send.framesSent);
|
|
643
769
|
}
|
|
644
770
|
}
|
|
771
|
+
this.emitStartStopEvents('share', _previousStats2.framesSent, _currentStats2.framesSent, true);
|
|
645
772
|
}
|
|
646
|
-
if (this.meetingMediaStatus.expected.sendShare) {
|
|
647
|
-
// TODO:need to check receive share value
|
|
648
|
-
// compare share stats received
|
|
649
|
-
var _currentPacketsReceived2 = getCurrentStatsTotals('video-share-recv', 'totalPacketsReceived');
|
|
650
|
-
var _previousPacketsReceived2 = getPreviousStatsTotals('video-share-recv', 'totalPacketsReceived');
|
|
651
|
-
var _currentFramesReceived = getCurrentResolutionsStatsTotals('video-share-recv', 'framesReceived');
|
|
652
|
-
var _previousFramesReceived = getPreviousResolutionsStatsTotals('video-share-recv', 'framesReceived');
|
|
653
|
-
var _currentFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');
|
|
654
|
-
var _previousFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');
|
|
655
|
-
var _currentFramesDropped = getCurrentResolutionsStatsTotals('video-share-recv', 'framesDropped');
|
|
656
|
-
var _previousFramesDropped = getPreviousResolutionsStatsTotals('video-share-recv', 'framesDropped');
|
|
657
|
-
if (_currentPacketsReceived2 === _previousPacketsReceived2 || _currentPacketsReceived2 === 0) {
|
|
658
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received");
|
|
659
|
-
} else {
|
|
660
|
-
if (_currentFramesReceived === _previousFramesReceived || _currentFramesReceived === 0) {
|
|
661
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames received");
|
|
662
|
-
}
|
|
663
|
-
if (_currentFramesDecoded === _previousFramesDecoded || _currentFramesDecoded === 0) {
|
|
664
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded");
|
|
665
|
-
}
|
|
666
|
-
if (_currentFramesDropped - _previousFramesDropped > 10) {
|
|
667
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped");
|
|
668
|
-
}
|
|
669
|
-
}
|
|
670
773
|
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
774
|
+
// Share receive
|
|
775
|
+
var currentShareFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');
|
|
776
|
+
var previousShareFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');
|
|
777
|
+
this.emitStartStopEvents('share', previousShareFramesDecoded, currentShareFramesDecoded, false);
|
|
675
778
|
}
|
|
676
779
|
}
|
|
677
780
|
|
|
@@ -753,28 +856,16 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
753
856
|
var sendrecvType = _constants.STATS.SEND_DIRECTION;
|
|
754
857
|
if (result.bytesSent) {
|
|
755
858
|
var kilobytes = 0;
|
|
756
|
-
if (
|
|
757
|
-
this.statsResults
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
this.statsResults
|
|
859
|
+
if (result.frameWidth && result.frameHeight) {
|
|
860
|
+
this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
|
|
861
|
+
this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
|
|
862
|
+
this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;
|
|
863
|
+
this.statsResults[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
|
|
761
864
|
}
|
|
762
|
-
if (!this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded) {
|
|
763
|
-
this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
|
|
764
|
-
}
|
|
765
|
-
var bytes = result.bytesSent - this.statsResults.internal[mediaType][sendrecvType].prevBytesSent;
|
|
766
|
-
this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
|
|
767
|
-
kilobytes = bytes / 1024;
|
|
768
865
|
this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
|
|
769
|
-
this.statsResults[mediaType].
|
|
770
|
-
this.statsResults[mediaType][sendrecvType].
|
|
771
|
-
this.statsResults[mediaType][sendrecvType].
|
|
772
|
-
this.statsResults.internal[mediaType].outboundRtpId = result.id;
|
|
773
|
-
if (!this.statsResults.internal[mediaType][sendrecvType].packetsSent) {
|
|
774
|
-
this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
|
|
775
|
-
}
|
|
776
|
-
this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent - this.statsResults.internal[mediaType][sendrecvType].packetsSent;
|
|
777
|
-
this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
|
|
866
|
+
this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
|
|
867
|
+
this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
|
|
868
|
+
this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent;
|
|
778
869
|
|
|
779
870
|
// Data saved to send MQA metrics
|
|
780
871
|
|
|
@@ -808,41 +899,53 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
808
899
|
var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
|
|
809
900
|
if (result.bytesReceived) {
|
|
810
901
|
var kilobytes = 0;
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
this.statsResults.internal[mediaType][sendrecvType].pliCount = result.pliCount;
|
|
816
|
-
}
|
|
817
|
-
if (!this.statsResults.internal[mediaType][sendrecvType].packetsLost) {
|
|
818
|
-
this.statsResults.internal[mediaType][sendrecvType].packetsLost = result.packetsLost;
|
|
819
|
-
}
|
|
820
|
-
if (!this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived) {
|
|
821
|
-
this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
|
|
822
|
-
}
|
|
823
|
-
if (!this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp) {
|
|
824
|
-
this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
|
|
825
|
-
}
|
|
826
|
-
var bytes = result.bytesReceived - this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived;
|
|
827
|
-
this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
|
|
902
|
+
var receiveSlot = this.receiveSlotCallback(result.ssrc);
|
|
903
|
+
var sourceState = receiveSlot === null || receiveSlot === void 0 ? void 0 : receiveSlot.sourceState;
|
|
904
|
+
var idAndCsi = receiveSlot ? "id: \"".concat(receiveSlot.id || '', "\"").concat(receiveSlot.csi ? " and csi: ".concat(receiveSlot.csi) : '') : '';
|
|
905
|
+
var bytes = result.bytesReceived - this.statsResults[mediaType][sendrecvType].totalBytesReceived;
|
|
828
906
|
kilobytes = bytes / 1024;
|
|
829
907
|
this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
|
|
830
|
-
this.statsResults[mediaType].
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
if (this.statsResults[mediaType][sendrecvType].currentPacketsLost < 0) {
|
|
834
|
-
this.statsResults[mediaType][sendrecvType].currentPacketsLost = 0;
|
|
908
|
+
var currentPacketsLost = result.packetsLost - this.statsResults[mediaType][sendrecvType].totalPacketsLost;
|
|
909
|
+
if (currentPacketsLost < 0) {
|
|
910
|
+
currentPacketsLost = 0;
|
|
835
911
|
}
|
|
836
|
-
|
|
837
|
-
this.statsResults
|
|
838
|
-
if (
|
|
839
|
-
|
|
912
|
+
var packetsReceivedDiff = result.packetsReceived - this.statsResults[mediaType][sendrecvType].totalPacketsReceived;
|
|
913
|
+
this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
|
|
914
|
+
if (packetsReceivedDiff === 0) {
|
|
915
|
+
if (receiveSlot && sourceState === 'live') {
|
|
916
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for mediaType: ".concat(mediaType, ", receive slot ").concat(idAndCsi, ". Total packets received on slot: "), result.packetsReceived);
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
if (mediaType.startsWith('video') || mediaType.startsWith('share')) {
|
|
920
|
+
var videoFramesReceivedDiff = result.framesReceived - this.statsResults[mediaType][sendrecvType].framesReceived;
|
|
921
|
+
if (videoFramesReceivedDiff === 0) {
|
|
922
|
+
if (receiveSlot && sourceState === 'live') {
|
|
923
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No frames received for mediaType: ".concat(mediaType, ", receive slot ").concat(idAndCsi, ". Total frames received on slot: "), result.framesReceived);
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
var videoFramesDecodedDiff = result.framesDecoded - this.statsResults[mediaType][sendrecvType].framesDecoded;
|
|
927
|
+
if (videoFramesDecodedDiff === 0) {
|
|
928
|
+
if (receiveSlot && sourceState === 'live') {
|
|
929
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No frames decoded for mediaType: ".concat(mediaType, ", receive slot ").concat(idAndCsi, ". Total frames decoded on slot: "), result.framesDecoded);
|
|
930
|
+
}
|
|
931
|
+
}
|
|
932
|
+
var videoFramesDroppedDiff = result.framesDropped - this.statsResults[mediaType][sendrecvType].framesDropped;
|
|
933
|
+
if (videoFramesDroppedDiff > 10) {
|
|
934
|
+
if (receiveSlot && sourceState === 'live') {
|
|
935
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> Frames dropped for mediaType: ".concat(mediaType, ", receive slot ").concat(idAndCsi, ". Total frames dropped on slot: "), result.framesDropped);
|
|
936
|
+
}
|
|
937
|
+
}
|
|
840
938
|
}
|
|
841
939
|
|
|
842
940
|
// Check the over all packet Lost ratio
|
|
843
|
-
this.statsResults[mediaType][sendrecvType].currentPacketLossRatio =
|
|
941
|
+
this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = currentPacketsLost > 0 ? currentPacketsLost / (packetsReceivedDiff + currentPacketsLost) : 0;
|
|
844
942
|
if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
|
|
845
|
-
_loggerProxy.default.logger.info(
|
|
943
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ".concat(idAndCsi), this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
|
|
944
|
+
}
|
|
945
|
+
if (result.frameWidth && result.frameHeight) {
|
|
946
|
+
this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
|
|
947
|
+
this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
|
|
948
|
+
this.statsResults[mediaType][sendrecvType].framesReceived = result.framesReceived;
|
|
846
949
|
}
|
|
847
950
|
|
|
848
951
|
// TODO: check the packet loss value is negative values here
|
|
@@ -859,6 +962,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
859
962
|
this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;
|
|
860
963
|
this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
|
|
861
964
|
this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;
|
|
965
|
+
this.statsResults[mediaType][sendrecvType].framesDropped = result.framesDropped;
|
|
862
966
|
this.statsResults[mediaType][sendrecvType].decoderImplementation = result.decoderImplementation;
|
|
863
967
|
this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
|
|
864
968
|
this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;
|
|
@@ -878,55 +982,19 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
878
982
|
}
|
|
879
983
|
|
|
880
984
|
/**
|
|
881
|
-
*
|
|
985
|
+
* extracts the local Ip address from the statsResult object by looking at stats results candidates
|
|
986
|
+
* and matches that ID with the successful candidate pair. It looks at the type of local candidate it is
|
|
987
|
+
* and then extracts the IP address from the relatedAddress or address property based on conditions known in webrtc
|
|
988
|
+
* note, there are known incompatibilities and it is possible for this to set undefined, or for the IP address to be the public IP address
|
|
989
|
+
* for example, firefox does not set the relayProtocol, and if the user is behind a NAT it might be the public IP
|
|
882
990
|
* @private
|
|
883
|
-
* @param {
|
|
884
|
-
* @param {
|
|
885
|
-
* @param {boolean} isSender
|
|
886
|
-
* @param {boolean} isRemote
|
|
887
|
-
*
|
|
991
|
+
* @param {string} successfulCandidatePairId - The ID of the successful candidate pair.
|
|
992
|
+
* @param {Object} candidates - the stats result candidates
|
|
888
993
|
* @returns {void}
|
|
889
994
|
*/
|
|
890
995
|
}, {
|
|
891
|
-
key: "
|
|
996
|
+
key: "compareSentAndReceived",
|
|
892
997
|
value:
|
|
893
|
-
/**
|
|
894
|
-
* Process Track results
|
|
895
|
-
*
|
|
896
|
-
* @private
|
|
897
|
-
* @param {*} result
|
|
898
|
-
* @param {*} mediaType
|
|
899
|
-
* @returns {void}
|
|
900
|
-
* @memberof StatsAnalyzer
|
|
901
|
-
*/
|
|
902
|
-
function processTrackResult(result, mediaType) {
|
|
903
|
-
if (!result || result.type !== 'track') {
|
|
904
|
-
return;
|
|
905
|
-
}
|
|
906
|
-
var sendrecvType = result.remoteSource === true ? _constants.STATS.RECEIVE_DIRECTION : _constants.STATS.SEND_DIRECTION;
|
|
907
|
-
if (result.frameWidth && result.frameHeight) {
|
|
908
|
-
this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
|
|
909
|
-
this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
|
|
910
|
-
this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
|
|
911
|
-
this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
|
|
912
|
-
}
|
|
913
|
-
if (sendrecvType === _constants.STATS.RECEIVE_DIRECTION) {
|
|
914
|
-
this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
|
|
915
|
-
this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
|
|
916
|
-
this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;
|
|
917
|
-
}
|
|
918
|
-
if (result.trackIdentifier && !mediaType.includes('audio')) {
|
|
919
|
-
this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier = result.trackIdentifier;
|
|
920
|
-
var jitterBufferDelay = result && result.jitterBufferDelay;
|
|
921
|
-
var jitterBufferEmittedCount = result && result.jitterBufferEmittedCount;
|
|
922
|
-
this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay = jitterBufferEmittedCount && +jitterBufferDelay / +jitterBufferEmittedCount;
|
|
923
|
-
|
|
924
|
-
// Used to calculate the jitter
|
|
925
|
-
this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay = result.jitterBufferDelay;
|
|
926
|
-
this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount = result.jitterBufferEmittedCount;
|
|
927
|
-
}
|
|
928
|
-
}
|
|
929
|
-
|
|
930
998
|
/**
|
|
931
999
|
*
|
|
932
1000
|
* @private
|
|
@@ -935,19 +1003,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
935
1003
|
* @returns {void}
|
|
936
1004
|
* @memberof StatsAnalyzer
|
|
937
1005
|
*/
|
|
938
|
-
|
|
939
|
-
key: "compareSentAndReceived",
|
|
940
|
-
value: function compareSentAndReceived(result, type) {
|
|
1006
|
+
function compareSentAndReceived(result, type) {
|
|
941
1007
|
// Don't compare on transceivers without a sender.
|
|
942
|
-
if (!type || !this.statsResults
|
|
1008
|
+
if (!type || !this.statsResults[type].send) {
|
|
943
1009
|
return;
|
|
944
1010
|
}
|
|
945
1011
|
var mediaType = type;
|
|
946
|
-
|
|
947
|
-
this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
|
|
948
|
-
}
|
|
949
|
-
var currentPacketLoss = result.packetsLost - this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver;
|
|
950
|
-
this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
|
|
1012
|
+
var currentPacketLoss = result.packetsLost - this.statsResults[mediaType].send.totalPacketsLostOnReceiver;
|
|
951
1013
|
this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;
|
|
952
1014
|
this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
|
|
953
1015
|
this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);
|