@webex/plugin-meetings 3.0.0-beta.3 → 3.0.0-beta.300
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -8
- package/UPGRADING.md +9 -9
- package/browsers.js +19 -24
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +342 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +216 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +23 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +45 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +1048 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +67 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +1 -20
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +5 -20
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +0 -7
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +10 -24
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +11 -24
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +12 -25
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +10 -24
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/no-meeting-info.js +51 -0
- package/dist/common/errors/no-meeting-info.js.map +1 -0
- package/dist/common/errors/parameter.js +5 -33
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +10 -24
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +9 -23
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reclaim-host-role-errors.js +158 -0
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
- package/dist/common/errors/reconnection-in-progress.js +0 -17
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +10 -24
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +10 -24
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +54 -48
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +5 -25
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +0 -22
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +0 -23
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +0 -12
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +0 -15
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +0 -4
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -8
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +41 -60
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +28 -23
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +9 -15
- package/dist/config.js.map +1 -1
- package/dist/constants.js +315 -68
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +14 -0
- package/dist/controls-options-manager/constants.js.map +1 -0
- package/dist/controls-options-manager/enums.js +27 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +297 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +319 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +114 -17
- package/dist/index.js.map +1 -1
- package/dist/interpretation/collection.js +23 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +366 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +25 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +101 -29
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -26
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +0 -15
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +4 -12
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +561 -246
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +10 -38
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +68 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +314 -163
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +110 -92
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +103 -231
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +137 -222
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +2 -9
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -495
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +93 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +4624 -3740
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +292 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +249 -184
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +400 -346
- 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 +598 -586
- 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 +87 -39
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +349 -283
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +3 -15
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +98 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +143 -234
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +26 -19
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +813 -596
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +26 -41
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +183 -156
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +135 -85
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +25 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +158 -88
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +13 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +194 -204
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +113 -68
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +324 -259
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +14 -7
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +11 -558
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +263 -50
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +58 -65
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +76 -95
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +62 -76
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +66 -43
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +536 -439
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +233 -0
- package/dist/multistream/sendSlotManager.js.map +1 -0
- package/dist/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 +322 -200
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +20 -26
- package/dist/reachability/request.js.map +1 -1
- package/dist/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 +388 -476
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +17 -0
- package/dist/recording-controller/enums.js.map +1 -0
- package/dist/recording-controller/index.js +362 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +64 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/index.js +99 -94
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +131 -135
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +151 -101
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +12 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +117 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.js +1 -95
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +416 -497
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +145 -88
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +22 -47
- package/dist/transcription/index.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +42 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +15 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/types/common/errors/parameter.d.ts +15 -0
- package/dist/types/common/errors/password-error.d.ts +15 -0
- package/dist/types/common/errors/permission.d.ts +14 -0
- package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
- package/dist/types/common/errors/reconnection-in-progress.d.ts +9 -0
- package/dist/types/common/errors/reconnection.d.ts +15 -0
- package/dist/types/common/errors/stats.d.ts +15 -0
- package/dist/types/common/errors/webex-errors.d.ts +93 -0
- package/dist/types/common/errors/webex-meetings-error.d.ts +20 -0
- package/dist/types/common/events/events-scope.d.ts +17 -0
- package/dist/types/common/events/events.d.ts +12 -0
- package/dist/types/common/events/trigger-proxy.d.ts +2 -0
- package/dist/types/common/events/util.d.ts +2 -0
- package/dist/types/common/logs/logger-config.d.ts +2 -0
- package/dist/types/common/logs/logger-proxy.d.ts +2 -0
- package/dist/types/common/logs/request.d.ts +36 -0
- package/dist/types/common/queue.d.ts +34 -0
- package/dist/types/config.d.ts +71 -0
- package/dist/types/constants.d.ts +1066 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +15 -0
- package/dist/types/controls-options-manager/index.d.ts +136 -0
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/interpretation/collection.d.ts +5 -0
- package/dist/types/interpretation/index.d.ts +5 -0
- package/dist/types/interpretation/siLanguage.d.ts +5 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +322 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +273 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +34 -0
- package/dist/types/media/properties.d.ts +93 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +163 -0
- package/dist/types/meeting/index.d.ts +1676 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/types/meeting/muteState.d.ts +184 -0
- package/dist/types/meeting/request.d.ts +290 -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 +102 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +69 -0
- package/dist/types/meeting-info/meeting-info-v2.d.ts +123 -0
- package/dist/types/meeting-info/request.d.ts +22 -0
- package/dist/types/meeting-info/util.d.ts +2 -0
- package/dist/types/meeting-info/utilv2.d.ts +2 -0
- package/dist/types/meetings/collection.d.ts +31 -0
- package/dist/types/meetings/index.d.ts +367 -0
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +160 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +353 -0
- package/dist/types/members/request.d.ts +114 -0
- package/dist/types/members/types.d.ts +25 -0
- package/dist/types/members/util.d.ts +215 -0
- package/dist/types/metrics/constants.d.ts +65 -0
- package/dist/types/metrics/index.d.ts +45 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/types/multistream/remoteMedia.d.ts +72 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +285 -0
- package/dist/types/multistream/sendSlotManager.d.ts +61 -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 +194 -0
- package/dist/types/reachability/request.d.ts +39 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +126 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +207 -0
- package/dist/types/recording-controller/util.d.ts +14 -0
- package/dist/types/roap/index.d.ts +78 -0
- package/dist/types/roap/request.d.ts +39 -0
- package/dist/types/roap/turnDiscovery.d.ts +92 -0
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +47 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +201 -0
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +24 -0
- package/dist/types/transcription/index.d.ts +64 -0
- package/dist/types/webinar/collection.d.ts +16 -0
- package/dist/types/webinar/index.d.ts +5 -0
- package/dist/webinar/collection.js +44 -0
- package/dist/webinar/collection.js.map +1 -0
- package/dist/webinar/index.js +69 -0
- package/dist/webinar/index.js.map +1 -0
- package/internal-README.md +7 -6
- package/package.json +29 -21
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +220 -0
- package/src/breakouts/breakout.ts +188 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +925 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
- package/src/common/collection.ts +9 -7
- package/src/common/{config.js → config.ts} +1 -1
- package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
- package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
- package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
- package/src/common/errors/{media.js → media.ts} +11 -7
- package/src/common/errors/no-meeting-info.ts +24 -0
- package/src/common/errors/parameter.ts +11 -7
- package/src/common/errors/{password-error.js → password-error.ts} +11 -7
- package/src/common/errors/{permission.js → permission.ts} +10 -6
- package/src/common/errors/reclaim-host-role-errors.ts +134 -0
- package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
- package/src/common/errors/{stats.js → stats.ts} +11 -7
- package/src/common/errors/{webex-errors.js → webex-errors.ts} +51 -8
- package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
- package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
- package/src/common/events/{events.js → events.ts} +5 -1
- package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
- package/src/common/events/{util.js → util.ts} +2 -3
- package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
- package/src/common/logs/logger-proxy.ts +44 -0
- package/src/common/logs/{request.js → request.ts} +26 -9
- package/src/common/queue.ts +22 -9
- package/src/{config.js → config.ts} +18 -19
- package/src/constants.ts +260 -22
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +18 -0
- package/src/controls-options-manager/index.ts +278 -0
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +300 -0
- package/src/index.ts +40 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +332 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +222 -0
- package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
- package/src/locus-info/{fullState.js → fullState.ts} +16 -12
- package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
- package/src/locus-info/{index.js → index.ts} +557 -119
- package/src/locus-info/{infoUtils.js → infoUtils.ts} +29 -10
- package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +81 -17
- package/src/locus-info/{parser.js → parser.ts} +303 -104
- package/src/locus-info/{selfUtils.js → selfUtils.ts} +199 -68
- package/src/media/index.ts +458 -0
- package/src/media/properties.ts +283 -0
- package/src/media/{util.js → util.ts} +2 -2
- package/src/mediaQualityMetrics/config.ts +384 -0
- package/src/meeting/in-meeting-actions.ts +191 -3
- package/src/meeting/index.ts +7882 -0
- package/src/meeting/locusMediaRequest.ts +313 -0
- package/src/meeting/muteState.ts +451 -0
- package/src/meeting/{request.js → request.ts} +421 -220
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/{state.js → state.ts} +50 -35
- package/src/meeting/util.ts +697 -0
- package/src/meeting-info/{collection.js → collection.ts} +6 -2
- package/src/meeting-info/index.ts +210 -0
- package/src/meeting-info/meeting-info-v2.ts +429 -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} +78 -71
- package/src/meetings/{collection.js → collection.ts} +26 -3
- package/src/meetings/index.ts +1470 -0
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/{request.js → request.ts} +34 -25
- package/src/meetings/{util.js → util.ts} +132 -37
- package/src/member/{index.js → index.ts} +160 -56
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +397 -0
- package/src/members/{collection.js → collection.ts} +10 -2
- package/src/members/{index.js → index.ts} +351 -146
- package/src/members/request.ts +255 -0
- package/src/members/types.ts +29 -0
- package/src/members/util.ts +353 -0
- package/src/metrics/{constants.js → constants.ts} +12 -6
- package/src/metrics/index.ts +73 -0
- package/src/multistream/mediaRequestManager.ts +337 -63
- package/src/multistream/receiveSlot.ts +69 -26
- package/src/multistream/receiveSlotManager.ts +66 -42
- package/src/multistream/remoteMedia.ts +40 -5
- package/src/multistream/remoteMediaGroup.ts +63 -3
- package/src/multistream/remoteMediaManager.ts +300 -66
- package/src/multistream/sendSlotManager.ts +170 -0
- package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
- package/src/personal-meeting-room/{index.js → index.ts} +28 -19
- package/src/personal-meeting-room/{request.js → request.ts} +13 -4
- package/src/personal-meeting-room/{util.js → util.ts} +4 -4
- package/src/reachability/index.ts +671 -0
- package/src/reachability/request.ts +50 -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} +258 -138
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +332 -0
- package/src/recording-controller/util.ts +75 -0
- package/src/roap/{index.js → index.ts} +127 -79
- package/src/roap/request.ts +153 -0
- package/src/roap/turnDiscovery.ts +109 -47
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +100 -0
- package/src/statsAnalyzer/global.ts +37 -0
- package/src/statsAnalyzer/index.ts +1250 -0
- package/src/statsAnalyzer/mqaUtil.ts +292 -0
- package/src/transcription/{index.js → index.ts} +46 -39
- package/src/webinar/collection.ts +31 -0
- package/src/webinar/index.ts +62 -0
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +790 -530
- package/test/integration/spec/space-meeting.js +391 -204
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +237 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1790 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +287 -0
- package/test/unit/spec/controls-options-manager/util.js +582 -0
- package/test/unit/spec/fixture/locus.js +93 -90
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +589 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +325 -32
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +1390 -17
- package/test/unit/spec/locus-info/infoUtils.js +71 -40
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +529 -685
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
- package/test/unit/spec/locus-info/parser.js +119 -44
- package/test/unit/spec/locus-info/selfConstant.js +120 -103
- package/test/unit/spec/locus-info/selfUtils.js +296 -12
- package/test/unit/spec/media/index.ts +128 -77
- package/test/unit/spec/media/properties.ts +11 -11
- package/test/unit/spec/meeting/in-meeting-actions.ts +92 -3
- package/test/unit/spec/meeting/index.js +7433 -2752
- package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
- package/test/unit/spec/meeting/muteState.js +420 -211
- package/test/unit/spec/meeting/request.js +545 -79
- package/test/unit/spec/meeting/utils.js +722 -174
- package/test/unit/spec/meeting-info/index.js +300 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +624 -76
- package/test/unit/spec/meeting-info/request.js +7 -9
- package/test/unit/spec/meeting-info/util.js +11 -12
- package/test/unit/spec/meeting-info/utilv2.js +131 -74
- package/test/unit/spec/meetings/collection.js +15 -1
- package/test/unit/spec/meetings/index.js +1365 -377
- package/test/unit/spec/meetings/utils.js +216 -14
- package/test/unit/spec/member/index.js +61 -7
- package/test/unit/spec/member/util.js +526 -26
- package/test/unit/spec/members/index.js +536 -55
- package/test/unit/spec/members/request.js +228 -40
- package/test/unit/spec/members/utils.js +217 -4
- package/test/unit/spec/metrics/index.js +12 -66
- package/test/unit/spec/multistream/mediaRequestManager.ts +1012 -109
- package/test/unit/spec/multistream/receiveSlot.ts +77 -18
- package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
- package/test/unit/spec/multistream/remoteMedia.ts +40 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +738 -65
- package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
- package/test/unit/spec/networkQualityMonitor/index.js +24 -18
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/index.ts +598 -26
- package/test/unit/spec/reachability/request.js +68 -0
- package/test/unit/spec/reconnection-manager/index.js +181 -12
- package/test/unit/spec/recording-controller/index.js +307 -0
- package/test/unit/spec/recording-controller/util.js +229 -0
- package/test/unit/spec/roap/index.ts +179 -64
- package/test/unit/spec/roap/request.ts +232 -0
- package/test/unit/spec/roap/turnDiscovery.ts +123 -58
- package/test/unit/spec/rtcMetrics/index.ts +73 -0
- package/test/unit/spec/stats-analyzer/index.js +199 -60
- package/test/unit/spec/webinar/collection.ts +13 -0
- package/test/unit/spec/webinar/index.ts +60 -0
- package/test/utils/cmr.js +44 -42
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +63 -99
- package/test/utils/webex-config.js +22 -18
- package/test/utils/webex-test-users.js +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/metrics/config.js +0 -301
- package/dist/metrics/config.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -116
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -124
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/src/common/logs/logger-proxy.js +0 -33
- package/src/index.js +0 -15
- package/src/locus-info/controlsUtils.js +0 -102
- package/src/media/index.js +0 -459
- package/src/media/internal-media-core-wrapper.ts +0 -9
- package/src/media/properties.js +0 -289
- package/src/mediaQualityMetrics/config.js +0 -382
- package/src/meeting/effectsState.js +0 -205
- package/src/meeting/index.js +0 -6284
- package/src/meeting/muteState.js +0 -318
- package/src/meeting/util.js +0 -506
- package/src/meeting-info/index.js +0 -131
- package/src/meeting-info/meeting-info-v2.js +0 -255
- package/src/meetings/index.js +0 -1015
- package/src/member/util.js +0 -254
- package/src/members/request.js +0 -131
- package/src/members/util.js +0 -258
- package/src/metrics/config.js +0 -324
- package/src/metrics/index.js +0 -530
- package/src/multistream/multistreamMedia.ts +0 -92
- package/src/peer-connection-manager/util.ts +0 -117
- package/src/reachability/index.js +0 -464
- package/src/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,6 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
/* eslint-disable valid-jsdoc */
|
|
2
|
+
import {cloneDeep, forEach, remove} from 'lodash';
|
|
2
3
|
import {EventMap} from 'typed-emitter';
|
|
3
|
-
import {
|
|
4
|
+
import {MediaType} from '@webex/internal-media-core';
|
|
4
5
|
|
|
5
6
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
6
7
|
import EventsScope from '../common/events/events-scope';
|
|
@@ -30,8 +31,8 @@ export interface MemberVideoPane {
|
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
export interface VideoLayout {
|
|
33
|
-
screenShareVideo
|
|
34
|
-
size: PaneSize
|
|
34
|
+
screenShareVideo?: {
|
|
35
|
+
size: PaneSize;
|
|
35
36
|
};
|
|
36
37
|
activeSpeakerVideoPaneGroups?: ActiveSpeakerVideoPaneGroup[]; // list of active speaker video pane groups
|
|
37
38
|
memberVideoPanes?: MemberVideoPane[]; // list of video panes for specific members, CSI values can be changed later via setVideoPaneCsi()
|
|
@@ -40,6 +41,7 @@ export interface VideoLayout {
|
|
|
40
41
|
export interface Configuration {
|
|
41
42
|
audio: {
|
|
42
43
|
numOfActiveSpeakerStreams: number; // number of audio streams we want to receive
|
|
44
|
+
numOfScreenShareStreams: number; // 1 should be enough, because in webex only 1 person at a time can be presenting screen share
|
|
43
45
|
};
|
|
44
46
|
video: {
|
|
45
47
|
preferLiveVideo: boolean; // applies to all pane groups with active speaker policy
|
|
@@ -47,17 +49,12 @@ export interface Configuration {
|
|
|
47
49
|
|
|
48
50
|
layouts: {[key: LayoutId]: VideoLayout}; // a map of all available layouts, a layout can be set via setLayout() method
|
|
49
51
|
};
|
|
50
|
-
screenShare: {
|
|
51
|
-
audio: boolean; // whether we ever want to receive screen share audio at all
|
|
52
|
-
video: boolean; // whether we ever want to receive screen share video at all
|
|
53
|
-
};
|
|
54
52
|
}
|
|
55
53
|
|
|
56
54
|
/* Predefined layouts: */
|
|
57
55
|
|
|
58
56
|
// An "all equal" grid, with size up to 3 x 3 = 9:
|
|
59
57
|
const AllEqualLayout: VideoLayout = {
|
|
60
|
-
screenShareVideo: {size: null},
|
|
61
58
|
activeSpeakerVideoPaneGroups: [
|
|
62
59
|
{
|
|
63
60
|
id: 'main',
|
|
@@ -70,7 +67,6 @@ const AllEqualLayout: VideoLayout = {
|
|
|
70
67
|
|
|
71
68
|
// A layout with just a single remote active speaker video pane:
|
|
72
69
|
const SingleLayout: VideoLayout = {
|
|
73
|
-
screenShareVideo: {size: null},
|
|
74
70
|
activeSpeakerVideoPaneGroups: [
|
|
75
71
|
{
|
|
76
72
|
id: 'main',
|
|
@@ -83,7 +79,6 @@ const SingleLayout: VideoLayout = {
|
|
|
83
79
|
|
|
84
80
|
// A layout with 1 big pane for the highest priority active speaker and 5 small panes for other active speakers:
|
|
85
81
|
const OnePlusFiveLayout: VideoLayout = {
|
|
86
|
-
screenShareVideo: {size: null},
|
|
87
82
|
activeSpeakerVideoPaneGroups: [
|
|
88
83
|
{
|
|
89
84
|
id: 'mainBigOne',
|
|
@@ -101,8 +96,8 @@ const OnePlusFiveLayout: VideoLayout = {
|
|
|
101
96
|
};
|
|
102
97
|
|
|
103
98
|
// A layout with 2 big panes for 2 main active speakers and a strip of 6 small panes for other active speakers:
|
|
99
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
104
100
|
const TwoMainPlusSixSmallLayout: VideoLayout = {
|
|
105
|
-
screenShareVideo: {size: null},
|
|
106
101
|
activeSpeakerVideoPaneGroups: [
|
|
107
102
|
{
|
|
108
103
|
id: 'mainGroupWith2BigPanes',
|
|
@@ -134,7 +129,6 @@ const RemoteScreenShareWithSmallThumbnailsLayout: VideoLayout = {
|
|
|
134
129
|
|
|
135
130
|
// A staged layout with 4 pre-selected meeting participants in the main 2x2 grid and 6 small panes for other active speakers at the top:
|
|
136
131
|
const Stage2x2With6ThumbnailsLayout: VideoLayout = {
|
|
137
|
-
screenShareVideo: {size: null},
|
|
138
132
|
activeSpeakerVideoPaneGroups: [
|
|
139
133
|
{
|
|
140
134
|
id: 'thumbnails',
|
|
@@ -160,6 +154,7 @@ const Stage2x2With6ThumbnailsLayout: VideoLayout = {
|
|
|
160
154
|
export const DefaultConfiguration: Configuration = {
|
|
161
155
|
audio: {
|
|
162
156
|
numOfActiveSpeakerStreams: 3,
|
|
157
|
+
numOfScreenShareStreams: 1,
|
|
163
158
|
},
|
|
164
159
|
video: {
|
|
165
160
|
preferLiveVideo: true,
|
|
@@ -173,16 +168,12 @@ export const DefaultConfiguration: Configuration = {
|
|
|
173
168
|
ScreenShareView: RemoteScreenShareWithSmallThumbnailsLayout,
|
|
174
169
|
},
|
|
175
170
|
},
|
|
176
|
-
screenShare: {
|
|
177
|
-
audio: true,
|
|
178
|
-
video: true,
|
|
179
|
-
},
|
|
180
171
|
};
|
|
181
172
|
|
|
182
173
|
export enum Event {
|
|
183
174
|
// events for audio streams
|
|
184
175
|
AudioCreated = 'AudioCreated',
|
|
185
|
-
ScreenShareAudioCreated = '
|
|
176
|
+
ScreenShareAudioCreated = 'ScreenShareAudioCreated',
|
|
186
177
|
|
|
187
178
|
// events for video streams
|
|
188
179
|
VideoLayoutChanged = 'VideoLayoutChanged',
|
|
@@ -199,7 +190,7 @@ export interface VideoLayoutChangedEventData {
|
|
|
199
190
|
export interface Events extends EventMap {
|
|
200
191
|
// audio
|
|
201
192
|
[Event.AudioCreated]: (audio: RemoteMediaGroup) => void;
|
|
202
|
-
[Event.ScreenShareAudioCreated]: (screenShareAudio:
|
|
193
|
+
[Event.ScreenShareAudioCreated]: (screenShareAudio: RemoteMediaGroup) => void;
|
|
203
194
|
|
|
204
195
|
// video
|
|
205
196
|
[Event.VideoLayoutChanged]: (data: VideoLayoutChangedEventData) => void;
|
|
@@ -223,14 +214,18 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
223
214
|
private mediaRequestManagers: {
|
|
224
215
|
audio: MediaRequestManager;
|
|
225
216
|
video: MediaRequestManager;
|
|
217
|
+
screenShareAudio: MediaRequestManager;
|
|
218
|
+
screenShareVideo: MediaRequestManager;
|
|
226
219
|
};
|
|
227
220
|
|
|
228
221
|
private currentLayout?: VideoLayout;
|
|
229
222
|
|
|
230
223
|
private slots: {
|
|
231
224
|
audio: ReceiveSlot[];
|
|
232
|
-
|
|
233
|
-
|
|
225
|
+
screenShare: {
|
|
226
|
+
audio: ReceiveSlot[];
|
|
227
|
+
video?: ReceiveSlot;
|
|
228
|
+
};
|
|
234
229
|
video: {
|
|
235
230
|
unused: ReceiveSlot[];
|
|
236
231
|
activeSpeaker: ReceiveSlot[];
|
|
@@ -246,6 +241,10 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
246
241
|
};
|
|
247
242
|
memberPanes: {[key: PaneId]: RemoteMedia};
|
|
248
243
|
};
|
|
244
|
+
screenShare: {
|
|
245
|
+
audio?: RemoteMediaGroup;
|
|
246
|
+
video?: RemoteMediaGroup;
|
|
247
|
+
};
|
|
249
248
|
};
|
|
250
249
|
|
|
251
250
|
private receiveSlotAllocations: {
|
|
@@ -267,6 +266,8 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
267
266
|
mediaRequestManagers: {
|
|
268
267
|
audio: MediaRequestManager;
|
|
269
268
|
video: MediaRequestManager;
|
|
269
|
+
screenShareAudio: MediaRequestManager;
|
|
270
|
+
screenShareVideo: MediaRequestManager;
|
|
270
271
|
},
|
|
271
272
|
config: Configuration = DefaultConfiguration
|
|
272
273
|
) {
|
|
@@ -281,14 +282,20 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
281
282
|
activeSpeakerGroups: {},
|
|
282
283
|
memberPanes: {},
|
|
283
284
|
},
|
|
285
|
+
screenShare: {
|
|
286
|
+
audio: undefined,
|
|
287
|
+
video: undefined,
|
|
288
|
+
},
|
|
284
289
|
};
|
|
285
290
|
|
|
286
291
|
this.checkConfigValidity();
|
|
287
292
|
|
|
288
293
|
this.slots = {
|
|
289
294
|
audio: [],
|
|
290
|
-
|
|
291
|
-
|
|
295
|
+
screenShare: {
|
|
296
|
+
audio: [],
|
|
297
|
+
video: undefined,
|
|
298
|
+
},
|
|
292
299
|
video: {
|
|
293
300
|
unused: [],
|
|
294
301
|
activeSpeaker: [],
|
|
@@ -359,8 +366,8 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
359
366
|
|
|
360
367
|
await this.createAudioMedia();
|
|
361
368
|
|
|
362
|
-
|
|
363
|
-
|
|
369
|
+
await this.createScreenShareReceiveSlots();
|
|
370
|
+
this.createScreenShareAudioMedia();
|
|
364
371
|
|
|
365
372
|
await this.preallocateVideoReceiveSlots();
|
|
366
373
|
|
|
@@ -373,14 +380,27 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
373
380
|
*/
|
|
374
381
|
public stop() {
|
|
375
382
|
// invalidate all remoteMedia objects
|
|
376
|
-
this.invalidateCurrentRemoteMedia({
|
|
383
|
+
this.invalidateCurrentRemoteMedia({
|
|
384
|
+
audio: true,
|
|
385
|
+
video: true,
|
|
386
|
+
screenShareAudio: true,
|
|
387
|
+
screenShareVideo: true,
|
|
388
|
+
commit: true,
|
|
389
|
+
});
|
|
377
390
|
|
|
378
391
|
// release all audio receive slots
|
|
379
392
|
this.slots.audio.forEach((slot) => this.receiveSlotManager.releaseSlot(slot));
|
|
380
393
|
this.slots.audio.length = 0;
|
|
381
394
|
|
|
382
|
-
//
|
|
395
|
+
// release screen share slots
|
|
396
|
+
this.slots.screenShare.audio.forEach((slot) => this.receiveSlotManager.releaseSlot(slot));
|
|
397
|
+
this.slots.screenShare.audio.length = 0;
|
|
398
|
+
if (this.slots.screenShare.video) {
|
|
399
|
+
this.receiveSlotManager.releaseSlot(this.slots.screenShare.video);
|
|
400
|
+
this.slots.screenShare.video = undefined;
|
|
401
|
+
}
|
|
383
402
|
|
|
403
|
+
// release video slots
|
|
384
404
|
this.receiveSlotAllocations = {activeSpeaker: {}, receiverSelected: {}};
|
|
385
405
|
|
|
386
406
|
this.slots.video.unused.push(...this.slots.video.activeSpeaker);
|
|
@@ -432,7 +452,8 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
432
452
|
while (this.slots.video.unused.length < maxNumVideoPanesRequired) {
|
|
433
453
|
// eslint-disable-next-line no-await-in-loop
|
|
434
454
|
this.slots.video.unused.push(
|
|
435
|
-
await
|
|
455
|
+
// eslint-disable-next-line no-await-in-loop
|
|
456
|
+
await this.receiveSlotManager.allocateSlot(MediaType.VideoMain)
|
|
436
457
|
);
|
|
437
458
|
}
|
|
438
459
|
}
|
|
@@ -452,11 +473,14 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
452
473
|
if (!this.started) {
|
|
453
474
|
throw new Error('setLayout() called before start()');
|
|
454
475
|
}
|
|
476
|
+
LoggerProxy.logger.log(`RemoteMediaManager#setLayout --> new layout selected: ${layoutId}`);
|
|
477
|
+
|
|
455
478
|
this.currentLayoutId = layoutId;
|
|
456
479
|
this.currentLayout = cloneDeep(this.config.video.layouts[this.currentLayoutId]);
|
|
457
480
|
|
|
458
481
|
await this.updateVideoReceiveSlots();
|
|
459
482
|
this.updateVideoRemoteMediaObjects();
|
|
483
|
+
this.updateScreenShareVideoRemoteMediaObject();
|
|
460
484
|
this.emitVideoLayoutChangedEvent();
|
|
461
485
|
}
|
|
462
486
|
|
|
@@ -469,6 +493,38 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
469
493
|
return this.currentLayoutId;
|
|
470
494
|
}
|
|
471
495
|
|
|
496
|
+
/**
|
|
497
|
+
* sets the preferLiveVideo
|
|
498
|
+
*/
|
|
499
|
+
public setPreferLiveVideo(preferLiveVideo: boolean) {
|
|
500
|
+
LoggerProxy.logger.log(
|
|
501
|
+
`RemoteMediaManager#setPreferLiveVideo --> setPreferLiveVideo is called to set preferLiveVideo to ${preferLiveVideo}`
|
|
502
|
+
);
|
|
503
|
+
this.config.video.preferLiveVideo = preferLiveVideo;
|
|
504
|
+
Object.values(this.media.video.activeSpeakerGroups).forEach((activeSpeakerGroup) => {
|
|
505
|
+
activeSpeakerGroup.setPreferLiveVideo(preferLiveVideo, false);
|
|
506
|
+
});
|
|
507
|
+
this.mediaRequestManagers.video.commit();
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* Sets CSIs for multiple RemoteMedia instances belonging to RemoteMediaGroup.
|
|
512
|
+
* For each entry in the remoteMediaCsis array:
|
|
513
|
+
* - if csi is specified, the RemoteMedia instance is pinned to that CSI
|
|
514
|
+
* - if csi is undefined, the RemoteMedia instance is unpinned
|
|
515
|
+
*/
|
|
516
|
+
public setActiveSpeakerCsis(remoteMediaCsis: {remoteMedia: RemoteMedia; csi?: number}[]) {
|
|
517
|
+
Object.values(this.media.video.activeSpeakerGroups).forEach((remoteMediaGroup) => {
|
|
518
|
+
const groupRemoteMediaCsis = remoteMediaCsis.filter(({remoteMedia}) =>
|
|
519
|
+
remoteMediaGroup.includes(remoteMedia)
|
|
520
|
+
);
|
|
521
|
+
if (groupRemoteMediaCsis.length > 0) {
|
|
522
|
+
remoteMediaGroup.setActiveSpeakerCsis(groupRemoteMediaCsis, false);
|
|
523
|
+
}
|
|
524
|
+
});
|
|
525
|
+
this.mediaRequestManagers.video.commit();
|
|
526
|
+
}
|
|
527
|
+
|
|
472
528
|
/**
|
|
473
529
|
* Creates the audio slots
|
|
474
530
|
*/
|
|
@@ -476,7 +532,7 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
476
532
|
// create the audio receive slots
|
|
477
533
|
for (let i = 0; i < this.config.audio.numOfActiveSpeakerStreams; i += 1) {
|
|
478
534
|
// eslint-disable-next-line no-await-in-loop
|
|
479
|
-
const slot = await this.receiveSlotManager.allocateSlot(
|
|
535
|
+
const slot = await this.receiveSlotManager.allocateSlot(MediaType.AudioMain);
|
|
480
536
|
|
|
481
537
|
this.slots.audio.push(slot);
|
|
482
538
|
}
|
|
@@ -496,6 +552,50 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
496
552
|
);
|
|
497
553
|
}
|
|
498
554
|
|
|
555
|
+
/**
|
|
556
|
+
* Creates receive slots required for receiving screen share audio and video
|
|
557
|
+
*/
|
|
558
|
+
private async createScreenShareReceiveSlots() {
|
|
559
|
+
// audio
|
|
560
|
+
for (let i = 0; i < this.config.audio.numOfScreenShareStreams; i += 1) {
|
|
561
|
+
// eslint-disable-next-line no-await-in-loop
|
|
562
|
+
const slot = await this.receiveSlotManager.allocateSlot(MediaType.AudioSlides);
|
|
563
|
+
|
|
564
|
+
this.slots.screenShare.audio.push(slot);
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
// video
|
|
568
|
+
const isAnyLayoutContainingScreenShareVideo = Object.values(this.config.video.layouts).some(
|
|
569
|
+
(layout) => !!layout.screenShareVideo
|
|
570
|
+
);
|
|
571
|
+
|
|
572
|
+
if (isAnyLayoutContainingScreenShareVideo) {
|
|
573
|
+
this.slots.screenShare.video = await this.receiveSlotManager.allocateSlot(
|
|
574
|
+
MediaType.VideoSlides
|
|
575
|
+
);
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
/**
|
|
580
|
+
* Creates RemoteMedia objects for screen share
|
|
581
|
+
*/
|
|
582
|
+
private createScreenShareAudioMedia() {
|
|
583
|
+
if (this.slots.screenShare.audio.length > 0) {
|
|
584
|
+
this.media.screenShare.audio = new RemoteMediaGroup(
|
|
585
|
+
this.mediaRequestManagers.screenShareAudio,
|
|
586
|
+
this.slots.screenShare.audio,
|
|
587
|
+
255,
|
|
588
|
+
true
|
|
589
|
+
);
|
|
590
|
+
|
|
591
|
+
this.emit(
|
|
592
|
+
{file: 'multistream/remoteMediaManager', function: 'createScreenShareAudioMedia'},
|
|
593
|
+
Event.ScreenShareAudioCreated,
|
|
594
|
+
this.media.screenShare.audio
|
|
595
|
+
);
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
|
|
499
599
|
/**
|
|
500
600
|
* Goes over all receiver-selected slots and keeps only the ones that are required by a given layout,
|
|
501
601
|
* the rest are all moved to the "unused" list
|
|
@@ -536,25 +636,37 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
536
636
|
}
|
|
537
637
|
|
|
538
638
|
/**
|
|
539
|
-
* Allocates receive slots to all video panes
|
|
639
|
+
* Allocates receive slots to all active speaker video panes
|
|
640
|
+
* in the current selected layout.
|
|
641
|
+
*
|
|
642
|
+
* Allocation tries to keep the same order of the slots between the previous
|
|
643
|
+
* layout and the new one. Sorting helps making sure that highest priority slots
|
|
644
|
+
* go in the same order in the new layout.
|
|
540
645
|
*/
|
|
541
|
-
private
|
|
542
|
-
this.
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
646
|
+
private allocateSlotsToActiveSpeakerPaneGroups() {
|
|
647
|
+
this.currentLayout?.activeSpeakerVideoPaneGroups
|
|
648
|
+
// sorting in descending order based on group priority
|
|
649
|
+
?.sort((a, b) => (a.priority < b.priority ? 1 : -1))
|
|
650
|
+
?.forEach((group) => {
|
|
651
|
+
this.receiveSlotAllocations.activeSpeaker[group.id] = {slots: []};
|
|
652
|
+
|
|
653
|
+
for (let paneIndex = 0; paneIndex < group.numPanes; paneIndex += 1) {
|
|
654
|
+
// allocate a slot from the "unused" list, by grabbing in same order (shift) as previous layout
|
|
655
|
+
const freeSlot = this.slots.video.unused.shift();
|
|
656
|
+
|
|
657
|
+
if (freeSlot) {
|
|
658
|
+
this.slots.video.activeSpeaker.push(freeSlot);
|
|
659
|
+
this.receiveSlotAllocations.activeSpeaker[group.id].slots.push(freeSlot);
|
|
660
|
+
}
|
|
554
661
|
}
|
|
555
|
-
}
|
|
556
|
-
|
|
662
|
+
});
|
|
663
|
+
}
|
|
557
664
|
|
|
665
|
+
/**
|
|
666
|
+
* Allocates receive slots to all receiver selected video panes
|
|
667
|
+
* in the current selected layout
|
|
668
|
+
*/
|
|
669
|
+
private allocateSlotsToReceiverSelectedVideoPaneGroups() {
|
|
558
670
|
this.currentLayout?.memberVideoPanes?.forEach((memberPane) => {
|
|
559
671
|
// check if there is existing slot for this csi
|
|
560
672
|
const existingSlot = this.slots.video.receiverSelected.find(
|
|
@@ -581,44 +693,116 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
581
693
|
}
|
|
582
694
|
|
|
583
695
|
/**
|
|
584
|
-
*
|
|
585
|
-
* and allocates them to the right video panes / pane groups
|
|
586
|
-
*
|
|
587
|
-
* @returns {Promise}
|
|
696
|
+
* Ensures that we have enough slots for the current layout.
|
|
588
697
|
*/
|
|
589
|
-
private async
|
|
698
|
+
private async refillRequiredSlotsIfNeeded() {
|
|
590
699
|
const requiredNumSlots = this.getRequiredNumVideoSlotsForLayout(this.currentLayout);
|
|
591
700
|
const totalNumSlots =
|
|
592
701
|
this.slots.video.unused.length +
|
|
593
702
|
this.slots.video.activeSpeaker.length +
|
|
594
703
|
this.slots.video.receiverSelected.length;
|
|
595
704
|
|
|
596
|
-
// ensure we have enough total slots for current layout
|
|
597
705
|
if (totalNumSlots < requiredNumSlots) {
|
|
598
706
|
let numSlotsToCreate = requiredNumSlots - totalNumSlots;
|
|
599
707
|
|
|
600
708
|
while (numSlotsToCreate > 0) {
|
|
601
709
|
// eslint-disable-next-line no-await-in-loop
|
|
602
710
|
this.slots.video.unused.push(
|
|
603
|
-
await
|
|
711
|
+
// eslint-disable-next-line no-await-in-loop
|
|
712
|
+
await this.receiveSlotManager.allocateSlot(MediaType.VideoMain)
|
|
604
713
|
);
|
|
605
714
|
numSlotsToCreate -= 1;
|
|
606
715
|
}
|
|
607
716
|
}
|
|
717
|
+
}
|
|
608
718
|
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
719
|
+
/**
|
|
720
|
+
* Move all active speaker slots to "unused"
|
|
721
|
+
*/
|
|
722
|
+
private trimActiveSpeakerSlots() {
|
|
613
723
|
this.slots.video.unused.push(...this.slots.video.activeSpeaker);
|
|
614
724
|
this.slots.video.activeSpeaker.length = 0;
|
|
725
|
+
}
|
|
615
726
|
|
|
616
|
-
|
|
617
|
-
|
|
727
|
+
/**
|
|
728
|
+
* Logs the state of the receive slots
|
|
729
|
+
*/
|
|
730
|
+
private logMainVideoReceiveSlots() {
|
|
731
|
+
let logMessage = '';
|
|
732
|
+
forEach(this.receiveSlotAllocations.activeSpeaker, (group, groupName) => {
|
|
733
|
+
logMessage += `\ngroup: ${groupName}\n${group.slots
|
|
734
|
+
.map((slot) => slot.logString)
|
|
735
|
+
.join(', ')}`;
|
|
736
|
+
});
|
|
737
|
+
|
|
738
|
+
logMessage += '\nreceiverSelected:\n';
|
|
739
|
+
forEach(this.receiveSlotAllocations.receiverSelected, (slot, key) => {
|
|
740
|
+
logMessage += ` ${key}: ${slot.logString}\n`;
|
|
741
|
+
});
|
|
742
|
+
|
|
743
|
+
LoggerProxy.logger.log(
|
|
744
|
+
`RemoteMediaManager#logMainVideoReceiveSlots --> MAIN VIDEO receive slots: unused=${this.slots.video.unused.length}, activeSpeaker=${this.slots.video.activeSpeaker.length}, receiverSelected=${this.slots.video.receiverSelected.length}${logMessage}`
|
|
745
|
+
);
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
/** logs main audio slots */
|
|
749
|
+
private logMainAudioReceiveSlots() {
|
|
750
|
+
LoggerProxy.logger.log(
|
|
751
|
+
`RemoteMediaManager#logMainAudioReceiveSlots --> MAIN AUDIO receive slots: ${this.slots.audio
|
|
752
|
+
.map((slot) => slot.logString)
|
|
753
|
+
.join(', ')}`
|
|
754
|
+
);
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
/** logs slides video slots */
|
|
758
|
+
private logSlidesVideoReceiveSlots() {
|
|
759
|
+
LoggerProxy.logger.log(
|
|
760
|
+
`RemoteMediaManager#logSlidesVideoReceiveSlots --> SLIDES VIDEO receive slot: ${this.slots.screenShare.video?.logString}`
|
|
761
|
+
);
|
|
762
|
+
}
|
|
618
763
|
|
|
764
|
+
/** logs slides audio slots */
|
|
765
|
+
private logSlidesAudioReceiveSlots() {
|
|
619
766
|
LoggerProxy.logger.log(
|
|
620
|
-
`RemoteMediaManager#
|
|
767
|
+
`RemoteMediaManager#logSlidesAudioReceiveSlots --> SLIDES AUDIO receive slots: ${this.slots.screenShare.audio
|
|
768
|
+
.map((slot) => slot.logString)
|
|
769
|
+
.join(', ')}`
|
|
621
770
|
);
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
/** Logs all current receive slots */
|
|
774
|
+
public logAllReceiveSlots() {
|
|
775
|
+
this.logMainVideoReceiveSlots();
|
|
776
|
+
this.logMainAudioReceiveSlots();
|
|
777
|
+
this.logSlidesVideoReceiveSlots();
|
|
778
|
+
this.logSlidesAudioReceiveSlots();
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
/**
|
|
782
|
+
* Makes sure we have the right number of receive slots created for the current layout
|
|
783
|
+
* and allocates them to the right video panes / pane groups
|
|
784
|
+
*
|
|
785
|
+
* @returns {Promise}
|
|
786
|
+
*/
|
|
787
|
+
private async updateVideoReceiveSlots() {
|
|
788
|
+
// move all active speaker slots to "unused"
|
|
789
|
+
this.trimActiveSpeakerSlots();
|
|
790
|
+
|
|
791
|
+
// move all no longer needed receiver-selected slots to "unused"
|
|
792
|
+
this.trimReceiverSelectedSlots();
|
|
793
|
+
|
|
794
|
+
// ensure we have enough total slots for current layout
|
|
795
|
+
await this.refillRequiredSlotsIfNeeded();
|
|
796
|
+
|
|
797
|
+
// allocate the slots to the right panes / pane groups
|
|
798
|
+
// reset allocations
|
|
799
|
+
this.receiveSlotAllocations = {activeSpeaker: {}, receiverSelected: {}};
|
|
800
|
+
// allocate active speaker
|
|
801
|
+
this.allocateSlotsToActiveSpeakerPaneGroups();
|
|
802
|
+
// allocate receiver selected
|
|
803
|
+
this.allocateSlotsToReceiverSelectedVideoPaneGroups();
|
|
804
|
+
|
|
805
|
+
this.logMainVideoReceiveSlots();
|
|
622
806
|
|
|
623
807
|
// If this is the initial layout, there may be some "unused" slots left because of the preallocation
|
|
624
808
|
// done in this.preallocateVideoReceiveSlots(), so release them now
|
|
@@ -631,7 +815,13 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
631
815
|
*/
|
|
632
816
|
private updateVideoRemoteMediaObjects() {
|
|
633
817
|
// invalidate all the previous remote media objects and cancel their media requests
|
|
634
|
-
this.invalidateCurrentRemoteMedia({
|
|
818
|
+
this.invalidateCurrentRemoteMedia({
|
|
819
|
+
audio: false,
|
|
820
|
+
video: true,
|
|
821
|
+
screenShareAudio: false,
|
|
822
|
+
screenShareVideo: false,
|
|
823
|
+
commit: false,
|
|
824
|
+
});
|
|
635
825
|
|
|
636
826
|
// create new remoteMediaGroup objects
|
|
637
827
|
this.media.video.activeSpeakerGroups = {};
|
|
@@ -686,16 +876,53 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
686
876
|
);
|
|
687
877
|
}
|
|
688
878
|
}
|
|
689
|
-
// todo: screenshare (SPARK-377812)
|
|
690
879
|
|
|
691
880
|
this.mediaRequestManagers.video.commit();
|
|
692
881
|
}
|
|
693
882
|
|
|
883
|
+
/**
|
|
884
|
+
* Checks if current layout requires a screen share.
|
|
885
|
+
* If it does, it creates new RemoteMediaGroup object for screen share
|
|
886
|
+
* and sends the media requests for it.
|
|
887
|
+
* If it doesn't, it makes sure we clean up any RemoteMediaGroup objects
|
|
888
|
+
* created earlier for screen share (for previous layout).
|
|
889
|
+
*/
|
|
890
|
+
private updateScreenShareVideoRemoteMediaObject() {
|
|
891
|
+
this.invalidateCurrentRemoteMedia({
|
|
892
|
+
audio: false,
|
|
893
|
+
video: false,
|
|
894
|
+
screenShareAudio: false,
|
|
895
|
+
screenShareVideo: true,
|
|
896
|
+
commit: false,
|
|
897
|
+
});
|
|
898
|
+
|
|
899
|
+
this.media.screenShare.video = undefined;
|
|
900
|
+
|
|
901
|
+
if (this.currentLayout?.screenShareVideo) {
|
|
902
|
+
// we create a group of 1, because for screen share we need to use the "active speaker" policy
|
|
903
|
+
this.media.screenShare.video = new RemoteMediaGroup(
|
|
904
|
+
this.mediaRequestManagers.screenShareVideo,
|
|
905
|
+
[this.slots.screenShare.video],
|
|
906
|
+
255,
|
|
907
|
+
false,
|
|
908
|
+
{resolution: this.currentLayout.screenShareVideo.size}
|
|
909
|
+
);
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
this.mediaRequestManagers.screenShareVideo.commit();
|
|
913
|
+
}
|
|
914
|
+
|
|
694
915
|
/**
|
|
695
916
|
* Invalidates all remote media objects belonging to currently selected layout
|
|
696
917
|
*/
|
|
697
|
-
private invalidateCurrentRemoteMedia(options: {
|
|
698
|
-
|
|
918
|
+
private invalidateCurrentRemoteMedia(options: {
|
|
919
|
+
audio: boolean;
|
|
920
|
+
video: boolean;
|
|
921
|
+
screenShareAudio: boolean;
|
|
922
|
+
screenShareVideo: boolean;
|
|
923
|
+
commit: boolean;
|
|
924
|
+
}) {
|
|
925
|
+
const {audio, video, screenShareAudio, screenShareVideo, commit} = options;
|
|
699
926
|
|
|
700
927
|
if (audio && this.media.audio) {
|
|
701
928
|
this.media.audio.stop(commit);
|
|
@@ -711,12 +938,19 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
711
938
|
this.mediaRequestManagers.video.commit();
|
|
712
939
|
}
|
|
713
940
|
}
|
|
941
|
+
|
|
942
|
+
if (screenShareAudio && this.media.screenShare.audio) {
|
|
943
|
+
this.media.screenShare.audio.stop(commit);
|
|
944
|
+
}
|
|
945
|
+
if (screenShareVideo && this.media.screenShare.video) {
|
|
946
|
+
this.media.screenShare.video.stop(commit);
|
|
947
|
+
}
|
|
714
948
|
}
|
|
715
949
|
|
|
716
950
|
/** emits Event.VideoLayoutChanged */
|
|
717
951
|
private emitVideoLayoutChangedEvent() {
|
|
718
952
|
// todo: at this point the receive slots might still be showing a participant from previous layout, we should
|
|
719
|
-
// wait for our media requests to be
|
|
953
|
+
// wait for our media requests to be fulfilled, but there is no API for that right now (we could wait for source updates
|
|
720
954
|
// but in some cases they might never come, or would need to always make sure to use a new set of receiver slots)
|
|
721
955
|
// for now it's fine to have it like this, we will re-evaluate if it needs improving after more testing
|
|
722
956
|
|
|
@@ -730,7 +964,7 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
730
964
|
layoutId: this.currentLayoutId,
|
|
731
965
|
activeSpeakerVideoPanes: this.media.video.activeSpeakerGroups,
|
|
732
966
|
memberVideoPanes: this.media.video.memberPanes,
|
|
733
|
-
screenShareVideo:
|
|
967
|
+
screenShareVideo: this.media.screenShare.video?.getRemoteMedia()[0],
|
|
734
968
|
}
|
|
735
969
|
);
|
|
736
970
|
}
|
|
@@ -778,7 +1012,7 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
778
1012
|
|
|
779
1013
|
this.currentLayout.memberVideoPanes.push(newPane);
|
|
780
1014
|
|
|
781
|
-
const receiveSlot = await this.receiveSlotManager.allocateSlot(
|
|
1015
|
+
const receiveSlot = await this.receiveSlotManager.allocateSlot(MediaType.VideoMain);
|
|
782
1016
|
|
|
783
1017
|
this.slots.video.receiverSelected.push(receiveSlot);
|
|
784
1018
|
|