@webex/plugin-meetings 3.0.0-beta.4 → 3.0.0-beta.400
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/UPGRADING.md +9 -9
- package/browsers.js +19 -24
- 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 +216 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +23 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +45 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +1048 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +67 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +1 -20
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +5 -20
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +0 -7
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +10 -24
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +11 -24
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +12 -25
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +10 -24
- package/dist/common/errors/media.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/parameter.js +5 -33
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +10 -24
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +9 -23
- package/dist/common/errors/permission.js.map +1 -1
- 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/reconnection-in-progress.js +0 -17
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +10 -24
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +10 -24
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +54 -48
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +5 -25
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +0 -22
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +0 -23
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +0 -12
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +0 -15
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +0 -4
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -8
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +41 -60
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +28 -23
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +11 -15
- package/dist/config.js.map +1 -1
- package/dist/constants.js +347 -74
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +14 -0
- package/dist/controls-options-manager/constants.js.map +1 -0
- package/dist/controls-options-manager/enums.js +27 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +297 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- 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 +319 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +125 -18
- 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 +101 -29
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -26
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +0 -15
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +4 -12
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +564 -246
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +10 -38
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +82 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +314 -163
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +110 -92
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +107 -231
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +137 -222
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +2 -9
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +316 -501
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +97 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +5311 -3871
- 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 +260 -183
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +421 -347
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js +7 -0
- package/dist/meeting/request.type.js.map +1 -0
- package/dist/meeting/state.js +21 -31
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.js +672 -585
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting/voicea-meeting.js +172 -0
- package/dist/meeting/voicea-meeting.js.map +1 -0
- package/dist/meeting-info/collection.js +6 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +87 -39
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +352 -283
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +3 -15
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +99 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +147 -234
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +43 -19
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +895 -600
- 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 +26 -41
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +184 -157
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +134 -85
- 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 +158 -88
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +13 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +194 -204
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +113 -68
- 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 +324 -259
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +19 -7
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +11 -558
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +263 -50
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +58 -65
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +76 -95
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +62 -76
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +82 -45
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +657 -448
- 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/networkQualityMonitor/index.js +40 -59
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +21 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +1 -31
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +0 -13
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/clusterReachability.js +356 -0
- package/dist/reachability/clusterReachability.js.map +1 -0
- package/dist/reachability/index.js +297 -460
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +20 -26
- 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/reactions/constants.js +13 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +109 -0
- package/dist/reactions/reactions.js.map +1 -0
- package/dist/reactions/reactions.type.js +36 -0
- package/dist/reactions/reactions.type.js.map +1 -0
- package/dist/reconnection-manager/index.js +413 -483
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +17 -0
- package/dist/recording-controller/enums.js.map +1 -0
- package/dist/recording-controller/index.js +362 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +64 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/index.js +102 -86
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +131 -135
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +437 -116
- 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/global.js +1 -95
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +557 -583
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +326 -130
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +22 -47
- package/dist/transcription/index.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/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +15 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +93 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +36 -0
- package/dist/types/common/queue.d.ts +34 -0
- package/dist/types/config.d.ts +72 -0
- package/dist/types/constants.d.ts +1088 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +15 -0
- package/dist/types/controls-options-manager/index.d.ts +136 -0
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -0
- package/dist/types/index.d.ts +7 -0
- 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/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +322 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +272 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +34 -0
- package/dist/types/media/properties.d.ts +93 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +241 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +167 -0
- package/dist/types/meeting/index.d.ts +1824 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/types/meeting/muteState.d.ts +178 -0
- package/dist/types/meeting/request.d.ts +293 -0
- package/dist/types/meeting/request.type.d.ts +11 -0
- package/dist/types/meeting/state.d.ts +9 -0
- package/dist/types/meeting/util.d.ts +118 -0
- package/dist/types/meeting/voicea-meeting.d.ts +16 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +69 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +123 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +2 -0
- package/dist/types/meeting-info/utilv2.d.ts +2 -0
- package/dist/types/meetings/collection.d.ts +40 -0
- package/dist/types/meetings/index.d.ts +389 -0
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +160 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +353 -0
- package/dist/types/members/request.d.ts +114 -0
- package/dist/types/members/types.d.ts +25 -0
- package/dist/types/members/util.d.ts +215 -0
- package/dist/types/metrics/constants.d.ts +70 -0
- package/dist/types/metrics/index.d.ts +45 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +120 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/types/multistream/remoteMedia.d.ts +72 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +49 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +301 -0
- package/dist/types/multistream/sendSlotManager.d.ts +70 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/clusterReachability.d.ts +109 -0
- package/dist/types/reachability/index.d.ts +105 -0
- package/dist/types/reachability/request.d.ts +39 -0
- package/dist/types/reachability/util.d.ts +8 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +136 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +207 -0
- package/dist/types/recording-controller/util.d.ts +14 -0
- package/dist/types/roap/index.d.ts +86 -0
- package/dist/types/roap/request.d.ts +39 -0
- package/dist/types/roap/turnDiscovery.d.ts +155 -0
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +61 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +217 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +48 -0
- package/dist/types/transcription/index.d.ts +64 -0
- 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/internal-README.md +7 -6
- package/package.json +30 -21
- 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 +220 -0
- package/src/breakouts/breakout.ts +188 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +925 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
- package/src/common/collection.ts +9 -7
- package/src/common/{config.js → config.ts} +1 -1
- package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
- package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
- package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
- package/src/common/errors/{media.js → media.ts} +11 -7
- package/src/common/errors/no-meeting-info.ts +24 -0
- package/src/common/errors/parameter.ts +11 -7
- package/src/common/errors/{password-error.js → password-error.ts} +11 -7
- package/src/common/errors/{permission.js → permission.ts} +10 -6
- package/src/common/errors/reclaim-host-role-errors.ts +134 -0
- package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
- package/src/common/errors/{stats.js → stats.ts} +11 -7
- package/src/common/errors/{webex-errors.js → webex-errors.ts} +51 -8
- package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
- package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
- package/src/common/events/{events.js → events.ts} +5 -1
- package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
- package/src/common/events/{util.js → util.ts} +2 -3
- package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
- package/src/common/logs/logger-proxy.ts +44 -0
- package/src/common/logs/{request.js → request.ts} +26 -9
- package/src/common/queue.ts +22 -9
- package/src/{config.js → config.ts} +19 -21
- package/src/constants.ts +296 -27
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +18 -0
- package/src/controls-options-manager/index.ts +278 -0
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +300 -0
- package/src/index.ts +45 -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 +222 -0
- package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
- package/src/locus-info/{fullState.js → fullState.ts} +16 -12
- package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
- package/src/locus-info/{index.js → index.ts} +561 -119
- package/src/locus-info/{infoUtils.js → infoUtils.ts} +29 -10
- package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +97 -17
- package/src/locus-info/{parser.js → parser.ts} +303 -104
- package/src/locus-info/{selfUtils.js → selfUtils.ts} +199 -68
- package/src/media/index.ts +460 -0
- package/src/media/properties.ts +283 -0
- package/src/media/{util.js → util.ts} +2 -2
- package/src/mediaQualityMetrics/config.ts +249 -0
- package/src/meeting/in-meeting-actions.ts +199 -3
- package/src/meeting/index.ts +8494 -0
- package/src/meeting/locusMediaRequest.ts +313 -0
- package/src/meeting/muteState.ts +465 -0
- package/src/meeting/request.ts +912 -0
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/{state.js → state.ts} +50 -35
- package/src/meeting/util.ts +799 -0
- package/src/meeting/voicea-meeting.ts +122 -0
- package/src/meeting-info/{collection.js → collection.ts} +6 -2
- package/src/meeting-info/index.ts +210 -0
- package/src/meeting-info/meeting-info-v2.ts +423 -0
- package/src/meeting-info/{request.js → request.ts} +14 -4
- package/src/meeting-info/{util.js → util.ts} +70 -58
- package/src/meeting-info/{utilv2.js → utilv2.ts} +99 -82
- package/src/meetings/collection.ts +76 -0
- package/src/meetings/index.ts +1539 -0
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/{request.js → request.ts} +34 -25
- package/src/meetings/{util.js → util.ts} +133 -38
- package/src/member/{index.js → index.ts} +159 -56
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +397 -0
- package/src/members/{collection.js → collection.ts} +10 -2
- package/src/members/{index.js → index.ts} +351 -146
- package/src/members/request.ts +255 -0
- package/src/members/types.ts +29 -0
- package/src/members/util.ts +353 -0
- package/src/metrics/{constants.js → constants.ts} +17 -6
- package/src/metrics/index.ts +73 -0
- package/src/multistream/mediaRequestManager.ts +341 -64
- package/src/multistream/receiveSlot.ts +69 -26
- package/src/multistream/receiveSlotManager.ts +66 -42
- package/src/multistream/remoteMedia.ts +40 -5
- package/src/multistream/remoteMediaGroup.ts +82 -3
- package/src/multistream/remoteMediaManager.ts +401 -81
- package/src/multistream/sendSlotManager.ts +199 -0
- package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
- package/src/personal-meeting-room/{index.js → index.ts} +28 -19
- package/src/personal-meeting-room/{request.js → request.ts} +13 -4
- package/src/personal-meeting-room/{util.js → util.ts} +4 -4
- package/src/reachability/clusterReachability.ts +320 -0
- package/src/reachability/index.ts +371 -0
- package/src/reachability/request.ts +50 -35
- package/src/reachability/util.ts +24 -0
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +104 -0
- package/src/reactions/reactions.type.ts +62 -0
- package/src/reconnection-manager/index.ts +643 -0
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +332 -0
- package/src/recording-controller/util.ts +75 -0
- package/src/roap/index.ts +288 -0
- package/src/roap/request.ts +153 -0
- package/src/roap/turnDiscovery.ts +374 -70
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +166 -0
- package/src/statsAnalyzer/global.ts +37 -0
- package/src/statsAnalyzer/index.ts +1275 -0
- package/src/statsAnalyzer/mqaUtil.ts +440 -0
- package/src/transcription/{index.js → index.ts} +46 -39
- package/src/webinar/collection.ts +31 -0
- package/src/webinar/index.ts +62 -0
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +791 -531
- package/test/integration/spec/space-meeting.js +391 -204
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +238 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1793 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +287 -0
- package/test/unit/spec/controls-options-manager/util.js +582 -0
- package/test/unit/spec/fixture/locus.js +93 -90
- 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 +325 -32
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +1458 -21
- package/test/unit/spec/locus-info/infoUtils.js +71 -40
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +529 -685
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +41 -0
- package/test/unit/spec/locus-info/parser.js +119 -44
- package/test/unit/spec/locus-info/selfConstant.js +120 -103
- package/test/unit/spec/locus-info/selfUtils.js +291 -12
- package/test/unit/spec/media/index.ts +194 -111
- package/test/unit/spec/media/properties.ts +11 -11
- package/test/unit/spec/meeting/in-meeting-actions.ts +96 -3
- package/test/unit/spec/meeting/index.js +8616 -1921
- package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
- package/test/unit/spec/meeting/muteState.js +568 -207
- package/test/unit/spec/meeting/request.js +602 -82
- package/test/unit/spec/meeting/utils.js +867 -179
- package/test/unit/spec/meeting/voicea-meeting.ts +266 -0
- package/test/unit/spec/meeting-info/index.js +300 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +631 -78
- package/test/unit/spec/meeting-info/request.js +7 -9
- package/test/unit/spec/meeting-info/util.js +11 -12
- package/test/unit/spec/meeting-info/utilv2.js +131 -74
- package/test/unit/spec/meetings/collection.js +27 -1
- package/test/unit/spec/meetings/index.js +1826 -374
- package/test/unit/spec/meetings/utils.js +243 -14
- package/test/unit/spec/member/index.js +61 -7
- package/test/unit/spec/member/util.js +526 -26
- package/test/unit/spec/members/index.js +536 -55
- package/test/unit/spec/members/request.js +228 -40
- package/test/unit/spec/members/utils.js +217 -4
- package/test/unit/spec/metrics/index.js +13 -68
- package/test/unit/spec/multistream/mediaRequestManager.ts +1032 -110
- package/test/unit/spec/multistream/receiveSlot.ts +77 -18
- package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
- package/test/unit/spec/multistream/remoteMedia.ts +40 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +350 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +937 -65
- package/test/unit/spec/multistream/sendSlotManager.ts +274 -0
- package/test/unit/spec/networkQualityMonitor/index.js +24 -18
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/clusterReachability.ts +279 -0
- package/test/unit/spec/reachability/index.ts +606 -26
- package/test/unit/spec/reachability/request.js +68 -0
- package/test/unit/spec/reachability/util.ts +40 -0
- package/test/unit/spec/reconnection-manager/index.js +222 -34
- package/test/unit/spec/recording-controller/index.js +306 -0
- package/test/unit/spec/recording-controller/util.js +229 -0
- package/test/unit/spec/roap/index.ts +238 -82
- package/test/unit/spec/roap/request.ts +255 -0
- package/test/unit/spec/roap/turnDiscovery.ts +707 -110
- package/test/unit/spec/rtcMetrics/index.ts +122 -0
- package/test/unit/spec/stats-analyzer/index.js +1331 -62
- package/test/unit/spec/webinar/collection.ts +13 -0
- package/test/unit/spec/webinar/index.ts +60 -0
- package/test/utils/cmr.js +44 -42
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +63 -99
- package/test/utils/webex-config.js +22 -18
- package/test/utils/webex-test-users.js +65 -50
- package/tsconfig.json +6 -0
- package/dist/media/internal-media-core-wrapper.js +0 -22
- package/dist/media/internal-media-core-wrapper.js.map +0 -1
- package/dist/meeting/effectsState.js +0 -327
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.js +0 -301
- package/dist/metrics/config.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -116
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -124
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/src/common/logs/logger-proxy.js +0 -33
- package/src/index.js +0 -15
- package/src/locus-info/controlsUtils.js +0 -102
- package/src/media/index.js +0 -459
- package/src/media/internal-media-core-wrapper.ts +0 -9
- package/src/media/properties.js +0 -289
- package/src/mediaQualityMetrics/config.js +0 -382
- package/src/meeting/effectsState.js +0 -205
- package/src/meeting/index.js +0 -6284
- package/src/meeting/muteState.js +0 -318
- package/src/meeting/request.js +0 -684
- package/src/meeting/util.js +0 -506
- package/src/meeting-info/index.js +0 -131
- package/src/meeting-info/meeting-info-v2.js +0 -255
- package/src/meetings/collection.js +0 -40
- package/src/meetings/index.js +0 -1015
- package/src/member/util.js +0 -254
- package/src/members/request.js +0 -131
- package/src/members/util.js +0 -258
- package/src/metrics/config.js +0 -324
- package/src/metrics/index.js +0 -530
- package/src/multistream/multistreamMedia.ts +0 -92
- package/src/peer-connection-manager/util.ts +0 -117
- package/src/reachability/index.js +0 -464
- package/src/reconnection-manager/index.js +0 -519
- package/src/roap/index.js +0 -220
- package/src/roap/request.js +0 -127
- package/src/statsAnalyzer/global.js +0 -133
- package/src/statsAnalyzer/index.js +0 -1006
- package/src/statsAnalyzer/mqaUtil.js +0 -173
- package/test/unit/spec/meeting/effectsState.js +0 -291
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
- /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
|
@@ -1,55 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
-
|
|
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");
|
|
5
9
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
6
|
-
|
|
7
10
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
8
|
-
|
|
9
11
|
_Object$defineProperty(exports, "__esModule", {
|
|
10
12
|
value: true
|
|
11
13
|
});
|
|
12
|
-
|
|
13
14
|
exports.StatsAnalyzer = exports.EVENTS = void 0;
|
|
14
|
-
|
|
15
|
+
var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys"));
|
|
15
16
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
16
|
-
|
|
17
17
|
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
18
|
-
|
|
19
18
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
20
|
-
|
|
21
19
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
22
|
-
|
|
23
20
|
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
|
|
24
|
-
|
|
25
21
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
26
|
-
|
|
27
22
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
28
|
-
|
|
29
23
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
30
|
-
|
|
31
24
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
32
|
-
|
|
25
|
+
var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty"));
|
|
33
26
|
var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
34
|
-
|
|
35
27
|
var _internalMediaCore = require("@webex/internal-media-core");
|
|
36
|
-
|
|
37
28
|
var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
|
|
38
|
-
|
|
39
29
|
var _constants = require("../constants");
|
|
40
|
-
|
|
41
|
-
var _config = _interopRequireDefault(require("../mediaQualityMetrics/config"));
|
|
42
|
-
|
|
30
|
+
var _config = require("../mediaQualityMetrics/config");
|
|
43
31
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
44
|
-
|
|
45
32
|
var _global = _interopRequireDefault(require("./global"));
|
|
46
|
-
|
|
47
33
|
var _mqaUtil = require("./mqaUtil");
|
|
48
|
-
|
|
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; }
|
|
49
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); }; }
|
|
50
|
-
|
|
51
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; } }
|
|
52
|
-
|
|
53
38
|
var EVENTS = {
|
|
54
39
|
MEDIA_QUALITY: 'MEDIA_QUALITY',
|
|
55
40
|
LOCAL_MEDIA_STARTED: 'LOCAL_MEDIA_STARTED',
|
|
@@ -57,6 +42,21 @@ var EVENTS = {
|
|
|
57
42
|
REMOTE_MEDIA_STARTED: 'REMOTE_MEDIA_STARTED',
|
|
58
43
|
REMOTE_MEDIA_STOPPED: 'REMOTE_MEDIA_STOPPED'
|
|
59
44
|
};
|
|
45
|
+
exports.EVENTS = EVENTS;
|
|
46
|
+
var emptySender = {
|
|
47
|
+
trackLabel: '',
|
|
48
|
+
maxPacketLossRatio: 0,
|
|
49
|
+
availableBandwidth: 0,
|
|
50
|
+
bytesSent: 0,
|
|
51
|
+
meanRemoteJitter: [],
|
|
52
|
+
meanRoundTripTime: []
|
|
53
|
+
};
|
|
54
|
+
var emptyReceiver = {
|
|
55
|
+
availableBandwidth: 0,
|
|
56
|
+
bytesReceived: 0,
|
|
57
|
+
meanRtpJitter: [],
|
|
58
|
+
meanRoundTripTime: []
|
|
59
|
+
};
|
|
60
60
|
/**
|
|
61
61
|
* Stats Analyzer class that will emit events based on detected quality
|
|
62
62
|
*
|
|
@@ -64,54 +64,70 @@ var EVENTS = {
|
|
|
64
64
|
* @class StatsAnalyzer
|
|
65
65
|
* @extends {EventsScope}
|
|
66
66
|
*/
|
|
67
|
-
|
|
68
|
-
exports.EVENTS = EVENTS;
|
|
69
|
-
|
|
70
67
|
var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
71
68
|
(0, _inherits2.default)(StatsAnalyzer, _EventsScope);
|
|
72
|
-
|
|
73
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
|
|
74
71
|
|
|
75
72
|
/**
|
|
76
73
|
* Creates a new instance of StatsAnalyzer
|
|
77
74
|
* @constructor
|
|
78
75
|
* @public
|
|
79
76
|
* @param {Object} config SDK Configuration Object
|
|
77
|
+
* @param {Function} receiveSlotCallback Callback used to access receive slots.
|
|
80
78
|
* @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)
|
|
81
79
|
* @param {Object} statsResults Default properties for stats
|
|
82
80
|
*/
|
|
83
81
|
function StatsAnalyzer(config) {
|
|
84
82
|
var _this;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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;
|
|
88
88
|
(0, _classCallCheck2.default)(this, StatsAnalyzer);
|
|
89
89
|
_this = _super.call(this);
|
|
90
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "config", void 0);
|
|
91
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "correlationId", void 0);
|
|
92
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastEmittedStartStopEvent", void 0);
|
|
93
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastMqaDataSent", void 0);
|
|
94
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastStatsResults", void 0);
|
|
95
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "meetingMediaStatus", void 0);
|
|
96
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mqaInterval", void 0);
|
|
97
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mqaSentCount", void 0);
|
|
98
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "networkQualityMonitor", void 0);
|
|
99
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mediaConnection", void 0);
|
|
100
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsInterval", void 0);
|
|
101
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsResults", void 0);
|
|
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));
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
if (previousValue === undefined) previousValue = 0; // eslint-disable-next-line no-param-reassign
|
|
109
|
+
}
|
|
97
110
|
|
|
111
|
+
// eslint-disable-next-line no-param-reassign
|
|
112
|
+
if (previousValue === undefined) previousValue = 0;
|
|
113
|
+
// eslint-disable-next-line no-param-reassign
|
|
98
114
|
if (currentValue === undefined) currentValue = 0;
|
|
115
|
+
if (!_this.lastEmittedStartStopEvent[mediaType]) {
|
|
116
|
+
_this.lastEmittedStartStopEvent[mediaType] = {};
|
|
117
|
+
}
|
|
99
118
|
var lastEmittedEvent = isLocal ? _this.lastEmittedStartStopEvent[mediaType].local : _this.lastEmittedStartStopEvent[mediaType].remote;
|
|
100
119
|
var newEvent;
|
|
101
|
-
|
|
102
120
|
if (currentValue - previousValue > 0) {
|
|
103
121
|
newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STARTED : EVENTS.REMOTE_MEDIA_STARTED;
|
|
104
122
|
} else if (currentValue === previousValue && currentValue > 0) {
|
|
105
123
|
newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STOPPED : EVENTS.REMOTE_MEDIA_STOPPED;
|
|
106
124
|
}
|
|
107
|
-
|
|
108
125
|
if (newEvent && lastEmittedEvent !== newEvent) {
|
|
109
126
|
if (isLocal) {
|
|
110
127
|
_this.lastEmittedStartStopEvent[mediaType].local = newEvent;
|
|
111
128
|
} else {
|
|
112
129
|
_this.lastEmittedStartStopEvent[mediaType].remote = newEvent;
|
|
113
130
|
}
|
|
114
|
-
|
|
115
131
|
_this.emit({
|
|
116
132
|
file: 'statsAnalyzer/index',
|
|
117
133
|
function: 'compareLastStatsResult'
|
|
@@ -120,66 +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
171
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
var RemoteNetworkType = {};
|
|
132
|
-
if (!result.id) return;
|
|
133
|
-
var sendRecvType = isSender ? _constants.STATS.SEND_DIRECTION : _constants.STATS.RECEIVE_DIRECTION;
|
|
134
|
-
var ipType = isRemote ? _constants.STATS.REMOTE : _constants.STATS.LOCAL;
|
|
135
|
-
|
|
136
|
-
if (!RemoteCandidateType[result.id]) {
|
|
137
|
-
RemoteCandidateType[result.id] = [];
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
if (!RemoteTransport[result.id]) {
|
|
141
|
-
RemoteTransport[result.id] = [];
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
if (!RemoteIpAddress[result.id]) {
|
|
145
|
-
RemoteIpAddress[result.id] = [];
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
if (!RemoteNetworkType[result.id]) {
|
|
149
|
-
RemoteNetworkType[result.id] = [];
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
if (result.candidateType && RemoteCandidateType[result.id].indexOf(result.candidateType) === -1) {
|
|
153
|
-
RemoteCandidateType[result.id].push(result.candidateType);
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
if (result.protocol && RemoteTransport[result.id].indexOf(result.protocol) === -1) {
|
|
157
|
-
RemoteTransport[result.id].push(result.protocol.toUpperCase());
|
|
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;
|
|
158
175
|
}
|
|
159
|
-
|
|
160
|
-
if (result.
|
|
161
|
-
|
|
176
|
+
var transport;
|
|
177
|
+
if (result.relayProtocol) {
|
|
178
|
+
transport = result.relayProtocol.toUpperCase();
|
|
179
|
+
} else if (result.protocol) {
|
|
180
|
+
transport = result.protocol.toUpperCase();
|
|
162
181
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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 = {};
|
|
166
186
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
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,
|
|
171
196
|
portNumber: result.port,
|
|
172
|
-
networkType:
|
|
197
|
+
networkType: result.networkType,
|
|
173
198
|
priority: result.priority,
|
|
174
|
-
transport:
|
|
199
|
+
transport: transport,
|
|
175
200
|
timestamp: result.time,
|
|
176
201
|
id: result.id,
|
|
177
202
|
type: result.type
|
|
178
203
|
};
|
|
179
|
-
_this.statsResults.connectionType[ipType].candidateType =
|
|
180
|
-
_this.statsResults.connectionType[ipType].ipAddress =
|
|
181
|
-
_this.statsResults.connectionType[ipType].networkType =
|
|
182
|
-
_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;
|
|
183
208
|
_this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;
|
|
184
209
|
});
|
|
185
210
|
_this.statsStarted = false;
|
|
@@ -189,138 +214,36 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
189
214
|
_this.networkQualityMonitor = networkQualityMonitor;
|
|
190
215
|
_this.correlationId = config.correlationId;
|
|
191
216
|
_this.mqaSentCount = -1;
|
|
192
|
-
_this.lastMqaDataSent = {
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
},
|
|
198
|
-
audio: {
|
|
199
|
-
send: {},
|
|
200
|
-
recv: {}
|
|
201
|
-
},
|
|
202
|
-
share: {
|
|
203
|
-
send: {},
|
|
204
|
-
recv: {}
|
|
205
|
-
}
|
|
206
|
-
},
|
|
207
|
-
video: {
|
|
208
|
-
send: {},
|
|
209
|
-
recv: {}
|
|
210
|
-
},
|
|
211
|
-
audio: {
|
|
212
|
-
send: {},
|
|
213
|
-
recv: {}
|
|
214
|
-
},
|
|
215
|
-
share: {
|
|
216
|
-
send: {},
|
|
217
|
-
recv: {}
|
|
218
|
-
}
|
|
219
|
-
};
|
|
220
|
-
_this.localMQEStats = {
|
|
221
|
-
audio: {
|
|
222
|
-
RX: {
|
|
223
|
-
packetsLost: [],
|
|
224
|
-
jitter: [],
|
|
225
|
-
latency: [],
|
|
226
|
-
bitRate: []
|
|
227
|
-
},
|
|
228
|
-
TX: {
|
|
229
|
-
packetsLost: [],
|
|
230
|
-
jitter: [],
|
|
231
|
-
latency: [],
|
|
232
|
-
bitRate: []
|
|
233
|
-
}
|
|
234
|
-
},
|
|
235
|
-
video: {
|
|
236
|
-
RX: {
|
|
237
|
-
packetsLost: [],
|
|
238
|
-
jitter: [],
|
|
239
|
-
latency: [],
|
|
240
|
-
bitRate: [],
|
|
241
|
-
frameRate: [],
|
|
242
|
-
resolutionWidth: [],
|
|
243
|
-
resolutionHeight: [],
|
|
244
|
-
requestedKeyFrame: [],
|
|
245
|
-
receivedKeyFrame: []
|
|
246
|
-
},
|
|
247
|
-
TX: {
|
|
248
|
-
packetsLost: [],
|
|
249
|
-
jitter: [],
|
|
250
|
-
latency: [],
|
|
251
|
-
bitRate: [],
|
|
252
|
-
frameRate: [],
|
|
253
|
-
resolutionWidth: [],
|
|
254
|
-
resolutionHeight: [],
|
|
255
|
-
requestedKeyFrame: [],
|
|
256
|
-
receivedKeyFrame: []
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
};
|
|
260
|
-
_this.lastEmittedStartStopEvent = {
|
|
261
|
-
audio: {
|
|
262
|
-
local: undefined,
|
|
263
|
-
remote: undefined
|
|
264
|
-
},
|
|
265
|
-
video: {
|
|
266
|
-
local: undefined,
|
|
267
|
-
remote: undefined
|
|
268
|
-
},
|
|
269
|
-
share: {
|
|
270
|
-
local: undefined,
|
|
271
|
-
remote: undefined
|
|
272
|
-
}
|
|
273
|
-
};
|
|
217
|
+
_this.lastMqaDataSent = {};
|
|
218
|
+
_this.lastEmittedStartStopEvent = {};
|
|
219
|
+
_this.receiveSlotCallback = receiveSlotCallback;
|
|
220
|
+
_this.successfulCandidatePair = {};
|
|
221
|
+
_this.localIpAddress = '';
|
|
274
222
|
return _this;
|
|
275
223
|
}
|
|
276
224
|
|
|
225
|
+
/**
|
|
226
|
+
* Resets cumulative stats arrays.
|
|
227
|
+
*
|
|
228
|
+
* @public
|
|
229
|
+
* @memberof StatsAnalyzer
|
|
230
|
+
* @returns {void}
|
|
231
|
+
*/
|
|
277
232
|
(0, _createClass2.default)(StatsAnalyzer, [{
|
|
278
|
-
key: "populateResults",
|
|
279
|
-
value: function populateResults(lastMqa) {
|
|
280
|
-
// Audio
|
|
281
|
-
this.localMQEStats.audio.RX.packetsLost.push(lastMqa.audioReceive[0].common.mediaHopByHopLost);
|
|
282
|
-
this.localMQEStats.audio.RX.jitter.push(lastMqa.audioReceive[0].streams[0].common.rtpJitter);
|
|
283
|
-
this.localMQEStats.audio.RX.latency.push(lastMqa.audioReceive[0].common.roundTripTime);
|
|
284
|
-
this.localMQEStats.audio.RX.bitRate.push(lastMqa.audioReceive[0].streams[0].common.receivedBitrate);
|
|
285
|
-
this.localMQEStats.audio.TX.packetsLost.push(lastMqa.audioTransmit[0].common.remoteLossRate);
|
|
286
|
-
this.localMQEStats.audio.TX.jitter.push(lastMqa.audioTransmit[0].common.remoteJitter);
|
|
287
|
-
this.localMQEStats.audio.TX.latency.push(lastMqa.audioTransmit[0].common.roundTripTime);
|
|
288
|
-
this.localMQEStats.audio.TX.bitRate.push(lastMqa.audioTransmit[0].streams[0].common.transmittedBitrate); // Video
|
|
289
|
-
|
|
290
|
-
this.localMQEStats.video.RX.packetsLost.push(lastMqa.videoReceive[0].common.mediaHopByHopLost);
|
|
291
|
-
this.localMQEStats.video.RX.jitter.push(lastMqa.videoReceive[0].streams[0].common.rtpJitter);
|
|
292
|
-
this.localMQEStats.video.RX.latency.push(lastMqa.videoReceive[0].streams[0].common.roundTripTime);
|
|
293
|
-
this.localMQEStats.video.RX.bitRate.push(lastMqa.videoReceive[0].streams[0].common.receivedBitrate);
|
|
294
|
-
this.localMQEStats.video.RX.frameRate.push(lastMqa.videoReceive[0].streams[0].common.receivedFrameRate);
|
|
295
|
-
this.localMQEStats.video.RX.resolutionWidth.push(lastMqa.videoReceive[0].streams[0].receivedWidth);
|
|
296
|
-
this.localMQEStats.video.RX.resolutionHeight.push(lastMqa.videoReceive[0].streams[0].receivedHeight);
|
|
297
|
-
this.localMQEStats.video.RX.requestedKeyFrame.push();
|
|
298
|
-
this.localMQEStats.video.RX.receivedKeyFrame.push();
|
|
299
|
-
this.localMQEStats.video.TX.packetsLost.push(lastMqa.videoTransmit[0].common.remoteLossRate);
|
|
300
|
-
this.localMQEStats.video.TX.jitter.push(lastMqa.videoTransmit[0].common.remoteJitter);
|
|
301
|
-
this.localMQEStats.video.TX.latency.push(lastMqa.videoTransmit[0].common.roundTripTime);
|
|
302
|
-
this.localMQEStats.video.TX.bitRate.push(lastMqa.videoTransmit[0].streams[0].common.transmittedBitrate);
|
|
303
|
-
this.localMQEStats.video.TX.frameRate.push(lastMqa.videoTransmit[0].streams[0].common.transmittedFrameRate);
|
|
304
|
-
this.localMQEStats.video.TX.resolutionWidth.push(lastMqa.videoTransmit[0].streams[0].transmittedWidth);
|
|
305
|
-
this.localMQEStats.video.TX.resolutionHeight.push(lastMqa.videoTransmit[0].streams[0].transmittedHeight);
|
|
306
|
-
this.localMQEStats.video.TX.requestedKeyFrame.push(lastMqa.videoTransmit[0].streams[0].requestedKeyFrames);
|
|
307
|
-
this.localMQEStats.video.TX.receivedKeyFrame.push();
|
|
308
|
-
}
|
|
309
|
-
}, {
|
|
310
233
|
key: "resetStatsResults",
|
|
311
234
|
value: function resetStatsResults() {
|
|
312
|
-
|
|
313
|
-
this.statsResults.
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
this.statsResults.share.send.meanRoundTripTime = [];
|
|
235
|
+
var _this2 = this;
|
|
236
|
+
(0, _keys.default)(this.statsResults).forEach(function (mediaType) {
|
|
237
|
+
if (mediaType.includes('recv')) {
|
|
238
|
+
_this2.statsResults[mediaType].recv.meanRtpJitter = [];
|
|
239
|
+
}
|
|
240
|
+
if (mediaType.includes('send')) {
|
|
241
|
+
_this2.statsResults[mediaType].send.meanRemoteJitter = [];
|
|
242
|
+
_this2.statsResults[mediaType].send.meanRoundTripTime = [];
|
|
243
|
+
}
|
|
244
|
+
});
|
|
323
245
|
}
|
|
246
|
+
|
|
324
247
|
/**
|
|
325
248
|
* sets mediaStatus status for analyzing metrics
|
|
326
249
|
*
|
|
@@ -329,12 +252,16 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
329
252
|
* @memberof StatsAnalyzer
|
|
330
253
|
* @returns {void}
|
|
331
254
|
*/
|
|
332
|
-
|
|
333
255
|
}, {
|
|
334
256
|
key: "updateMediaStatus",
|
|
335
257
|
value: function updateMediaStatus(status) {
|
|
336
|
-
|
|
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
|
+
};
|
|
337
263
|
}
|
|
264
|
+
|
|
338
265
|
/**
|
|
339
266
|
* captures MQA data from media connection
|
|
340
267
|
*
|
|
@@ -342,129 +269,263 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
342
269
|
* @memberof StatsAnalyzer
|
|
343
270
|
* @returns {void}
|
|
344
271
|
*/
|
|
345
|
-
|
|
346
272
|
}, {
|
|
347
273
|
key: "sendMqaData",
|
|
348
274
|
value: function sendMqaData() {
|
|
349
|
-
var
|
|
350
|
-
var
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
275
|
+
var _this3 = this;
|
|
276
|
+
var newMqa = (0, _cloneDeep2.default)(_config.emptyMqaInterval);
|
|
277
|
+
|
|
278
|
+
// Fill in empty stats items for lastMqaDataSent
|
|
279
|
+
(0, _keys.default)(this.statsResults).forEach(function (mediaType) {
|
|
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);
|
|
355
300
|
(0, _mqaUtil.getAudioSenderMqa)({
|
|
356
301
|
audioSender: audioSender,
|
|
357
302
|
statsResults: this.statsResults,
|
|
358
|
-
lastMqaDataSent: this.lastMqaDataSent
|
|
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'
|
|
359
312
|
});
|
|
313
|
+
newMqa.audioTransmit.push(audioShareSender);
|
|
360
314
|
(0, _mqaUtil.getAudioReceiverMqa)({
|
|
361
315
|
audioReceiver: audioReceiver,
|
|
362
316
|
statsResults: this.statsResults,
|
|
363
|
-
lastMqaDataSent: this.lastMqaDataSent
|
|
317
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
318
|
+
baseMediaType: 'audio-recv'
|
|
364
319
|
});
|
|
365
|
-
(
|
|
366
|
-
|
|
320
|
+
newMqa.audioReceive.push(audioReceiver);
|
|
321
|
+
(0, _mqaUtil.getAudioReceiverMqa)({
|
|
322
|
+
audioReceiver: audioShareReceiver,
|
|
367
323
|
statsResults: this.statsResults,
|
|
368
|
-
lastMqaDataSent: this.lastMqaDataSent
|
|
324
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
325
|
+
baseMediaType: 'audio-share-recv'
|
|
369
326
|
});
|
|
327
|
+
newMqa.audioReceive.push(audioShareReceiver);
|
|
370
328
|
(0, _mqaUtil.getVideoSenderMqa)({
|
|
371
329
|
videoSender: videoSender,
|
|
372
330
|
statsResults: this.statsResults,
|
|
373
|
-
lastMqaDataSent: this.lastMqaDataSent
|
|
374
|
-
|
|
375
|
-
|
|
331
|
+
lastMqaDataSent: this.lastMqaDataSent,
|
|
332
|
+
baseMediaType: 'video-send'
|
|
333
|
+
});
|
|
334
|
+
newMqa.videoTransmit.push(videoSender);
|
|
376
335
|
(0, _mqaUtil.getVideoSenderMqa)({
|
|
377
|
-
videoSender:
|
|
336
|
+
videoSender: videoShareSender,
|
|
378
337
|
statsResults: this.statsResults,
|
|
379
338
|
lastMqaDataSent: this.lastMqaDataSent,
|
|
380
|
-
|
|
339
|
+
baseMediaType: 'video-share-send'
|
|
381
340
|
});
|
|
341
|
+
newMqa.videoTransmit.push(videoShareSender);
|
|
382
342
|
(0, _mqaUtil.getVideoReceiverMqa)({
|
|
383
|
-
videoReceiver:
|
|
343
|
+
videoReceiver: videoReceiver,
|
|
384
344
|
statsResults: this.statsResults,
|
|
385
345
|
lastMqaDataSent: this.lastMqaDataSent,
|
|
386
|
-
|
|
346
|
+
baseMediaType: 'video-recv'
|
|
387
347
|
});
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
name: _constants.MEDIA_DEVICES.SPEAKER
|
|
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'
|
|
395
354
|
});
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
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,
|
|
403
|
+
statsResults: _this3.statsResults,
|
|
404
|
+
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
405
|
+
mediaType: mediaType
|
|
406
|
+
});
|
|
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,
|
|
413
|
+
statsResults: _this3.statsResults,
|
|
414
|
+
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
415
|
+
mediaType: mediaType
|
|
416
|
+
});
|
|
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,
|
|
423
|
+
statsResults: _this3.statsResults,
|
|
424
|
+
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
425
|
+
mediaType: mediaType
|
|
426
|
+
});
|
|
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,
|
|
433
|
+
statsResults: _this3.statsResults,
|
|
434
|
+
lastMqaDataSent: _this3.lastMqaDataSent,
|
|
435
|
+
mediaType: mediaType
|
|
436
|
+
});
|
|
437
|
+
newMqa.videoReceive[1].streams.push(_videoReceiverStream);
|
|
438
|
+
_this3.lastMqaDataSent[mediaType].recv = (0, _cloneDeep2.default)(_this3.statsResults[mediaType].recv);
|
|
439
|
+
}
|
|
400
440
|
});
|
|
441
|
+
newMqa.intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress;
|
|
401
442
|
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
443
|
+
// Adding peripheral information
|
|
444
|
+
newMqa.intervalMetadata.peripherals.push({
|
|
445
|
+
information: _constants._UNKNOWN_,
|
|
446
|
+
name: _constants.MEDIA_DEVICES.SPEAKER
|
|
405
447
|
});
|
|
406
|
-
|
|
407
|
-
|
|
448
|
+
if (this.statsResults['audio-send']) {
|
|
449
|
+
newMqa.intervalMetadata.peripherals.push({
|
|
450
|
+
information: this.statsResults['audio-send'].trackLabel || _constants._UNKNOWN_,
|
|
451
|
+
name: _constants.MEDIA_DEVICES.MICROPHONE
|
|
452
|
+
});
|
|
453
|
+
}
|
|
454
|
+
if (this.statsResults['video-send']) {
|
|
455
|
+
newMqa.intervalMetadata.peripherals.push({
|
|
456
|
+
information: this.statsResults['video-send'].trackLabel || _constants._UNKNOWN_,
|
|
457
|
+
name: _constants.MEDIA_DEVICES.CAMERA
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
newMqa.networkType = this.statsResults.connectionType.local.networkType;
|
|
408
461
|
this.mqaSentCount += 1;
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
this.lastMqaDataSent = (0, _cloneDeep2.default)(this.statsResults);
|
|
412
|
-
this.populateResults(_config.default.intervals[0]);
|
|
462
|
+
newMqa.intervalNumber = this.mqaSentCount;
|
|
413
463
|
this.resetStatsResults();
|
|
414
464
|
this.emit({
|
|
415
465
|
file: 'statsAnalyzer',
|
|
416
466
|
function: 'sendMqaData'
|
|
417
467
|
}, EVENTS.MEDIA_QUALITY, {
|
|
418
|
-
data:
|
|
419
|
-
|
|
468
|
+
data: newMqa,
|
|
469
|
+
// @ts-ignore
|
|
470
|
+
networkType: newMqa.networkType
|
|
420
471
|
});
|
|
421
472
|
}
|
|
473
|
+
|
|
422
474
|
/**
|
|
423
475
|
* updated the media connection when changed
|
|
424
476
|
*
|
|
425
477
|
* @private
|
|
426
478
|
* @memberof StatsAnalyzer
|
|
427
|
-
* @param {
|
|
479
|
+
* @param {RoapMediaConnection} mediaConnection
|
|
428
480
|
* @returns {void}
|
|
429
481
|
*/
|
|
430
|
-
|
|
431
482
|
}, {
|
|
432
483
|
key: "updateMediaConnection",
|
|
433
484
|
value: function updateMediaConnection(mediaConnection) {
|
|
434
485
|
this.mediaConnection = mediaConnection;
|
|
435
486
|
}
|
|
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
|
+
|
|
436
500
|
/**
|
|
437
501
|
* Starts the stats analyzer on interval
|
|
438
502
|
*
|
|
439
503
|
* @public
|
|
440
504
|
* @memberof StatsAnalyzer
|
|
441
|
-
* @param {
|
|
505
|
+
* @param {RoapMediaConnection} mediaConnection
|
|
442
506
|
* @returns {Promise}
|
|
443
507
|
*/
|
|
444
|
-
|
|
445
508
|
}, {
|
|
446
509
|
key: "startAnalyzer",
|
|
447
510
|
value: function startAnalyzer(mediaConnection) {
|
|
448
|
-
var
|
|
449
|
-
|
|
511
|
+
var _this4 = this;
|
|
450
512
|
if (!this.statsStarted) {
|
|
451
513
|
this.statsStarted = true;
|
|
452
514
|
this.mediaConnection = mediaConnection;
|
|
453
515
|
return this.getStatsAndParse().then(function () {
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
},
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
}, _constants.MQA_INTEVAL);
|
|
516
|
+
_this4.statsInterval = setInterval(function () {
|
|
517
|
+
_this4.getStatsAndParse();
|
|
518
|
+
}, _this4.config.analyzerInterval);
|
|
519
|
+
// Trigger initial fetch
|
|
520
|
+
_this4.sendMqaData();
|
|
521
|
+
_this4.mqaInterval = setInterval(function () {
|
|
522
|
+
_this4.sendMqaData();
|
|
523
|
+
}, _constants.MQA_INTERVAL);
|
|
463
524
|
});
|
|
464
525
|
}
|
|
465
|
-
|
|
466
526
|
return _promise.default.resolve();
|
|
467
527
|
}
|
|
528
|
+
|
|
468
529
|
/**
|
|
469
530
|
* Cleans up the analyzer when done
|
|
470
531
|
*
|
|
@@ -472,35 +533,28 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
472
533
|
* @memberof StatsAnalyzer
|
|
473
534
|
* @returns {void}
|
|
474
535
|
*/
|
|
475
|
-
|
|
476
536
|
}, {
|
|
477
537
|
key: "stopAnalyzer",
|
|
478
538
|
value: function stopAnalyzer() {
|
|
479
|
-
var
|
|
480
|
-
|
|
539
|
+
var _this5 = this;
|
|
481
540
|
var sendOneLastMqa = this.mqaInterval && this.statsInterval;
|
|
482
|
-
|
|
483
541
|
if (this.statsInterval) {
|
|
484
542
|
clearInterval(this.statsInterval);
|
|
485
543
|
this.statsInterval = undefined;
|
|
486
544
|
}
|
|
487
|
-
|
|
488
545
|
if (this.mqaInterval) {
|
|
489
546
|
clearInterval(this.mqaInterval);
|
|
490
547
|
this.mqaInterval = undefined;
|
|
491
548
|
}
|
|
492
|
-
|
|
493
549
|
if (sendOneLastMqa) {
|
|
494
550
|
return this.getStatsAndParse().then(function () {
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
_this3.mediaConnection = null;
|
|
551
|
+
_this5.sendMqaData();
|
|
552
|
+
_this5.mediaConnection = null;
|
|
498
553
|
});
|
|
499
554
|
}
|
|
500
|
-
|
|
501
|
-
this.mediaConnection = null;
|
|
502
555
|
return _promise.default.resolve();
|
|
503
556
|
}
|
|
557
|
+
|
|
504
558
|
/**
|
|
505
559
|
* Parse a single result of get stats
|
|
506
560
|
*
|
|
@@ -511,7 +565,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
511
565
|
* @returns {void}
|
|
512
566
|
* @memberof StatsAnalyzer
|
|
513
567
|
*/
|
|
514
|
-
|
|
515
568
|
}, {
|
|
516
569
|
key: "parseGetStatsResult",
|
|
517
570
|
value: function parseGetStatsResult(getStatsResult, type, isSender) {
|
|
@@ -519,81 +572,95 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
519
572
|
return;
|
|
520
573
|
}
|
|
521
574
|
|
|
575
|
+
// Generate empty stats results
|
|
576
|
+
if (!this.statsResults[type]) {
|
|
577
|
+
this.statsResults[type] = {};
|
|
578
|
+
}
|
|
579
|
+
if (isSender && !this.statsResults[type].send) {
|
|
580
|
+
this.statsResults[type].send = (0, _cloneDeep2.default)(emptySender);
|
|
581
|
+
} else if (!isSender && !this.statsResults[type].recv) {
|
|
582
|
+
this.statsResults[type].recv = (0, _cloneDeep2.default)(emptyReceiver);
|
|
583
|
+
}
|
|
522
584
|
switch (getStatsResult.type) {
|
|
523
585
|
case 'outbound-rtp':
|
|
524
586
|
this.processOutboundRTPResult(getStatsResult, type);
|
|
525
587
|
break;
|
|
526
|
-
|
|
527
588
|
case 'inbound-rtp':
|
|
528
589
|
this.processInboundRTPResult(getStatsResult, type);
|
|
529
590
|
break;
|
|
530
|
-
|
|
531
|
-
case 'track':
|
|
532
|
-
this.processTrackResult(getStatsResult, type);
|
|
533
|
-
break;
|
|
534
|
-
|
|
535
591
|
case 'remote-inbound-rtp':
|
|
536
592
|
case 'remote-outbound-rtp':
|
|
537
|
-
this.compareSentAndReceived(getStatsResult, type
|
|
593
|
+
this.compareSentAndReceived(getStatsResult, type);
|
|
538
594
|
break;
|
|
539
|
-
|
|
540
595
|
case 'remotecandidate':
|
|
541
596
|
case 'remote-candidate':
|
|
542
597
|
this.parseCandidate(getStatsResult, type, isSender, true);
|
|
543
598
|
break;
|
|
544
|
-
|
|
545
599
|
case 'local-candidate':
|
|
546
600
|
this.parseCandidate(getStatsResult, type, isSender, false);
|
|
547
601
|
break;
|
|
548
|
-
|
|
549
602
|
case 'media-source':
|
|
550
603
|
this.parseAudioSource(getStatsResult, type);
|
|
551
604
|
break;
|
|
552
|
-
|
|
553
605
|
default:
|
|
554
606
|
break;
|
|
555
607
|
}
|
|
556
608
|
}
|
|
609
|
+
|
|
557
610
|
/**
|
|
558
611
|
* Filters the get stats results for types
|
|
559
612
|
* @private
|
|
560
|
-
* @param {Array}
|
|
613
|
+
* @param {Array} statsItem
|
|
561
614
|
* @param {String} type
|
|
562
615
|
* @param {boolean} isSender
|
|
563
616
|
* @returns {void}
|
|
564
617
|
*/
|
|
565
|
-
|
|
566
618
|
}, {
|
|
567
619
|
key: "filterAndParseGetStatsResults",
|
|
568
|
-
value: function filterAndParseGetStatsResults(
|
|
569
|
-
var
|
|
570
|
-
|
|
620
|
+
value: function filterAndParseGetStatsResults(statsItem, type, isSender) {
|
|
621
|
+
var _this6 = this;
|
|
571
622
|
var types = _constants.DEFAULT_GET_STATS_FILTER.types;
|
|
572
|
-
|
|
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
|
+
});
|
|
630
|
+
statsItem.report.forEach(function (result) {
|
|
573
631
|
if (types.includes(result.type)) {
|
|
574
|
-
|
|
632
|
+
_this6.parseGetStatsResult(result, type, isSender);
|
|
575
633
|
}
|
|
576
634
|
});
|
|
635
|
+
if (this.statsResults[type]) {
|
|
636
|
+
var _this$successfulCandi2, _this$statsResults;
|
|
637
|
+
this.statsResults[type].direction = statsItem.currentDirection;
|
|
638
|
+
this.statsResults[type].trackLabel = statsItem.localTrackLabel;
|
|
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 = {};
|
|
643
|
+
}
|
|
577
644
|
}
|
|
645
|
+
|
|
578
646
|
/**
|
|
579
647
|
* parse the audio
|
|
580
648
|
* @param {String} result
|
|
581
649
|
* @param {boolean} type
|
|
582
650
|
* @returns {void}
|
|
583
651
|
*/
|
|
584
|
-
|
|
585
652
|
}, {
|
|
586
653
|
key: "parseAudioSource",
|
|
587
654
|
value: function parseAudioSource(result, type) {
|
|
588
655
|
if (!result) {
|
|
589
656
|
return;
|
|
590
657
|
}
|
|
591
|
-
|
|
592
|
-
if (type === _constants.STATS.AUDIO_CORRELATE) {
|
|
658
|
+
if (type.includes('audio-send')) {
|
|
593
659
|
this.statsResults[type].send.audioLevel = result.audioLevel;
|
|
594
660
|
this.statsResults[type].send.totalAudioEnergy = result.totalAudioEnergy;
|
|
595
661
|
}
|
|
596
662
|
}
|
|
663
|
+
|
|
597
664
|
/**
|
|
598
665
|
* emits started/stopped events for local/remote media by checking
|
|
599
666
|
* if given values are increasing or not. The previousValue, currentValue
|
|
@@ -608,7 +675,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
608
675
|
* @memberof StatsAnalyzer
|
|
609
676
|
* @returns {void}
|
|
610
677
|
*/
|
|
611
|
-
|
|
612
678
|
}, {
|
|
613
679
|
key: "compareLastStatsResult",
|
|
614
680
|
value:
|
|
@@ -620,136 +686,98 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
620
686
|
* @returns {void}
|
|
621
687
|
*/
|
|
622
688
|
function compareLastStatsResult() {
|
|
689
|
+
var _this7 = this;
|
|
623
690
|
if (this.lastStatsResults !== null && this.meetingMediaStatus) {
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
691
|
+
var getCurrentStatsTotals = function getCurrentStatsTotals(keyPrefix, value) {
|
|
692
|
+
return (0, _keys.default)(_this7.statsResults).filter(function (key) {
|
|
693
|
+
return key.startsWith(keyPrefix);
|
|
694
|
+
}).reduce(function (prev, cur) {
|
|
695
|
+
var _this7$statsResults$c;
|
|
696
|
+
return prev + (((_this7$statsResults$c = _this7.statsResults[cur]) === null || _this7$statsResults$c === void 0 ? void 0 : _this7$statsResults$c.recv[value]) || 0);
|
|
697
|
+
}, 0);
|
|
698
|
+
};
|
|
699
|
+
var getPreviousStatsTotals = function getPreviousStatsTotals(keyPrefix, value) {
|
|
700
|
+
return (0, _keys.default)(_this7.statsResults).filter(function (key) {
|
|
701
|
+
return key.startsWith(keyPrefix);
|
|
702
|
+
}).reduce(function (prev, cur) {
|
|
703
|
+
var _this7$lastStatsResul;
|
|
704
|
+
return prev + (((_this7$lastStatsResul = _this7.lastStatsResults[cur]) === null || _this7$lastStatsResul === void 0 ? void 0 : _this7$lastStatsResul.recv[value]) || 0);
|
|
705
|
+
}, 0);
|
|
706
|
+
};
|
|
707
|
+
|
|
708
|
+
// Audio Transmit
|
|
709
|
+
if (this.lastStatsResults['audio-send']) {
|
|
710
|
+
// compare audio stats sent
|
|
711
|
+
// NOTE: relies on there being only one sender.
|
|
712
|
+
var currentStats = this.statsResults['audio-send'].send;
|
|
713
|
+
var previousStats = this.lastStatsResults['audio-send'].send;
|
|
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);
|
|
635
716
|
} else {
|
|
636
|
-
if (currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
|
|
637
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
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);
|
|
638
719
|
}
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> ".concat(mediaType, " level is 0 for the user"));
|
|
720
|
+
if (this.meetingMediaStatus.expected.sendAudio && currentStats.audioLevel === 0) {
|
|
721
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user");
|
|
642
722
|
}
|
|
643
723
|
}
|
|
644
|
-
|
|
645
|
-
this.emitStartStopEvents(mediaType, previousStats.totalPacketsSent, currentStats.totalPacketsSent, true);
|
|
724
|
+
this.emitStartStopEvents('audio', previousStats.totalPacketsSent, currentStats.totalPacketsSent, true);
|
|
646
725
|
}
|
|
647
726
|
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
727
|
+
// Audio Receive
|
|
728
|
+
var currentAudioPacketsReceived = getCurrentStatsTotals('audio-recv', 'totalPacketsReceived');
|
|
729
|
+
var previousAudioPacketsReceived = getPreviousStatsTotals('audio-recv', 'totalPacketsReceived');
|
|
730
|
+
this.emitStartStopEvents('audio', previousAudioPacketsReceived, currentAudioPacketsReceived, false);
|
|
652
731
|
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
} else if (currentStats.totalSamplesReceived === previousStats.totalSamplesReceived || currentStats.totalSamplesReceived === 0) {
|
|
656
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " samples received"));
|
|
657
|
-
}
|
|
658
|
-
|
|
659
|
-
this.emitStartStopEvents(mediaType, previousStats.totalPacketsReceived, currentStats.totalPacketsReceived, false);
|
|
660
|
-
}
|
|
661
|
-
|
|
662
|
-
mediaType = _constants.STATS.VIDEO_CORRELATE;
|
|
663
|
-
|
|
664
|
-
if (this.meetingMediaStatus.expected.sendVideo) {
|
|
732
|
+
// Video Transmit
|
|
733
|
+
if (this.lastStatsResults['video-send']) {
|
|
665
734
|
// compare video stats sent
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets sent"));
|
|
671
|
-
} else {
|
|
672
|
-
if (currentStats.framesEncoded === previousStats.framesEncoded || currentStats.framesEncoded === 0) {
|
|
673
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " Frames Encoded"));
|
|
674
|
-
}
|
|
675
|
-
|
|
676
|
-
if (this.statsResults.resolutions[mediaType].send.framesSent === this.lastStatsResults.resolutions[mediaType].send.framesSent || this.statsResults.resolutions[mediaType].send.framesSent === 0) {
|
|
677
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " Frames sent"));
|
|
678
|
-
}
|
|
679
|
-
}
|
|
680
|
-
|
|
681
|
-
this.emitStartStopEvents(mediaType, previousStats.framesSent, currentStats.framesSent, true);
|
|
682
|
-
}
|
|
683
|
-
|
|
684
|
-
if (this.meetingMediaStatus.expected.receiveVideo) {
|
|
685
|
-
// compare video stats reveived
|
|
686
|
-
currentStats = this.statsResults[mediaType].recv;
|
|
687
|
-
previousStats = this.lastStatsResults[mediaType].recv;
|
|
688
|
-
|
|
689
|
-
if (currentStats.totalPacketsReceived === previousStats.totalPacketsReceived || currentStats.totalPacketsReceived === 0) {
|
|
690
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets received"));
|
|
735
|
+
var _currentStats = this.statsResults['video-send'].send;
|
|
736
|
+
var _previousStats = this.lastStatsResults['video-send'].send;
|
|
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);
|
|
691
739
|
} else {
|
|
692
|
-
if (this.
|
|
693
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No "
|
|
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);
|
|
694
742
|
}
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames decoded"));
|
|
698
|
-
}
|
|
699
|
-
|
|
700
|
-
if (this.statsResults.resolutions[mediaType].recv.framesDropped - this.lastStatsResults.resolutions[mediaType].recv.framesDropped > 10) {
|
|
701
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> ".concat(mediaType, " frames are getting dropped"));
|
|
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);
|
|
702
745
|
}
|
|
703
746
|
}
|
|
704
|
-
|
|
705
|
-
this.emitStartStopEvents(mediaType, previousStats.framesDecoded, currentStats.framesDecoded, false);
|
|
747
|
+
this.emitStartStopEvents('video', _previousStats.framesSent, _currentStats.framesSent, true);
|
|
706
748
|
}
|
|
707
749
|
|
|
708
|
-
|
|
750
|
+
// Video Receive
|
|
751
|
+
var currentVideoFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');
|
|
752
|
+
var previousVideoFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');
|
|
753
|
+
this.emitStartStopEvents('video', previousVideoFramesDecoded, currentVideoFramesDecoded, false);
|
|
709
754
|
|
|
710
|
-
|
|
755
|
+
// Share Transmit
|
|
756
|
+
if (this.lastStatsResults['video-share-send']) {
|
|
711
757
|
// compare share stats sent
|
|
712
|
-
currentStats = this.statsResults[mediaType].send;
|
|
713
|
-
previousStats = this.lastStatsResults[mediaType].send;
|
|
714
|
-
|
|
715
|
-
if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
|
|
716
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets sent"));
|
|
717
|
-
} else {
|
|
718
|
-
if (currentStats.framesEncoded === previousStats.framesEncoded || currentStats.framesEncoded === 0) {
|
|
719
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames getting encoded"));
|
|
720
|
-
}
|
|
721
|
-
|
|
722
|
-
if (this.statsResults.resolutions[mediaType].send.framesSent === this.lastStatsResults.resolutions[mediaType].send.framesSent || this.statsResults.resolutions[mediaType].send.framesSent === 0) {
|
|
723
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames sent"));
|
|
724
|
-
}
|
|
725
|
-
} // TODO:need to check receive share value
|
|
726
|
-
// compare share stats reveived
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
currentStats = this.statsResults[mediaType].recv;
|
|
730
|
-
previousStats = this.lastStatsResults[mediaType].recv;
|
|
731
758
|
|
|
732
|
-
|
|
733
|
-
|
|
759
|
+
var _currentStats2 = this.statsResults['video-share-send'].send;
|
|
760
|
+
var _previousStats2 = this.lastStatsResults['video-share-send'].send;
|
|
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);
|
|
734
763
|
} else {
|
|
735
|
-
if (this.
|
|
736
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
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);
|
|
737
766
|
}
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames decoded"));
|
|
741
|
-
}
|
|
742
|
-
|
|
743
|
-
if (this.statsResults.resolutions[mediaType].recv.framesDropped - this.lastStatsResults.resolutions[mediaType].recv.framesDropped > 10) {
|
|
744
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> ".concat(mediaType, " frames are getting dropped"));
|
|
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);
|
|
745
769
|
}
|
|
746
|
-
}
|
|
747
|
-
|
|
748
|
-
// so we would send "sharing stopped" events incorrectly
|
|
749
|
-
|
|
770
|
+
}
|
|
771
|
+
this.emitStartStopEvents('share', _previousStats2.framesSent, _currentStats2.framesSent, true);
|
|
750
772
|
}
|
|
773
|
+
|
|
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);
|
|
751
778
|
}
|
|
752
779
|
}
|
|
780
|
+
|
|
753
781
|
/**
|
|
754
782
|
* Does a `getStats` on all the transceivers and parses the results
|
|
755
783
|
*
|
|
@@ -757,97 +785,89 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
757
785
|
* @memberof StatsAnalyzer
|
|
758
786
|
* @returns {Promise}
|
|
759
787
|
*/
|
|
760
|
-
|
|
761
788
|
}, {
|
|
762
789
|
key: "getStatsAndParse",
|
|
763
790
|
value: function getStatsAndParse() {
|
|
764
|
-
var
|
|
765
|
-
|
|
791
|
+
var _this8 = this;
|
|
766
792
|
if (!this.mediaConnection) {
|
|
767
793
|
return _promise.default.resolve();
|
|
768
794
|
}
|
|
769
|
-
|
|
770
|
-
if (this.mediaConnection && this.mediaConnection.getConnectionState() === _internalMediaCore.MediaConnection.ConnectionState.Failed) {
|
|
795
|
+
if (this.mediaConnection && this.mediaConnection.getConnectionState() === _internalMediaCore.ConnectionState.Failed) {
|
|
771
796
|
_loggerProxy.default.logger.trace('StatsAnalyzer:index#getStatsAndParse --> media connection is in failed state');
|
|
772
|
-
|
|
773
797
|
return _promise.default.resolve();
|
|
774
798
|
}
|
|
775
|
-
|
|
776
799
|
_loggerProxy.default.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');
|
|
777
|
-
|
|
778
800
|
return this.mediaConnection.getTransceiverStats().then(function (transceiverStats) {
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
801
|
+
transceiverStats.video.receivers.forEach(function (receiver, i) {
|
|
802
|
+
return _this8.filterAndParseGetStatsResults(receiver, "video-recv-".concat(i), false);
|
|
803
|
+
});
|
|
804
|
+
transceiverStats.audio.receivers.forEach(function (receiver, i) {
|
|
805
|
+
return _this8.filterAndParseGetStatsResults(receiver, "audio-recv-".concat(i), false);
|
|
806
|
+
});
|
|
807
|
+
transceiverStats.screenShareVideo.receivers.forEach(function (receiver, i) {
|
|
808
|
+
return _this8.filterAndParseGetStatsResults(receiver, "video-share-recv-".concat(i), false);
|
|
809
|
+
});
|
|
810
|
+
transceiverStats.screenShareAudio.receivers.forEach(function (receiver, i) {
|
|
811
|
+
return _this8.filterAndParseGetStatsResults(receiver, "audio-share-recv-".concat(i), false);
|
|
812
|
+
});
|
|
813
|
+
transceiverStats.video.senders.forEach(function (sender, i) {
|
|
814
|
+
if (i > 0) {
|
|
815
|
+
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
816
|
+
}
|
|
817
|
+
_this8.filterAndParseGetStatsResults(sender, 'video-send', true);
|
|
818
|
+
});
|
|
819
|
+
transceiverStats.audio.senders.forEach(function (sender, i) {
|
|
820
|
+
if (i > 0) {
|
|
821
|
+
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
822
|
+
}
|
|
823
|
+
_this8.filterAndParseGetStatsResults(sender, 'audio-send', true);
|
|
824
|
+
});
|
|
825
|
+
transceiverStats.screenShareVideo.senders.forEach(function (sender, i) {
|
|
826
|
+
if (i > 0) {
|
|
827
|
+
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
828
|
+
}
|
|
829
|
+
_this8.filterAndParseGetStatsResults(sender, 'video-share-send', true);
|
|
830
|
+
});
|
|
831
|
+
transceiverStats.screenShareAudio.senders.forEach(function (sender, i) {
|
|
832
|
+
if (i > 0) {
|
|
833
|
+
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
834
|
+
}
|
|
835
|
+
_this8.filterAndParseGetStatsResults(sender, 'audio-share-send', true);
|
|
836
|
+
});
|
|
837
|
+
_this8.compareLastStatsResult();
|
|
797
838
|
|
|
798
|
-
|
|
839
|
+
// Save the last results to compare with the current
|
|
799
840
|
// DO Deep copy, for some reason it takes the reference all the time rather then old value set
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
_this5.lastStatsResults = JSON.parse((0, _stringify.default)(_this5.statsResults));
|
|
803
|
-
|
|
841
|
+
_this8.lastStatsResults = JSON.parse((0, _stringify.default)(_this8.statsResults));
|
|
804
842
|
_loggerProxy.default.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats');
|
|
805
843
|
});
|
|
806
844
|
}
|
|
845
|
+
|
|
807
846
|
/**
|
|
808
847
|
* Processes OutboundRTP stats result and stores
|
|
809
848
|
* @private
|
|
810
849
|
* @param {*} result
|
|
811
|
-
* @param {*}
|
|
850
|
+
* @param {*} mediaType
|
|
812
851
|
* @returns {void}
|
|
813
852
|
*/
|
|
814
|
-
|
|
815
853
|
}, {
|
|
816
854
|
key: "processOutboundRTPResult",
|
|
817
|
-
value: function processOutboundRTPResult(result,
|
|
818
|
-
var mediaType = type || _constants.STATS.AUDIO_CORRELATE;
|
|
855
|
+
value: function processOutboundRTPResult(result, mediaType) {
|
|
819
856
|
var sendrecvType = _constants.STATS.SEND_DIRECTION;
|
|
820
|
-
|
|
821
857
|
if (result.bytesSent) {
|
|
822
858
|
var kilobytes = 0;
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
this.statsResults
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
if (!this.statsResults.internal[mediaType][sendrecvType].framesEncoded) {
|
|
829
|
-
this.statsResults.internal[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
|
|
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;
|
|
830
864
|
}
|
|
831
|
-
|
|
832
|
-
if (!this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded) {
|
|
833
|
-
this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
|
|
834
|
-
}
|
|
835
|
-
|
|
836
|
-
var bytes = result.bytesSent - this.statsResults.internal[mediaType][sendrecvType].prevBytesSent;
|
|
837
|
-
this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
|
|
838
|
-
kilobytes = bytes / 1024;
|
|
839
865
|
this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
|
|
840
|
-
this.statsResults[mediaType].
|
|
841
|
-
this.statsResults[mediaType][sendrecvType].
|
|
842
|
-
this.statsResults[mediaType][sendrecvType].
|
|
843
|
-
this.statsResults.internal[mediaType].outboundRtpId = result.id;
|
|
844
|
-
|
|
845
|
-
if (!this.statsResults.internal[mediaType][sendrecvType].packetsSent) {
|
|
846
|
-
this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
|
|
847
|
-
}
|
|
866
|
+
this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
|
|
867
|
+
this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
|
|
868
|
+
this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent;
|
|
848
869
|
|
|
849
|
-
|
|
850
|
-
this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent; // Data saved to send MQA metrics
|
|
870
|
+
// Data saved to send MQA metrics
|
|
851
871
|
|
|
852
872
|
this.statsResults[mediaType][sendrecvType].totalKeyFramesEncoded = result.keyFramesEncoded;
|
|
853
873
|
this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
|
|
@@ -865,89 +885,93 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
865
885
|
this.statsResults[mediaType][sendrecvType].retransmittedBytesSent = result.retransmittedBytesSent;
|
|
866
886
|
}
|
|
867
887
|
}
|
|
888
|
+
|
|
868
889
|
/**
|
|
869
890
|
* Processes InboundRTP stats result and stores
|
|
870
891
|
* @private
|
|
871
892
|
* @param {*} result
|
|
872
|
-
* @param {*}
|
|
893
|
+
* @param {*} mediaType
|
|
873
894
|
* @returns {void}
|
|
874
895
|
*/
|
|
875
|
-
|
|
876
896
|
}, {
|
|
877
897
|
key: "processInboundRTPResult",
|
|
878
|
-
value: function processInboundRTPResult(result,
|
|
879
|
-
var mediaType = type || _constants.STATS.AUDIO_CORRELATE;
|
|
898
|
+
value: function processInboundRTPResult(result, mediaType) {
|
|
880
899
|
var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
|
|
881
|
-
|
|
882
900
|
if (result.bytesReceived) {
|
|
883
901
|
var kilobytes = 0;
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
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;
|
|
906
|
+
kilobytes = bytes / 1024;
|
|
907
|
+
this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
|
|
908
|
+
var currentPacketsLost = result.packetsLost - this.statsResults[mediaType][sendrecvType].totalPacketsLost;
|
|
909
|
+
if (currentPacketsLost < 0) {
|
|
910
|
+
currentPacketsLost = 0;
|
|
891
911
|
}
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
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
|
+
}
|
|
895
918
|
}
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
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
|
+
}
|
|
899
938
|
}
|
|
900
939
|
|
|
901
|
-
|
|
902
|
-
|
|
940
|
+
// Check the over all packet Lost ratio
|
|
941
|
+
this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = currentPacketsLost > 0 ? currentPacketsLost / (packetsReceivedDiff + currentPacketsLost) : 0;
|
|
942
|
+
if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
|
|
943
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ".concat(idAndCsi), this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
|
|
903
944
|
}
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
|
|
909
|
-
this.statsResults[mediaType].bytesReceived = kilobytes.toFixed(1);
|
|
910
|
-
this.statsResults[mediaType][sendrecvType].pliCount = result.pliCount - this.statsResults.internal[mediaType][sendrecvType].pliCount;
|
|
911
|
-
this.statsResults[mediaType][sendrecvType].currentPacketsLost = result.packetsLost - this.statsResults.internal[mediaType][sendrecvType].packetsLost;
|
|
912
|
-
|
|
913
|
-
if (this.statsResults[mediaType][sendrecvType].currentPacketsLost < 0) {
|
|
914
|
-
this.statsResults[mediaType][sendrecvType].currentPacketsLost = 0;
|
|
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;
|
|
915
949
|
}
|
|
916
950
|
|
|
917
|
-
|
|
918
|
-
this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
|
|
919
|
-
|
|
920
|
-
if (this.statsResults[mediaType][sendrecvType].packetsReceived === 0) {
|
|
921
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for ".concat(mediaType, " "), this.statsResults[mediaType][sendrecvType].packetsReceived);
|
|
922
|
-
} // Check the over all packet Lost ratio
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = this.statsResults[mediaType][sendrecvType].currentPacketsLost > 0 ? this.statsResults[mediaType][sendrecvType].currentPacketsLost / (this.statsResults[mediaType][sendrecvType].packetsReceived + this.statsResults[mediaType][sendrecvType].currentPacketsLost) : 0;
|
|
926
|
-
|
|
927
|
-
if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
|
|
928
|
-
_loggerProxy.default.logger.info('StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver ', this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
|
|
929
|
-
} // TODO: check the packet loss value is negative values here
|
|
930
|
-
|
|
951
|
+
// TODO: check the packet loss value is negative values here
|
|
931
952
|
|
|
932
953
|
if (result.packetsLost) {
|
|
933
954
|
this.statsResults[mediaType][sendrecvType].totalPacketsLost = result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;
|
|
934
955
|
} else {
|
|
935
956
|
this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;
|
|
936
957
|
}
|
|
958
|
+
this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
|
|
937
959
|
|
|
938
|
-
|
|
939
|
-
|
|
960
|
+
// From Thin
|
|
940
961
|
this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
|
|
941
962
|
this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;
|
|
942
963
|
this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
|
|
943
964
|
this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;
|
|
965
|
+
this.statsResults[mediaType][sendrecvType].framesDropped = result.framesDropped;
|
|
944
966
|
this.statsResults[mediaType][sendrecvType].decoderImplementation = result.decoderImplementation;
|
|
945
967
|
this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
|
|
946
968
|
this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;
|
|
947
969
|
this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;
|
|
948
970
|
this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;
|
|
949
971
|
this.statsResults[mediaType][sendrecvType].headerBytesReceived = result.headerBytesReceived;
|
|
950
|
-
this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);
|
|
972
|
+
this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);
|
|
973
|
+
|
|
974
|
+
// Audio stats
|
|
951
975
|
|
|
952
976
|
this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;
|
|
953
977
|
this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;
|
|
@@ -956,60 +980,21 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
956
980
|
this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;
|
|
957
981
|
}
|
|
958
982
|
}
|
|
983
|
+
|
|
959
984
|
/**
|
|
960
|
-
*
|
|
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
|
|
961
990
|
* @private
|
|
962
|
-
* @param {
|
|
963
|
-
* @param {
|
|
964
|
-
* @param {boolean} isSender
|
|
965
|
-
* @param {boolean} isRemote
|
|
966
|
-
*
|
|
991
|
+
* @param {string} successfulCandidatePairId - The ID of the successful candidate pair.
|
|
992
|
+
* @param {Object} candidates - the stats result candidates
|
|
967
993
|
* @returns {void}
|
|
968
994
|
*/
|
|
969
|
-
|
|
970
995
|
}, {
|
|
971
|
-
key: "
|
|
996
|
+
key: "compareSentAndReceived",
|
|
972
997
|
value:
|
|
973
|
-
/**
|
|
974
|
-
* Process Track results
|
|
975
|
-
*
|
|
976
|
-
* @private
|
|
977
|
-
* @param {*} result
|
|
978
|
-
* @param {*} mediaType
|
|
979
|
-
* @returns {void}
|
|
980
|
-
* @memberof StatsAnalyzer
|
|
981
|
-
*/
|
|
982
|
-
function processTrackResult(result, mediaType) {
|
|
983
|
-
if (!result || result.type !== 'track') {
|
|
984
|
-
return;
|
|
985
|
-
}
|
|
986
|
-
|
|
987
|
-
if (result.type !== 'track') return;
|
|
988
|
-
var sendrecvType = result.remoteSource === true ? _constants.STATS.RECEIVE_DIRECTION : _constants.STATS.SEND_DIRECTION;
|
|
989
|
-
|
|
990
|
-
if (result.frameWidth && result.frameHeight) {
|
|
991
|
-
this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
|
|
992
|
-
this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
|
|
993
|
-
this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
|
|
994
|
-
this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
|
|
995
|
-
}
|
|
996
|
-
|
|
997
|
-
if (sendrecvType === _constants.STATS.RECEIVE_DIRECTION) {
|
|
998
|
-
this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
|
|
999
|
-
this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
|
|
1000
|
-
this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;
|
|
1001
|
-
}
|
|
1002
|
-
|
|
1003
|
-
if (result.trackIdentifier && mediaType !== _constants.STATS.AUDIO_CORRELATE) {
|
|
1004
|
-
this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier = result.trackIdentifier;
|
|
1005
|
-
var jitterBufferDelay = result && result.jitterBufferDelay;
|
|
1006
|
-
var jitterBufferEmittedCount = result && result.jitterBufferEmittedCount;
|
|
1007
|
-
this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay = jitterBufferEmittedCount && +jitterBufferDelay / +jitterBufferEmittedCount; // Used to calculate the jitter
|
|
1008
|
-
|
|
1009
|
-
this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay = result.jitterBufferDelay;
|
|
1010
|
-
this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount = result.jitterBufferEmittedCount;
|
|
1011
|
-
}
|
|
1012
|
-
}
|
|
1013
998
|
/**
|
|
1014
999
|
*
|
|
1015
1000
|
* @private
|
|
@@ -1018,37 +1003,27 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
1018
1003
|
* @returns {void}
|
|
1019
1004
|
* @memberof StatsAnalyzer
|
|
1020
1005
|
*/
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
value: function compareSentAndReceived(result, type) {
|
|
1025
|
-
if (!type) {
|
|
1006
|
+
function compareSentAndReceived(result, type) {
|
|
1007
|
+
// Don't compare on transceivers without a sender.
|
|
1008
|
+
if (!type || !this.statsResults[type].send) {
|
|
1026
1009
|
return;
|
|
1027
1010
|
}
|
|
1028
|
-
|
|
1029
1011
|
var mediaType = type;
|
|
1030
|
-
|
|
1031
|
-
if (!this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver) {
|
|
1032
|
-
this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
|
|
1033
|
-
}
|
|
1034
|
-
|
|
1035
|
-
var currentPacketLoss = result.packetsLost - this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver;
|
|
1036
|
-
this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
|
|
1012
|
+
var currentPacketLoss = result.packetsLost - this.statsResults[mediaType].send.totalPacketsLostOnReceiver;
|
|
1037
1013
|
this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;
|
|
1038
1014
|
this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
|
|
1039
1015
|
this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);
|
|
1040
1016
|
this.statsResults[mediaType].send.meanRoundTripTime.push(result.roundTripTime);
|
|
1041
1017
|
this.statsResults[mediaType].send.timestamp = result.timestamp;
|
|
1042
1018
|
this.statsResults[mediaType].send.ssrc = result.ssrc;
|
|
1043
|
-
this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;
|
|
1019
|
+
this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;
|
|
1044
1020
|
|
|
1021
|
+
// Total packloss ratio on this video section of the call
|
|
1045
1022
|
this.statsResults[mediaType].send.overAllPacketLossRatio = this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0 ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver / this.statsResults[mediaType].send.totalPacketsSent : 0;
|
|
1046
1023
|
this.statsResults[mediaType].send.currentPacketLossRatio = this.statsResults[mediaType].send.packetsLostOnReceiver > 0 ? this.statsResults[mediaType].send.packetsLostOnReceiver * 100 / (this.statsResults[mediaType].send.packetsSent + this.statsResults[mediaType].send.packetsLostOnReceiver) : 0;
|
|
1047
|
-
|
|
1048
1024
|
if (this.statsResults[mediaType].send.maxPacketLossRatio < this.statsResults[mediaType].send.currentPacketLossRatio) {
|
|
1049
1025
|
this.statsResults[mediaType].send.maxPacketLossRatio = this.statsResults[mediaType].send.currentPacketLossRatio;
|
|
1050
1026
|
}
|
|
1051
|
-
|
|
1052
1027
|
if (result.type === 'remote-inbound-rtp') {
|
|
1053
1028
|
this.networkQualityMonitor.determineUplinkNetworkQuality({
|
|
1054
1029
|
mediaType: mediaType,
|
|
@@ -1060,6 +1035,5 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
1060
1035
|
}]);
|
|
1061
1036
|
return StatsAnalyzer;
|
|
1062
1037
|
}(_eventsScope.default);
|
|
1063
|
-
|
|
1064
1038
|
exports.StatsAnalyzer = StatsAnalyzer;
|
|
1065
1039
|
//# sourceMappingURL=index.js.map
|