@webex/plugin-meetings 3.0.0-beta.4 → 3.0.0-beta.40
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 +137 -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 +546 -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 +48 -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 +109 -49
- 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 +15 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +203 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/util.js +28 -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 +12 -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 +186 -192
- 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 +34 -91
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +66 -153
- 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 +13 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2141 -2210
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +59 -82
- 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 +45 -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 +5 -20
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +490 -560
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +24 -41
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +116 -155
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +78 -86
- package/dist/member/index.js.map +1 -1
- package/dist/member/util.js +31 -68
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +3 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +95 -200
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +16 -39
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js +9 -38
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +1 -13
- 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 +54 -156
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +74 -52
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +48 -65
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +60 -82
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +60 -76
- 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 +360 -413
- 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 +147 -183
- 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 +322 -456
- 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 +361 -449
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +137 -81
- 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 +916 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +5 -0
- package/dist/types/controls-options-manager/index.d.ts +120 -0
- package/dist/types/controls-options-manager/util.d.ts +7 -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 +269 -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 +83 -0
- package/dist/types/meeting/index.d.ts +1699 -0
- package/dist/types/meeting/muteState.d.ts +116 -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 +23 -0
- package/dist/types/meetings/index.d.ts +297 -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 +146 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +24 -0
- package/dist/types/members/index.d.ts +320 -0
- package/dist/types/members/request.d.ts +50 -0
- package/dist/types/members/util.d.ts +2 -0
- package/dist/types/metrics/config.d.ts +169 -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 +51 -0
- package/dist/types/multistream/receiveSlot.d.ts +64 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +46 -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 +241 -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 +140 -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 +117 -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 +199 -0
- package/src/breakouts/breakout.ts +130 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/index.ts +504 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +39 -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 +62 -5
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +6 -0
- package/src/controls-options-manager/index.ts +183 -0
- package/src/controls-options-manager/util.ts +20 -0
- package/src/index.js +4 -1
- package/src/locus-info/controlsUtils.ts +114 -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} +150 -66
- 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} +123 -68
- package/src/media/{index.js → index.ts} +182 -173
- 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 +31 -3
- package/src/meeting/{index.js → index.ts} +2512 -1579
- package/src/meeting/{muteState.js → muteState.ts} +95 -49
- 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} +117 -119
- 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} +6 -3
- package/src/meetings/index.ts +1159 -0
- package/src/meetings/{request.js → request.ts} +32 -25
- package/src/meetings/{util.js → util.ts} +58 -32
- package/src/member/{index.js → index.ts} +102 -56
- package/src/member/{util.js → util.ts} +52 -25
- package/src/members/{collection.js → collection.ts} +2 -2
- package/src/members/{index.js → index.ts} +221 -142
- package/src/members/{request.js → request.ts} +60 -16
- package/src/members/{util.js → util.ts} +50 -48
- package/src/metrics/{config.js → config.ts} +253 -92
- package/src/metrics/{constants.js → constants.ts} +0 -6
- package/src/metrics/{index.js → index.ts} +105 -94
- package/src/multistream/mediaRequestManager.ts +101 -39
- package/src/multistream/receiveSlot.ts +62 -26
- package/src/multistream/receiveSlotManager.ts +35 -21
- package/src/multistream/remoteMedia.ts +38 -5
- package/src/multistream/remoteMediaGroup.ts +4 -3
- package/src/multistream/remoteMediaManager.ts +152 -36
- 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} +109 -85
- 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} +196 -103
- 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 +1234 -0
- package/src/statsAnalyzer/mqaUtil.ts +293 -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 +147 -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 +707 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +47 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/controls-options-manager/index.js +124 -0
- package/test/unit/spec/controls-options-manager/util.js +66 -0
- package/test/unit/spec/fixture/locus.js +92 -90
- package/test/unit/spec/locus-info/controlsUtils.js +25 -5
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +104 -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 +97 -103
- package/test/unit/spec/locus-info/selfUtils.js +105 -12
- package/test/unit/spec/media/index.ts +39 -53
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/in-meeting-actions.ts +13 -2
- package/test/unit/spec/meeting/index.js +2253 -811
- package/test/unit/spec/meeting/muteState.js +74 -55
- package/test/unit/spec/meeting/request.js +141 -43
- package/test/unit/spec/meeting/utils.js +106 -171
- 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 +1 -1
- package/test/unit/spec/meetings/index.js +439 -257
- package/test/unit/spec/meetings/utils.js +14 -12
- package/test/unit/spec/member/index.js +0 -1
- package/test/unit/spec/member/util.js +31 -7
- package/test/unit/spec/members/index.js +104 -54
- package/test/unit/spec/members/request.js +29 -20
- package/test/unit/spec/members/utils.js +8 -5
- package/test/unit/spec/metrics/index.js +16 -21
- package/test/unit/spec/multistream/mediaRequestManager.ts +318 -64
- package/test/unit/spec/multistream/receiveSlot.ts +68 -17
- package/test/unit/spec/multistream/receiveSlotManager.ts +41 -13
- package/test/unit/spec/multistream/remoteMedia.ts +38 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +412 -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 +70 -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 +86 -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,86 @@ 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
|
-
|
|
824
756
|
if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesSent) {
|
|
825
757
|
this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
|
|
826
758
|
}
|
|
827
|
-
|
|
828
759
|
if (!this.statsResults.internal[mediaType][sendrecvType].framesEncoded) {
|
|
829
760
|
this.statsResults.internal[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
|
|
830
761
|
}
|
|
831
|
-
|
|
832
762
|
if (!this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded) {
|
|
833
763
|
this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
|
|
834
764
|
}
|
|
835
|
-
|
|
836
765
|
var bytes = result.bytesSent - this.statsResults.internal[mediaType][sendrecvType].prevBytesSent;
|
|
837
766
|
this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
|
|
838
767
|
kilobytes = bytes / 1024;
|
|
@@ -841,13 +770,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
841
770
|
this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded - this.statsResults.internal[mediaType][sendrecvType].framesEncoded;
|
|
842
771
|
this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded - this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded;
|
|
843
772
|
this.statsResults.internal[mediaType].outboundRtpId = result.id;
|
|
844
|
-
|
|
845
773
|
if (!this.statsResults.internal[mediaType][sendrecvType].packetsSent) {
|
|
846
774
|
this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
|
|
847
775
|
}
|
|
848
|
-
|
|
849
776
|
this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent - this.statsResults.internal[mediaType][sendrecvType].packetsSent;
|
|
850
|
-
this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
|
|
777
|
+
this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
|
|
778
|
+
|
|
779
|
+
// Data saved to send MQA metrics
|
|
851
780
|
|
|
852
781
|
this.statsResults[mediaType][sendrecvType].totalKeyFramesEncoded = result.keyFramesEncoded;
|
|
853
782
|
this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
|
|
@@ -865,43 +794,35 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
865
794
|
this.statsResults[mediaType][sendrecvType].retransmittedBytesSent = result.retransmittedBytesSent;
|
|
866
795
|
}
|
|
867
796
|
}
|
|
797
|
+
|
|
868
798
|
/**
|
|
869
799
|
* Processes InboundRTP stats result and stores
|
|
870
800
|
* @private
|
|
871
801
|
* @param {*} result
|
|
872
|
-
* @param {*}
|
|
802
|
+
* @param {*} mediaType
|
|
873
803
|
* @returns {void}
|
|
874
804
|
*/
|
|
875
|
-
|
|
876
805
|
}, {
|
|
877
806
|
key: "processInboundRTPResult",
|
|
878
|
-
value: function processInboundRTPResult(result,
|
|
879
|
-
var mediaType = type || _constants.STATS.AUDIO_CORRELATE;
|
|
807
|
+
value: function processInboundRTPResult(result, mediaType) {
|
|
880
808
|
var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
|
|
881
|
-
|
|
882
809
|
if (result.bytesReceived) {
|
|
883
810
|
var kilobytes = 0;
|
|
884
|
-
|
|
885
811
|
if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {
|
|
886
812
|
this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
|
|
887
813
|
}
|
|
888
|
-
|
|
889
814
|
if (!this.statsResults.internal[mediaType][sendrecvType].pliCount) {
|
|
890
815
|
this.statsResults.internal[mediaType][sendrecvType].pliCount = result.pliCount;
|
|
891
816
|
}
|
|
892
|
-
|
|
893
817
|
if (!this.statsResults.internal[mediaType][sendrecvType].packetsLost) {
|
|
894
818
|
this.statsResults.internal[mediaType][sendrecvType].packetsLost = result.packetsLost;
|
|
895
819
|
}
|
|
896
|
-
|
|
897
820
|
if (!this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived) {
|
|
898
821
|
this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
|
|
899
822
|
}
|
|
900
|
-
|
|
901
823
|
if (!this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp) {
|
|
902
824
|
this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
|
|
903
825
|
}
|
|
904
|
-
|
|
905
826
|
var bytes = result.bytesReceived - this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived;
|
|
906
827
|
this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
|
|
907
828
|
kilobytes = bytes / 1024;
|
|
@@ -909,34 +830,31 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
909
830
|
this.statsResults[mediaType].bytesReceived = kilobytes.toFixed(1);
|
|
910
831
|
this.statsResults[mediaType][sendrecvType].pliCount = result.pliCount - this.statsResults.internal[mediaType][sendrecvType].pliCount;
|
|
911
832
|
this.statsResults[mediaType][sendrecvType].currentPacketsLost = result.packetsLost - this.statsResults.internal[mediaType][sendrecvType].packetsLost;
|
|
912
|
-
|
|
913
833
|
if (this.statsResults[mediaType][sendrecvType].currentPacketsLost < 0) {
|
|
914
834
|
this.statsResults[mediaType][sendrecvType].currentPacketsLost = 0;
|
|
915
835
|
}
|
|
916
|
-
|
|
917
836
|
this.statsResults[mediaType][sendrecvType].packetsReceived = result.packetsReceived - this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived;
|
|
918
837
|
this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
|
|
919
|
-
|
|
920
838
|
if (this.statsResults[mediaType][sendrecvType].packetsReceived === 0) {
|
|
921
839
|
_loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for ".concat(mediaType, " "), this.statsResults[mediaType][sendrecvType].packetsReceived);
|
|
922
|
-
}
|
|
923
|
-
|
|
840
|
+
}
|
|
924
841
|
|
|
842
|
+
// Check the over all packet Lost ratio
|
|
925
843
|
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
844
|
if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
|
|
928
845
|
_loggerProxy.default.logger.info('StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver ', this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
|
|
929
|
-
}
|
|
846
|
+
}
|
|
930
847
|
|
|
848
|
+
// TODO: check the packet loss value is negative values here
|
|
931
849
|
|
|
932
850
|
if (result.packetsLost) {
|
|
933
851
|
this.statsResults[mediaType][sendrecvType].totalPacketsLost = result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;
|
|
934
852
|
} else {
|
|
935
853
|
this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;
|
|
936
854
|
}
|
|
855
|
+
this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
|
|
937
856
|
|
|
938
|
-
|
|
939
|
-
|
|
857
|
+
// From Thin
|
|
940
858
|
this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
|
|
941
859
|
this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;
|
|
942
860
|
this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
|
|
@@ -947,7 +865,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
947
865
|
this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;
|
|
948
866
|
this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;
|
|
949
867
|
this.statsResults[mediaType][sendrecvType].headerBytesReceived = result.headerBytesReceived;
|
|
950
|
-
this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);
|
|
868
|
+
this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);
|
|
869
|
+
|
|
870
|
+
// Audio stats
|
|
951
871
|
|
|
952
872
|
this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;
|
|
953
873
|
this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;
|
|
@@ -956,6 +876,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
956
876
|
this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;
|
|
957
877
|
}
|
|
958
878
|
}
|
|
879
|
+
|
|
959
880
|
/**
|
|
960
881
|
* Processes remote and local candidate result and stores
|
|
961
882
|
* @private
|
|
@@ -966,7 +887,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
966
887
|
*
|
|
967
888
|
* @returns {void}
|
|
968
889
|
*/
|
|
969
|
-
|
|
970
890
|
}, {
|
|
971
891
|
key: "processTrackResult",
|
|
972
892
|
value:
|
|
@@ -983,33 +903,30 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
983
903
|
if (!result || result.type !== 'track') {
|
|
984
904
|
return;
|
|
985
905
|
}
|
|
986
|
-
|
|
987
|
-
if (result.type !== 'track') return;
|
|
988
906
|
var sendrecvType = result.remoteSource === true ? _constants.STATS.RECEIVE_DIRECTION : _constants.STATS.SEND_DIRECTION;
|
|
989
|
-
|
|
990
907
|
if (result.frameWidth && result.frameHeight) {
|
|
991
908
|
this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
|
|
992
909
|
this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
|
|
993
910
|
this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
|
|
994
911
|
this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
|
|
995
912
|
}
|
|
996
|
-
|
|
997
913
|
if (sendrecvType === _constants.STATS.RECEIVE_DIRECTION) {
|
|
998
914
|
this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
|
|
999
915
|
this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
|
|
1000
916
|
this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;
|
|
1001
917
|
}
|
|
1002
|
-
|
|
1003
|
-
if (result.trackIdentifier && mediaType !== _constants.STATS.AUDIO_CORRELATE) {
|
|
918
|
+
if (result.trackIdentifier && !mediaType.includes('audio')) {
|
|
1004
919
|
this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier = result.trackIdentifier;
|
|
1005
920
|
var jitterBufferDelay = result && result.jitterBufferDelay;
|
|
1006
921
|
var jitterBufferEmittedCount = result && result.jitterBufferEmittedCount;
|
|
1007
|
-
this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay = jitterBufferEmittedCount && +jitterBufferDelay / +jitterBufferEmittedCount;
|
|
922
|
+
this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay = jitterBufferEmittedCount && +jitterBufferDelay / +jitterBufferEmittedCount;
|
|
1008
923
|
|
|
924
|
+
// Used to calculate the jitter
|
|
1009
925
|
this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay = result.jitterBufferDelay;
|
|
1010
926
|
this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount = result.jitterBufferEmittedCount;
|
|
1011
927
|
}
|
|
1012
928
|
}
|
|
929
|
+
|
|
1013
930
|
/**
|
|
1014
931
|
*
|
|
1015
932
|
* @private
|
|
@@ -1018,20 +935,17 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
1018
935
|
* @returns {void}
|
|
1019
936
|
* @memberof StatsAnalyzer
|
|
1020
937
|
*/
|
|
1021
|
-
|
|
1022
938
|
}, {
|
|
1023
939
|
key: "compareSentAndReceived",
|
|
1024
940
|
value: function compareSentAndReceived(result, type) {
|
|
1025
|
-
|
|
941
|
+
// Don't compare on transceivers without a sender.
|
|
942
|
+
if (!type || !this.statsResults.internal[type].send) {
|
|
1026
943
|
return;
|
|
1027
944
|
}
|
|
1028
|
-
|
|
1029
945
|
var mediaType = type;
|
|
1030
|
-
|
|
1031
946
|
if (!this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver) {
|
|
1032
947
|
this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
|
|
1033
948
|
}
|
|
1034
|
-
|
|
1035
949
|
var currentPacketLoss = result.packetsLost - this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver;
|
|
1036
950
|
this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
|
|
1037
951
|
this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;
|
|
@@ -1040,15 +954,14 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
1040
954
|
this.statsResults[mediaType].send.meanRoundTripTime.push(result.roundTripTime);
|
|
1041
955
|
this.statsResults[mediaType].send.timestamp = result.timestamp;
|
|
1042
956
|
this.statsResults[mediaType].send.ssrc = result.ssrc;
|
|
1043
|
-
this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;
|
|
957
|
+
this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;
|
|
1044
958
|
|
|
959
|
+
// Total packloss ratio on this video section of the call
|
|
1045
960
|
this.statsResults[mediaType].send.overAllPacketLossRatio = this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0 ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver / this.statsResults[mediaType].send.totalPacketsSent : 0;
|
|
1046
961
|
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
962
|
if (this.statsResults[mediaType].send.maxPacketLossRatio < this.statsResults[mediaType].send.currentPacketLossRatio) {
|
|
1049
963
|
this.statsResults[mediaType].send.maxPacketLossRatio = this.statsResults[mediaType].send.currentPacketLossRatio;
|
|
1050
964
|
}
|
|
1051
|
-
|
|
1052
965
|
if (result.type === 'remote-inbound-rtp') {
|
|
1053
966
|
this.networkQualityMonitor.determineUplinkNetworkQuality({
|
|
1054
967
|
mediaType: mediaType,
|
|
@@ -1060,6 +973,5 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
1060
973
|
}]);
|
|
1061
974
|
return StatsAnalyzer;
|
|
1062
975
|
}(_eventsScope.default);
|
|
1063
|
-
|
|
1064
976
|
exports.StatsAnalyzer = StatsAnalyzer;
|
|
1065
977
|
//# sourceMappingURL=index.js.map
|