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