@webex/plugin-meetings 3.0.0-beta.10 → 3.0.0-beta.104
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/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +48 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +357 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +176 -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 +43 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +919 -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 +5 -26
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +5 -26
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +6 -27
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +5 -26
- 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 +5 -26
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +4 -25
- 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 +5 -26
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +5 -26
- 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 +1 -24
- 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 +35 -61
- 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 +173 -52
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +14 -0
- package/dist/controls-options-manager/constants.js.map +1 -0
- package/dist/controls-options-manager/enums.js +25 -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 +250 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +72 -17
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +56 -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 +327 -211
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +0 -38
- 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 +88 -123
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +99 -91
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +62 -147
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +71 -117
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +2 -9
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.js +505 -495
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +59 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2396 -2388
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.js +252 -113
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +318 -283
- 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 +58 -217
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +3 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +10 -33
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +263 -282
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -16
- 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 +155 -232
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +24 -20
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +675 -593
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +23 -42
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +177 -155
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +80 -88
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +15 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +90 -69
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +12 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +162 -204
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +58 -53
- 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 +107 -44
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +5 -14
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +3 -7
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +61 -161
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +167 -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 +74 -93
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +55 -74
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +6 -40
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +466 -442
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +32 -59
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +10 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -33
- 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 +190 -199
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +14 -23
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/constants.js +13 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +109 -0
- package/dist/reactions/reactions.js.map +1 -0
- package/dist/reactions/reactions.type.js +36 -0
- package/dist/reactions/reactions.type.js.map +1 -0
- package/dist/reconnection-manager/index.js +326 -465
- 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 +38 -67
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +143 -134
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +149 -101
- 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 +369 -461
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +144 -94
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +13 -45
- package/dist/transcription/index.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +34 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +124 -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 +2 -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/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 +78 -0
- package/dist/types/constants.d.ts +968 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +13 -0
- package/dist/types/controls-options-manager/index.d.ts +136 -0
- package/dist/types/controls-options-manager/types.d.ts +37 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -0
- package/dist/types/index.d.ts +7 -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 +315 -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 +34 -0
- package/dist/types/media/properties.d.ts +108 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +129 -0
- package/dist/types/meeting/index.d.ts +1748 -0
- package/dist/types/meeting/muteState.d.ts +185 -0
- package/dist/types/meeting/request.d.ts +275 -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 +112 -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 +345 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +156 -0
- package/dist/types/member/types.d.ts +21 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +353 -0
- package/dist/types/members/request.d.ts +69 -0
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +2 -0
- package/dist/types/metrics/config.d.ts +172 -0
- package/dist/types/metrics/constants.d.ts +54 -0
- package/dist/types/metrics/index.d.ts +152 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +101 -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 +263 -0
- package/dist/types/networkQualityMonitor/index.d.ts +70 -0
- package/dist/types/personal-meeting-room/index.d.ts +47 -0
- package/dist/types/personal-meeting-room/request.d.ts +14 -0
- package/dist/types/personal-meeting-room/util.d.ts +2 -0
- package/dist/types/reachability/index.d.ts +152 -0
- package/dist/types/reachability/request.d.ts +37 -0
- package/dist/types/reactions/constants.d.ts +3 -0
- package/dist/types/reactions/reactions.d.ts +4 -0
- package/dist/types/reactions/reactions.type.d.ts +52 -0
- package/dist/types/reconnection-manager/index.d.ts +126 -0
- package/dist/types/recording-controller/enums.d.ts +7 -0
- package/dist/types/recording-controller/index.d.ts +193 -0
- package/dist/types/recording-controller/util.d.ts +13 -0
- package/dist/types/roap/index.d.ts +77 -0
- package/dist/types/roap/request.d.ts +38 -0
- package/dist/types/roap/turnDiscovery.d.ts +88 -0
- package/dist/types/statsAnalyzer/global.d.ts +36 -0
- package/dist/types/statsAnalyzer/index.d.ts +200 -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 +28 -21
- package/src/annotation/annotation.types.ts +41 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +339 -0
- package/src/breakouts/README.md +219 -0
- package/src/breakouts/breakout.ts +141 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +37 -0
- package/src/breakouts/index.ts +823 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/browser-detection.ts +9 -6
- package/src/common/collection.ts +3 -1
- package/src/common/errors/captcha-error.ts +6 -6
- package/src/common/errors/intent-to-join.ts +6 -6
- package/src/common/errors/join-meeting.ts +12 -8
- package/src/common/errors/media.ts +6 -6
- package/src/common/errors/parameter.ts +9 -6
- package/src/common/errors/password-error.ts +6 -6
- package/src/common/errors/permission.ts +5 -5
- package/src/common/errors/reconnection.ts +6 -6
- package/src/common/errors/stats.ts +6 -6
- package/src/common/errors/webex-errors.ts +7 -5
- package/src/common/errors/webex-meetings-error.ts +1 -1
- package/src/common/events/events-scope.ts +5 -1
- package/src/common/events/events.ts +5 -1
- package/src/common/events/trigger-proxy.ts +8 -3
- package/src/common/events/util.ts +1 -2
- package/src/common/logs/logger-proxy.ts +21 -10
- package/src/common/logs/request.ts +11 -8
- package/src/config.ts +16 -12
- package/src/constants.ts +119 -6
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +16 -0
- package/src/controls-options-manager/index.ts +278 -0
- package/src/controls-options-manager/types.ts +49 -0
- package/src/controls-options-manager/util.ts +229 -0
- package/src/index.ts +33 -0
- package/src/locus-info/controlsUtils.ts +91 -24
- package/src/locus-info/fullState.ts +15 -11
- package/src/locus-info/hostUtils.ts +4 -3
- package/src/locus-info/index.ts +270 -54
- package/src/locus-info/infoUtils.ts +12 -4
- package/src/locus-info/mediaSharesUtils.ts +4 -4
- package/src/locus-info/parser.ts +46 -68
- package/src/locus-info/selfUtils.ts +187 -56
- package/src/media/index.ts +142 -172
- package/src/media/properties.ts +43 -36
- package/src/media/util.ts +1 -1
- package/src/mediaQualityMetrics/config.ts +380 -378
- package/src/meeting/in-meeting-actions.ts +123 -3
- package/src/meeting/index.ts +2617 -1545
- package/src/meeting/muteState.ts +271 -68
- package/src/meeting/request.ts +251 -132
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/state.ts +45 -30
- package/src/meeting/util.ts +119 -110
- package/src/meeting-info/collection.ts +2 -1
- package/src/meeting-info/index.ts +32 -30
- package/src/meeting-info/meeting-info-v2.ts +181 -109
- package/src/meeting-info/request.ts +9 -3
- package/src/meeting-info/util.ts +54 -46
- package/src/meeting-info/utilv2.ts +70 -55
- package/src/meetings/collection.ts +21 -1
- package/src/meetings/index.ts +749 -437
- package/src/meetings/request.ts +29 -25
- package/src/meetings/util.ts +122 -33
- package/src/member/index.ts +86 -49
- package/src/member/types.ts +24 -0
- package/src/member/util.ts +92 -13
- package/src/members/collection.ts +8 -1
- package/src/members/index.ts +281 -129
- package/src/members/request.ts +87 -14
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +140 -49
- package/src/metrics/config.ts +256 -90
- package/src/metrics/constants.ts +1 -6
- package/src/metrics/index.ts +96 -96
- package/src/multistream/mediaRequestManager.ts +203 -45
- package/src/multistream/receiveSlot.ts +69 -26
- package/src/multistream/receiveSlotManager.ts +62 -38
- package/src/multistream/remoteMedia.ts +30 -4
- package/src/multistream/remoteMediaGroup.ts +4 -3
- package/src/multistream/remoteMediaManager.ts +230 -66
- package/src/networkQualityMonitor/index.ts +24 -27
- package/src/personal-meeting-room/index.ts +12 -16
- package/src/personal-meeting-room/request.ts +10 -3
- package/src/personal-meeting-room/util.ts +3 -3
- package/src/reachability/index.ts +131 -79
- package/src/reachability/request.ts +43 -34
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +104 -0
- package/src/reactions/reactions.type.ts +62 -0
- package/src/reconnection-manager/index.ts +193 -111
- 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.ts +63 -51
- package/src/roap/request.ts +86 -53
- package/src/roap/turnDiscovery.ts +105 -46
- package/src/statsAnalyzer/global.ts +8 -104
- package/src/statsAnalyzer/index.ts +624 -376
- package/src/statsAnalyzer/mqaUtil.ts +203 -90
- package/src/transcription/index.ts +34 -32
- package/test/integration/spec/converged-space-meetings.js +177 -0
- package/test/integration/spec/journey.js +666 -464
- package/test/integration/spec/space-meeting.js +320 -204
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/annotation/index.ts +435 -0
- package/test/unit/spec/breakouts/breakout.ts +184 -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 +77 -0
- package/test/unit/spec/breakouts/index.ts +1504 -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/controls-options-manager/index.js +287 -0
- package/test/unit/spec/controls-options-manager/util.js +403 -0
- package/test/unit/spec/fixture/locus.js +92 -90
- package/test/unit/spec/locus-info/controlsUtils.js +177 -32
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +493 -3
- package/test/unit/spec/locus-info/infoUtils.js +26 -33
- 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 +110 -103
- package/test/unit/spec/locus-info/selfUtils.js +236 -12
- package/test/unit/spec/media/index.ts +104 -8
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/in-meeting-actions.ts +58 -3
- package/test/unit/spec/meeting/index.js +2649 -837
- package/test/unit/spec/meeting/muteState.js +368 -70
- package/test/unit/spec/meeting/request.js +217 -43
- package/test/unit/spec/meeting/utils.js +146 -165
- package/test/unit/spec/meeting-info/meetinginfov2.js +268 -74
- 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 +1052 -329
- package/test/unit/spec/meetings/utils.js +163 -14
- package/test/unit/spec/member/index.js +24 -1
- package/test/unit/spec/member/util.js +359 -32
- package/test/unit/spec/members/index.js +402 -54
- package/test/unit/spec/members/request.js +76 -20
- package/test/unit/spec/members/utils.js +191 -4
- package/test/unit/spec/metrics/index.js +46 -20
- package/test/unit/spec/multistream/mediaRequestManager.ts +650 -105
- package/test/unit/spec/multistream/receiveSlot.ts +76 -17
- package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
- package/test/unit/spec/multistream/remoteMedia.ts +32 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +5 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +549 -65
- package/test/unit/spec/networkQualityMonitor/index.js +24 -18
- package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
- package/test/unit/spec/reachability/index.ts +176 -27
- package/test/unit/spec/reachability/request.js +66 -0
- package/test/unit/spec/reconnection-manager/index.js +62 -31
- 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 +21 -16
- package/test/unit/spec/roap/request.ts +217 -0
- package/test/unit/spec/roap/turnDiscovery.ts +93 -49
- package/test/unit/spec/stats-analyzer/index.js +116 -60
- package/test/utils/cmr.js +44 -42
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +64 -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 -334
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -116
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/src/index.js +0 -15
- package/src/media/internal-media-core-wrapper.ts +0 -9
- package/src/meeting/effectsState.ts +0 -211
- package/src/multistream/multistreamMedia.ts +0 -92
- package/test/unit/spec/meeting/effectsState.js +0 -291
package/src/media/index.ts
CHANGED
|
@@ -3,21 +3,23 @@
|
|
|
3
3
|
*/
|
|
4
4
|
/* globals navigator */
|
|
5
5
|
|
|
6
|
+
import {RoapMediaConnection, MultistreamRoapMediaConnection} from '@webex/internal-media-core';
|
|
7
|
+
import {LocalCameraTrack, LocalDisplayTrack, LocalMicrophoneTrack} from '@webex/media-helpers';
|
|
6
8
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
7
|
-
import {
|
|
8
|
-
AUDIO_INPUT,
|
|
9
|
-
VIDEO_INPUT,
|
|
10
|
-
MEDIA_TRACK_CONSTRAINT,
|
|
11
|
-
} from '../constants';
|
|
9
|
+
import {AUDIO_INPUT, VIDEO_INPUT, MEDIA_TRACK_CONSTRAINT} from '../constants';
|
|
12
10
|
import Config from '../config';
|
|
13
11
|
import StaticConfig from '../common/config';
|
|
14
12
|
import MediaError from '../common/errors/media';
|
|
15
13
|
import BrowserDetection from '../common/browser-detection';
|
|
16
14
|
|
|
17
|
-
import {RoapMediaConnection, MultistreamRoapMediaConnection} from './internal-media-core-wrapper';
|
|
18
|
-
|
|
19
15
|
const {isBrowser} = BrowserDetection();
|
|
20
16
|
|
|
17
|
+
type MultistreamConnectionConfig = ConstructorParameters<typeof MultistreamRoapMediaConnection>[0];
|
|
18
|
+
|
|
19
|
+
export type BundlePolicy = ConstructorParameters<
|
|
20
|
+
typeof MultistreamRoapMediaConnection
|
|
21
|
+
>[0]['bundlePolicy'];
|
|
22
|
+
|
|
21
23
|
/**
|
|
22
24
|
* MediaDirection
|
|
23
25
|
* @typedef {Object} MediaDirection
|
|
@@ -48,22 +50,6 @@ const {isBrowser} = BrowserDetection();
|
|
|
48
50
|
*/
|
|
49
51
|
const Media: any = {};
|
|
50
52
|
|
|
51
|
-
/**
|
|
52
|
-
* @param {boolean} enabled
|
|
53
|
-
* @param {MediaStreamTrack} track
|
|
54
|
-
* @returns {Boolean}
|
|
55
|
-
* @public
|
|
56
|
-
*/
|
|
57
|
-
Media.setLocalTrack = (enabled: boolean, track: MediaStreamTrack) => {
|
|
58
|
-
if (track) {
|
|
59
|
-
track.enabled = enabled;
|
|
60
|
-
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return false;
|
|
65
|
-
};
|
|
66
|
-
|
|
67
53
|
/**
|
|
68
54
|
* format the media array for send
|
|
69
55
|
* @param {String} mediaId
|
|
@@ -77,10 +63,10 @@ Media.generateLocalMedias = (mediaId: string, audioMuted: boolean, videoMuted: b
|
|
|
77
63
|
{
|
|
78
64
|
localSdp: JSON.stringify({
|
|
79
65
|
audioMuted,
|
|
80
|
-
videoMuted
|
|
66
|
+
videoMuted,
|
|
81
67
|
}),
|
|
82
|
-
mediaId
|
|
83
|
-
}
|
|
68
|
+
mediaId,
|
|
69
|
+
},
|
|
84
70
|
];
|
|
85
71
|
}
|
|
86
72
|
|
|
@@ -94,9 +80,7 @@ Media.generateLocalMedias = (mediaId: string, audioMuted: boolean, videoMuted: b
|
|
|
94
80
|
* @returns {Promise}
|
|
95
81
|
*/
|
|
96
82
|
Media.getLocalMedia = (options: any, config: object) => {
|
|
97
|
-
const {
|
|
98
|
-
sendAudio, sendVideo, sendShare, sharePreferences, isSharing
|
|
99
|
-
} = options;
|
|
83
|
+
const {sendAudio, sendVideo, sendShare, sharePreferences, isSharing} = options;
|
|
100
84
|
|
|
101
85
|
if (sendAudio || sendVideo) {
|
|
102
86
|
return Media.getMedia(sendAudio, sendVideo, config);
|
|
@@ -107,7 +91,7 @@ Media.getLocalMedia = (options: any, config: object) => {
|
|
|
107
91
|
{
|
|
108
92
|
sendAudio: false,
|
|
109
93
|
sendShare: true,
|
|
110
|
-
sharePreferences
|
|
94
|
+
sharePreferences,
|
|
111
95
|
},
|
|
112
96
|
config
|
|
113
97
|
);
|
|
@@ -122,36 +106,41 @@ Media.getLocalMedia = (options: any, config: object) => {
|
|
|
122
106
|
* @param {boolean} isMultistream
|
|
123
107
|
* @param {string} debugId string useful for debugging (will appear in media connection logs)
|
|
124
108
|
* @param {Object} options
|
|
125
|
-
* @param {Object} [options.mediaProperties]
|
|
109
|
+
* @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:
|
|
126
110
|
* audioTrack, videoTrack and shareTrack
|
|
127
111
|
* @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections
|
|
128
112
|
* @param {boolean} [options.enableRtx] applicable only to non-multistream connections
|
|
129
113
|
* @param {boolean} [options.enableExtmap] applicable only to non-multistream connections
|
|
130
114
|
* @param {Object} [options.turnServerInfo]
|
|
131
|
-
* @
|
|
115
|
+
* @param {BundlePolicy} [options.bundlePolicy]
|
|
116
|
+
* @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
|
|
132
117
|
*/
|
|
133
118
|
Media.createMediaConnection = (
|
|
134
119
|
isMultistream: boolean,
|
|
135
120
|
debugId: string,
|
|
136
121
|
options: {
|
|
137
|
-
mediaProperties
|
|
122
|
+
mediaProperties: {
|
|
138
123
|
mediaDirection?: {
|
|
139
|
-
receiveAudio: boolean
|
|
140
|
-
receiveVideo: boolean
|
|
141
|
-
receiveShare: boolean
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
124
|
+
receiveAudio: boolean;
|
|
125
|
+
receiveVideo: boolean;
|
|
126
|
+
receiveShare: boolean;
|
|
127
|
+
sendAudio: boolean;
|
|
128
|
+
sendVideo: boolean;
|
|
129
|
+
sendShare: boolean;
|
|
130
|
+
};
|
|
131
|
+
audioTrack?: LocalMicrophoneTrack;
|
|
132
|
+
videoTrack?: LocalCameraTrack;
|
|
133
|
+
shareTrack?: LocalDisplayTrack;
|
|
134
|
+
};
|
|
135
|
+
remoteQualityLevel?: 'LOW' | 'MEDIUM' | 'HIGH';
|
|
136
|
+
enableRtx?: boolean;
|
|
137
|
+
enableExtmap?: boolean;
|
|
150
138
|
turnServerInfo?: {
|
|
151
|
-
url: string
|
|
152
|
-
username: string
|
|
153
|
-
password: string
|
|
154
|
-
}
|
|
139
|
+
url: string;
|
|
140
|
+
username: string;
|
|
141
|
+
password: string;
|
|
142
|
+
};
|
|
143
|
+
bundlePolicy?: BundlePolicy;
|
|
155
144
|
}
|
|
156
145
|
) => {
|
|
157
146
|
const {
|
|
@@ -159,7 +148,8 @@ Media.createMediaConnection = (
|
|
|
159
148
|
remoteQualityLevel,
|
|
160
149
|
enableRtx,
|
|
161
150
|
enableExtmap,
|
|
162
|
-
turnServerInfo
|
|
151
|
+
turnServerInfo,
|
|
152
|
+
bundlePolicy,
|
|
163
153
|
} = options;
|
|
164
154
|
|
|
165
155
|
const iceServers = [];
|
|
@@ -168,57 +158,65 @@ Media.createMediaConnection = (
|
|
|
168
158
|
iceServers.push({
|
|
169
159
|
urls: turnServerInfo.url,
|
|
170
160
|
username: turnServerInfo.username || '',
|
|
171
|
-
credential: turnServerInfo.password || ''
|
|
161
|
+
credential: turnServerInfo.password || '',
|
|
172
162
|
});
|
|
173
163
|
}
|
|
174
164
|
|
|
175
165
|
if (isMultistream) {
|
|
176
|
-
|
|
166
|
+
const config: MultistreamConnectionConfig = {
|
|
177
167
|
iceServers,
|
|
178
|
-
|
|
168
|
+
enableMainAudio:
|
|
169
|
+
mediaProperties.mediaDirection?.sendAudio || mediaProperties.mediaDirection?.receiveAudio,
|
|
170
|
+
enableMainVideo:
|
|
171
|
+
mediaProperties.mediaDirection?.sendVideo || mediaProperties.mediaDirection?.receiveVideo,
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
if (bundlePolicy) {
|
|
175
|
+
config.bundlePolicy = bundlePolicy;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
return new MultistreamRoapMediaConnection(config, debugId);
|
|
179
179
|
}
|
|
180
180
|
|
|
181
181
|
if (!mediaProperties) {
|
|
182
182
|
throw new Error('mediaProperties have to be provided for non-multistream media connections');
|
|
183
183
|
}
|
|
184
184
|
|
|
185
|
-
const {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
185
|
+
const {mediaDirection, audioTrack, videoTrack, shareTrack} = mediaProperties;
|
|
186
|
+
|
|
187
|
+
return new RoapMediaConnection(
|
|
188
|
+
{
|
|
189
|
+
iceServers,
|
|
190
|
+
skipInactiveTransceivers: false,
|
|
191
|
+
requireH264: true,
|
|
192
|
+
sdpMunging: {
|
|
193
|
+
convertPort9to0: false,
|
|
194
|
+
addContentSlides: true,
|
|
195
|
+
bandwidthLimits: {
|
|
196
|
+
audio: StaticConfig.meetings.bandwidth.audio,
|
|
197
|
+
video: StaticConfig.meetings.bandwidth.video,
|
|
198
|
+
},
|
|
199
|
+
startBitrate: StaticConfig.meetings.bandwidth.startBitrate,
|
|
200
|
+
periodicKeyframes: 20, // it's always been hardcoded in SDK so for now keeping it that way
|
|
201
|
+
disableExtmap: !enableExtmap,
|
|
202
|
+
disableRtx: !enableRtx, // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP
|
|
203
203
|
},
|
|
204
|
-
startBitrate: StaticConfig.meetings.bandwidth.startBitrate,
|
|
205
|
-
periodicKeyframes: 20, // it's always been hardcoded in SDK so for now keeping it that way
|
|
206
|
-
disableExtmap: !enableExtmap,
|
|
207
|
-
disableRtx: !enableRtx, // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP
|
|
208
|
-
}
|
|
209
|
-
}, {
|
|
210
|
-
send: {
|
|
211
|
-
audio: audioTrack,
|
|
212
|
-
video: videoTrack,
|
|
213
|
-
screenShareVideo: shareTrack
|
|
214
204
|
},
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
205
|
+
{
|
|
206
|
+
send: {
|
|
207
|
+
audio: audioTrack?.underlyingTrack,
|
|
208
|
+
video: videoTrack?.underlyingTrack,
|
|
209
|
+
screenShareVideo: shareTrack?.underlyingTrack,
|
|
210
|
+
},
|
|
211
|
+
receive: {
|
|
212
|
+
audio: mediaDirection.receiveAudio,
|
|
213
|
+
video: mediaDirection.receiveVideo,
|
|
214
|
+
screenShareVideo: mediaDirection.receiveShare,
|
|
215
|
+
remoteQualityLevel,
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
debugId
|
|
219
|
+
);
|
|
222
220
|
};
|
|
223
221
|
|
|
224
222
|
/**
|
|
@@ -252,38 +250,31 @@ Media.getDisplayMedia = (
|
|
|
252
250
|
const hasSharePreferences = options.sharePreferences;
|
|
253
251
|
const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;
|
|
254
252
|
const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;
|
|
255
|
-
const {
|
|
256
|
-
|
|
257
|
-
resolution,
|
|
258
|
-
videoShareFrameRate,
|
|
259
|
-
screenFrameRate,
|
|
260
|
-
aspectRatio
|
|
261
|
-
} = Config.meetings;
|
|
253
|
+
const {screenResolution, resolution, videoShareFrameRate, screenFrameRate, aspectRatio} =
|
|
254
|
+
Config.meetings;
|
|
262
255
|
|
|
263
256
|
let shareConstraints: any = {
|
|
264
257
|
cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,
|
|
265
|
-
aspectRatio
|
|
258
|
+
aspectRatio,
|
|
266
259
|
};
|
|
267
260
|
|
|
268
261
|
if (hasCustomConstraints) {
|
|
269
262
|
shareConstraints = hasSharePreferences.shareConstraints;
|
|
270
|
-
}
|
|
271
|
-
else if (hasHighFrameRate) {
|
|
263
|
+
} else if (hasHighFrameRate) {
|
|
272
264
|
shareConstraints = {
|
|
273
265
|
...shareConstraints,
|
|
274
266
|
frameRate: videoShareFrameRate,
|
|
275
267
|
height: resolution.idealHeight,
|
|
276
268
|
width: resolution.idealWidth,
|
|
277
|
-
...config.resolution
|
|
269
|
+
...config.resolution,
|
|
278
270
|
};
|
|
279
|
-
}
|
|
280
|
-
else {
|
|
271
|
+
} else {
|
|
281
272
|
shareConstraints = {
|
|
282
273
|
...shareConstraints,
|
|
283
274
|
frameRate: customShareFrameRate || screenFrameRate,
|
|
284
275
|
height: customResolution.idealHeight || screenResolution.idealHeight,
|
|
285
276
|
width: customResolution.idealWidth || screenResolution.idealWidth,
|
|
286
|
-
...config.screenResolution
|
|
277
|
+
...config.screenResolution,
|
|
287
278
|
};
|
|
288
279
|
}
|
|
289
280
|
|
|
@@ -294,15 +285,14 @@ Media.getDisplayMedia = (
|
|
|
294
285
|
// to have higher quality, and for developers to control the values
|
|
295
286
|
// eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox
|
|
296
287
|
|
|
297
|
-
|
|
298
288
|
if (isBrowser('firefox')) {
|
|
299
289
|
const mediaConfig: any = {
|
|
300
290
|
audio: options.sendAudio,
|
|
301
|
-
video: options.sendShare
|
|
291
|
+
video: options.sendShare,
|
|
302
292
|
};
|
|
303
293
|
|
|
304
|
-
|
|
305
|
-
|
|
294
|
+
return navigator.mediaDevices
|
|
295
|
+
.getDisplayMedia({audio: options.sendAudio, video: mediaConfig})
|
|
306
296
|
.then((stream) => {
|
|
307
297
|
if (options.sendShare && stream.getVideoTracks().length > 0) {
|
|
308
298
|
// Firefox has a bug with the spec where changing in the height and width only happens
|
|
@@ -311,7 +301,6 @@ Media.getDisplayMedia = (
|
|
|
311
301
|
stream.getVideoTracks()[0].applyConstraints(shareConstraints);
|
|
312
302
|
}
|
|
313
303
|
|
|
314
|
-
|
|
315
304
|
return stream;
|
|
316
305
|
});
|
|
317
306
|
}
|
|
@@ -341,30 +330,32 @@ Media.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {
|
|
|
341
330
|
audio,
|
|
342
331
|
// TODO: Remove temporary workaround once Firefox fixes low constraint issues
|
|
343
332
|
// eslint-disable-next-line no-nested-ternary
|
|
344
|
-
video: video
|
|
345
|
-
isBrowser('firefox') && video.width && video.width.max === 320
|
|
346
|
-
{
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
333
|
+
video: video
|
|
334
|
+
? isBrowser('firefox') && video.width && video.width.max === 320
|
|
335
|
+
? {
|
|
336
|
+
deviceId: video.deviceId ? video.deviceId : undefined,
|
|
337
|
+
width: 320,
|
|
338
|
+
height: 180,
|
|
339
|
+
frameRate: video.frameRate ? video.frameRate : undefined,
|
|
340
|
+
facingMode: video.facingMode ? video.facingMode : undefined,
|
|
341
|
+
}
|
|
342
|
+
: {
|
|
343
|
+
deviceId: video.deviceId ? video.deviceId : undefined,
|
|
344
|
+
width: video.width ? video.width : defaultWidth,
|
|
345
|
+
height: video.height ? video.height : defaultHeight,
|
|
346
|
+
frameRate: video.frameRate ? video.frameRate : undefined,
|
|
347
|
+
facingMode: video.facingMode ? video.facingMode : undefined,
|
|
348
|
+
}
|
|
349
|
+
: false,
|
|
350
|
+
fake: process.env.NODE_ENV === 'test', // Special case to get fake media for Firefox browser for testing
|
|
358
351
|
};
|
|
359
352
|
|
|
360
|
-
return navigator.mediaDevices
|
|
361
|
-
.getUserMedia
|
|
362
|
-
.catch((err) => {
|
|
363
|
-
const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';
|
|
353
|
+
return navigator.mediaDevices.getUserMedia(mediaConfig).catch((err) => {
|
|
354
|
+
const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';
|
|
364
355
|
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
356
|
+
LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);
|
|
357
|
+
throw err;
|
|
358
|
+
});
|
|
368
359
|
};
|
|
369
360
|
|
|
370
361
|
/**
|
|
@@ -379,24 +370,24 @@ Media.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {
|
|
|
379
370
|
* sendVideo: true/false
|
|
380
371
|
*}
|
|
381
372
|
*/
|
|
382
|
-
Media.getSupportedDevice = ({
|
|
373
|
+
Media.getSupportedDevice = ({sendAudio, sendVideo}: {sendAudio: boolean; sendVideo: boolean}) =>
|
|
383
374
|
Promise.resolve().then(() => {
|
|
384
375
|
if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {
|
|
385
376
|
return {
|
|
386
377
|
sendAudio: false,
|
|
387
|
-
sendVideo: false
|
|
378
|
+
sendVideo: false,
|
|
388
379
|
};
|
|
389
380
|
}
|
|
390
381
|
|
|
391
382
|
return navigator.mediaDevices.enumerateDevices().then((devices) => {
|
|
392
383
|
const supported = {
|
|
393
384
|
audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,
|
|
394
|
-
video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0
|
|
385
|
+
video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0,
|
|
395
386
|
};
|
|
396
387
|
|
|
397
388
|
return {
|
|
398
389
|
sendAudio: supported.audio && sendAudio,
|
|
399
|
-
sendVideo: supported.video && sendVideo
|
|
390
|
+
sendVideo: supported.video && sendVideo,
|
|
400
391
|
};
|
|
401
392
|
});
|
|
402
393
|
});
|
|
@@ -435,44 +426,15 @@ Media.stopTracks = (track: any) => {
|
|
|
435
426
|
if (track && track.stop) {
|
|
436
427
|
try {
|
|
437
428
|
track.stop();
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
|
|
429
|
+
} catch (e) {
|
|
430
|
+
LoggerProxy.logger.error(
|
|
431
|
+
`Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`
|
|
432
|
+
);
|
|
441
433
|
}
|
|
442
434
|
}
|
|
443
435
|
});
|
|
444
436
|
};
|
|
445
437
|
|
|
446
|
-
/**
|
|
447
|
-
*
|
|
448
|
-
* Stop input stream
|
|
449
|
-
* @param {Stream} stream A media stream
|
|
450
|
-
* @returns {null}
|
|
451
|
-
* @deprecated after v1.89.3
|
|
452
|
-
*/
|
|
453
|
-
Media.stopStream = (stream: any) => {
|
|
454
|
-
LoggerProxy.logger.warn('Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3');
|
|
455
|
-
if (!stream) {
|
|
456
|
-
return Promise.resolve();
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
/*
|
|
460
|
-
* To release local media
|
|
461
|
-
* 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)
|
|
462
|
-
* 2) Firefox requires the stream to be stopped
|
|
463
|
-
*/
|
|
464
|
-
return Promise.resolve().then(() => {
|
|
465
|
-
if (stream.getTracks) {
|
|
466
|
-
stream.getTracks().forEach((track) => {
|
|
467
|
-
track.stop();
|
|
468
|
-
});
|
|
469
|
-
}
|
|
470
|
-
else if (stream.stop) {
|
|
471
|
-
stream.stop();
|
|
472
|
-
}
|
|
473
|
-
});
|
|
474
|
-
};
|
|
475
|
-
|
|
476
438
|
/**
|
|
477
439
|
* generates streams for audio video and share
|
|
478
440
|
* @param {object} mediaSetting parameter
|
|
@@ -506,13 +468,21 @@ Media.getUserMedia = (
|
|
|
506
468
|
},
|
|
507
469
|
config: object
|
|
508
470
|
) =>
|
|
509
|
-
Media.getLocalMedia(
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
471
|
+
Media.getLocalMedia(
|
|
472
|
+
{
|
|
473
|
+
sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,
|
|
474
|
+
sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false,
|
|
475
|
+
},
|
|
476
|
+
config
|
|
477
|
+
).then((localStream) =>
|
|
478
|
+
Media.getLocalMedia(
|
|
479
|
+
{
|
|
480
|
+
sendShare: mediaSetting.sendShare,
|
|
481
|
+
isSharing: mediaSetting.isSharing,
|
|
482
|
+
sharePreferences,
|
|
483
|
+
},
|
|
484
|
+
config
|
|
485
|
+
).then((shareStream) => [localStream, shareStream])
|
|
486
|
+
);
|
|
517
487
|
|
|
518
488
|
export default Media;
|
package/src/media/properties.ts
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {ConnectionState, Event} from '@webex/internal-media-core';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
QUALITY_LEVELS
|
|
7
|
-
} from '../constants';
|
|
3
|
+
import {LocalCameraTrack, LocalMicrophoneTrack, LocalDisplayTrack} from '@webex/media-helpers';
|
|
4
|
+
|
|
5
|
+
import {MEETINGS, PC_BAIL_TIMEOUT, QUALITY_LEVELS} from '../constants';
|
|
8
6
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
9
7
|
|
|
10
8
|
/**
|
|
11
9
|
* @class MediaProperties
|
|
12
10
|
*/
|
|
13
11
|
export default class MediaProperties {
|
|
14
|
-
audioTrack:
|
|
12
|
+
audioTrack: LocalMicrophoneTrack | null;
|
|
15
13
|
localQualityLevel: any;
|
|
16
14
|
mediaDirection: any;
|
|
17
15
|
mediaSettings: any;
|
|
@@ -20,9 +18,9 @@ export default class MediaProperties {
|
|
|
20
18
|
remoteQualityLevel: any;
|
|
21
19
|
remoteShare: any;
|
|
22
20
|
remoteVideoTrack: any;
|
|
23
|
-
shareTrack:
|
|
21
|
+
shareTrack: LocalDisplayTrack | null;
|
|
24
22
|
videoDeviceId: any;
|
|
25
|
-
videoTrack:
|
|
23
|
+
videoTrack: LocalCameraTrack | null;
|
|
26
24
|
namespace = MEETINGS;
|
|
27
25
|
|
|
28
26
|
/**
|
|
@@ -32,9 +30,9 @@ export default class MediaProperties {
|
|
|
32
30
|
constructor(options: any = {}) {
|
|
33
31
|
this.webrtcMediaConnection = null;
|
|
34
32
|
this.mediaDirection = options.mediaDirection;
|
|
35
|
-
this.videoTrack = options.videoTrack;
|
|
36
|
-
this.audioTrack = options.audioTrack;
|
|
37
|
-
this.shareTrack = options.shareTrack;
|
|
33
|
+
this.videoTrack = options.videoTrack || null;
|
|
34
|
+
this.audioTrack = options.audioTrack || null;
|
|
35
|
+
this.shareTrack = options.shareTrack || null;
|
|
38
36
|
this.remoteShare = options.remoteShare;
|
|
39
37
|
this.remoteAudioTrack = options.remoteAudioTrack;
|
|
40
38
|
this.remoteVideoTrack = options.remoteVideoTrack;
|
|
@@ -64,11 +62,11 @@ export default class MediaProperties {
|
|
|
64
62
|
this.webrtcMediaConnection = mediaPeerConnection;
|
|
65
63
|
}
|
|
66
64
|
|
|
67
|
-
setLocalVideoTrack(videoTrack) {
|
|
65
|
+
setLocalVideoTrack(videoTrack: LocalCameraTrack | null) {
|
|
68
66
|
this.videoTrack = videoTrack;
|
|
69
67
|
}
|
|
70
68
|
|
|
71
|
-
setLocalAudioTrack(audioTrack) {
|
|
69
|
+
setLocalAudioTrack(audioTrack: LocalMicrophoneTrack | null) {
|
|
72
70
|
this.audioTrack = audioTrack;
|
|
73
71
|
}
|
|
74
72
|
|
|
@@ -76,7 +74,7 @@ export default class MediaProperties {
|
|
|
76
74
|
this.localQualityLevel = localQualityLevel;
|
|
77
75
|
}
|
|
78
76
|
|
|
79
|
-
setLocalShareTrack(shareTrack) {
|
|
77
|
+
setLocalShareTrack(shareTrack: LocalDisplayTrack | null) {
|
|
80
78
|
this.shareTrack = shareTrack;
|
|
81
79
|
}
|
|
82
80
|
|
|
@@ -137,7 +135,9 @@ export default class MediaProperties {
|
|
|
137
135
|
* @returns {void}
|
|
138
136
|
*/
|
|
139
137
|
unsetRemoteStream() {
|
|
140
|
-
LoggerProxy.logger.warn(
|
|
138
|
+
LoggerProxy.logger.warn(
|
|
139
|
+
'Media:properties#unsetRemoteStream --> [DEPRECATION WARNING]: unsetRemoteStream has been deprecated after v1.89.3 (use unsetRemoteTracks instead)'
|
|
140
|
+
);
|
|
141
141
|
// unsets audio and video only
|
|
142
142
|
this.unsetRemoteMedia();
|
|
143
143
|
}
|
|
@@ -166,7 +166,9 @@ export default class MediaProperties {
|
|
|
166
166
|
* @returns {void}
|
|
167
167
|
*/
|
|
168
168
|
unsetRemoteStreams() {
|
|
169
|
-
LoggerProxy.logger.warn(
|
|
169
|
+
LoggerProxy.logger.warn(
|
|
170
|
+
'Media:properties#unsetRemoteStreams --> [DEPRECATION WARNING]: unsetRemoteStreams has been deprecated after v1.89.3 (use unsetRemoteTracks instead)'
|
|
171
|
+
);
|
|
170
172
|
this.unsetRemoteStream();
|
|
171
173
|
this.unsetRemoteShare();
|
|
172
174
|
}
|
|
@@ -191,7 +193,9 @@ export default class MediaProperties {
|
|
|
191
193
|
* @returns {void}
|
|
192
194
|
*/
|
|
193
195
|
unsetMediaStreams() {
|
|
194
|
-
LoggerProxy.logger.warn(
|
|
196
|
+
LoggerProxy.logger.warn(
|
|
197
|
+
'Media:properties#unsetMediaStreams --> [DEPRECATION WARNING]: unsetMediaStreams has been deprecated after v1.89.3 (use unsetMediaTracks instead)'
|
|
198
|
+
);
|
|
195
199
|
this.unsetLocalVideoTrack();
|
|
196
200
|
this.unsetRemoteStream();
|
|
197
201
|
}
|
|
@@ -210,34 +214,35 @@ export default class MediaProperties {
|
|
|
210
214
|
*
|
|
211
215
|
* @returns {Promise<void>}
|
|
212
216
|
*/
|
|
213
|
-
waitForMediaConnectionConnected() {
|
|
214
|
-
const isConnected = () =>
|
|
215
|
-
this.webrtcMediaConnection.getConnectionState() ===
|
|
216
|
-
);
|
|
217
|
+
waitForMediaConnectionConnected(): Promise<void> {
|
|
218
|
+
const isConnected = () =>
|
|
219
|
+
this.webrtcMediaConnection.getConnectionState() === ConnectionState.Connected;
|
|
217
220
|
|
|
218
221
|
if (isConnected()) {
|
|
219
222
|
return Promise.resolve();
|
|
220
223
|
}
|
|
221
224
|
|
|
222
|
-
return new Promise((resolve, reject) => {
|
|
225
|
+
return new Promise<void>((resolve, reject) => {
|
|
223
226
|
let timer;
|
|
224
227
|
|
|
225
228
|
const connectionStateListener = () => {
|
|
226
|
-
LoggerProxy.logger.log(
|
|
229
|
+
LoggerProxy.logger.log(
|
|
230
|
+
`Media:properties#waitForMediaConnectionConnected --> connection state: ${this.webrtcMediaConnection.getConnectionState()}`
|
|
231
|
+
);
|
|
227
232
|
|
|
228
233
|
if (isConnected()) {
|
|
229
234
|
clearTimeout(timer);
|
|
230
|
-
this.webrtcMediaConnection.off(
|
|
235
|
+
this.webrtcMediaConnection.off(Event.CONNECTION_STATE_CHANGED, connectionStateListener);
|
|
231
236
|
resolve();
|
|
232
237
|
}
|
|
233
238
|
};
|
|
234
239
|
|
|
235
240
|
timer = setTimeout(() => {
|
|
236
|
-
this.webrtcMediaConnection.off(
|
|
241
|
+
this.webrtcMediaConnection.off(Event.CONNECTION_STATE_CHANGED, connectionStateListener);
|
|
237
242
|
reject();
|
|
238
243
|
}, PC_BAIL_TIMEOUT);
|
|
239
244
|
|
|
240
|
-
this.webrtcMediaConnection.on(
|
|
245
|
+
this.webrtcMediaConnection.on(Event.CONNECTION_STATE_CHANGED, connectionStateListener);
|
|
241
246
|
});
|
|
242
247
|
}
|
|
243
248
|
|
|
@@ -253,13 +258,12 @@ export default class MediaProperties {
|
|
|
253
258
|
const allStatsReports = [];
|
|
254
259
|
|
|
255
260
|
try {
|
|
256
|
-
// eslint-disable-next-line no-await-in-loop
|
|
257
261
|
const statsResult = await this.webrtcMediaConnection.getStats();
|
|
258
|
-
|
|
259
262
|
statsResult.forEach((report) => allStatsReports.push(report));
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
|
|
263
|
+
} catch (error) {
|
|
264
|
+
LoggerProxy.logger.warn(
|
|
265
|
+
`Media:properties#getCurrentConnectionType --> getStats() failed: ${error}`
|
|
266
|
+
);
|
|
263
267
|
}
|
|
264
268
|
|
|
265
269
|
const successfulCandidatePairs = allStatsReports.filter(
|
|
@@ -270,10 +274,14 @@ export default class MediaProperties {
|
|
|
270
274
|
|
|
271
275
|
// all of the successful pairs should have the same connection type, so just return the type for the first one
|
|
272
276
|
successfulCandidatePairs.some((pair) => {
|
|
273
|
-
const localCandidate = allStatsReports.find(
|
|
277
|
+
const localCandidate = allStatsReports.find(
|
|
278
|
+
(report) => report.type === 'local-candidate' && report.id === pair.localCandidateId
|
|
279
|
+
);
|
|
274
280
|
|
|
275
281
|
if (localCandidate === undefined) {
|
|
276
|
-
LoggerProxy.logger.warn(
|
|
282
|
+
LoggerProxy.logger.warn(
|
|
283
|
+
`Media:properties#getCurrentConnectionType --> failed to find local candidate "${pair.localCandidateId}" in getStats() results`
|
|
284
|
+
);
|
|
277
285
|
|
|
278
286
|
return false;
|
|
279
287
|
}
|
|
@@ -282,8 +290,7 @@ export default class MediaProperties {
|
|
|
282
290
|
|
|
283
291
|
if (localCandidate.relayProtocol) {
|
|
284
292
|
connectionType = `TURN-${localCandidate.relayProtocol.toUpperCase()}`;
|
|
285
|
-
}
|
|
286
|
-
else {
|
|
293
|
+
} else {
|
|
287
294
|
connectionType = localCandidate.protocol?.toUpperCase(); // it will be UDP or TCP
|
|
288
295
|
}
|
|
289
296
|
|