@webex/plugin-meetings 3.0.0-beta.37 → 3.0.0-beta.371
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 +236 -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 +117 -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 +366 -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 +383 -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 +57 -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 +61 -101
- 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 +1 -204
- 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 +4024 -2829
- 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 +478 -118
- 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 +17 -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 +228 -58
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +29 -16
- 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 +44 -18
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +60 -3
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +209 -59
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +233 -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 +267 -200
- 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 +179 -215
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +35 -28
- 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 +200 -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 -4
- 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 +0 -128
- package/dist/types/meeting/in-meeting-actions.d.ts +86 -2
- package/dist/types/meeting/index.d.ts +559 -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 +112 -20
- 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 +16 -0
- package/dist/types/metrics/index.d.ts +4 -111
- package/dist/types/multistream/mediaRequestManager.d.ts +72 -5
- package/dist/types/multistream/receiveSlot.d.ts +13 -11
- package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
- package/dist/types/multistream/remoteMedia.d.ts +8 -29
- package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
- package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
- package/dist/types/multistream/sendSlotManager.d.ts +61 -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 +29 -11
- 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 +224 -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 +332 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +108 -0
- package/src/locus-info/index.ts +414 -59
- package/src/locus-info/infoUtils.ts +10 -2
- package/src/locus-info/mediaSharesUtils.ts +64 -0
- package/src/locus-info/parser.ts +258 -47
- package/src/locus-info/selfUtils.ts +81 -5
- package/src/media/index.ts +97 -107
- package/src/media/properties.ts +88 -117
- package/src/mediaQualityMetrics/config.ts +0 -135
- package/src/meeting/in-meeting-actions.ts +171 -3
- package/src/meeting/index.ts +3365 -2453
- 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 +497 -126
- 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 +16 -0
- package/src/metrics/index.ts +1 -469
- package/src/multistream/mediaRequestManager.ts +277 -82
- package/src/multistream/receiveSlot.ts +31 -17
- package/src/multistream/receiveSlotManager.ts +34 -24
- package/src/multistream/remoteMedia.ts +27 -2
- package/src/multistream/remoteMediaGroup.ts +59 -0
- package/src/multistream/remoteMediaManager.ts +148 -30
- package/src/multistream/sendSlotManager.ts +170 -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 +139 -106
- 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 +219 -289
- package/src/statsAnalyzer/mqaUtil.ts +43 -44
- 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 +589 -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 +1352 -33
- 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 +32 -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 +118 -37
- 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 +6749 -2181
- 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 +1393 -212
- 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 +776 -162
- package/test/unit/spec/multistream/receiveSlot.ts +28 -20
- package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
- package/test/unit/spec/multistream/remoteMedia.ts +30 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
- package/test/unit/spec/multistream/sendSlotManager.ts +242 -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 +153 -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 +664 -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/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 -16
- package/src/metrics/config.ts +0 -485
|
@@ -17,6 +17,7 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/
|
|
|
17
17
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
18
18
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
19
19
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
20
|
+
var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty"));
|
|
20
21
|
var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
21
22
|
var _internalMediaCore = require("@webex/internal-media-core");
|
|
22
23
|
var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
|
|
@@ -49,7 +50,6 @@ var emptyReceiver = {
|
|
|
49
50
|
meanRtpJitter: [],
|
|
50
51
|
meanRoundTripTime: []
|
|
51
52
|
};
|
|
52
|
-
|
|
53
53
|
/**
|
|
54
54
|
* Stats Analyzer class that will emit events based on detected quality
|
|
55
55
|
*
|
|
@@ -60,18 +60,24 @@ var emptyReceiver = {
|
|
|
60
60
|
var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
61
61
|
(0, _inherits2.default)(StatsAnalyzer, _EventsScope);
|
|
62
62
|
var _super = _createSuper(StatsAnalyzer);
|
|
63
|
+
// 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
|
|
64
|
+
|
|
63
65
|
/**
|
|
64
66
|
* Creates a new instance of StatsAnalyzer
|
|
65
67
|
* @constructor
|
|
66
68
|
* @public
|
|
67
69
|
* @param {Object} config SDK Configuration Object
|
|
70
|
+
* @param {Function} receiveSlotCallback Callback used to access receive slots.
|
|
68
71
|
* @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)
|
|
69
72
|
* @param {Object} statsResults Default properties for stats
|
|
70
73
|
*/
|
|
71
74
|
function StatsAnalyzer(config) {
|
|
72
75
|
var _this;
|
|
73
|
-
var
|
|
74
|
-
|
|
76
|
+
var receiveSlotCallback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {
|
|
77
|
+
return undefined;
|
|
78
|
+
};
|
|
79
|
+
var networkQualityMonitor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
80
|
+
var statsResults = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _global.default;
|
|
75
81
|
(0, _classCallCheck2.default)(this, StatsAnalyzer);
|
|
76
82
|
_this = _super.call(this);
|
|
77
83
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "config", void 0);
|
|
@@ -87,6 +93,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
87
93
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsInterval", void 0);
|
|
88
94
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsResults", void 0);
|
|
89
95
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsStarted", void 0);
|
|
96
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "successfulCandidatePair", void 0);
|
|
97
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "localIpAddress", void 0);
|
|
98
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "receiveSlotCallback", void 0);
|
|
90
99
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "emitStartStopEvents", function (mediaType, previousValue, currentValue, isLocal) {
|
|
91
100
|
if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {
|
|
92
101
|
throw new Error("Unsupported mediaType: ".concat(mediaType));
|
|
@@ -120,57 +129,75 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
120
129
|
});
|
|
121
130
|
}
|
|
122
131
|
});
|
|
132
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "extractAndSetLocalIpAddressInfoForDiagnostics", function (successfulCandidatePairId, candidates) {
|
|
133
|
+
var newIpAddress = '';
|
|
134
|
+
if (successfulCandidatePairId && !(0, _isEmpty2.default)(candidates)) {
|
|
135
|
+
var localCandidate = candidates[successfulCandidatePairId];
|
|
136
|
+
if (localCandidate) {
|
|
137
|
+
if (localCandidate.candidateType === 'host') {
|
|
138
|
+
// if it's a host candidate, use the address property - it will be the local IP
|
|
139
|
+
newIpAddress = "".concat(localCandidate.address);
|
|
140
|
+
} else if (localCandidate.candidateType === 'prflx') {
|
|
141
|
+
// if it's a peer reflexive candidate and we're not using a relay (there is no relayProtocol set)
|
|
142
|
+
// then look at the relatedAddress - it will be the local
|
|
143
|
+
//
|
|
144
|
+
// Firefox doesn't populate the relayProtocol property
|
|
145
|
+
if (!localCandidate.relayProtocol) {
|
|
146
|
+
newIpAddress = "".concat(localCandidate.relatedAddress);
|
|
147
|
+
} else {
|
|
148
|
+
// if it's a peer reflexive candidate and we are using a relay -
|
|
149
|
+
// in that case the relatedAddress will be the IP of the TURN server (Linus),
|
|
150
|
+
// so we can only look at the address, but it might be local IP or public IP,
|
|
151
|
+
// depending on if the user is behind a NAT or not
|
|
152
|
+
newIpAddress = "".concat(localCandidate.address);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
_this.localIpAddress = newIpAddress;
|
|
158
|
+
});
|
|
123
159
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "parseCandidate", function (result, type, isSender, isRemote) {
|
|
160
|
+
var _this$successfulCandi;
|
|
124
161
|
if (!result || !result.id) {
|
|
125
162
|
return;
|
|
126
163
|
}
|
|
127
|
-
var RemoteCandidateType = {};
|
|
128
|
-
var RemoteTransport = {};
|
|
129
|
-
var RemoteIpAddress = {};
|
|
130
|
-
var RemoteNetworkType = {};
|
|
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());
|
|
151
|
-
}
|
|
152
|
-
if (result.ip && RemoteIpAddress[result.id].indexOf("".concat(result.ip, ":").concat(result.portNumber)) === -1) {
|
|
153
|
-
RemoteIpAddress[result.id].push("".concat(result.ip)); // TODO: Add ports
|
|
154
|
-
}
|
|
155
164
|
|
|
156
|
-
|
|
157
|
-
|
|
165
|
+
// We only care about the successful local candidate
|
|
166
|
+
if (((_this$successfulCandi = _this.successfulCandidatePair) === null || _this$successfulCandi === void 0 ? void 0 : _this$successfulCandi.localCandidateId) !== result.id) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
var transport;
|
|
170
|
+
if (result.relayProtocol) {
|
|
171
|
+
transport = result.relayProtocol.toUpperCase();
|
|
172
|
+
} else if (result.protocol) {
|
|
173
|
+
transport = result.protocol.toUpperCase();
|
|
158
174
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
175
|
+
var sendRecvType = isSender ? _constants.STATS.SEND_DIRECTION : _constants.STATS.RECEIVE_DIRECTION;
|
|
176
|
+
var ipType = isRemote ? _constants.STATS.REMOTE : _constants.STATS.LOCAL;
|
|
177
|
+
if (!_this.statsResults.candidates) {
|
|
178
|
+
_this.statsResults.candidates = {};
|
|
179
|
+
}
|
|
180
|
+
_this.statsResults.candidates[result.id] = {
|
|
181
|
+
candidateType: result.candidateType,
|
|
182
|
+
ipAddress: result.ip,
|
|
183
|
+
// TODO: add ports
|
|
184
|
+
relatedAddress: result.relatedAddress,
|
|
185
|
+
relatedPort: result.relatedPort,
|
|
186
|
+
relayProtocol: result.relayProtocol,
|
|
187
|
+
protocol: result.protocol,
|
|
188
|
+
address: result.address,
|
|
162
189
|
portNumber: result.port,
|
|
163
|
-
networkType:
|
|
190
|
+
networkType: result.networkType,
|
|
164
191
|
priority: result.priority,
|
|
165
|
-
transport:
|
|
192
|
+
transport: transport,
|
|
166
193
|
timestamp: result.time,
|
|
167
194
|
id: result.id,
|
|
168
195
|
type: result.type
|
|
169
196
|
};
|
|
170
|
-
_this.statsResults.connectionType[ipType].candidateType =
|
|
171
|
-
_this.statsResults.connectionType[ipType].ipAddress =
|
|
172
|
-
_this.statsResults.connectionType[ipType].networkType =
|
|
173
|
-
_this.statsResults.connectionType[ipType].transport =
|
|
197
|
+
_this.statsResults.connectionType[ipType].candidateType = result.candidateType;
|
|
198
|
+
_this.statsResults.connectionType[ipType].ipAddress = result.ipAddress;
|
|
199
|
+
_this.statsResults.connectionType[ipType].networkType = result.networkType === _constants.NETWORK_TYPE.VPN ? _constants.NETWORK_TYPE.UNKNOWN : result.networkType;
|
|
200
|
+
_this.statsResults.connectionType[ipType].transport = transport;
|
|
174
201
|
_this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;
|
|
175
202
|
});
|
|
176
203
|
_this.statsStarted = false;
|
|
@@ -182,6 +209,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
182
209
|
_this.mqaSentCount = -1;
|
|
183
210
|
_this.lastMqaDataSent = {};
|
|
184
211
|
_this.lastEmittedStartStopEvent = {};
|
|
212
|
+
_this.receiveSlotCallback = receiveSlotCallback;
|
|
213
|
+
_this.successfulCandidatePair = {};
|
|
214
|
+
_this.localIpAddress = '';
|
|
185
215
|
return _this;
|
|
186
216
|
}
|
|
187
217
|
|
|
@@ -234,6 +264,15 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
234
264
|
var _this3 = this;
|
|
235
265
|
var newMqa = (0, _cloneDeep2.default)(_config.emptyMqaInterval);
|
|
236
266
|
(0, _keys.default)(this.statsResults).forEach(function (mediaType) {
|
|
267
|
+
if (!_this3.lastMqaDataSent[mediaType]) {
|
|
268
|
+
_this3.lastMqaDataSent[mediaType] = {};
|
|
269
|
+
}
|
|
270
|
+
if (!_this3.lastMqaDataSent[mediaType].send && mediaType.includes('-send')) {
|
|
271
|
+
_this3.lastMqaDataSent[mediaType].send = {};
|
|
272
|
+
}
|
|
273
|
+
if (!_this3.lastMqaDataSent[mediaType].recv && mediaType.includes('-recv')) {
|
|
274
|
+
_this3.lastMqaDataSent[mediaType].recv = {};
|
|
275
|
+
}
|
|
237
276
|
if (mediaType.includes('audio-send') || mediaType.includes('audio-share-send')) {
|
|
238
277
|
var audioSender = (0, _cloneDeep2.default)(_config.emptyAudioTransmit);
|
|
239
278
|
(0, _mqaUtil.getAudioSenderMqa)({
|
|
@@ -243,6 +282,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
243
282
|
mediaType: mediaType
|
|
244
283
|
});
|
|
245
284
|
newMqa.audioTransmit.push(audioSender);
|
|
285
|
+
_this3.lastMqaDataSent[mediaType].send = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].send);
|
|
246
286
|
} else if (mediaType.includes('audio-recv') || mediaType.includes('audio-share-recv')) {
|
|
247
287
|
var audioReceiver = (0, _cloneDeep2.default)(_config.emptyAudioReceive);
|
|
248
288
|
(0, _mqaUtil.getAudioReceiverMqa)({
|
|
@@ -252,6 +292,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
252
292
|
mediaType: mediaType
|
|
253
293
|
});
|
|
254
294
|
newMqa.audioReceive.push(audioReceiver);
|
|
295
|
+
_this3.lastMqaDataSent[mediaType].recv = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].recv);
|
|
255
296
|
} else if (mediaType.includes('video-send') || mediaType.includes('video-share-send')) {
|
|
256
297
|
var videoSender = (0, _cloneDeep2.default)(_config.emptyVideoTransmit);
|
|
257
298
|
(0, _mqaUtil.getVideoSenderMqa)({
|
|
@@ -261,6 +302,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
261
302
|
mediaType: mediaType
|
|
262
303
|
});
|
|
263
304
|
newMqa.videoTransmit.push(videoSender);
|
|
305
|
+
_this3.lastMqaDataSent[mediaType].send = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].send);
|
|
264
306
|
} else if (mediaType.includes('video-recv') || mediaType.includes('video-share-recv')) {
|
|
265
307
|
var videoReceiver = (0, _cloneDeep2.default)(_config.emptyVideoReceive);
|
|
266
308
|
(0, _mqaUtil.getVideoReceiverMqa)({
|
|
@@ -270,27 +312,25 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
270
312
|
mediaType: mediaType
|
|
271
313
|
});
|
|
272
314
|
newMqa.videoReceive.push(videoReceiver);
|
|
315
|
+
_this3.lastMqaDataSent[mediaType].recv = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].recv);
|
|
273
316
|
}
|
|
274
317
|
});
|
|
275
|
-
newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress
|
|
318
|
+
newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;
|
|
276
319
|
|
|
277
320
|
// Adding peripheral information
|
|
278
|
-
newMqa.intervalMetadata.peripherals = [];
|
|
279
321
|
newMqa.intervalMetadata.peripherals.push({
|
|
280
322
|
information: _constants._UNKNOWN_,
|
|
281
323
|
name: _constants.MEDIA_DEVICES.SPEAKER
|
|
282
324
|
});
|
|
283
325
|
if (this.statsResults['audio-send']) {
|
|
284
|
-
var _this$statsResults$au;
|
|
285
326
|
newMqa.intervalMetadata.peripherals.push({
|
|
286
|
-
information:
|
|
327
|
+
information: this.statsResults['audio-send'].trackLabel || _constants._UNKNOWN_,
|
|
287
328
|
name: _constants.MEDIA_DEVICES.MICROPHONE
|
|
288
329
|
});
|
|
289
330
|
}
|
|
290
331
|
if (this.statsResults['video-send']) {
|
|
291
|
-
var _this$statsResults$vi;
|
|
292
332
|
newMqa.intervalMetadata.peripherals.push({
|
|
293
|
-
information:
|
|
333
|
+
information: this.statsResults['video-send'].trackLabel || _constants._UNKNOWN_,
|
|
294
334
|
name: _constants.MEDIA_DEVICES.CAMERA
|
|
295
335
|
});
|
|
296
336
|
}
|
|
@@ -322,6 +362,18 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
322
362
|
this.mediaConnection = mediaConnection;
|
|
323
363
|
}
|
|
324
364
|
|
|
365
|
+
/**
|
|
366
|
+
* Returns the local IP address for diagnostics.
|
|
367
|
+
* this is the local IP of the interface used for the current media connection
|
|
368
|
+
* a host can have many local Ip Addresses
|
|
369
|
+
* @returns {string | undefined} The local IP address.
|
|
370
|
+
*/
|
|
371
|
+
}, {
|
|
372
|
+
key: "getLocalIpAddress",
|
|
373
|
+
value: function getLocalIpAddress() {
|
|
374
|
+
return this.localIpAddress;
|
|
375
|
+
}
|
|
376
|
+
|
|
325
377
|
/**
|
|
326
378
|
* Starts the stats analyzer on interval
|
|
327
379
|
*
|
|
@@ -345,7 +397,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
345
397
|
_this4.sendMqaData();
|
|
346
398
|
_this4.mqaInterval = setInterval(function () {
|
|
347
399
|
_this4.sendMqaData();
|
|
348
|
-
}, _constants.
|
|
400
|
+
}, _constants.MQA_INTERVAL);
|
|
349
401
|
});
|
|
350
402
|
}
|
|
351
403
|
return _promise.default.resolve();
|
|
@@ -377,7 +429,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
377
429
|
_this5.mediaConnection = null;
|
|
378
430
|
});
|
|
379
431
|
}
|
|
380
|
-
this.mediaConnection = null;
|
|
381
432
|
return _promise.default.resolve();
|
|
382
433
|
}
|
|
383
434
|
|
|
@@ -407,22 +458,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
407
458
|
} else if (!isSender && !this.statsResults[type].recv) {
|
|
408
459
|
this.statsResults[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
|
|
409
460
|
}
|
|
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
461
|
switch (getStatsResult.type) {
|
|
427
462
|
case 'outbound-rtp':
|
|
428
463
|
this.processOutboundRTPResult(getStatsResult, type);
|
|
@@ -430,13 +465,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
430
465
|
case 'inbound-rtp':
|
|
431
466
|
this.processInboundRTPResult(getStatsResult, type);
|
|
432
467
|
break;
|
|
433
|
-
case 'track':
|
|
434
|
-
this.processTrackResult(getStatsResult, type);
|
|
435
|
-
break;
|
|
436
468
|
case 'remote-inbound-rtp':
|
|
437
469
|
case 'remote-outbound-rtp':
|
|
438
|
-
|
|
439
|
-
this.compareSentAndReceived(getStatsResult, type, isSender);
|
|
470
|
+
this.compareSentAndReceived(getStatsResult, type);
|
|
440
471
|
break;
|
|
441
472
|
case 'remotecandidate':
|
|
442
473
|
case 'remote-candidate':
|
|
@@ -467,15 +498,26 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
467
498
|
value: function filterAndParseGetStatsResults(statsItem, type, isSender) {
|
|
468
499
|
var _this6 = this;
|
|
469
500
|
var types = _constants.DEFAULT_GET_STATS_FILTER.types;
|
|
501
|
+
|
|
502
|
+
// get the successful candidate pair before parsing stats.
|
|
503
|
+
statsItem.report.forEach(function (report) {
|
|
504
|
+
if (report.type === 'candidate-pair' && report.state === 'succeeded') {
|
|
505
|
+
_this6.successfulCandidatePair = report;
|
|
506
|
+
}
|
|
507
|
+
});
|
|
470
508
|
statsItem.report.forEach(function (result) {
|
|
471
509
|
if (types.includes(result.type)) {
|
|
472
510
|
_this6.parseGetStatsResult(result, type, isSender);
|
|
473
511
|
}
|
|
474
512
|
});
|
|
475
513
|
if (this.statsResults[type]) {
|
|
514
|
+
var _this$successfulCandi2, _this$statsResults;
|
|
476
515
|
this.statsResults[type].direction = statsItem.currentDirection;
|
|
477
516
|
this.statsResults[type].trackLabel = statsItem.localTrackLabel;
|
|
478
517
|
this.statsResults[type].csi = statsItem.csi;
|
|
518
|
+
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);
|
|
519
|
+
// reset the successful candidate pair.
|
|
520
|
+
this.successfulCandidatePair = {};
|
|
479
521
|
}
|
|
480
522
|
}
|
|
481
523
|
|
|
@@ -540,32 +582,16 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
540
582
|
return prev + (((_this7$lastStatsResul = _this7.lastStatsResults[cur]) === null || _this7$lastStatsResul === void 0 ? void 0 : _this7$lastStatsResul.recv[value]) || 0);
|
|
541
583
|
}, 0);
|
|
542
584
|
};
|
|
543
|
-
var getCurrentResolutionsStatsTotals = function getCurrentResolutionsStatsTotals(keyPrefix, value) {
|
|
544
|
-
return (0, _keys.default)(_this7.statsResults).filter(function (key) {
|
|
545
|
-
return key.startsWith(keyPrefix);
|
|
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
585
|
if (this.meetingMediaStatus.expected.sendAudio && this.lastStatsResults['audio-send']) {
|
|
560
586
|
// compare audio stats sent
|
|
561
587
|
// NOTE: relies on there being only one sender.
|
|
562
588
|
var currentStats = this.statsResults['audio-send'].send;
|
|
563
589
|
var previousStats = this.lastStatsResults['audio-send'].send;
|
|
564
590
|
if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
|
|
565
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent");
|
|
591
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent", currentStats.totalPacketsSent);
|
|
566
592
|
} else {
|
|
567
593
|
if (currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
|
|
568
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present");
|
|
594
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present", currentStats.totalAudioEnergy);
|
|
569
595
|
}
|
|
570
596
|
if (currentStats.audioLevel === 0) {
|
|
571
597
|
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user");
|
|
@@ -580,9 +606,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
580
606
|
var currentSamplesReceived = getCurrentStatsTotals('audio-recv', 'totalSamplesReceived');
|
|
581
607
|
var previousSamplesReceived = getPreviousStatsTotals('audio-recv', 'totalSamplesReceived');
|
|
582
608
|
if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {
|
|
583
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets received");
|
|
609
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets received", currentPacketsReceived);
|
|
584
610
|
} else if (currentSamplesReceived === previousSamplesReceived || currentSamplesReceived === 0) {
|
|
585
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio samples received");
|
|
611
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio samples received", currentSamplesReceived);
|
|
586
612
|
}
|
|
587
613
|
this.emitStartStopEvents('audio', previousPacketsReceived, currentPacketsReceived, false);
|
|
588
614
|
}
|
|
@@ -591,13 +617,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
591
617
|
var _currentStats = this.statsResults['video-send'].send;
|
|
592
618
|
var _previousStats = this.lastStatsResults['video-send'].send;
|
|
593
619
|
if (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0) {
|
|
594
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent");
|
|
620
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent", _currentStats.totalPacketsSent);
|
|
595
621
|
} else {
|
|
596
622
|
if (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0) {
|
|
597
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded");
|
|
623
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded", _currentStats.framesEncoded);
|
|
598
624
|
}
|
|
599
|
-
if (this.statsResults
|
|
600
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent");
|
|
625
|
+
if (this.statsResults['video-send'].send.framesSent === this.lastStatsResults['video-send'].send.framesSent || this.statsResults['video-send'].send.framesSent === 0) {
|
|
626
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent", this.statsResults['video-send'].send.framesSent);
|
|
601
627
|
}
|
|
602
628
|
}
|
|
603
629
|
this.emitStartStopEvents('video', _previousStats.framesSent, _currentStats.framesSent, true);
|
|
@@ -606,23 +632,23 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
606
632
|
// compare video stats received
|
|
607
633
|
var _currentPacketsReceived = getCurrentStatsTotals('video-recv', 'totalPacketsReceived');
|
|
608
634
|
var _previousPacketsReceived = getPreviousStatsTotals('video-recv', 'totalPacketsReceived');
|
|
609
|
-
var currentFramesReceived =
|
|
610
|
-
var previousFramesReceived =
|
|
635
|
+
var currentFramesReceived = getCurrentStatsTotals('video-recv', 'framesReceived');
|
|
636
|
+
var previousFramesReceived = getPreviousStatsTotals('video-recv', 'framesReceived');
|
|
611
637
|
var currentFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');
|
|
612
638
|
var previousFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');
|
|
613
|
-
var currentFramesDropped =
|
|
614
|
-
var previousFramesDropped =
|
|
639
|
+
var currentFramesDropped = getCurrentStatsTotals('video-recv', 'framesDropped');
|
|
640
|
+
var previousFramesDropped = getPreviousStatsTotals('video-recv', 'framesDropped');
|
|
615
641
|
if (_currentPacketsReceived === _previousPacketsReceived || _currentPacketsReceived === 0) {
|
|
616
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received");
|
|
642
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received", _currentPacketsReceived);
|
|
617
643
|
} else {
|
|
618
644
|
if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {
|
|
619
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames received");
|
|
645
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames received", currentFramesReceived);
|
|
620
646
|
}
|
|
621
647
|
if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {
|
|
622
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded");
|
|
648
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded", currentFramesDecoded);
|
|
623
649
|
}
|
|
624
650
|
if (currentFramesDropped - previousFramesDropped > 10) {
|
|
625
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped");
|
|
651
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped", currentFramesDropped - previousFramesDropped);
|
|
626
652
|
}
|
|
627
653
|
}
|
|
628
654
|
this.emitStartStopEvents('video', previousFramesDecoded, currentFramesDecoded, false);
|
|
@@ -633,13 +659,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
633
659
|
var _currentStats2 = this.statsResults['video-share-send'].send;
|
|
634
660
|
var _previousStats2 = this.lastStatsResults['video-share-send'].send;
|
|
635
661
|
if (_currentStats2.totalPacketsSent === _previousStats2.totalPacketsSent || _currentStats2.totalPacketsSent === 0) {
|
|
636
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent");
|
|
662
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent", _currentStats2.totalPacketsSent);
|
|
637
663
|
} else {
|
|
638
664
|
if (_currentStats2.framesEncoded === _previousStats2.framesEncoded || _currentStats2.framesEncoded === 0) {
|
|
639
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded");
|
|
665
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded", _currentStats2.framesEncoded);
|
|
640
666
|
}
|
|
641
|
-
if (this.statsResults
|
|
642
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames sent");
|
|
667
|
+
if (this.statsResults['video-share-send'].send.framesSent === this.lastStatsResults['video-share-send'].send.framesSent || this.statsResults['video-share-send'].send.framesSent === 0) {
|
|
668
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames sent", this.statsResults['video-share-send'].send.framesSent);
|
|
643
669
|
}
|
|
644
670
|
}
|
|
645
671
|
}
|
|
@@ -648,23 +674,23 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
648
674
|
// compare share stats received
|
|
649
675
|
var _currentPacketsReceived2 = getCurrentStatsTotals('video-share-recv', 'totalPacketsReceived');
|
|
650
676
|
var _previousPacketsReceived2 = getPreviousStatsTotals('video-share-recv', 'totalPacketsReceived');
|
|
651
|
-
var _currentFramesReceived =
|
|
652
|
-
var _previousFramesReceived =
|
|
677
|
+
var _currentFramesReceived = getCurrentStatsTotals('video-share-recv', 'framesReceived');
|
|
678
|
+
var _previousFramesReceived = getPreviousStatsTotals('video-share-recv', 'framesReceived');
|
|
653
679
|
var _currentFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');
|
|
654
680
|
var _previousFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');
|
|
655
|
-
var _currentFramesDropped =
|
|
656
|
-
var _previousFramesDropped =
|
|
681
|
+
var _currentFramesDropped = getCurrentStatsTotals('video-share-recv', 'framesDropped');
|
|
682
|
+
var _previousFramesDropped = getPreviousStatsTotals('video-share-recv', 'framesDropped');
|
|
657
683
|
if (_currentPacketsReceived2 === _previousPacketsReceived2 || _currentPacketsReceived2 === 0) {
|
|
658
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received");
|
|
684
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received", _currentPacketsReceived2);
|
|
659
685
|
} else {
|
|
660
686
|
if (_currentFramesReceived === _previousFramesReceived || _currentFramesReceived === 0) {
|
|
661
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames received");
|
|
687
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames received", _currentFramesReceived);
|
|
662
688
|
}
|
|
663
689
|
if (_currentFramesDecoded === _previousFramesDecoded || _currentFramesDecoded === 0) {
|
|
664
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded");
|
|
690
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded", _currentFramesDecoded);
|
|
665
691
|
}
|
|
666
692
|
if (_currentFramesDropped - _previousFramesDropped > 10) {
|
|
667
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped");
|
|
693
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped", _currentFramesDropped - _previousFramesDropped);
|
|
668
694
|
}
|
|
669
695
|
}
|
|
670
696
|
|
|
@@ -753,28 +779,16 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
753
779
|
var sendrecvType = _constants.STATS.SEND_DIRECTION;
|
|
754
780
|
if (result.bytesSent) {
|
|
755
781
|
var kilobytes = 0;
|
|
756
|
-
if (
|
|
757
|
-
this.statsResults
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
this.statsResults
|
|
761
|
-
}
|
|
762
|
-
if (!this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded) {
|
|
763
|
-
this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
|
|
782
|
+
if (result.frameWidth && result.frameHeight) {
|
|
783
|
+
this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
|
|
784
|
+
this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
|
|
785
|
+
this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;
|
|
786
|
+
this.statsResults[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
|
|
764
787
|
}
|
|
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
788
|
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;
|
|
789
|
+
this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
|
|
790
|
+
this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
|
|
791
|
+
this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent;
|
|
778
792
|
|
|
779
793
|
// Data saved to send MQA metrics
|
|
780
794
|
|
|
@@ -808,41 +822,33 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
808
822
|
var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
|
|
809
823
|
if (result.bytesReceived) {
|
|
810
824
|
var kilobytes = 0;
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
if (
|
|
815
|
-
this.statsResults
|
|
816
|
-
|
|
817
|
-
|
|
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
|
+
var receiveSlot = this.receiveSlotCallback(result.ssrc);
|
|
826
|
+
var sourceState = receiveSlot === null || receiveSlot === void 0 ? void 0 : receiveSlot.sourceState;
|
|
827
|
+
var idAndCsi = receiveSlot ? "id: \"".concat(receiveSlot.id || '', "\"").concat(receiveSlot.csi ? " and csi: ".concat(receiveSlot.csi) : '') : '';
|
|
828
|
+
if (result.frameWidth && result.frameHeight) {
|
|
829
|
+
this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
|
|
830
|
+
this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
|
|
831
|
+
this.statsResults[mediaType][sendrecvType].framesReceived = result.framesReceived;
|
|
825
832
|
}
|
|
826
|
-
var bytes = result.bytesReceived - this.statsResults
|
|
827
|
-
this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
|
|
833
|
+
var bytes = result.bytesReceived - this.statsResults[mediaType][sendrecvType].totalBytesReceived;
|
|
828
834
|
kilobytes = bytes / 1024;
|
|
829
835
|
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;
|
|
836
|
+
var currentPacketsLost = result.packetsLost - this.statsResults[mediaType][sendrecvType].totalPacketsLost;
|
|
837
|
+
if (currentPacketsLost < 0) {
|
|
838
|
+
currentPacketsLost = 0;
|
|
835
839
|
}
|
|
836
|
-
|
|
837
|
-
this.statsResults
|
|
838
|
-
if (
|
|
839
|
-
|
|
840
|
+
var currentPacketsReceived = result.packetsReceived - this.statsResults[mediaType][sendrecvType].totalPacketsReceived;
|
|
841
|
+
this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
|
|
842
|
+
if (currentPacketsReceived === 0) {
|
|
843
|
+
if (receiveSlot && sourceState === 'live') {
|
|
844
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for receive slot ".concat(idAndCsi, ". Total packets received on slot: "), result.packetsReceived);
|
|
845
|
+
}
|
|
840
846
|
}
|
|
841
847
|
|
|
842
848
|
// Check the over all packet Lost ratio
|
|
843
|
-
this.statsResults[mediaType][sendrecvType].currentPacketLossRatio =
|
|
849
|
+
this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = currentPacketsLost > 0 ? currentPacketsLost / (currentPacketsReceived + currentPacketsLost) : 0;
|
|
844
850
|
if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
|
|
845
|
-
_loggerProxy.default.logger.info(
|
|
851
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ".concat(idAndCsi), this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
|
|
846
852
|
}
|
|
847
853
|
|
|
848
854
|
// TODO: check the packet loss value is negative values here
|
|
@@ -878,55 +884,19 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
878
884
|
}
|
|
879
885
|
|
|
880
886
|
/**
|
|
881
|
-
*
|
|
887
|
+
* extracts the local Ip address from the statsResult object by looking at stats results candidates
|
|
888
|
+
* and matches that ID with the successful candidate pair. It looks at the type of local candidate it is
|
|
889
|
+
* and then extracts the IP address from the relatedAddress or address property based on conditions known in webrtc
|
|
890
|
+
* 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
|
|
891
|
+
* for example, firefox does not set the relayProtocol, and if the user is behind a NAT it might be the public IP
|
|
882
892
|
* @private
|
|
883
|
-
* @param {
|
|
884
|
-
* @param {
|
|
885
|
-
* @param {boolean} isSender
|
|
886
|
-
* @param {boolean} isRemote
|
|
887
|
-
*
|
|
893
|
+
* @param {string} successfulCandidatePairId - The ID of the successful candidate pair.
|
|
894
|
+
* @param {Object} candidates - the stats result candidates
|
|
888
895
|
* @returns {void}
|
|
889
896
|
*/
|
|
890
897
|
}, {
|
|
891
|
-
key: "
|
|
898
|
+
key: "compareSentAndReceived",
|
|
892
899
|
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
900
|
/**
|
|
931
901
|
*
|
|
932
902
|
* @private
|
|
@@ -935,19 +905,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
935
905
|
* @returns {void}
|
|
936
906
|
* @memberof StatsAnalyzer
|
|
937
907
|
*/
|
|
938
|
-
|
|
939
|
-
key: "compareSentAndReceived",
|
|
940
|
-
value: function compareSentAndReceived(result, type) {
|
|
908
|
+
function compareSentAndReceived(result, type) {
|
|
941
909
|
// Don't compare on transceivers without a sender.
|
|
942
|
-
if (!type || !this.statsResults
|
|
910
|
+
if (!type || !this.statsResults[type].send) {
|
|
943
911
|
return;
|
|
944
912
|
}
|
|
945
913
|
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;
|
|
914
|
+
var currentPacketLoss = result.packetsLost - this.statsResults[mediaType].send.totalPacketsLostOnReceiver;
|
|
951
915
|
this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;
|
|
952
916
|
this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
|
|
953
917
|
this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);
|