@webex/plugin-meetings 3.0.0-beta.3 → 3.0.0-beta.30
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/index.js +374 -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 +23 -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 +92 -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 +4 -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 +64 -137
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +80 -114
- 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/effectsState.js +125 -190
- package/dist/meeting/effectsState.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 +2142 -2101
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +39 -80
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +224 -230
- 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 +43 -215
- 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 +94 -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 +0 -2
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +1 -2
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +55 -135
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +57 -33
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +30 -50
- 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 +18 -58
- 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 +138 -182
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +3 -18
- 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 -455
- 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 +39 -64
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +94 -113
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +85 -94
- 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 +357 -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/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +1 -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 +899 -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 +5 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +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 +107 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/effectsState.d.ts +42 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +83 -0
- package/dist/types/meeting/index.d.ts +1724 -0
- package/dist/types/meeting/muteState.d.ts +108 -0
- package/dist/types/meeting/request.d.ts +261 -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 +178 -0
- package/dist/types/metrics/constants.d.ts +57 -0
- package/dist/types/metrics/index.d.ts +160 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +50 -0
- package/dist/types/multistream/receiveSlot.d.ts +66 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +46 -0
- package/dist/types/multistream/remoteMedia.d.ts +93 -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 +35 -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 +35 -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 +25 -20
- package/src/breakouts/README.md +190 -0
- package/src/breakouts/breakout.ts +130 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/index.ts +353 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +15 -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 +44 -4
- 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 +2 -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} +176 -157
- package/src/media/{properties.js → properties.ts} +48 -31
- package/src/media/{util.js → util.ts} +2 -2
- package/src/mediaQualityMetrics/config.ts +384 -0
- package/src/meeting/{effectsState.js → effectsState.ts} +47 -41
- package/src/meeting/in-meeting-actions.ts +31 -3
- package/src/meeting/{index.js → index.ts} +2479 -1466
- package/src/meeting/{muteState.js → muteState.ts} +80 -45
- package/src/meeting/{request.js → request.ts} +292 -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} +112 -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} +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} +254 -83
- package/src/metrics/{constants.js → constants.ts} +0 -2
- package/src/metrics/{index.js → index.ts} +106 -74
- package/src/multistream/mediaRequestManager.ts +79 -15
- package/src/multistream/receiveSlot.ts +42 -13
- package/src/multistream/receiveSlotManager.ts +35 -21
- package/src/multistream/remoteMedia.ts +15 -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} +99 -83
- package/src/reachability/request.ts +39 -33
- 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} +195 -102
- 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} +73 -56
- package/src/roap/request.ts +157 -0
- package/src/roap/turnDiscovery.ts +77 -37
- 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 +664 -463
- 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/index.ts +464 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +21 -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 +31 -47
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/effectsState.js +39 -45
- package/test/unit/spec/meeting/in-meeting-actions.ts +13 -2
- package/test/unit/spec/meeting/index.js +2214 -746
- package/test/unit/spec/meeting/muteState.js +43 -34
- package/test/unit/spec/meeting/request.js +115 -44
- package/test/unit/spec/meeting/utils.js +104 -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 +312 -50
- package/test/unit/spec/multistream/receiveSlot.ts +57 -6
- package/test/unit/spec/multistream/receiveSlotManager.ts +41 -13
- package/test/unit/spec/multistream/remoteMedia.ts +10 -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 +58 -26
- package/test/unit/spec/reconnection-manager/index.js +102 -9
- 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 +2 -1
- package/test/unit/spec/roap/request.ts +114 -0
- package/test/unit/spec/roap/turnDiscovery.ts +64 -45
- 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 +96 -80
- 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/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-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/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,155 @@ 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
|
+
return prev + (_this7.statsResults[cur].recv[value] || 0);
|
|
532
|
+
}, 0);
|
|
533
|
+
};
|
|
534
|
+
var getPreviousStatsTotals = function getPreviousStatsTotals(keyPrefix, value) {
|
|
535
|
+
return (0, _keys.default)(_this7.statsResults).filter(function (key) {
|
|
536
|
+
return key.startsWith(keyPrefix);
|
|
537
|
+
}).reduce(function (prev, cur) {
|
|
538
|
+
return prev + (_this7.lastStatsResults[cur].recv[value] || 0);
|
|
539
|
+
}, 0);
|
|
540
|
+
};
|
|
541
|
+
var getCurrentResolutionsStatsTotals = function getCurrentResolutionsStatsTotals(keyPrefix, value) {
|
|
542
|
+
return (0, _keys.default)(_this7.statsResults).filter(function (key) {
|
|
543
|
+
return key.startsWith(keyPrefix);
|
|
544
|
+
}).reduce(function (prev, cur) {
|
|
545
|
+
return prev + (_this7.statsResults.resolutions[cur].recv[value] || 0);
|
|
546
|
+
}, 0);
|
|
547
|
+
};
|
|
548
|
+
var getPreviousResolutionsStatsTotals = function getPreviousResolutionsStatsTotals(keyPrefix, value) {
|
|
549
|
+
return (0, _keys.default)(_this7.statsResults).filter(function (key) {
|
|
550
|
+
return key.startsWith(keyPrefix);
|
|
551
|
+
}).reduce(function (prev, cur) {
|
|
552
|
+
return prev + (_this7.lastStatsResults.resolutions[cur].recv[value] || 0);
|
|
553
|
+
}, 0);
|
|
554
|
+
};
|
|
555
|
+
if (this.meetingMediaStatus.expected.sendAudio && this.lastStatsResults['audio-send']) {
|
|
556
|
+
// compare audio stats sent
|
|
557
|
+
// NOTE: relies on there being only one sender.
|
|
558
|
+
var currentStats = this.statsResults['audio-send'].send;
|
|
559
|
+
var previousStats = this.lastStatsResults['audio-send'].send;
|
|
633
560
|
if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
|
|
634
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
561
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent");
|
|
635
562
|
} else {
|
|
636
563
|
if (currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
|
|
637
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
564
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present");
|
|
638
565
|
}
|
|
639
|
-
|
|
640
566
|
if (currentStats.audioLevel === 0) {
|
|
641
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult -->
|
|
567
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user");
|
|
642
568
|
}
|
|
643
569
|
}
|
|
644
|
-
|
|
645
|
-
this.emitStartStopEvents(mediaType, previousStats.totalPacketsSent, currentStats.totalPacketsSent, true);
|
|
570
|
+
this.emitStartStopEvents('audio', previousStats.totalPacketsSent, currentStats.totalPacketsSent, true);
|
|
646
571
|
}
|
|
647
|
-
|
|
648
572
|
if (this.meetingMediaStatus.expected.receiveAudio) {
|
|
649
573
|
// compare audio stats received
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
574
|
+
var currentPacketsReceived = getCurrentStatsTotals('audio-recv', 'totalPacketsReceived');
|
|
575
|
+
var previousPacketsReceived = getPreviousStatsTotals('audio-recv', 'totalPacketsReceived');
|
|
576
|
+
var currentSamplesReceived = getCurrentStatsTotals('audio-recv', 'totalSamplesReceived');
|
|
577
|
+
var previousSamplesReceived = getPreviousStatsTotals('audio-recv', 'totalSamplesReceived');
|
|
578
|
+
if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {
|
|
579
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets received");
|
|
580
|
+
} else if (currentSamplesReceived === previousSamplesReceived || currentSamplesReceived === 0) {
|
|
581
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio samples received");
|
|
657
582
|
}
|
|
658
|
-
|
|
659
|
-
this.emitStartStopEvents(mediaType, previousStats.totalPacketsReceived, currentStats.totalPacketsReceived, false);
|
|
583
|
+
this.emitStartStopEvents('audio', previousPacketsReceived, currentPacketsReceived, false);
|
|
660
584
|
}
|
|
661
|
-
|
|
662
|
-
mediaType = _constants.STATS.VIDEO_CORRELATE;
|
|
663
|
-
|
|
664
|
-
if (this.meetingMediaStatus.expected.sendVideo) {
|
|
585
|
+
if (this.meetingMediaStatus.expected.sendVideo && this.lastStatsResults['video-send']) {
|
|
665
586
|
// compare video stats sent
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets sent"));
|
|
587
|
+
var _currentStats = this.statsResults['video-send'].send;
|
|
588
|
+
var _previousStats = this.lastStatsResults['video-send'].send;
|
|
589
|
+
if (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0) {
|
|
590
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent");
|
|
671
591
|
} else {
|
|
672
|
-
if (
|
|
673
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
592
|
+
if (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0) {
|
|
593
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded");
|
|
674
594
|
}
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " Frames sent"));
|
|
595
|
+
if (this.statsResults.resolutions['video-send'].send.framesSent === this.lastStatsResults.resolutions['video-send'].send.framesSent || this.statsResults.resolutions['video-send'].send.framesSent === 0) {
|
|
596
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent");
|
|
678
597
|
}
|
|
679
598
|
}
|
|
680
|
-
|
|
681
|
-
this.emitStartStopEvents(mediaType, previousStats.framesSent, currentStats.framesSent, true);
|
|
599
|
+
this.emitStartStopEvents('video', _previousStats.framesSent, _currentStats.framesSent, true);
|
|
682
600
|
}
|
|
683
|
-
|
|
684
601
|
if (this.meetingMediaStatus.expected.receiveVideo) {
|
|
685
|
-
// compare video stats
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
602
|
+
// compare video stats received
|
|
603
|
+
var _currentPacketsReceived = getCurrentStatsTotals('video-recv', 'totalPacketsReceived');
|
|
604
|
+
var _previousPacketsReceived = getPreviousStatsTotals('video-recv', 'totalPacketsReceived');
|
|
605
|
+
var currentFramesReceived = getCurrentResolutionsStatsTotals('video-recv', 'framesReceived');
|
|
606
|
+
var previousFramesReceived = getPreviousResolutionsStatsTotals('video-recv', 'framesReceived');
|
|
607
|
+
var currentFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');
|
|
608
|
+
var previousFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');
|
|
609
|
+
var currentFramesDropped = getCurrentResolutionsStatsTotals('video-recv', 'framesDropped');
|
|
610
|
+
var previousFramesDropped = getPreviousResolutionsStatsTotals('video-recv', 'framesDropped');
|
|
611
|
+
if (_currentPacketsReceived === _previousPacketsReceived || _currentPacketsReceived === 0) {
|
|
612
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received");
|
|
691
613
|
} else {
|
|
692
|
-
if (
|
|
693
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
614
|
+
if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {
|
|
615
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames received");
|
|
694
616
|
}
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames decoded"));
|
|
617
|
+
if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {
|
|
618
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded");
|
|
698
619
|
}
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> ".concat(mediaType, " frames are getting dropped"));
|
|
620
|
+
if (currentFramesDropped - previousFramesDropped > 10) {
|
|
621
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped");
|
|
702
622
|
}
|
|
703
623
|
}
|
|
704
|
-
|
|
705
|
-
this.emitStartStopEvents(mediaType, previousStats.framesDecoded, currentStats.framesDecoded, false);
|
|
624
|
+
this.emitStartStopEvents('video', previousFramesDecoded, currentFramesDecoded, false);
|
|
706
625
|
}
|
|
707
|
-
|
|
708
|
-
mediaType = _constants.STATS.SHARE_CORRELATE;
|
|
709
|
-
|
|
710
|
-
if (this.meetingMediaStatus.expected.sendShare) {
|
|
626
|
+
if (this.meetingMediaStatus.expected.sendShare && this.lastStatsResults['video-share-send']) {
|
|
711
627
|
// compare share stats sent
|
|
712
|
-
currentStats = this.statsResults[mediaType].send;
|
|
713
|
-
previousStats = this.lastStatsResults[mediaType].send;
|
|
714
628
|
|
|
715
|
-
|
|
716
|
-
|
|
629
|
+
var _currentStats2 = this.statsResults['video-share-send'].send;
|
|
630
|
+
var _previousStats2 = this.lastStatsResults['video-share-send'].send;
|
|
631
|
+
if (_currentStats2.totalPacketsSent === _previousStats2.totalPacketsSent || _currentStats2.totalPacketsSent === 0) {
|
|
632
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent");
|
|
717
633
|
} else {
|
|
718
|
-
if (
|
|
719
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
634
|
+
if (_currentStats2.framesEncoded === _previousStats2.framesEncoded || _currentStats2.framesEncoded === 0) {
|
|
635
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded");
|
|
720
636
|
}
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames sent"));
|
|
637
|
+
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) {
|
|
638
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames sent");
|
|
724
639
|
}
|
|
725
|
-
}
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
if (this.meetingMediaStatus.expected.sendShare) {
|
|
643
|
+
// TODO:need to check receive share value
|
|
644
|
+
// compare share stats received
|
|
645
|
+
var _currentPacketsReceived2 = getCurrentStatsTotals('video-share-recv', 'totalPacketsReceived');
|
|
646
|
+
var _previousPacketsReceived2 = getPreviousStatsTotals('video-share-recv', 'totalPacketsReceived');
|
|
647
|
+
var _currentFramesReceived = getCurrentResolutionsStatsTotals('video-share-recv', 'framesReceived');
|
|
648
|
+
var _previousFramesReceived = getPreviousResolutionsStatsTotals('video-share-recv', 'framesReceived');
|
|
649
|
+
var _currentFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');
|
|
650
|
+
var _previousFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');
|
|
651
|
+
var _currentFramesDropped = getCurrentResolutionsStatsTotals('video-share-recv', 'framesDropped');
|
|
652
|
+
var _previousFramesDropped = getPreviousResolutionsStatsTotals('video-share-recv', 'framesDropped');
|
|
653
|
+
if (_currentPacketsReceived2 === _previousPacketsReceived2 || _currentPacketsReceived2 === 0) {
|
|
654
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received");
|
|
734
655
|
} else {
|
|
735
|
-
if (
|
|
736
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No
|
|
656
|
+
if (_currentFramesReceived === _previousFramesReceived || _currentFramesReceived === 0) {
|
|
657
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames received");
|
|
737
658
|
}
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames decoded"));
|
|
659
|
+
if (_currentFramesDecoded === _previousFramesDecoded || _currentFramesDecoded === 0) {
|
|
660
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded");
|
|
741
661
|
}
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> ".concat(mediaType, " frames are getting dropped"));
|
|
662
|
+
if (_currentFramesDropped - _previousFramesDropped > 10) {
|
|
663
|
+
_loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped");
|
|
745
664
|
}
|
|
746
|
-
}
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
// we are not calling emitStartStopEvents() for sending or receiving share because sharing is often started and stopped
|
|
747
668
|
// in meetings and this.meetingMediaStatus.expected values can be out of sync with the actual packet flow
|
|
748
669
|
// so we would send "sharing stopped" events incorrectly
|
|
749
|
-
|
|
750
670
|
}
|
|
751
671
|
}
|
|
752
672
|
}
|
|
673
|
+
|
|
753
674
|
/**
|
|
754
675
|
* Does a `getStats` on all the transceivers and parses the results
|
|
755
676
|
*
|
|
@@ -757,82 +678,86 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
757
678
|
* @memberof StatsAnalyzer
|
|
758
679
|
* @returns {Promise}
|
|
759
680
|
*/
|
|
760
|
-
|
|
761
681
|
}, {
|
|
762
682
|
key: "getStatsAndParse",
|
|
763
683
|
value: function getStatsAndParse() {
|
|
764
|
-
var
|
|
765
|
-
|
|
684
|
+
var _this8 = this;
|
|
766
685
|
if (!this.mediaConnection) {
|
|
767
686
|
return _promise.default.resolve();
|
|
768
687
|
}
|
|
769
|
-
|
|
770
|
-
if (this.mediaConnection && this.mediaConnection.getConnectionState() === _internalMediaCore.MediaConnection.ConnectionState.Failed) {
|
|
688
|
+
if (this.mediaConnection && this.mediaConnection.getConnectionState() === _internalMediaCore.ConnectionState.Failed) {
|
|
771
689
|
_loggerProxy.default.logger.trace('StatsAnalyzer:index#getStatsAndParse --> media connection is in failed state');
|
|
772
|
-
|
|
773
690
|
return _promise.default.resolve();
|
|
774
691
|
}
|
|
775
|
-
|
|
776
692
|
_loggerProxy.default.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');
|
|
777
|
-
|
|
778
693
|
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
|
-
|
|
694
|
+
transceiverStats.video.receivers.forEach(function (receiver, i) {
|
|
695
|
+
return _this8.filterAndParseGetStatsResults(receiver, "video-recv-".concat(i), false);
|
|
696
|
+
});
|
|
697
|
+
transceiverStats.audio.receivers.forEach(function (receiver, i) {
|
|
698
|
+
return _this8.filterAndParseGetStatsResults(receiver, "audio-recv-".concat(i), false);
|
|
699
|
+
});
|
|
700
|
+
transceiverStats.screenShareVideo.receivers.forEach(function (receiver, i) {
|
|
701
|
+
return _this8.filterAndParseGetStatsResults(receiver, "video-share-recv-".concat(i), false);
|
|
702
|
+
});
|
|
703
|
+
transceiverStats.screenShareAudio.receivers.forEach(function (receiver, i) {
|
|
704
|
+
return _this8.filterAndParseGetStatsResults(receiver, "audio-share-recv-".concat(i), false);
|
|
705
|
+
});
|
|
706
|
+
transceiverStats.video.senders.forEach(function (sender, i) {
|
|
707
|
+
if (i > 0) {
|
|
708
|
+
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
709
|
+
}
|
|
710
|
+
_this8.filterAndParseGetStatsResults(sender, 'video-send', true);
|
|
711
|
+
});
|
|
712
|
+
transceiverStats.audio.senders.forEach(function (sender, i) {
|
|
713
|
+
if (i > 0) {
|
|
714
|
+
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
715
|
+
}
|
|
716
|
+
_this8.filterAndParseGetStatsResults(sender, 'audio-send', true);
|
|
717
|
+
});
|
|
718
|
+
transceiverStats.screenShareVideo.senders.forEach(function (sender, i) {
|
|
719
|
+
if (i > 0) {
|
|
720
|
+
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
721
|
+
}
|
|
722
|
+
_this8.filterAndParseGetStatsResults(sender, 'video-share-send', true);
|
|
723
|
+
});
|
|
724
|
+
transceiverStats.screenShareAudio.senders.forEach(function (sender, i) {
|
|
725
|
+
if (i > 0) {
|
|
726
|
+
throw new Error('Stats Analyzer does not support multiple senders.');
|
|
727
|
+
}
|
|
728
|
+
_this8.filterAndParseGetStatsResults(sender, 'audio-share-send', true);
|
|
729
|
+
});
|
|
730
|
+
_this8.compareLastStatsResult();
|
|
797
731
|
|
|
798
|
-
|
|
732
|
+
// Save the last results to compare with the current
|
|
799
733
|
// 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
|
-
|
|
734
|
+
_this8.lastStatsResults = JSON.parse((0, _stringify.default)(_this8.statsResults));
|
|
804
735
|
_loggerProxy.default.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats');
|
|
805
736
|
});
|
|
806
737
|
}
|
|
738
|
+
|
|
807
739
|
/**
|
|
808
740
|
* Processes OutboundRTP stats result and stores
|
|
809
741
|
* @private
|
|
810
742
|
* @param {*} result
|
|
811
|
-
* @param {*}
|
|
743
|
+
* @param {*} mediaType
|
|
812
744
|
* @returns {void}
|
|
813
745
|
*/
|
|
814
|
-
|
|
815
746
|
}, {
|
|
816
747
|
key: "processOutboundRTPResult",
|
|
817
|
-
value: function processOutboundRTPResult(result,
|
|
818
|
-
var mediaType = type || _constants.STATS.AUDIO_CORRELATE;
|
|
748
|
+
value: function processOutboundRTPResult(result, mediaType) {
|
|
819
749
|
var sendrecvType = _constants.STATS.SEND_DIRECTION;
|
|
820
|
-
|
|
821
750
|
if (result.bytesSent) {
|
|
822
751
|
var kilobytes = 0;
|
|
823
|
-
|
|
824
752
|
if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesSent) {
|
|
825
753
|
this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
|
|
826
754
|
}
|
|
827
|
-
|
|
828
755
|
if (!this.statsResults.internal[mediaType][sendrecvType].framesEncoded) {
|
|
829
756
|
this.statsResults.internal[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
|
|
830
757
|
}
|
|
831
|
-
|
|
832
758
|
if (!this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded) {
|
|
833
759
|
this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
|
|
834
760
|
}
|
|
835
|
-
|
|
836
761
|
var bytes = result.bytesSent - this.statsResults.internal[mediaType][sendrecvType].prevBytesSent;
|
|
837
762
|
this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
|
|
838
763
|
kilobytes = bytes / 1024;
|
|
@@ -841,13 +766,13 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
841
766
|
this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded - this.statsResults.internal[mediaType][sendrecvType].framesEncoded;
|
|
842
767
|
this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded - this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded;
|
|
843
768
|
this.statsResults.internal[mediaType].outboundRtpId = result.id;
|
|
844
|
-
|
|
845
769
|
if (!this.statsResults.internal[mediaType][sendrecvType].packetsSent) {
|
|
846
770
|
this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
|
|
847
771
|
}
|
|
848
|
-
|
|
849
772
|
this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent - this.statsResults.internal[mediaType][sendrecvType].packetsSent;
|
|
850
|
-
this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
|
|
773
|
+
this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
|
|
774
|
+
|
|
775
|
+
// Data saved to send MQA metrics
|
|
851
776
|
|
|
852
777
|
this.statsResults[mediaType][sendrecvType].totalKeyFramesEncoded = result.keyFramesEncoded;
|
|
853
778
|
this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
|
|
@@ -865,43 +790,35 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
865
790
|
this.statsResults[mediaType][sendrecvType].retransmittedBytesSent = result.retransmittedBytesSent;
|
|
866
791
|
}
|
|
867
792
|
}
|
|
793
|
+
|
|
868
794
|
/**
|
|
869
795
|
* Processes InboundRTP stats result and stores
|
|
870
796
|
* @private
|
|
871
797
|
* @param {*} result
|
|
872
|
-
* @param {*}
|
|
798
|
+
* @param {*} mediaType
|
|
873
799
|
* @returns {void}
|
|
874
800
|
*/
|
|
875
|
-
|
|
876
801
|
}, {
|
|
877
802
|
key: "processInboundRTPResult",
|
|
878
|
-
value: function processInboundRTPResult(result,
|
|
879
|
-
var mediaType = type || _constants.STATS.AUDIO_CORRELATE;
|
|
803
|
+
value: function processInboundRTPResult(result, mediaType) {
|
|
880
804
|
var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
|
|
881
|
-
|
|
882
805
|
if (result.bytesReceived) {
|
|
883
806
|
var kilobytes = 0;
|
|
884
|
-
|
|
885
807
|
if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {
|
|
886
808
|
this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
|
|
887
809
|
}
|
|
888
|
-
|
|
889
810
|
if (!this.statsResults.internal[mediaType][sendrecvType].pliCount) {
|
|
890
811
|
this.statsResults.internal[mediaType][sendrecvType].pliCount = result.pliCount;
|
|
891
812
|
}
|
|
892
|
-
|
|
893
813
|
if (!this.statsResults.internal[mediaType][sendrecvType].packetsLost) {
|
|
894
814
|
this.statsResults.internal[mediaType][sendrecvType].packetsLost = result.packetsLost;
|
|
895
815
|
}
|
|
896
|
-
|
|
897
816
|
if (!this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived) {
|
|
898
817
|
this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
|
|
899
818
|
}
|
|
900
|
-
|
|
901
819
|
if (!this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp) {
|
|
902
820
|
this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
|
|
903
821
|
}
|
|
904
|
-
|
|
905
822
|
var bytes = result.bytesReceived - this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived;
|
|
906
823
|
this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
|
|
907
824
|
kilobytes = bytes / 1024;
|
|
@@ -909,34 +826,31 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
909
826
|
this.statsResults[mediaType].bytesReceived = kilobytes.toFixed(1);
|
|
910
827
|
this.statsResults[mediaType][sendrecvType].pliCount = result.pliCount - this.statsResults.internal[mediaType][sendrecvType].pliCount;
|
|
911
828
|
this.statsResults[mediaType][sendrecvType].currentPacketsLost = result.packetsLost - this.statsResults.internal[mediaType][sendrecvType].packetsLost;
|
|
912
|
-
|
|
913
829
|
if (this.statsResults[mediaType][sendrecvType].currentPacketsLost < 0) {
|
|
914
830
|
this.statsResults[mediaType][sendrecvType].currentPacketsLost = 0;
|
|
915
831
|
}
|
|
916
|
-
|
|
917
832
|
this.statsResults[mediaType][sendrecvType].packetsReceived = result.packetsReceived - this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived;
|
|
918
833
|
this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
|
|
919
|
-
|
|
920
834
|
if (this.statsResults[mediaType][sendrecvType].packetsReceived === 0) {
|
|
921
835
|
_loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for ".concat(mediaType, " "), this.statsResults[mediaType][sendrecvType].packetsReceived);
|
|
922
|
-
}
|
|
923
|
-
|
|
836
|
+
}
|
|
924
837
|
|
|
838
|
+
// Check the over all packet Lost ratio
|
|
925
839
|
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
840
|
if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
|
|
928
841
|
_loggerProxy.default.logger.info('StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver ', this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
|
|
929
|
-
}
|
|
842
|
+
}
|
|
930
843
|
|
|
844
|
+
// TODO: check the packet loss value is negative values here
|
|
931
845
|
|
|
932
846
|
if (result.packetsLost) {
|
|
933
847
|
this.statsResults[mediaType][sendrecvType].totalPacketsLost = result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;
|
|
934
848
|
} else {
|
|
935
849
|
this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;
|
|
936
850
|
}
|
|
851
|
+
this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
|
|
937
852
|
|
|
938
|
-
|
|
939
|
-
|
|
853
|
+
// From Thin
|
|
940
854
|
this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
|
|
941
855
|
this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;
|
|
942
856
|
this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
|
|
@@ -947,7 +861,9 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
947
861
|
this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;
|
|
948
862
|
this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;
|
|
949
863
|
this.statsResults[mediaType][sendrecvType].headerBytesReceived = result.headerBytesReceived;
|
|
950
|
-
this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);
|
|
864
|
+
this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);
|
|
865
|
+
|
|
866
|
+
// Audio stats
|
|
951
867
|
|
|
952
868
|
this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;
|
|
953
869
|
this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;
|
|
@@ -956,6 +872,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
956
872
|
this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;
|
|
957
873
|
}
|
|
958
874
|
}
|
|
875
|
+
|
|
959
876
|
/**
|
|
960
877
|
* Processes remote and local candidate result and stores
|
|
961
878
|
* @private
|
|
@@ -966,7 +883,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
966
883
|
*
|
|
967
884
|
* @returns {void}
|
|
968
885
|
*/
|
|
969
|
-
|
|
970
886
|
}, {
|
|
971
887
|
key: "processTrackResult",
|
|
972
888
|
value:
|
|
@@ -983,33 +899,30 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
983
899
|
if (!result || result.type !== 'track') {
|
|
984
900
|
return;
|
|
985
901
|
}
|
|
986
|
-
|
|
987
|
-
if (result.type !== 'track') return;
|
|
988
902
|
var sendrecvType = result.remoteSource === true ? _constants.STATS.RECEIVE_DIRECTION : _constants.STATS.SEND_DIRECTION;
|
|
989
|
-
|
|
990
903
|
if (result.frameWidth && result.frameHeight) {
|
|
991
904
|
this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
|
|
992
905
|
this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
|
|
993
906
|
this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
|
|
994
907
|
this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
|
|
995
908
|
}
|
|
996
|
-
|
|
997
909
|
if (sendrecvType === _constants.STATS.RECEIVE_DIRECTION) {
|
|
998
910
|
this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
|
|
999
911
|
this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
|
|
1000
912
|
this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;
|
|
1001
913
|
}
|
|
1002
|
-
|
|
1003
|
-
if (result.trackIdentifier && mediaType !== _constants.STATS.AUDIO_CORRELATE) {
|
|
914
|
+
if (result.trackIdentifier && !mediaType.includes('audio')) {
|
|
1004
915
|
this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier = result.trackIdentifier;
|
|
1005
916
|
var jitterBufferDelay = result && result.jitterBufferDelay;
|
|
1006
917
|
var jitterBufferEmittedCount = result && result.jitterBufferEmittedCount;
|
|
1007
|
-
this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay = jitterBufferEmittedCount && +jitterBufferDelay / +jitterBufferEmittedCount;
|
|
918
|
+
this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay = jitterBufferEmittedCount && +jitterBufferDelay / +jitterBufferEmittedCount;
|
|
1008
919
|
|
|
920
|
+
// Used to calculate the jitter
|
|
1009
921
|
this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay = result.jitterBufferDelay;
|
|
1010
922
|
this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount = result.jitterBufferEmittedCount;
|
|
1011
923
|
}
|
|
1012
924
|
}
|
|
925
|
+
|
|
1013
926
|
/**
|
|
1014
927
|
*
|
|
1015
928
|
* @private
|
|
@@ -1018,20 +931,17 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
1018
931
|
* @returns {void}
|
|
1019
932
|
* @memberof StatsAnalyzer
|
|
1020
933
|
*/
|
|
1021
|
-
|
|
1022
934
|
}, {
|
|
1023
935
|
key: "compareSentAndReceived",
|
|
1024
936
|
value: function compareSentAndReceived(result, type) {
|
|
1025
|
-
|
|
937
|
+
// Don't compare on transceivers without a sender.
|
|
938
|
+
if (!type || !this.statsResults.internal[type].send) {
|
|
1026
939
|
return;
|
|
1027
940
|
}
|
|
1028
|
-
|
|
1029
941
|
var mediaType = type;
|
|
1030
|
-
|
|
1031
942
|
if (!this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver) {
|
|
1032
943
|
this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
|
|
1033
944
|
}
|
|
1034
|
-
|
|
1035
945
|
var currentPacketLoss = result.packetsLost - this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver;
|
|
1036
946
|
this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
|
|
1037
947
|
this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;
|
|
@@ -1040,15 +950,14 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
1040
950
|
this.statsResults[mediaType].send.meanRoundTripTime.push(result.roundTripTime);
|
|
1041
951
|
this.statsResults[mediaType].send.timestamp = result.timestamp;
|
|
1042
952
|
this.statsResults[mediaType].send.ssrc = result.ssrc;
|
|
1043
|
-
this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;
|
|
953
|
+
this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;
|
|
1044
954
|
|
|
955
|
+
// Total packloss ratio on this video section of the call
|
|
1045
956
|
this.statsResults[mediaType].send.overAllPacketLossRatio = this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0 ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver / this.statsResults[mediaType].send.totalPacketsSent : 0;
|
|
1046
957
|
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
958
|
if (this.statsResults[mediaType].send.maxPacketLossRatio < this.statsResults[mediaType].send.currentPacketLossRatio) {
|
|
1049
959
|
this.statsResults[mediaType].send.maxPacketLossRatio = this.statsResults[mediaType].send.currentPacketLossRatio;
|
|
1050
960
|
}
|
|
1051
|
-
|
|
1052
961
|
if (result.type === 'remote-inbound-rtp') {
|
|
1053
962
|
this.networkQualityMonitor.determineUplinkNetworkQuality({
|
|
1054
963
|
mediaType: mediaType,
|
|
@@ -1060,6 +969,5 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
|
|
|
1060
969
|
}]);
|
|
1061
970
|
return StatsAnalyzer;
|
|
1062
971
|
}(_eventsScope.default);
|
|
1063
|
-
|
|
1064
972
|
exports.StatsAnalyzer = StatsAnalyzer;
|
|
1065
973
|
//# sourceMappingURL=index.js.map
|