@webex/plugin-meetings 3.0.0-beta.13 → 3.0.0-beta.131
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 +45 -1
- 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 +355 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +193 -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 +994 -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 +203 -53
- 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 +294 -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 +100 -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 +406 -216
- 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 +54 -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 +105 -91
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +55 -165
- 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 +77 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +2603 -2462
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +291 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +292 -138
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +315 -336
- 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 +463 -583
- 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 +305 -286
- 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 +156 -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 +692 -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 +186 -155
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +89 -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 +101 -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 +166 -205
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +120 -85
- 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 +314 -260
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.js +50 -16
- package/dist/metrics/config.js.map +1 -1
- package/dist/metrics/constants.js +4 -7
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +93 -162
- 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 +2 -4
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.js +19 -23
- package/dist/reactions/reactions.type.js.map +1 -1
- 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 +31 -75
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +129 -136
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +143 -103
- 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 +35 -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 +993 -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/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 +147 -0
- package/dist/types/meeting/index.d.ts +1762 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
- package/dist/types/meeting/muteState.d.ts +186 -0
- package/dist/types/meeting/request.d.ts +269 -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 +76 -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 +122 -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 +157 -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 +114 -0
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +210 -0
- package/dist/types/metrics/config.d.ts +195 -0
- package/dist/types/metrics/constants.d.ts +55 -0
- package/dist/types/metrics/index.d.ts +169 -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 +36 -0
- package/dist/types/roap/turnDiscovery.d.ts +91 -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 +42 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +339 -0
- package/src/breakouts/README.md +220 -0
- package/src/breakouts/breakout.ts +163 -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 +860 -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 +153 -7
- 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 +281 -0
- package/src/index.ts +33 -0
- package/src/locus-info/controlsUtils.ts +142 -24
- package/src/locus-info/fullState.ts +15 -11
- package/src/locus-info/hostUtils.ts +4 -3
- package/src/locus-info/index.ts +346 -55
- package/src/locus-info/infoUtils.ts +12 -4
- package/src/locus-info/mediaSharesUtils.ts +52 -4
- package/src/locus-info/parser.ts +46 -68
- package/src/locus-info/selfUtils.ts +195 -56
- package/src/media/index.ts +139 -196
- 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 +159 -3
- package/src/meeting/index.ts +2803 -1584
- package/src/meeting/locusMediaRequest.ts +309 -0
- package/src/meeting/muteState.ts +290 -72
- package/src/meeting/request.ts +247 -178
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/state.ts +45 -30
- package/src/meeting/util.ts +445 -395
- package/src/meeting-info/collection.ts +2 -1
- package/src/meeting-info/index.ts +32 -30
- package/src/meeting-info/meeting-info-v2.ts +235 -116
- package/src/meeting-info/request.ts +9 -3
- package/src/meeting-info/util.ts +54 -46
- package/src/meeting-info/utilv2.ts +71 -55
- package/src/meetings/collection.ts +21 -1
- package/src/meetings/index.ts +772 -437
- package/src/meetings/request.ts +29 -25
- package/src/meetings/util.ts +132 -33
- package/src/member/index.ts +95 -49
- package/src/member/types.ts +24 -0
- package/src/member/util.ts +106 -13
- package/src/members/collection.ts +8 -1
- package/src/members/index.ts +288 -130
- package/src/members/request.ts +144 -31
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +316 -235
- package/src/metrics/config.ts +302 -90
- package/src/metrics/constants.ts +2 -6
- package/src/metrics/index.ts +124 -95
- 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 +8 -8
- package/src/reactions/reactions.type.ts +31 -5
- 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 +53 -53
- package/src/roap/request.ts +77 -64
- package/src/roap/turnDiscovery.ts +101 -48
- 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 +670 -466
- package/test/integration/spec/space-meeting.js +320 -204
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/annotation/index.ts +433 -0
- package/test/unit/spec/breakouts/breakout.ts +203 -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 +1609 -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 +504 -0
- package/test/unit/spec/fixture/locus.js +93 -90
- package/test/unit/spec/locus-info/controlsUtils.js +305 -32
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +636 -5
- 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/mediaSharesUtils.ts +22 -0
- 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 +252 -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 +76 -3
- package/test/unit/spec/meeting/index.js +3112 -921
- package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
- package/test/unit/spec/meeting/muteState.js +421 -94
- package/test/unit/spec/meeting/request.js +421 -79
- package/test/unit/spec/meeting/utils.js +326 -189
- package/test/unit/spec/meeting-info/meetinginfov2.js +481 -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 +1126 -328
- package/test/unit/spec/meetings/utils.js +220 -14
- package/test/unit/spec/member/index.js +24 -1
- package/test/unit/spec/member/util.js +383 -32
- package/test/unit/spec/members/index.js +424 -55
- package/test/unit/spec/members/request.js +228 -40
- package/test/unit/spec/members/utils.js +191 -4
- package/test/unit/spec/metrics/index.js +113 -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 +19 -49
- package/test/unit/spec/roap/request.ts +187 -0
- package/test/unit/spec/roap/turnDiscovery.ts +92 -50
- 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/dist/media/index.js
CHANGED
|
@@ -1,51 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Object$keys = require("@babel/runtime-corejs2/core-js/object/keys");
|
|
4
|
-
|
|
5
4
|
var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
|
|
6
|
-
|
|
7
5
|
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
|
|
8
|
-
|
|
9
6
|
var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
|
|
10
|
-
|
|
11
7
|
var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
|
|
12
|
-
|
|
13
8
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
14
|
-
|
|
15
9
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
16
|
-
|
|
17
10
|
_Object$defineProperty(exports, "__esModule", {
|
|
18
11
|
value: true
|
|
19
12
|
});
|
|
20
|
-
|
|
21
13
|
exports.default = void 0;
|
|
22
|
-
|
|
23
14
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
24
|
-
|
|
25
|
-
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
|
|
26
|
-
|
|
27
15
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
28
|
-
|
|
16
|
+
var _internalMediaCore = require("@webex/internal-media-core");
|
|
29
17
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
30
|
-
|
|
31
18
|
var _constants = require("../constants");
|
|
32
|
-
|
|
33
19
|
var _config = _interopRequireDefault(require("../config"));
|
|
34
|
-
|
|
35
20
|
var _config2 = _interopRequireDefault(require("../common/config"));
|
|
36
|
-
|
|
37
21
|
var _media = _interopRequireDefault(require("../common/errors/media"));
|
|
38
|
-
|
|
39
22
|
var _browserDetection = _interopRequireDefault(require("../common/browser-detection"));
|
|
40
|
-
|
|
41
|
-
var _internalMediaCoreWrapper = require("./internal-media-core-wrapper");
|
|
42
|
-
|
|
43
23
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
44
|
-
|
|
45
24
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
46
|
-
|
|
47
25
|
var _BrowserDetection = (0, _browserDetection.default)(),
|
|
48
|
-
|
|
26
|
+
isBrowser = _BrowserDetection.isBrowser;
|
|
49
27
|
/**
|
|
50
28
|
* MediaDirection
|
|
51
29
|
* @typedef {Object} MediaDirection
|
|
@@ -66,7 +44,6 @@ var _BrowserDetection = (0, _browserDetection.default)(),
|
|
|
66
44
|
* @property isSharing
|
|
67
45
|
* @property {Object} sharePreferences
|
|
68
46
|
*/
|
|
69
|
-
|
|
70
47
|
/**
|
|
71
48
|
*
|
|
72
49
|
* @public
|
|
@@ -75,65 +52,23 @@ var _BrowserDetection = (0, _browserDetection.default)(),
|
|
|
75
52
|
* Handles the quirks of each browser.
|
|
76
53
|
* Extends and enhances adapter.js, i.e., the "media" file from the web client.
|
|
77
54
|
*/
|
|
78
|
-
|
|
79
|
-
|
|
80
55
|
var Media = {};
|
|
81
|
-
/**
|
|
82
|
-
* @param {boolean} enabled
|
|
83
|
-
* @param {MediaStreamTrack} track
|
|
84
|
-
* @returns {Boolean}
|
|
85
|
-
* @public
|
|
86
|
-
*/
|
|
87
56
|
|
|
88
|
-
Media.setLocalTrack = function (enabled, track) {
|
|
89
|
-
if (track) {
|
|
90
|
-
track.enabled = enabled;
|
|
91
|
-
return true;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
return false;
|
|
95
|
-
};
|
|
96
|
-
/**
|
|
97
|
-
* format the media array for send
|
|
98
|
-
* @param {String} mediaId
|
|
99
|
-
* @param {Boolean} audioMuted
|
|
100
|
-
* @param {Boolean} videoMuted
|
|
101
|
-
* @returns {Array} medias
|
|
102
|
-
*/
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
Media.generateLocalMedias = function (mediaId, audioMuted, videoMuted) {
|
|
106
|
-
if (mediaId) {
|
|
107
|
-
return [{
|
|
108
|
-
localSdp: (0, _stringify.default)({
|
|
109
|
-
audioMuted: audioMuted,
|
|
110
|
-
videoMuted: videoMuted
|
|
111
|
-
}),
|
|
112
|
-
mediaId: mediaId
|
|
113
|
-
}];
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return [];
|
|
117
|
-
};
|
|
118
57
|
/**
|
|
119
58
|
* make a browser call to get the media
|
|
120
59
|
* @param {SendOptions} options
|
|
121
60
|
* @param {Object} config SDK Configuration for meetings plugin
|
|
122
61
|
* @returns {Promise}
|
|
123
62
|
*/
|
|
124
|
-
|
|
125
|
-
|
|
126
63
|
Media.getLocalMedia = function (options, config) {
|
|
127
64
|
var sendAudio = options.sendAudio,
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
65
|
+
sendVideo = options.sendVideo,
|
|
66
|
+
sendShare = options.sendShare,
|
|
67
|
+
sharePreferences = options.sharePreferences,
|
|
68
|
+
isSharing = options.isSharing;
|
|
133
69
|
if (sendAudio || sendVideo) {
|
|
134
70
|
return Media.getMedia(sendAudio, sendVideo, config);
|
|
135
71
|
}
|
|
136
|
-
|
|
137
72
|
if (sendShare && !isSharing) {
|
|
138
73
|
return Media.getDisplayMedia({
|
|
139
74
|
sendAudio: false,
|
|
@@ -141,33 +76,32 @@ Media.getLocalMedia = function (options, config) {
|
|
|
141
76
|
sharePreferences: sharePreferences
|
|
142
77
|
}, config);
|
|
143
78
|
}
|
|
144
|
-
|
|
145
79
|
return _promise.default.resolve(undefined);
|
|
146
80
|
};
|
|
81
|
+
|
|
147
82
|
/**
|
|
148
83
|
* creates a webrtc media connection with provided tracks and mediaDirection configuration
|
|
149
84
|
*
|
|
150
85
|
* @param {boolean} isMultistream
|
|
151
86
|
* @param {string} debugId string useful for debugging (will appear in media connection logs)
|
|
152
87
|
* @param {Object} options
|
|
153
|
-
* @param {Object} [options.mediaProperties]
|
|
88
|
+
* @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:
|
|
154
89
|
* audioTrack, videoTrack and shareTrack
|
|
155
90
|
* @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections
|
|
156
91
|
* @param {boolean} [options.enableRtx] applicable only to non-multistream connections
|
|
157
92
|
* @param {boolean} [options.enableExtmap] applicable only to non-multistream connections
|
|
158
93
|
* @param {Object} [options.turnServerInfo]
|
|
159
|
-
* @
|
|
94
|
+
* @param {BundlePolicy} [options.bundlePolicy]
|
|
95
|
+
* @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
|
|
160
96
|
*/
|
|
161
|
-
|
|
162
|
-
|
|
163
97
|
Media.createMediaConnection = function (isMultistream, debugId, options) {
|
|
164
98
|
var mediaProperties = options.mediaProperties,
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
99
|
+
remoteQualityLevel = options.remoteQualityLevel,
|
|
100
|
+
enableRtx = options.enableRtx,
|
|
101
|
+
enableExtmap = options.enableExtmap,
|
|
102
|
+
turnServerInfo = options.turnServerInfo,
|
|
103
|
+
bundlePolicy = options.bundlePolicy;
|
|
169
104
|
var iceServers = [];
|
|
170
|
-
|
|
171
105
|
if (turnServerInfo) {
|
|
172
106
|
iceServers.push({
|
|
173
107
|
urls: turnServerInfo.url,
|
|
@@ -175,22 +109,26 @@ Media.createMediaConnection = function (isMultistream, debugId, options) {
|
|
|
175
109
|
credential: turnServerInfo.password || ''
|
|
176
110
|
});
|
|
177
111
|
}
|
|
178
|
-
|
|
179
112
|
if (isMultistream) {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
113
|
+
var _mediaProperties$medi, _mediaProperties$medi2, _mediaProperties$medi3, _mediaProperties$medi4;
|
|
114
|
+
var config = {
|
|
115
|
+
iceServers: iceServers,
|
|
116
|
+
enableMainAudio: ((_mediaProperties$medi = mediaProperties.mediaDirection) === null || _mediaProperties$medi === void 0 ? void 0 : _mediaProperties$medi.sendAudio) || ((_mediaProperties$medi2 = mediaProperties.mediaDirection) === null || _mediaProperties$medi2 === void 0 ? void 0 : _mediaProperties$medi2.receiveAudio),
|
|
117
|
+
enableMainVideo: ((_mediaProperties$medi3 = mediaProperties.mediaDirection) === null || _mediaProperties$medi3 === void 0 ? void 0 : _mediaProperties$medi3.sendVideo) || ((_mediaProperties$medi4 = mediaProperties.mediaDirection) === null || _mediaProperties$medi4 === void 0 ? void 0 : _mediaProperties$medi4.receiveVideo)
|
|
118
|
+
};
|
|
119
|
+
if (bundlePolicy) {
|
|
120
|
+
config.bundlePolicy = bundlePolicy;
|
|
121
|
+
}
|
|
122
|
+
return new _internalMediaCore.MultistreamRoapMediaConnection(config, debugId);
|
|
183
123
|
}
|
|
184
|
-
|
|
185
124
|
if (!mediaProperties) {
|
|
186
125
|
throw new Error('mediaProperties have to be provided for non-multistream media connections');
|
|
187
126
|
}
|
|
188
|
-
|
|
189
127
|
var mediaDirection = mediaProperties.mediaDirection,
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
return new
|
|
128
|
+
audioTrack = mediaProperties.audioTrack,
|
|
129
|
+
videoTrack = mediaProperties.videoTrack,
|
|
130
|
+
shareTrack = mediaProperties.shareTrack;
|
|
131
|
+
return new _internalMediaCore.RoapMediaConnection({
|
|
194
132
|
iceServers: iceServers,
|
|
195
133
|
skipInactiveTransceivers: false,
|
|
196
134
|
requireH264: true,
|
|
@@ -206,13 +144,12 @@ Media.createMediaConnection = function (isMultistream, debugId, options) {
|
|
|
206
144
|
// it's always been hardcoded in SDK so for now keeping it that way
|
|
207
145
|
disableExtmap: !enableExtmap,
|
|
208
146
|
disableRtx: !enableRtx // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP
|
|
209
|
-
|
|
210
147
|
}
|
|
211
148
|
}, {
|
|
212
149
|
send: {
|
|
213
|
-
audio: audioTrack,
|
|
214
|
-
video: videoTrack,
|
|
215
|
-
screenShareVideo: shareTrack
|
|
150
|
+
audio: audioTrack === null || audioTrack === void 0 ? void 0 : audioTrack.underlyingTrack,
|
|
151
|
+
video: videoTrack === null || videoTrack === void 0 ? void 0 : videoTrack.underlyingTrack,
|
|
152
|
+
screenShareVideo: shareTrack === null || shareTrack === void 0 ? void 0 : shareTrack.underlyingTrack
|
|
216
153
|
},
|
|
217
154
|
receive: {
|
|
218
155
|
audio: mediaDirection.receiveAudio,
|
|
@@ -222,6 +159,7 @@ Media.createMediaConnection = function (isMultistream, debugId, options) {
|
|
|
222
159
|
}
|
|
223
160
|
}, debugId);
|
|
224
161
|
};
|
|
162
|
+
|
|
225
163
|
/**
|
|
226
164
|
* generates share streams
|
|
227
165
|
* @param {Object} options parameter
|
|
@@ -234,29 +172,26 @@ Media.createMediaConnection = function (isMultistream, debugId, options) {
|
|
|
234
172
|
* @param {Object} config SDK Configuration for meetings plugin
|
|
235
173
|
* @returns {Promise.<MediaStream>}
|
|
236
174
|
*/
|
|
237
|
-
|
|
238
|
-
|
|
239
175
|
Media.getDisplayMedia = function (options) {
|
|
240
176
|
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
241
177
|
// SDK screen share resolution settings from Webex.init
|
|
242
|
-
var customResolution = config.screenResolution || {};
|
|
243
|
-
|
|
244
|
-
var customShareFrameRate = config.screenFrameRate || null;
|
|
245
|
-
|
|
178
|
+
var customResolution = config.screenResolution || {};
|
|
179
|
+
// user defined screen share frame rate
|
|
180
|
+
var customShareFrameRate = config.screenFrameRate || null;
|
|
181
|
+
// user defined share preferences
|
|
246
182
|
var hasSharePreferences = options.sharePreferences;
|
|
247
183
|
var hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;
|
|
248
184
|
var hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;
|
|
249
185
|
var _Config$meetings = _config.default.meetings,
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
186
|
+
screenResolution = _Config$meetings.screenResolution,
|
|
187
|
+
resolution = _Config$meetings.resolution,
|
|
188
|
+
videoShareFrameRate = _Config$meetings.videoShareFrameRate,
|
|
189
|
+
screenFrameRate = _Config$meetings.screenFrameRate,
|
|
190
|
+
aspectRatio = _Config$meetings.aspectRatio;
|
|
255
191
|
var shareConstraints = {
|
|
256
192
|
cursor: _constants.MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,
|
|
257
193
|
aspectRatio: aspectRatio
|
|
258
194
|
};
|
|
259
|
-
|
|
260
195
|
if (hasCustomConstraints) {
|
|
261
196
|
shareConstraints = hasSharePreferences.shareConstraints;
|
|
262
197
|
} else if (hasHighFrameRate) {
|
|
@@ -271,14 +206,15 @@ Media.getDisplayMedia = function (options) {
|
|
|
271
206
|
height: customResolution.idealHeight || screenResolution.idealHeight,
|
|
272
207
|
width: customResolution.idealWidth || screenResolution.idealWidth
|
|
273
208
|
}, config.screenResolution);
|
|
274
|
-
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// chrome and webkit based browsers (edge, safari) automatically adjust everything
|
|
275
212
|
// and we have noticed higher quality with those browser types
|
|
276
213
|
// firefox specifically has some issues with resolution and frame rate decision making
|
|
277
214
|
// so we are making it optional and configurable (with defaults) for firefox
|
|
278
215
|
// to have higher quality, and for developers to control the values
|
|
279
216
|
// eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox
|
|
280
217
|
|
|
281
|
-
|
|
282
218
|
if (isBrowser('firefox')) {
|
|
283
219
|
var mediaConfig = {
|
|
284
220
|
audio: options.sendAudio,
|
|
@@ -294,22 +230,21 @@ Media.getDisplayMedia = function (options) {
|
|
|
294
230
|
// https://bugzilla.mozilla.org/show_bug.cgi?id=1321221
|
|
295
231
|
stream.getVideoTracks()[0].applyConstraints(shareConstraints);
|
|
296
232
|
}
|
|
297
|
-
|
|
298
233
|
return stream;
|
|
299
234
|
});
|
|
300
235
|
}
|
|
301
|
-
|
|
302
236
|
var getDisplayMediaParams = {
|
|
303
237
|
video: options.sendShare ? shareConstraints : false
|
|
304
|
-
};
|
|
305
|
-
// https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia
|
|
238
|
+
};
|
|
306
239
|
|
|
240
|
+
// safari doesn't support sending screen share audio
|
|
241
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia
|
|
307
242
|
if (options.sendAudio && isBrowser('safari')) {
|
|
308
243
|
getDisplayMediaParams.audio = options.sendAudio;
|
|
309
244
|
}
|
|
310
|
-
|
|
311
245
|
return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);
|
|
312
246
|
};
|
|
247
|
+
|
|
313
248
|
/**
|
|
314
249
|
* generates audio and video using constraints (often called after getSupportedDevices)
|
|
315
250
|
* @param {Object|Boolean} audio gum constraints
|
|
@@ -317,8 +252,6 @@ Media.getDisplayMedia = function (options) {
|
|
|
317
252
|
* @param {Object} config SDK Configuration for meetings plugin
|
|
318
253
|
* @returns {Object} {streams}
|
|
319
254
|
*/
|
|
320
|
-
|
|
321
|
-
|
|
322
255
|
Media.getMedia = function (audio, video, config) {
|
|
323
256
|
var defaultWidth = {
|
|
324
257
|
ideal: config.resolution.idealWidth,
|
|
@@ -346,16 +279,15 @@ Media.getMedia = function (audio, video, config) {
|
|
|
346
279
|
facingMode: video.facingMode ? video.facingMode : undefined
|
|
347
280
|
} : false,
|
|
348
281
|
fake: process.env.NODE_ENV === 'test' // Special case to get fake media for Firefox browser for testing
|
|
349
|
-
|
|
350
282
|
};
|
|
283
|
+
|
|
351
284
|
return navigator.mediaDevices.getUserMedia(mediaConfig).catch(function (err) {
|
|
352
285
|
var logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';
|
|
353
|
-
|
|
354
286
|
_loggerProxy.default.logger.error("".concat(logPath, " failed - ").concat(err, " (").concat(err.constraint, ")"));
|
|
355
|
-
|
|
356
287
|
throw err;
|
|
357
288
|
});
|
|
358
289
|
};
|
|
290
|
+
|
|
359
291
|
/**
|
|
360
292
|
* Checks if the machine has at least one audio or video device (Dont use this for screen share)
|
|
361
293
|
* @param {object} [options]
|
|
@@ -368,11 +300,9 @@ Media.getMedia = function (audio, video, config) {
|
|
|
368
300
|
* sendVideo: true/false
|
|
369
301
|
*}
|
|
370
302
|
*/
|
|
371
|
-
|
|
372
|
-
|
|
373
303
|
Media.getSupportedDevice = function (_ref) {
|
|
374
304
|
var sendAudio = _ref.sendAudio,
|
|
375
|
-
|
|
305
|
+
sendVideo = _ref.sendVideo;
|
|
376
306
|
return _promise.default.resolve().then(function () {
|
|
377
307
|
if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {
|
|
378
308
|
return {
|
|
@@ -380,7 +310,6 @@ Media.getSupportedDevice = function (_ref) {
|
|
|
380
310
|
sendVideo: false
|
|
381
311
|
};
|
|
382
312
|
}
|
|
383
|
-
|
|
384
313
|
return navigator.mediaDevices.enumerateDevices().then(function (devices) {
|
|
385
314
|
var supported = {
|
|
386
315
|
audio: devices.filter(function (device) {
|
|
@@ -397,40 +326,35 @@ Media.getSupportedDevice = function (_ref) {
|
|
|
397
326
|
});
|
|
398
327
|
});
|
|
399
328
|
};
|
|
329
|
+
|
|
400
330
|
/**
|
|
401
331
|
* proxy to browser navigator.mediaDevices.enumerateDevices()
|
|
402
332
|
* @returns {Promise}
|
|
403
333
|
*/
|
|
404
|
-
|
|
405
|
-
|
|
406
334
|
Media.getDevices = function () {
|
|
407
335
|
if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {
|
|
408
336
|
return navigator.mediaDevices.enumerateDevices();
|
|
409
337
|
}
|
|
410
|
-
|
|
411
338
|
return _promise.default.reject(new _media.default('enumerateDevices not supported.'));
|
|
412
339
|
};
|
|
340
|
+
|
|
413
341
|
/**
|
|
414
342
|
*
|
|
415
343
|
* Toggle a specific stream
|
|
416
344
|
* noop as of now, does nothing
|
|
417
345
|
* @returns {null}
|
|
418
346
|
*/
|
|
419
|
-
|
|
420
|
-
|
|
421
347
|
Media.toggleStream = function () {};
|
|
348
|
+
|
|
422
349
|
/**
|
|
423
350
|
* Stop input stream
|
|
424
351
|
* @param {MediaTrack} track A media stream
|
|
425
352
|
* @returns {null}
|
|
426
353
|
*/
|
|
427
|
-
|
|
428
|
-
|
|
429
354
|
Media.stopTracks = function (track) {
|
|
430
355
|
if (!track) {
|
|
431
356
|
return _promise.default.resolve();
|
|
432
357
|
}
|
|
433
|
-
|
|
434
358
|
return _promise.default.resolve().then(function () {
|
|
435
359
|
if (track && track.stop) {
|
|
436
360
|
try {
|
|
@@ -441,38 +365,7 @@ Media.stopTracks = function (track) {
|
|
|
441
365
|
}
|
|
442
366
|
});
|
|
443
367
|
};
|
|
444
|
-
/**
|
|
445
|
-
*
|
|
446
|
-
* Stop input stream
|
|
447
|
-
* @param {Stream} stream A media stream
|
|
448
|
-
* @returns {null}
|
|
449
|
-
* @deprecated after v1.89.3
|
|
450
|
-
*/
|
|
451
|
-
|
|
452
368
|
|
|
453
|
-
Media.stopStream = function (stream) {
|
|
454
|
-
_loggerProxy.default.logger.warn('Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3');
|
|
455
|
-
|
|
456
|
-
if (!stream) {
|
|
457
|
-
return _promise.default.resolve();
|
|
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
|
-
|
|
465
|
-
|
|
466
|
-
return _promise.default.resolve().then(function () {
|
|
467
|
-
if (stream.getTracks) {
|
|
468
|
-
stream.getTracks().forEach(function (track) {
|
|
469
|
-
track.stop();
|
|
470
|
-
});
|
|
471
|
-
} else if (stream.stop) {
|
|
472
|
-
stream.stop();
|
|
473
|
-
}
|
|
474
|
-
});
|
|
475
|
-
};
|
|
476
369
|
/**
|
|
477
370
|
* generates streams for audio video and share
|
|
478
371
|
* @param {object} mediaSetting parameter
|
|
@@ -489,8 +382,6 @@ Media.stopStream = function (stream) {
|
|
|
489
382
|
* @param {Object} config SDK Config
|
|
490
383
|
* @returns {Array} [localStream, shareStream]
|
|
491
384
|
*/
|
|
492
|
-
|
|
493
|
-
|
|
494
385
|
Media.getUserMedia = function (mediaSetting, audioVideo, sharePreferences, config) {
|
|
495
386
|
return Media.getLocalMedia({
|
|
496
387
|
sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,
|
|
@@ -505,7 +396,6 @@ Media.getUserMedia = function (mediaSetting, audioVideo, sharePreferences, confi
|
|
|
505
396
|
});
|
|
506
397
|
});
|
|
507
398
|
};
|
|
508
|
-
|
|
509
399
|
var _default = Media;
|
|
510
400
|
exports.default = _default;
|
|
511
401
|
//# sourceMappingURL=index.js.map
|
package/dist/media/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BrowserDetection","isBrowser","Media","setLocalTrack","enabled","track","generateLocalMedias","mediaId","audioMuted","videoMuted","localSdp","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","resolve","undefined","createMediaConnection","isMultistream","debugId","mediaProperties","remoteQualityLevel","enableRtx","enableExtmap","turnServerInfo","iceServers","push","urls","url","username","credential","password","MultistreamRoapMediaConnection","Error","mediaDirection","audioTrack","videoTrack","shareTrack","RoapMediaConnection","skipInactiveTransceivers","requireH264","sdpMunging","convertPort9to0","addContentSlides","bandwidthLimits","audio","StaticConfig","meetings","bandwidth","video","startBitrate","periodicKeyframes","disableExtmap","disableRtx","send","screenShareVideo","receive","receiveAudio","receiveVideo","receiveShare","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","Config","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","navigator","mediaDevices","then","stream","getVideoTracks","length","applyConstraints","getDisplayMediaParams","defaultWidth","ideal","max","maxWidth","defaultHeight","maxHeight","deviceId","facingMode","fake","process","env","NODE_ENV","getUserMedia","catch","err","logPath","LoggerProxy","logger","error","constraint","getSupportedDevice","enumerateDevices","devices","supported","filter","device","kind","AUDIO_INPUT","VIDEO_INPUT","getDevices","reject","MediaError","toggleStream","stopTracks","stop","e","readyState","stopStream","warn","getTracks","forEach","mediaSetting","audioVideo","localStream","shareStream"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n/* globals navigator */\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {\n AUDIO_INPUT,\n VIDEO_INPUT,\n MEDIA_TRACK_CONSTRAINT,\n} from '../constants';\nimport Config from '../config';\nimport StaticConfig from '../common/config';\nimport MediaError from '../common/errors/media';\nimport BrowserDetection from '../common/browser-detection';\n\nimport {RoapMediaConnection, MultistreamRoapMediaConnection} from './internal-media-core-wrapper';\n\nconst {isBrowser} = BrowserDetection();\n\n/**\n * MediaDirection\n * @typedef {Object} MediaDirection\n * @property {boolean} sendAudio\n * @property {boolean} receiveAudio\n * @property {boolean} sendVideo\n * @property {boolean} receiveVideo\n * @property {boolean} sendShare\n * @property {boolean} receiveShare\n */\n\n/**\n * SendOptions\n * @typedef {Object} SendOptions\n * @property sendAudio\n * @property sendVideo\n * @property sendShare\n * @property isSharing\n * @property {Object} sharePreferences\n */\n/**\n *\n * @public\n * @export\n * Mimic browser APIs as \"the ultimate browser\".\n * Handles the quirks of each browser.\n * Extends and enhances adapter.js, i.e., the \"media\" file from the web client.\n */\nconst Media: any = {};\n\n/**\n * @param {boolean} enabled\n * @param {MediaStreamTrack} track\n * @returns {Boolean}\n * @public\n */\nMedia.setLocalTrack = (enabled: boolean, track: MediaStreamTrack) => {\n if (track) {\n track.enabled = enabled;\n\n return true;\n }\n\n return false;\n};\n\n/**\n * format the media array for send\n * @param {String} mediaId\n * @param {Boolean} audioMuted\n * @param {Boolean} videoMuted\n * @returns {Array} medias\n */\nMedia.generateLocalMedias = (mediaId: string, audioMuted: boolean, videoMuted: boolean) => {\n if (mediaId) {\n return [\n {\n localSdp: JSON.stringify({\n audioMuted,\n videoMuted\n }),\n mediaId\n }\n ];\n }\n\n return [];\n};\n\n/**\n * make a browser call to get the media\n * @param {SendOptions} options\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise}\n */\nMedia.getLocalMedia = (options: any, config: object) => {\n const {\n sendAudio, sendVideo, sendShare, sharePreferences, isSharing\n } = options;\n\n if (sendAudio || sendVideo) {\n return Media.getMedia(sendAudio, sendVideo, config);\n }\n\n if (sendShare && !isSharing) {\n return Media.getDisplayMedia(\n {\n sendAudio: false,\n sendShare: true,\n sharePreferences\n },\n config\n );\n }\n\n return Promise.resolve(undefined);\n};\n\n/**\n * creates a webrtc media connection with provided tracks and mediaDirection configuration\n *\n * @param {boolean} isMultistream\n * @param {string} debugId string useful for debugging (will appear in media connection logs)\n * @param {Object} options\n * @param {Object} [options.mediaProperties] only applicable to non-multistream connections, contains mediaDirection and local tracks:\n * audioTrack, videoTrack and shareTrack\n * @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections\n * @param {boolean} [options.enableRtx] applicable only to non-multistream connections\n * @param {boolean} [options.enableExtmap] applicable only to non-multistream connections\n * @param {Object} [options.turnServerInfo]\n * @returns {RoapMediaConnection}\n */\nMedia.createMediaConnection = (\n isMultistream: boolean,\n debugId: string,\n options: {\n mediaProperties?: {\n mediaDirection?: {\n receiveAudio: boolean,\n receiveVideo: boolean,\n receiveShare: boolean,\n },\n audioTrack?: MediaStreamTrack,\n videoTrack?: MediaStreamTrack,\n shareTrack?: MediaStreamTrack\n },\n remoteQualityLevel?: 'LOW'|'MEDIUM'|'HIGH',\n enableRtx?: boolean,\n enableExtmap?: boolean,\n turnServerInfo?: {\n url: string,\n username: string,\n password: string\n }\n }\n) => {\n const {\n mediaProperties,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n turnServerInfo\n } = options;\n\n const iceServers = [];\n\n if (turnServerInfo) {\n iceServers.push({\n urls: turnServerInfo.url,\n username: turnServerInfo.username || '',\n credential: turnServerInfo.password || ''\n });\n }\n\n if (isMultistream) {\n return new MultistreamRoapMediaConnection({\n iceServers,\n }, debugId);\n }\n\n if (!mediaProperties) {\n throw new Error('mediaProperties have to be provided for non-multistream media connections');\n }\n\n const {\n mediaDirection,\n audioTrack,\n videoTrack,\n shareTrack\n } = mediaProperties;\n\n\n return new RoapMediaConnection({\n iceServers,\n skipInactiveTransceivers: false,\n requireH264: true,\n sdpMunging: {\n convertPort9to0: false,\n addContentSlides: true,\n bandwidthLimits: {\n audio: StaticConfig.meetings.bandwidth.audio,\n video: StaticConfig.meetings.bandwidth.video,\n },\n startBitrate: StaticConfig.meetings.bandwidth.startBitrate,\n periodicKeyframes: 20, // it's always been hardcoded in SDK so for now keeping it that way\n disableExtmap: !enableExtmap,\n disableRtx: !enableRtx, // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP\n }\n }, {\n send: {\n audio: audioTrack,\n video: videoTrack,\n screenShareVideo: shareTrack\n },\n receive: {\n audio: mediaDirection.receiveAudio,\n video: mediaDirection.receiveVideo,\n screenShareVideo: mediaDirection.receiveShare,\n remoteQualityLevel\n }\n }, debugId);\n};\n\n/**\n * generates share streams\n * @param {Object} options parameter\n * @param {Boolean} options.sendAudio send audio from the display share\n * @param {Boolean} options.sendShare send video from the display share\n * @param {Object} options.sharePreferences\n * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}\n * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise.<MediaStream>}\n */\nMedia.getDisplayMedia = (\n options: {\n sendAudio: boolean;\n sendShare: boolean;\n sharePreferences: {\n shareConstraints: MediaTrackConstraints;\n highFrameRate: any;\n };\n },\n config: any = {}\n) => {\n // SDK screen share resolution settings from Webex.init\n const customResolution = config.screenResolution || {};\n // user defined screen share frame rate\n const customShareFrameRate = config.screenFrameRate || null;\n // user defined share preferences\n const hasSharePreferences = options.sharePreferences;\n const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;\n const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;\n const {\n screenResolution,\n resolution,\n videoShareFrameRate,\n screenFrameRate,\n aspectRatio\n } = Config.meetings;\n\n let shareConstraints: any = {\n cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,\n aspectRatio\n };\n\n if (hasCustomConstraints) {\n shareConstraints = hasSharePreferences.shareConstraints;\n }\n else if (hasHighFrameRate) {\n shareConstraints = {\n ...shareConstraints,\n frameRate: videoShareFrameRate,\n height: resolution.idealHeight,\n width: resolution.idealWidth,\n ...config.resolution\n };\n }\n else {\n shareConstraints = {\n ...shareConstraints,\n frameRate: customShareFrameRate || screenFrameRate,\n height: customResolution.idealHeight || screenResolution.idealHeight,\n width: customResolution.idealWidth || screenResolution.idealWidth,\n ...config.screenResolution\n };\n }\n\n // chrome and webkit based browsers (edge, safari) automatically adjust everything\n // and we have noticed higher quality with those browser types\n // firefox specifically has some issues with resolution and frame rate decision making\n // so we are making it optional and configurable (with defaults) for firefox\n // to have higher quality, and for developers to control the values\n // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox\n\n\n if (isBrowser('firefox')) {\n const mediaConfig: any = {\n audio: options.sendAudio,\n video: options.sendShare\n };\n\n\n return navigator.mediaDevices.getDisplayMedia({audio: options.sendAudio, video: mediaConfig})\n .then((stream) => {\n if (options.sendShare && stream.getVideoTracks().length > 0) {\n // Firefox has a bug with the spec where changing in the height and width only happens\n // after we get the inital tracks\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1321221\n stream.getVideoTracks()[0].applyConstraints(shareConstraints);\n }\n\n\n return stream;\n });\n }\n\n const getDisplayMediaParams: any = {video: options.sendShare ? shareConstraints : false};\n\n // safari doesn't support sending screen share audio\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia\n if (options.sendAudio && isBrowser('safari')) {\n getDisplayMediaParams.audio = options.sendAudio;\n }\n\n return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);\n};\n\n/**\n * generates audio and video using constraints (often called after getSupportedDevices)\n * @param {Object|Boolean} audio gum constraints\n * @param {Object|Boolean} video gum constraints\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Object} {streams}\n */\nMedia.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {\n const defaultWidth = {ideal: config.resolution.idealWidth, max: config.resolution.maxWidth};\n const defaultHeight = {ideal: config.resolution.idealHeight, max: config.resolution.maxHeight};\n const mediaConfig = {\n audio,\n // TODO: Remove temporary workaround once Firefox fixes low constraint issues\n // eslint-disable-next-line no-nested-ternary\n video: video ?\n isBrowser('firefox') && video.width && video.width.max === 320 ?\n {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: 320,\n height: 180,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n } :\n {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: video.width ? video.width : defaultWidth,\n height: video.height ? video.height : defaultHeight,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n } :\n false,\n fake: process.env.NODE_ENV === 'test' // Special case to get fake media for Firefox browser for testing\n };\n\n return navigator.mediaDevices\n .getUserMedia(mediaConfig)\n .catch((err) => {\n const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';\n\n LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);\n throw err;\n });\n};\n\n/**\n * Checks if the machine has at least one audio or video device (Dont use this for screen share)\n * @param {object} [options]\n * {\n * sendAudio: true/false,\n * sendVideo: true/false\n * }\n * @returns {Object} {\n * sendAudio: true/false,\n * sendVideo: true/false\n *}\n */\nMedia.getSupportedDevice = ({ sendAudio, sendVideo }: { sendAudio: boolean; sendVideo: boolean }) =>\n Promise.resolve().then(() => {\n if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {\n return {\n sendAudio: false,\n sendVideo: false\n };\n }\n\n return navigator.mediaDevices.enumerateDevices().then((devices) => {\n const supported = {\n audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,\n video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0\n };\n\n return {\n sendAudio: supported.audio && sendAudio,\n sendVideo: supported.video && sendVideo\n };\n });\n });\n\n/**\n * proxy to browser navigator.mediaDevices.enumerateDevices()\n * @returns {Promise}\n */\nMedia.getDevices = () => {\n if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices();\n }\n\n return Promise.reject(new MediaError('enumerateDevices not supported.'));\n};\n\n/**\n *\n * Toggle a specific stream\n * noop as of now, does nothing\n * @returns {null}\n */\nMedia.toggleStream = () => {};\n\n/**\n * Stop input stream\n * @param {MediaTrack} track A media stream\n * @returns {null}\n */\nMedia.stopTracks = (track: any) => {\n if (!track) {\n return Promise.resolve();\n }\n\n return Promise.resolve().then(() => {\n if (track && track.stop) {\n try {\n track.stop();\n }\n catch (e) {\n LoggerProxy.logger.error(`Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`);\n }\n }\n });\n};\n\n/**\n *\n * Stop input stream\n * @param {Stream} stream A media stream\n * @returns {null}\n * @deprecated after v1.89.3\n */\nMedia.stopStream = (stream: any) => {\n LoggerProxy.logger.warn('Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3');\n if (!stream) {\n return Promise.resolve();\n }\n\n /*\n * To release local media\n * 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)\n * 2) Firefox requires the stream to be stopped\n */\n return Promise.resolve().then(() => {\n if (stream.getTracks) {\n stream.getTracks().forEach((track) => {\n track.stop();\n });\n }\n else if (stream.stop) {\n stream.stop();\n }\n });\n};\n\n/**\n * generates streams for audio video and share\n * @param {object} mediaSetting parameter\n * @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints\n * @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints\n * @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints\n * @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints\n * @param {Object} audioVideo parameter\n * @param {Object} audioVideo.audio {deviceId: {String}}\n * @param {Object} audioVideo.video {deviceId: {String}}\n * @param {Object} sharePreferences parameter\n * @param {Object} sharePreferences.shareConstraints parameter\n * @param {Boolean} sharePreferences.highFrameRate parameter\n * @param {Object} config SDK Config\n * @returns {Array} [localStream, shareStream]\n */\nMedia.getUserMedia = (\n mediaSetting: {\n sendAudio: object;\n sendVideo: object;\n sendShare: object;\n isSharing: object;\n },\n audioVideo: {\n audio: object;\n video: object;\n },\n sharePreferences: {\n shareConstraints: object;\n highFrameRate: boolean;\n },\n config: object\n) =>\nMedia.getLocalMedia({\n sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,\n sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false\n}, config).then((localStream) => Media.getLocalMedia({\n sendShare: mediaSetting.sendShare,\n isSharing: mediaSetting.isSharing,\n sharePreferences\n}, config).then((shareStream) => [localStream, shareStream]));\n\nexport default Media;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["BrowserDetection","isBrowser","Media","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","resolve","undefined","createMediaConnection","isMultistream","debugId","mediaProperties","remoteQualityLevel","enableRtx","enableExtmap","turnServerInfo","bundlePolicy","iceServers","push","urls","url","username","credential","password","enableMainAudio","mediaDirection","receiveAudio","enableMainVideo","receiveVideo","MultistreamRoapMediaConnection","Error","audioTrack","videoTrack","shareTrack","RoapMediaConnection","skipInactiveTransceivers","requireH264","sdpMunging","convertPort9to0","addContentSlides","bandwidthLimits","audio","StaticConfig","meetings","bandwidth","video","startBitrate","periodicKeyframes","disableExtmap","disableRtx","send","underlyingTrack","screenShareVideo","receive","receiveShare","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","Config","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","navigator","mediaDevices","then","stream","getVideoTracks","length","applyConstraints","getDisplayMediaParams","defaultWidth","ideal","max","maxWidth","defaultHeight","maxHeight","deviceId","facingMode","fake","process","env","NODE_ENV","getUserMedia","catch","err","logPath","LoggerProxy","logger","error","constraint","getSupportedDevice","enumerateDevices","devices","supported","filter","device","kind","AUDIO_INPUT","VIDEO_INPUT","getDevices","reject","MediaError","toggleStream","stopTracks","track","stop","e","readyState","mediaSetting","audioVideo","localStream","shareStream"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n/* globals navigator */\n\nimport {RoapMediaConnection, MultistreamRoapMediaConnection} from '@webex/internal-media-core';\nimport {LocalCameraTrack, LocalDisplayTrack, LocalMicrophoneTrack} from '@webex/media-helpers';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {AUDIO_INPUT, VIDEO_INPUT, MEDIA_TRACK_CONSTRAINT} from '../constants';\nimport Config from '../config';\nimport StaticConfig from '../common/config';\nimport MediaError from '../common/errors/media';\nimport BrowserDetection from '../common/browser-detection';\n\nconst {isBrowser} = BrowserDetection();\n\ntype MultistreamConnectionConfig = ConstructorParameters<typeof MultistreamRoapMediaConnection>[0];\n\nexport type BundlePolicy = ConstructorParameters<\n typeof MultistreamRoapMediaConnection\n>[0]['bundlePolicy'];\n\n/**\n * MediaDirection\n * @typedef {Object} MediaDirection\n * @property {boolean} sendAudio\n * @property {boolean} receiveAudio\n * @property {boolean} sendVideo\n * @property {boolean} receiveVideo\n * @property {boolean} sendShare\n * @property {boolean} receiveShare\n */\n\n/**\n * SendOptions\n * @typedef {Object} SendOptions\n * @property sendAudio\n * @property sendVideo\n * @property sendShare\n * @property isSharing\n * @property {Object} sharePreferences\n */\n/**\n *\n * @public\n * @export\n * Mimic browser APIs as \"the ultimate browser\".\n * Handles the quirks of each browser.\n * Extends and enhances adapter.js, i.e., the \"media\" file from the web client.\n */\nconst Media: any = {};\n\n/**\n * make a browser call to get the media\n * @param {SendOptions} options\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise}\n */\nMedia.getLocalMedia = (options: any, config: object) => {\n const {sendAudio, sendVideo, sendShare, sharePreferences, isSharing} = options;\n\n if (sendAudio || sendVideo) {\n return Media.getMedia(sendAudio, sendVideo, config);\n }\n\n if (sendShare && !isSharing) {\n return Media.getDisplayMedia(\n {\n sendAudio: false,\n sendShare: true,\n sharePreferences,\n },\n config\n );\n }\n\n return Promise.resolve(undefined);\n};\n\n/**\n * creates a webrtc media connection with provided tracks and mediaDirection configuration\n *\n * @param {boolean} isMultistream\n * @param {string} debugId string useful for debugging (will appear in media connection logs)\n * @param {Object} options\n * @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:\n * audioTrack, videoTrack and shareTrack\n * @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections\n * @param {boolean} [options.enableRtx] applicable only to non-multistream connections\n * @param {boolean} [options.enableExtmap] applicable only to non-multistream connections\n * @param {Object} [options.turnServerInfo]\n * @param {BundlePolicy} [options.bundlePolicy]\n * @returns {RoapMediaConnection | MultistreamRoapMediaConnection}\n */\nMedia.createMediaConnection = (\n isMultistream: boolean,\n debugId: string,\n options: {\n mediaProperties: {\n mediaDirection?: {\n receiveAudio: boolean;\n receiveVideo: boolean;\n receiveShare: boolean;\n sendAudio: boolean;\n sendVideo: boolean;\n sendShare: boolean;\n };\n audioTrack?: LocalMicrophoneTrack;\n videoTrack?: LocalCameraTrack;\n shareTrack?: LocalDisplayTrack;\n };\n remoteQualityLevel?: 'LOW' | 'MEDIUM' | 'HIGH';\n enableRtx?: boolean;\n enableExtmap?: boolean;\n turnServerInfo?: {\n url: string;\n username: string;\n password: string;\n };\n bundlePolicy?: BundlePolicy;\n }\n) => {\n const {\n mediaProperties,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n turnServerInfo,\n bundlePolicy,\n } = options;\n\n const iceServers = [];\n\n if (turnServerInfo) {\n iceServers.push({\n urls: turnServerInfo.url,\n username: turnServerInfo.username || '',\n credential: turnServerInfo.password || '',\n });\n }\n\n if (isMultistream) {\n const config: MultistreamConnectionConfig = {\n iceServers,\n enableMainAudio:\n mediaProperties.mediaDirection?.sendAudio || mediaProperties.mediaDirection?.receiveAudio,\n enableMainVideo:\n mediaProperties.mediaDirection?.sendVideo || mediaProperties.mediaDirection?.receiveVideo,\n };\n\n if (bundlePolicy) {\n config.bundlePolicy = bundlePolicy;\n }\n\n return new MultistreamRoapMediaConnection(config, debugId);\n }\n\n if (!mediaProperties) {\n throw new Error('mediaProperties have to be provided for non-multistream media connections');\n }\n\n const {mediaDirection, audioTrack, videoTrack, shareTrack} = mediaProperties;\n\n return new RoapMediaConnection(\n {\n iceServers,\n skipInactiveTransceivers: false,\n requireH264: true,\n sdpMunging: {\n convertPort9to0: false,\n addContentSlides: true,\n bandwidthLimits: {\n audio: StaticConfig.meetings.bandwidth.audio,\n video: StaticConfig.meetings.bandwidth.video,\n },\n startBitrate: StaticConfig.meetings.bandwidth.startBitrate,\n periodicKeyframes: 20, // it's always been hardcoded in SDK so for now keeping it that way\n disableExtmap: !enableExtmap,\n disableRtx: !enableRtx, // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP\n },\n },\n {\n send: {\n audio: audioTrack?.underlyingTrack,\n video: videoTrack?.underlyingTrack,\n screenShareVideo: shareTrack?.underlyingTrack,\n },\n receive: {\n audio: mediaDirection.receiveAudio,\n video: mediaDirection.receiveVideo,\n screenShareVideo: mediaDirection.receiveShare,\n remoteQualityLevel,\n },\n },\n debugId\n );\n};\n\n/**\n * generates share streams\n * @param {Object} options parameter\n * @param {Boolean} options.sendAudio send audio from the display share\n * @param {Boolean} options.sendShare send video from the display share\n * @param {Object} options.sharePreferences\n * @param {MediaTrackConstraints} options.sharePreferences.shareConstraints constraints to apply to video\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints}\n * @param {Boolean} options.sharePreferences.highFrameRate if shareConstraints isn't provided, set default values based off of this boolean\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Promise.<MediaStream>}\n */\nMedia.getDisplayMedia = (\n options: {\n sendAudio: boolean;\n sendShare: boolean;\n sharePreferences: {\n shareConstraints: MediaTrackConstraints;\n highFrameRate: any;\n };\n },\n config: any = {}\n) => {\n // SDK screen share resolution settings from Webex.init\n const customResolution = config.screenResolution || {};\n // user defined screen share frame rate\n const customShareFrameRate = config.screenFrameRate || null;\n // user defined share preferences\n const hasSharePreferences = options.sharePreferences;\n const hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;\n const hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;\n const {screenResolution, resolution, videoShareFrameRate, screenFrameRate, aspectRatio} =\n Config.meetings;\n\n let shareConstraints: any = {\n cursor: MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,\n aspectRatio,\n };\n\n if (hasCustomConstraints) {\n shareConstraints = hasSharePreferences.shareConstraints;\n } else if (hasHighFrameRate) {\n shareConstraints = {\n ...shareConstraints,\n frameRate: videoShareFrameRate,\n height: resolution.idealHeight,\n width: resolution.idealWidth,\n ...config.resolution,\n };\n } else {\n shareConstraints = {\n ...shareConstraints,\n frameRate: customShareFrameRate || screenFrameRate,\n height: customResolution.idealHeight || screenResolution.idealHeight,\n width: customResolution.idealWidth || screenResolution.idealWidth,\n ...config.screenResolution,\n };\n }\n\n // chrome and webkit based browsers (edge, safari) automatically adjust everything\n // and we have noticed higher quality with those browser types\n // firefox specifically has some issues with resolution and frame rate decision making\n // so we are making it optional and configurable (with defaults) for firefox\n // to have higher quality, and for developers to control the values\n // eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox\n\n if (isBrowser('firefox')) {\n const mediaConfig: any = {\n audio: options.sendAudio,\n video: options.sendShare,\n };\n\n return navigator.mediaDevices\n .getDisplayMedia({audio: options.sendAudio, video: mediaConfig})\n .then((stream) => {\n if (options.sendShare && stream.getVideoTracks().length > 0) {\n // Firefox has a bug with the spec where changing in the height and width only happens\n // after we get the inital tracks\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1321221\n stream.getVideoTracks()[0].applyConstraints(shareConstraints);\n }\n\n return stream;\n });\n }\n\n const getDisplayMediaParams: any = {video: options.sendShare ? shareConstraints : false};\n\n // safari doesn't support sending screen share audio\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia\n if (options.sendAudio && isBrowser('safari')) {\n getDisplayMediaParams.audio = options.sendAudio;\n }\n\n return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);\n};\n\n/**\n * generates audio and video using constraints (often called after getSupportedDevices)\n * @param {Object|Boolean} audio gum constraints\n * @param {Object|Boolean} video gum constraints\n * @param {Object} config SDK Configuration for meetings plugin\n * @returns {Object} {streams}\n */\nMedia.getMedia = (audio: any | boolean, video: any | boolean, config: any) => {\n const defaultWidth = {ideal: config.resolution.idealWidth, max: config.resolution.maxWidth};\n const defaultHeight = {ideal: config.resolution.idealHeight, max: config.resolution.maxHeight};\n const mediaConfig = {\n audio,\n // TODO: Remove temporary workaround once Firefox fixes low constraint issues\n // eslint-disable-next-line no-nested-ternary\n video: video\n ? isBrowser('firefox') && video.width && video.width.max === 320\n ? {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: 320,\n height: 180,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n }\n : {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: video.width ? video.width : defaultWidth,\n height: video.height ? video.height : defaultHeight,\n frameRate: video.frameRate ? video.frameRate : undefined,\n facingMode: video.facingMode ? video.facingMode : undefined,\n }\n : false,\n fake: process.env.NODE_ENV === 'test', // Special case to get fake media for Firefox browser for testing\n };\n\n return navigator.mediaDevices.getUserMedia(mediaConfig).catch((err) => {\n const logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';\n\n LoggerProxy.logger.error(`${logPath} failed - ${err} (${err.constraint})`);\n throw err;\n });\n};\n\n/**\n * Checks if the machine has at least one audio or video device (Dont use this for screen share)\n * @param {object} [options]\n * {\n * sendAudio: true/false,\n * sendVideo: true/false\n * }\n * @returns {Object} {\n * sendAudio: true/false,\n * sendVideo: true/false\n *}\n */\nMedia.getSupportedDevice = ({sendAudio, sendVideo}: {sendAudio: boolean; sendVideo: boolean}) =>\n Promise.resolve().then(() => {\n if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {\n return {\n sendAudio: false,\n sendVideo: false,\n };\n }\n\n return navigator.mediaDevices.enumerateDevices().then((devices) => {\n const supported = {\n audio: devices.filter((device) => device.kind === AUDIO_INPUT).length > 0,\n video: devices.filter((device) => device.kind === VIDEO_INPUT).length > 0,\n };\n\n return {\n sendAudio: supported.audio && sendAudio,\n sendVideo: supported.video && sendVideo,\n };\n });\n });\n\n/**\n * proxy to browser navigator.mediaDevices.enumerateDevices()\n * @returns {Promise}\n */\nMedia.getDevices = () => {\n if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {\n return navigator.mediaDevices.enumerateDevices();\n }\n\n return Promise.reject(new MediaError('enumerateDevices not supported.'));\n};\n\n/**\n *\n * Toggle a specific stream\n * noop as of now, does nothing\n * @returns {null}\n */\nMedia.toggleStream = () => {};\n\n/**\n * Stop input stream\n * @param {MediaTrack} track A media stream\n * @returns {null}\n */\nMedia.stopTracks = (track: any) => {\n if (!track) {\n return Promise.resolve();\n }\n\n return Promise.resolve().then(() => {\n if (track && track.stop) {\n try {\n track.stop();\n } catch (e) {\n LoggerProxy.logger.error(\n `Media:index#stopTracks --> Unable to stop the track with state ${track.readyState}, error: ${e}`\n );\n }\n }\n });\n};\n\n/**\n * generates streams for audio video and share\n * @param {object} mediaSetting parameter\n * @param {Object} mediaSetting.sendAudio sendAudio: {Boolean} sendAudio constraints\n * @param {Object} mediaSetting.sendVideo sendVideo: {Boolean} sendVideo constraints\n * @param {Object} mediaSetting.sendShare sendShare: {Boolean} sendShare constraints\n * @param {Object} mediaSetting.isSharing isSharing: {Boolean} isSharing constraints\n * @param {Object} audioVideo parameter\n * @param {Object} audioVideo.audio {deviceId: {String}}\n * @param {Object} audioVideo.video {deviceId: {String}}\n * @param {Object} sharePreferences parameter\n * @param {Object} sharePreferences.shareConstraints parameter\n * @param {Boolean} sharePreferences.highFrameRate parameter\n * @param {Object} config SDK Config\n * @returns {Array} [localStream, shareStream]\n */\nMedia.getUserMedia = (\n mediaSetting: {\n sendAudio: object;\n sendVideo: object;\n sendShare: object;\n isSharing: object;\n },\n audioVideo: {\n audio: object;\n video: object;\n },\n sharePreferences: {\n shareConstraints: object;\n highFrameRate: boolean;\n },\n config: object\n) =>\n Media.getLocalMedia(\n {\n sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,\n sendVideo: mediaSetting.sendVideo ? audioVideo.video || mediaSetting.sendVideo : false,\n },\n config\n ).then((localStream) =>\n Media.getLocalMedia(\n {\n sendShare: mediaSetting.sendShare,\n isSharing: mediaSetting.isSharing,\n sharePreferences,\n },\n config\n ).then((shareStream) => [localStream, shareStream])\n );\n\nexport default Media;\n"],"mappings":"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"}
|