@webex/plugin-meetings 3.0.0-beta.2 → 3.0.0-beta.200
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 -7
- package/UPGRADING.md +9 -9
- package/browsers.js +19 -24
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +342 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +216 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.js +23 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +45 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +1048 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.js +78 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.js +67 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +1 -20
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +5 -20
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +0 -7
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +10 -24
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +11 -24
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +12 -25
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +10 -24
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +5 -33
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +10 -24
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +9 -23
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/reconnection-in-progress.js +0 -17
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +10 -24
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +10 -24
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.js +9 -43
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +5 -25
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +0 -22
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +0 -23
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +0 -12
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +0 -15
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +0 -4
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -8
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +37 -60
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +28 -23
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +8 -13
- package/dist/config.js.map +1 -1
- package/dist/constants.js +250 -66
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +14 -0
- package/dist/controls-options-manager/constants.js.map +1 -0
- package/dist/controls-options-manager/enums.js +27 -0
- package/dist/controls-options-manager/enums.js.map +1 -0
- package/dist/controls-options-manager/index.js +297 -0
- package/dist/controls-options-manager/index.js.map +1 -0
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +319 -0
- package/dist/controls-options-manager/util.js.map +1 -0
- package/dist/index.js +108 -17
- package/dist/index.js.map +1 -1
- package/dist/interpretation/collection.js +23 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +366 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +25 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +101 -29
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -26
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +0 -15
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +4 -12
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.js +532 -240
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +3 -37
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +54 -38
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +284 -154
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +110 -92
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +95 -226
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +99 -194
- 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 +83 -14
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +3478 -3563
- 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 +247 -183
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +344 -344
- 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 +529 -588
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +6 -25
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.js +62 -39
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +328 -283
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +3 -15
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +98 -183
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +156 -232
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +26 -19
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +795 -574
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +26 -41
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +186 -155
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +126 -85
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +25 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +147 -88
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +13 -12
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +178 -204
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +113 -68
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +314 -260
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +4 -7
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +11 -558
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +264 -50
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +58 -65
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +76 -95
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +62 -76
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +66 -43
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +502 -442
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +40 -59
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +21 -45
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +1 -31
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +0 -13
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.js +192 -191
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +15 -23
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/constants.js +13 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.js +109 -0
- package/dist/reactions/reactions.js.map +1 -0
- package/dist/reactions/reactions.type.js +36 -0
- package/dist/reactions/reactions.type.js.map +1 -0
- package/dist/reconnection-manager/index.js +384 -476
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +17 -0
- package/dist/recording-controller/enums.js.map +1 -0
- package/dist/recording-controller/index.js +363 -0
- package/dist/recording-controller/index.js.map +1 -0
- package/dist/recording-controller/util.js +64 -0
- package/dist/recording-controller/util.js.map +1 -0
- package/dist/roap/index.js +58 -91
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +137 -135
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +148 -100
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +12 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +115 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.js +1 -95
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.js +385 -460
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +143 -87
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +22 -47
- package/dist/transcription/index.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +42 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- package/dist/types/breakouts/breakout.d.ts +8 -0
- package/dist/types/breakouts/collection.d.ts +5 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/index.d.ts +5 -0
- package/dist/types/breakouts/request.d.ts +22 -0
- package/dist/types/breakouts/utils.d.ts +15 -0
- package/dist/types/common/browser-detection.d.ts +9 -0
- package/dist/types/common/collection.d.ts +48 -0
- package/dist/types/common/config.d.ts +2 -0
- package/dist/types/common/errors/captcha-error.d.ts +15 -0
- package/dist/types/common/errors/intent-to-join.d.ts +16 -0
- package/dist/types/common/errors/join-meeting.d.ts +17 -0
- package/dist/types/common/errors/media.d.ts +15 -0
- package/dist/types/common/errors/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 +34 -0
- package/dist/types/config.d.ts +72 -0
- package/dist/types/constants.d.ts +1016 -0
- package/dist/types/controls-options-manager/constants.d.ts +4 -0
- package/dist/types/controls-options-manager/enums.d.ts +15 -0
- package/dist/types/controls-options-manager/index.d.ts +136 -0
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/interpretation/collection.d.ts +5 -0
- package/dist/types/interpretation/index.d.ts +5 -0
- package/dist/types/interpretation/siLanguage.d.ts +5 -0
- package/dist/types/locus-info/controlsUtils.d.ts +2 -0
- package/dist/types/locus-info/embeddedAppsUtils.d.ts +2 -0
- package/dist/types/locus-info/fullState.d.ts +2 -0
- package/dist/types/locus-info/hostUtils.d.ts +2 -0
- package/dist/types/locus-info/index.d.ts +322 -0
- package/dist/types/locus-info/infoUtils.d.ts +2 -0
- package/dist/types/locus-info/mediaSharesUtils.d.ts +2 -0
- package/dist/types/locus-info/parser.d.ts +271 -0
- package/dist/types/locus-info/selfUtils.d.ts +2 -0
- package/dist/types/media/index.d.ts +34 -0
- package/dist/types/media/properties.d.ts +93 -0
- package/dist/types/media/util.d.ts +2 -0
- package/dist/types/mediaQualityMetrics/config.d.ts +365 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +153 -0
- package/dist/types/meeting/index.d.ts +1471 -0
- package/dist/types/meeting/locusMediaRequest.d.ts +70 -0
- package/dist/types/meeting/muteState.d.ts +184 -0
- package/dist/types/meeting/request.d.ts +257 -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 +78 -0
- package/dist/types/meeting-info/collection.d.ts +20 -0
- package/dist/types/meeting-info/index.d.ts +62 -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 +367 -0
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/meetings/request.d.ts +27 -0
- package/dist/types/meetings/util.d.ts +18 -0
- package/dist/types/member/index.d.ts +159 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/member/util.d.ts +2 -0
- package/dist/types/members/collection.d.ts +29 -0
- package/dist/types/members/index.d.ts +353 -0
- package/dist/types/members/request.d.ts +114 -0
- package/dist/types/members/types.d.ts +24 -0
- package/dist/types/members/util.d.ts +210 -0
- package/dist/types/metrics/constants.d.ts +55 -0
- package/dist/types/metrics/index.d.ts +45 -0
- package/dist/types/multistream/mediaRequestManager.d.ts +118 -0
- package/dist/types/multistream/receiveSlot.d.ts +68 -0
- package/dist/types/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/types/multistream/remoteMedia.d.ts +72 -0
- package/dist/types/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +277 -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 +208 -0
- package/dist/types/recording-controller/util.d.ts +14 -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/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +46 -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 +29 -21
- package/src/annotation/annotation.types.ts +50 -0
- package/src/annotation/constants.ts +36 -0
- package/src/annotation/index.ts +328 -0
- package/src/breakouts/README.md +220 -0
- package/src/breakouts/breakout.ts +188 -0
- package/src/breakouts/collection.ts +19 -0
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +925 -0
- package/src/breakouts/request.ts +55 -0
- package/src/breakouts/utils.ts +57 -0
- package/src/common/{browser-detection.js → browser-detection.ts} +9 -6
- package/src/common/collection.ts +9 -7
- package/src/common/{config.js → config.ts} +1 -1
- package/src/common/errors/{captcha-error.js → captcha-error.ts} +11 -7
- package/src/common/errors/{intent-to-join.js → intent-to-join.ts} +12 -7
- package/src/common/errors/{join-meeting.js → join-meeting.ts} +17 -8
- package/src/common/errors/{media.js → media.ts} +11 -7
- package/src/common/errors/parameter.ts +11 -7
- package/src/common/errors/{password-error.js → password-error.ts} +11 -7
- package/src/common/errors/{permission.js → permission.ts} +10 -6
- package/src/common/errors/{reconnection.js → reconnection.ts} +11 -7
- package/src/common/errors/{stats.js → stats.ts} +11 -7
- package/src/common/errors/{webex-errors.js → webex-errors.ts} +14 -9
- package/src/common/errors/{webex-meetings-error.js → webex-meetings-error.ts} +4 -2
- package/src/common/events/{events-scope.js → events-scope.ts} +6 -2
- package/src/common/events/{events.js → events.ts} +5 -1
- package/src/common/events/{trigger-proxy.js → trigger-proxy.ts} +9 -5
- package/src/common/events/{util.js → util.ts} +2 -3
- package/src/common/logs/{logger-config.js → logger-config.ts} +1 -2
- package/src/common/logs/logger-proxy.ts +44 -0
- package/src/common/logs/{request.js → request.ts} +22 -9
- package/src/common/queue.ts +22 -9
- package/src/{config.js → config.ts} +17 -17
- package/src/constants.ts +197 -22
- package/src/controls-options-manager/constants.ts +5 -0
- package/src/controls-options-manager/enums.ts +18 -0
- package/src/controls-options-manager/index.ts +278 -0
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +300 -0
- package/src/index.ts +39 -0
- package/src/interpretation/README.md +60 -0
- package/src/interpretation/collection.ts +19 -0
- package/src/interpretation/index.ts +332 -0
- package/src/interpretation/siLanguage.ts +18 -0
- package/src/locus-info/controlsUtils.ts +222 -0
- package/src/locus-info/{embeddedAppsUtils.js → embeddedAppsUtils.ts} +5 -6
- package/src/locus-info/{fullState.js → fullState.ts} +16 -12
- package/src/locus-info/{hostUtils.js → hostUtils.ts} +9 -8
- package/src/locus-info/{index.js → index.ts} +518 -111
- package/src/locus-info/{infoUtils.js → infoUtils.ts} +19 -8
- package/src/locus-info/{mediaSharesUtils.js → mediaSharesUtils.ts} +65 -17
- package/src/locus-info/{parser.js → parser.ts} +271 -98
- package/src/locus-info/{selfUtils.js → selfUtils.ts} +199 -68
- package/src/media/index.ts +456 -0
- package/src/media/{properties.js → properties.ts} +80 -102
- package/src/media/{util.js → util.ts} +2 -2
- package/src/mediaQualityMetrics/config.ts +384 -0
- package/src/meeting/in-meeting-actions.ts +171 -3
- package/src/meeting/index.ts +7070 -0
- package/src/meeting/locusMediaRequest.ts +309 -0
- package/src/meeting/muteState.ts +450 -0
- package/src/meeting/{request.js → request.ts} +354 -214
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/{state.js → state.ts} +50 -35
- package/src/meeting/util.ts +615 -0
- package/src/meeting-info/{collection.js → collection.ts} +6 -2
- package/src/meeting-info/index.ts +183 -0
- package/src/meeting-info/meeting-info-v2.ts +407 -0
- package/src/meeting-info/{request.js → request.ts} +14 -4
- package/src/meeting-info/{util.js → util.ts} +60 -51
- package/src/meeting-info/{utilv2.js → utilv2.ts} +77 -60
- package/src/meetings/{collection.js → collection.ts} +26 -3
- package/src/meetings/index.ts +1467 -0
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/{request.js → request.ts} +34 -25
- package/src/meetings/{util.js → util.ts} +137 -36
- package/src/member/{index.js → index.ts} +151 -56
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +383 -0
- package/src/members/{collection.js → collection.ts} +10 -2
- package/src/members/{index.js → index.ts} +323 -145
- package/src/members/request.ts +255 -0
- package/src/members/types.ts +28 -0
- package/src/members/util.ts +339 -0
- package/src/metrics/{constants.js → constants.ts} +2 -6
- package/src/metrics/index.ts +73 -0
- package/src/multistream/mediaRequestManager.ts +337 -61
- package/src/multistream/receiveSlot.ts +69 -26
- package/src/multistream/receiveSlotManager.ts +66 -42
- package/src/multistream/remoteMedia.ts +40 -5
- package/src/multistream/remoteMediaGroup.ts +63 -3
- package/src/multistream/remoteMediaManager.ts +263 -66
- package/src/networkQualityMonitor/{index.js → index.ts} +41 -29
- package/src/personal-meeting-room/{index.js → index.ts} +28 -19
- package/src/personal-meeting-room/{request.js → request.ts} +13 -4
- package/src/personal-meeting-room/{util.js → util.ts} +4 -4
- package/src/reachability/{index.js → index.ts} +157 -94
- package/src/reachability/request.ts +46 -35
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +104 -0
- package/src/reactions/reactions.type.ts +62 -0
- package/src/reconnection-manager/{index.js → index.ts} +254 -136
- package/src/recording-controller/enums.ts +8 -0
- package/src/recording-controller/index.ts +333 -0
- package/src/recording-controller/util.ts +75 -0
- package/src/roap/{index.js → index.ts} +86 -78
- package/src/roap/request.ts +163 -0
- package/src/roap/turnDiscovery.ts +111 -49
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +96 -0
- package/src/statsAnalyzer/global.ts +37 -0
- package/src/statsAnalyzer/index.ts +1272 -0
- package/src/statsAnalyzer/mqaUtil.ts +291 -0
- package/src/transcription/{index.js → index.ts} +46 -39
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +804 -526
- package/test/integration/spec/space-meeting.js +391 -204
- package/test/integration/spec/transcription.js +7 -8
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +237 -0
- package/test/unit/spec/breakouts/collection.ts +15 -0
- package/test/unit/spec/breakouts/edit-lock-error.ts +30 -0
- package/test/unit/spec/breakouts/events.ts +89 -0
- package/test/unit/spec/breakouts/index.ts +1790 -0
- package/test/unit/spec/breakouts/request.ts +104 -0
- package/test/unit/spec/breakouts/utils.js +72 -0
- package/test/unit/spec/common/browser-detection.js +9 -28
- package/test/unit/spec/common/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +287 -0
- package/test/unit/spec/controls-options-manager/util.js +582 -0
- package/test/unit/spec/fixture/locus.js +93 -90
- package/test/unit/spec/interpretation/collection.ts +15 -0
- package/test/unit/spec/interpretation/index.ts +589 -0
- package/test/unit/spec/interpretation/siLanguage.ts +28 -0
- package/test/unit/spec/locus-info/controlsUtils.js +325 -32
- package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
- package/test/unit/spec/locus-info/index.js +1176 -18
- package/test/unit/spec/locus-info/infoUtils.js +41 -32
- package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
- package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +22 -0
- package/test/unit/spec/locus-info/parser.js +65 -31
- package/test/unit/spec/locus-info/selfConstant.js +120 -103
- package/test/unit/spec/locus-info/selfUtils.js +296 -12
- package/test/unit/spec/media/index.ts +162 -68
- package/test/unit/spec/media/properties.ts +9 -9
- package/test/unit/spec/meeting/in-meeting-actions.ts +82 -3
- package/test/unit/spec/meeting/index.js +4569 -1773
- package/test/unit/spec/meeting/locusMediaRequest.ts +436 -0
- package/test/unit/spec/meeting/muteState.js +382 -211
- package/test/unit/spec/meeting/request.js +444 -78
- package/test/unit/spec/meeting/utils.js +517 -192
- package/test/unit/spec/meeting-info/index.js +181 -0
- 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 +1254 -330
- package/test/unit/spec/meetings/utils.js +220 -14
- package/test/unit/spec/member/index.js +58 -5
- package/test/unit/spec/member/util.js +494 -26
- package/test/unit/spec/members/index.js +423 -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 +12 -66
- package/test/unit/spec/multistream/mediaRequestManager.ts +1013 -106
- package/test/unit/spec/multistream/receiveSlot.ts +77 -18
- package/test/unit/spec/multistream/receiveSlotManager.ts +69 -39
- package/test/unit/spec/multistream/remoteMedia.ts +40 -2
- package/test/unit/spec/multistream/remoteMediaGroup.ts +271 -5
- package/test/unit/spec/multistream/remoteMediaManager.ts +730 -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 +155 -9
- package/test/unit/spec/recording-controller/index.js +307 -0
- package/test/unit/spec/recording-controller/util.js +229 -0
- package/test/unit/spec/roap/index.ts +28 -52
- package/test/unit/spec/roap/request.ts +225 -0
- package/test/unit/spec/roap/turnDiscovery.ts +92 -50
- package/test/unit/spec/rtcMetrics/index.ts +60 -0
- 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 +46 -0
- package/test/utils/testUtils.js +63 -99
- package/test/utils/webex-config.js +22 -18
- package/test/utils/webex-test-users.js +57 -50
- package/tsconfig.json +6 -0
- package/dist/media/internal-media-core-wrapper.js +0 -22
- package/dist/media/internal-media-core-wrapper.js.map +0 -1
- package/dist/meeting/effectsState.js +0 -327
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.js +0 -301
- package/dist/metrics/config.js.map +0 -1
- package/dist/multistream/multistreamMedia.js +0 -116
- package/dist/multistream/multistreamMedia.js.map +0 -1
- package/dist/peer-connection-manager/util.js +0 -124
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/src/common/logs/logger-proxy.js +0 -33
- package/src/index.js +0 -15
- package/src/locus-info/controlsUtils.js +0 -102
- package/src/media/index.js +0 -459
- package/src/media/internal-media-core-wrapper.ts +0 -9
- package/src/mediaQualityMetrics/config.js +0 -382
- package/src/meeting/effectsState.js +0 -205
- package/src/meeting/index.js +0 -6284
- package/src/meeting/muteState.js +0 -318
- package/src/meeting/util.js +0 -506
- package/src/meeting-info/index.js +0 -131
- package/src/meeting-info/meeting-info-v2.js +0 -255
- package/src/meetings/index.js +0 -1015
- package/src/member/util.js +0 -254
- package/src/members/request.js +0 -131
- package/src/members/util.js +0 -258
- package/src/metrics/config.js +0 -324
- package/src/metrics/index.js +0 -530
- package/src/multistream/multistreamMedia.ts +0 -92
- package/src/peer-connection-manager/util.ts +0 -117
- package/src/roap/request.js +0 -127
- package/src/statsAnalyzer/global.js +0 -133
- package/src/statsAnalyzer/index.js +0 -1006
- package/src/statsAnalyzer/mqaUtil.js +0 -173
- package/test/unit/spec/meeting/effectsState.js +0 -291
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -389
- /package/src/common/errors/{reconnection-in-progress.js → reconnection-in-progress.ts} +0 -0
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
|
-
var _media = _interopRequireDefault(require("../common/errors/media"));
|
|
38
|
-
|
|
39
21
|
var _browserDetection = _interopRequireDefault(require("../common/browser-detection"));
|
|
40
|
-
|
|
41
|
-
var _internalMediaCoreWrapper = require("./internal-media-core-wrapper");
|
|
42
|
-
|
|
22
|
+
var _rtcMetrics = _interopRequireDefault(require("../rtcMetrics"));
|
|
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
|
-
|
|
88
|
-
Media.setLocalTrack = function (enabled, track) {
|
|
89
|
-
if (track) {
|
|
90
|
-
track.enabled = enabled;
|
|
91
|
-
return true;
|
|
92
|
-
}
|
|
93
56
|
|
|
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,35 +76,46 @@ 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
|
+
Media.getDirection = function (forceSendRecv, receive, send) {
|
|
82
|
+
if (!receive && !send) {
|
|
83
|
+
return 'inactive';
|
|
84
|
+
}
|
|
85
|
+
if (forceSendRecv || receive && send) {
|
|
86
|
+
return 'sendrecv';
|
|
87
|
+
}
|
|
88
|
+
if (receive) {
|
|
89
|
+
return 'recvonly';
|
|
90
|
+
}
|
|
91
|
+
return 'sendonly';
|
|
92
|
+
};
|
|
93
|
+
|
|
147
94
|
/**
|
|
148
95
|
* creates a webrtc media connection with provided tracks and mediaDirection configuration
|
|
149
|
-
*
|
|
150
|
-
*
|
|
96
|
+
*
|
|
97
|
+
* @param {boolean} isMultistream
|
|
98
|
+
* @param {string} debugId string useful for debugging (will appear in media connection logs)
|
|
99
|
+
* @param {object} webex main `webex` object.
|
|
100
|
+
* @param {string} meetingId id for the meeting using this connection
|
|
151
101
|
* @param {Object} options
|
|
152
|
-
* @param {
|
|
102
|
+
* @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:
|
|
103
|
+
* audioTrack, videoTrack, shareVideoTrack, and shareAudioTrack
|
|
153
104
|
* @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections
|
|
154
105
|
* @param {boolean} [options.enableRtx] applicable only to non-multistream connections
|
|
155
106
|
* @param {boolean} [options.enableExtmap] applicable only to non-multistream connections
|
|
156
107
|
* @param {Object} [options.turnServerInfo]
|
|
157
|
-
* @
|
|
108
|
+
* @param {BundlePolicy} [options.bundlePolicy]
|
|
109
|
+
* @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
|
|
158
110
|
*/
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
turnServerInfo = _ref.turnServerInfo;
|
|
167
|
-
var mediaDirection = mediaProperties.mediaDirection,
|
|
168
|
-
audioTrack = mediaProperties.audioTrack,
|
|
169
|
-
videoTrack = mediaProperties.videoTrack,
|
|
170
|
-
shareTrack = mediaProperties.shareTrack;
|
|
111
|
+
Media.createMediaConnection = function (isMultistream, debugId, webex, meetingId, options) {
|
|
112
|
+
var mediaProperties = options.mediaProperties,
|
|
113
|
+
remoteQualityLevel = options.remoteQualityLevel,
|
|
114
|
+
enableRtx = options.enableRtx,
|
|
115
|
+
enableExtmap = options.enableExtmap,
|
|
116
|
+
turnServerInfo = options.turnServerInfo,
|
|
117
|
+
bundlePolicy = options.bundlePolicy;
|
|
171
118
|
var iceServers = [];
|
|
172
|
-
|
|
173
119
|
if (turnServerInfo) {
|
|
174
120
|
iceServers.push({
|
|
175
121
|
urls: turnServerInfo.url,
|
|
@@ -177,14 +123,31 @@ Media.createMediaConnection = function (mediaProperties, _ref) {
|
|
|
177
123
|
credential: turnServerInfo.password || ''
|
|
178
124
|
});
|
|
179
125
|
}
|
|
180
|
-
|
|
181
126
|
if (isMultistream) {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
127
|
+
var _mediaProperties$medi, _mediaProperties$medi2, _mediaProperties$medi3, _mediaProperties$medi4;
|
|
128
|
+
var config = {
|
|
129
|
+
iceServers: iceServers,
|
|
130
|
+
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),
|
|
131
|
+
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)
|
|
132
|
+
};
|
|
133
|
+
if (bundlePolicy) {
|
|
134
|
+
config.bundlePolicy = bundlePolicy;
|
|
135
|
+
}
|
|
136
|
+
var rtcMetrics = new _rtcMetrics.default(webex, meetingId);
|
|
137
|
+
return new _internalMediaCore.MultistreamRoapMediaConnection(config, meetingId, function (data) {
|
|
138
|
+
return rtcMetrics.addMetrics(data);
|
|
139
|
+
}, function () {
|
|
140
|
+
return rtcMetrics.closeMetrics();
|
|
141
|
+
});
|
|
185
142
|
}
|
|
186
|
-
|
|
187
|
-
|
|
143
|
+
if (!mediaProperties) {
|
|
144
|
+
throw new Error('mediaProperties have to be provided for non-multistream media connections');
|
|
145
|
+
}
|
|
146
|
+
var mediaDirection = mediaProperties.mediaDirection,
|
|
147
|
+
audioTrack = mediaProperties.audioTrack,
|
|
148
|
+
videoTrack = mediaProperties.videoTrack,
|
|
149
|
+
shareVideoTrack = mediaProperties.shareVideoTrack;
|
|
150
|
+
return new _internalMediaCore.RoapMediaConnection({
|
|
188
151
|
iceServers: iceServers,
|
|
189
152
|
skipInactiveTransceivers: false,
|
|
190
153
|
requireH264: true,
|
|
@@ -200,22 +163,22 @@ Media.createMediaConnection = function (mediaProperties, _ref) {
|
|
|
200
163
|
// it's always been hardcoded in SDK so for now keeping it that way
|
|
201
164
|
disableExtmap: !enableExtmap,
|
|
202
165
|
disableRtx: !enableRtx // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP
|
|
203
|
-
|
|
204
166
|
}
|
|
205
167
|
}, {
|
|
206
|
-
|
|
207
|
-
audio: audioTrack,
|
|
208
|
-
video: videoTrack,
|
|
209
|
-
screenShareVideo:
|
|
168
|
+
localTracks: {
|
|
169
|
+
audio: audioTrack === null || audioTrack === void 0 ? void 0 : audioTrack.underlyingTrack,
|
|
170
|
+
video: videoTrack === null || videoTrack === void 0 ? void 0 : videoTrack.underlyingTrack,
|
|
171
|
+
screenShareVideo: shareVideoTrack === null || shareVideoTrack === void 0 ? void 0 : shareVideoTrack.underlyingTrack
|
|
210
172
|
},
|
|
211
|
-
|
|
212
|
-
audio: mediaDirection.receiveAudio,
|
|
213
|
-
video: mediaDirection.receiveVideo,
|
|
214
|
-
screenShareVideo: mediaDirection.receiveShare,
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
},
|
|
173
|
+
direction: {
|
|
174
|
+
audio: Media.getDirection(true, mediaDirection.receiveAudio, mediaDirection.sendAudio),
|
|
175
|
+
video: Media.getDirection(true, mediaDirection.receiveVideo, mediaDirection.sendVideo),
|
|
176
|
+
screenShareVideo: Media.getDirection(false, mediaDirection.receiveShare, mediaDirection.sendShare)
|
|
177
|
+
},
|
|
178
|
+
remoteQualityLevel: remoteQualityLevel
|
|
179
|
+
}, debugId);
|
|
218
180
|
};
|
|
181
|
+
|
|
219
182
|
/**
|
|
220
183
|
* generates share streams
|
|
221
184
|
* @param {Object} options parameter
|
|
@@ -228,29 +191,26 @@ Media.createMediaConnection = function (mediaProperties, _ref) {
|
|
|
228
191
|
* @param {Object} config SDK Configuration for meetings plugin
|
|
229
192
|
* @returns {Promise.<MediaStream>}
|
|
230
193
|
*/
|
|
231
|
-
|
|
232
|
-
|
|
233
194
|
Media.getDisplayMedia = function (options) {
|
|
234
195
|
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
235
196
|
// SDK screen share resolution settings from Webex.init
|
|
236
|
-
var customResolution = config.screenResolution || {};
|
|
237
|
-
|
|
238
|
-
var customShareFrameRate = config.screenFrameRate || null;
|
|
239
|
-
|
|
197
|
+
var customResolution = config.screenResolution || {};
|
|
198
|
+
// user defined screen share frame rate
|
|
199
|
+
var customShareFrameRate = config.screenFrameRate || null;
|
|
200
|
+
// user defined share preferences
|
|
240
201
|
var hasSharePreferences = options.sharePreferences;
|
|
241
202
|
var hasCustomConstraints = hasSharePreferences && hasSharePreferences.shareConstraints;
|
|
242
203
|
var hasHighFrameRate = hasSharePreferences && hasSharePreferences.highFrameRate;
|
|
243
204
|
var _Config$meetings = _config.default.meetings,
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
205
|
+
screenResolution = _Config$meetings.screenResolution,
|
|
206
|
+
resolution = _Config$meetings.resolution,
|
|
207
|
+
videoShareFrameRate = _Config$meetings.videoShareFrameRate,
|
|
208
|
+
screenFrameRate = _Config$meetings.screenFrameRate,
|
|
209
|
+
aspectRatio = _Config$meetings.aspectRatio;
|
|
249
210
|
var shareConstraints = {
|
|
250
211
|
cursor: _constants.MEDIA_TRACK_CONSTRAINT.CURSOR.AWLAYS,
|
|
251
212
|
aspectRatio: aspectRatio
|
|
252
213
|
};
|
|
253
|
-
|
|
254
214
|
if (hasCustomConstraints) {
|
|
255
215
|
shareConstraints = hasSharePreferences.shareConstraints;
|
|
256
216
|
} else if (hasHighFrameRate) {
|
|
@@ -265,14 +225,15 @@ Media.getDisplayMedia = function (options) {
|
|
|
265
225
|
height: customResolution.idealHeight || screenResolution.idealHeight,
|
|
266
226
|
width: customResolution.idealWidth || screenResolution.idealWidth
|
|
267
227
|
}, config.screenResolution);
|
|
268
|
-
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// chrome and webkit based browsers (edge, safari) automatically adjust everything
|
|
269
231
|
// and we have noticed higher quality with those browser types
|
|
270
232
|
// firefox specifically has some issues with resolution and frame rate decision making
|
|
271
233
|
// so we are making it optional and configurable (with defaults) for firefox
|
|
272
234
|
// to have higher quality, and for developers to control the values
|
|
273
235
|
// eventually we may have to add the same functionality to chrome, OR conversely, get to with firefox
|
|
274
236
|
|
|
275
|
-
|
|
276
237
|
if (isBrowser('firefox')) {
|
|
277
238
|
var mediaConfig = {
|
|
278
239
|
audio: options.sendAudio,
|
|
@@ -288,22 +249,21 @@ Media.getDisplayMedia = function (options) {
|
|
|
288
249
|
// https://bugzilla.mozilla.org/show_bug.cgi?id=1321221
|
|
289
250
|
stream.getVideoTracks()[0].applyConstraints(shareConstraints);
|
|
290
251
|
}
|
|
291
|
-
|
|
292
252
|
return stream;
|
|
293
253
|
});
|
|
294
254
|
}
|
|
295
|
-
|
|
296
255
|
var getDisplayMediaParams = {
|
|
297
256
|
video: options.sendShare ? shareConstraints : false
|
|
298
|
-
};
|
|
299
|
-
// https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia
|
|
257
|
+
};
|
|
300
258
|
|
|
259
|
+
// safari doesn't support sending screen share audio
|
|
260
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia
|
|
301
261
|
if (options.sendAudio && isBrowser('safari')) {
|
|
302
262
|
getDisplayMediaParams.audio = options.sendAudio;
|
|
303
263
|
}
|
|
304
|
-
|
|
305
264
|
return navigator.mediaDevices.getDisplayMedia(getDisplayMediaParams);
|
|
306
265
|
};
|
|
266
|
+
|
|
307
267
|
/**
|
|
308
268
|
* generates audio and video using constraints (often called after getSupportedDevices)
|
|
309
269
|
* @param {Object|Boolean} audio gum constraints
|
|
@@ -311,8 +271,6 @@ Media.getDisplayMedia = function (options) {
|
|
|
311
271
|
* @param {Object} config SDK Configuration for meetings plugin
|
|
312
272
|
* @returns {Object} {streams}
|
|
313
273
|
*/
|
|
314
|
-
|
|
315
|
-
|
|
316
274
|
Media.getMedia = function (audio, video, config) {
|
|
317
275
|
var defaultWidth = {
|
|
318
276
|
ideal: config.resolution.idealWidth,
|
|
@@ -329,98 +287,43 @@ Media.getMedia = function (audio, video, config) {
|
|
|
329
287
|
video: video ? isBrowser('firefox') && video.width && video.width.max === 320 ? {
|
|
330
288
|
deviceId: video.deviceId ? video.deviceId : undefined,
|
|
331
289
|
width: 320,
|
|
332
|
-
height: 180
|
|
290
|
+
height: 180,
|
|
291
|
+
frameRate: video.frameRate ? video.frameRate : undefined,
|
|
292
|
+
facingMode: video.facingMode ? video.facingMode : undefined
|
|
333
293
|
} : {
|
|
334
294
|
deviceId: video.deviceId ? video.deviceId : undefined,
|
|
335
295
|
width: video.width ? video.width : defaultWidth,
|
|
336
|
-
height: video.height ? video.height : defaultHeight
|
|
296
|
+
height: video.height ? video.height : defaultHeight,
|
|
297
|
+
frameRate: video.frameRate ? video.frameRate : undefined,
|
|
298
|
+
facingMode: video.facingMode ? video.facingMode : undefined
|
|
337
299
|
} : false,
|
|
338
300
|
fake: process.env.NODE_ENV === 'test' // Special case to get fake media for Firefox browser for testing
|
|
339
|
-
|
|
340
301
|
};
|
|
302
|
+
|
|
341
303
|
return navigator.mediaDevices.getUserMedia(mediaConfig).catch(function (err) {
|
|
342
304
|
var logPath = 'Media:index#getMedia --> navigator.mediaDevices.getUserMedia';
|
|
343
|
-
|
|
344
305
|
_loggerProxy.default.logger.error("".concat(logPath, " failed - ").concat(err, " (").concat(err.constraint, ")"));
|
|
345
|
-
|
|
346
306
|
throw err;
|
|
347
307
|
});
|
|
348
308
|
};
|
|
349
|
-
/**
|
|
350
|
-
* Checks if the machine has at least one audio or video device (Dont use this for screen share)
|
|
351
|
-
* @param {object} [options]
|
|
352
|
-
* {
|
|
353
|
-
* sendAudio: true/false,
|
|
354
|
-
* sendVideo: true/false
|
|
355
|
-
* }
|
|
356
|
-
* @returns {Object} {
|
|
357
|
-
* sendAudio: true/false,
|
|
358
|
-
* sendVideo: true/false
|
|
359
|
-
*}
|
|
360
|
-
*/
|
|
361
|
-
|
|
362
309
|
|
|
363
|
-
Media.getSupportedDevice = function (_ref2) {
|
|
364
|
-
var sendAudio = _ref2.sendAudio,
|
|
365
|
-
sendVideo = _ref2.sendVideo;
|
|
366
|
-
return _promise.default.resolve().then(function () {
|
|
367
|
-
if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {
|
|
368
|
-
return {
|
|
369
|
-
sendAudio: false,
|
|
370
|
-
sendVideo: false
|
|
371
|
-
};
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
return navigator.mediaDevices.enumerateDevices().then(function (devices) {
|
|
375
|
-
var supported = {
|
|
376
|
-
audio: devices.filter(function (device) {
|
|
377
|
-
return device.kind === _constants.AUDIO_INPUT;
|
|
378
|
-
}).length > 0,
|
|
379
|
-
video: devices.filter(function (device) {
|
|
380
|
-
return device.kind === _constants.VIDEO_INPUT;
|
|
381
|
-
}).length > 0
|
|
382
|
-
};
|
|
383
|
-
return {
|
|
384
|
-
sendAudio: supported.audio && sendAudio,
|
|
385
|
-
sendVideo: supported.video && sendVideo
|
|
386
|
-
};
|
|
387
|
-
});
|
|
388
|
-
});
|
|
389
|
-
};
|
|
390
|
-
/**
|
|
391
|
-
* proxy to browser navigator.mediaDevices.enumerateDevices()
|
|
392
|
-
* @returns {Promise}
|
|
393
|
-
*/
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
Media.getDevices = function () {
|
|
397
|
-
if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {
|
|
398
|
-
return navigator.mediaDevices.enumerateDevices();
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
return _promise.default.reject(new _media.default('enumerateDevices not supported.'));
|
|
402
|
-
};
|
|
403
310
|
/**
|
|
404
311
|
*
|
|
405
312
|
* Toggle a specific stream
|
|
406
313
|
* noop as of now, does nothing
|
|
407
314
|
* @returns {null}
|
|
408
315
|
*/
|
|
409
|
-
|
|
410
|
-
|
|
411
316
|
Media.toggleStream = function () {};
|
|
317
|
+
|
|
412
318
|
/**
|
|
413
319
|
* Stop input stream
|
|
414
320
|
* @param {MediaTrack} track A media stream
|
|
415
321
|
* @returns {null}
|
|
416
322
|
*/
|
|
417
|
-
|
|
418
|
-
|
|
419
323
|
Media.stopTracks = function (track) {
|
|
420
324
|
if (!track) {
|
|
421
325
|
return _promise.default.resolve();
|
|
422
326
|
}
|
|
423
|
-
|
|
424
327
|
return _promise.default.resolve().then(function () {
|
|
425
328
|
if (track && track.stop) {
|
|
426
329
|
try {
|
|
@@ -431,38 +334,7 @@ Media.stopTracks = function (track) {
|
|
|
431
334
|
}
|
|
432
335
|
});
|
|
433
336
|
};
|
|
434
|
-
/**
|
|
435
|
-
*
|
|
436
|
-
* Stop input stream
|
|
437
|
-
* @param {Stream} stream A media stream
|
|
438
|
-
* @returns {null}
|
|
439
|
-
* @deprecated after v1.89.3
|
|
440
|
-
*/
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
Media.stopStream = function (stream) {
|
|
444
|
-
_loggerProxy.default.logger.warn('Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3');
|
|
445
|
-
|
|
446
|
-
if (!stream) {
|
|
447
|
-
return _promise.default.resolve();
|
|
448
|
-
}
|
|
449
|
-
/*
|
|
450
|
-
* To release local media
|
|
451
|
-
* 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)
|
|
452
|
-
* 2) Firefox requires the stream to be stopped
|
|
453
|
-
*/
|
|
454
337
|
|
|
455
|
-
|
|
456
|
-
return _promise.default.resolve().then(function () {
|
|
457
|
-
if (stream.getTracks) {
|
|
458
|
-
stream.getTracks().forEach(function (track) {
|
|
459
|
-
track.stop();
|
|
460
|
-
});
|
|
461
|
-
} else if (stream.stop) {
|
|
462
|
-
stream.stop();
|
|
463
|
-
}
|
|
464
|
-
});
|
|
465
|
-
};
|
|
466
338
|
/**
|
|
467
339
|
* generates streams for audio video and share
|
|
468
340
|
* @param {object} mediaSetting parameter
|
|
@@ -479,8 +351,6 @@ Media.stopStream = function (stream) {
|
|
|
479
351
|
* @param {Object} config SDK Config
|
|
480
352
|
* @returns {Array} [localStream, shareStream]
|
|
481
353
|
*/
|
|
482
|
-
|
|
483
|
-
|
|
484
354
|
Media.getUserMedia = function (mediaSetting, audioVideo, sharePreferences, config) {
|
|
485
355
|
return Media.getLocalMedia({
|
|
486
356
|
sendAudio: mediaSetting.sendAudio ? audioVideo.audio || mediaSetting.sendAudio : false,
|
|
@@ -495,7 +365,6 @@ Media.getUserMedia = function (mediaSetting, audioVideo, sharePreferences, confi
|
|
|
495
365
|
});
|
|
496
366
|
});
|
|
497
367
|
};
|
|
498
|
-
|
|
499
368
|
var _default = Media;
|
|
500
369
|
exports.default = _default;
|
|
501
370
|
//# 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","mediaProperties","isMultistream","remoteQualityLevel","enableRtx","enableExtmap","turnServerInfo","mediaDirection","audioTrack","videoTrack","shareTrack","iceServers","push","urls","url","username","credential","password","MultistreamRoapMediaConnection","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","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.js"],"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 = {};\n\n/**\n * @param {boolean} enabled\n * @param {MediaStreamTrack} track\n * @returns {Boolean}\n * @public\n */\nMedia.setLocalTrack = (enabled, track) => {\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, audioMuted, videoMuted) => {\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, config) => {\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 * @param {Object} mediaProperties only applicable to non-multistream connections, contains mediaDirection and local tracks:\n * audioTrack, videoTrack and shareTrack\n * @param {Object} options\n * @param {boolean} options.isMultistream\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 = (mediaProperties, {\n isMultistream,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n turnServerInfo\n}) => {\n const {\n mediaDirection,\n audioTrack,\n videoTrack,\n shareTrack\n } = mediaProperties;\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 }, 'mc');\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 }, 'mc');\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 = (options, config = {}) => {\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 = {\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 = {\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 = {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, video, config) => {\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 } :\n {\n deviceId: video.deviceId ? video.deviceId : undefined,\n width: video.width ? video.width : defaultWidth,\n height: video.height ? video.height : defaultHeight\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}) =>\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) => {\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) => {\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 = (mediaSetting, audioVideo, sharePreferences, config) => Media.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","getDirection","forceSendRecv","receive","send","createMediaConnection","isMultistream","debugId","webex","meetingId","mediaProperties","remoteQualityLevel","enableRtx","enableExtmap","turnServerInfo","bundlePolicy","iceServers","push","urls","url","username","credential","password","enableMainAudio","mediaDirection","receiveAudio","enableMainVideo","receiveVideo","rtcMetrics","RtcMetrics","MultistreamRoapMediaConnection","data","addMetrics","closeMetrics","Error","audioTrack","videoTrack","shareVideoTrack","RoapMediaConnection","skipInactiveTransceivers","requireH264","sdpMunging","convertPort9to0","addContentSlides","bandwidthLimits","audio","StaticConfig","meetings","bandwidth","video","startBitrate","periodicKeyframes","disableExtmap","disableRtx","localTracks","underlyingTrack","screenShareVideo","direction","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","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 {\n LocalCameraTrack,\n LocalDisplayTrack,\n LocalSystemAudioTrack,\n LocalMicrophoneTrack,\n} from '@webex/media-helpers';\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport {MEDIA_TRACK_CONSTRAINT} from '../constants';\nimport Config from '../config';\nimport StaticConfig from '../common/config';\nimport BrowserDetection from '../common/browser-detection';\nimport RtcMetrics from '../rtcMetrics';\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\nMedia.getDirection = (forceSendRecv: boolean, receive: boolean, send: boolean) => {\n if (!receive && !send) {\n return 'inactive';\n }\n\n if (forceSendRecv || (receive && send)) {\n return 'sendrecv';\n }\n\n if (receive) {\n return 'recvonly';\n }\n\n return 'sendonly';\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} webex main `webex` object.\n * @param {string} meetingId id for the meeting using this connection\n * @param {Object} options\n * @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:\n * audioTrack, videoTrack, shareVideoTrack, and shareAudioTrack\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 webex: object,\n meetingId: 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 shareVideoTrack?: LocalDisplayTrack;\n shareAudioTrack?: LocalSystemAudioTrack;\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 const rtcMetrics = new RtcMetrics(webex, meetingId);\n\n return new MultistreamRoapMediaConnection(\n config,\n meetingId,\n (data) => rtcMetrics.addMetrics(data),\n () => rtcMetrics.closeMetrics()\n );\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, shareVideoTrack} = 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 localTracks: {\n audio: audioTrack?.underlyingTrack,\n video: videoTrack?.underlyingTrack,\n screenShareVideo: shareVideoTrack?.underlyingTrack,\n },\n direction: {\n audio: Media.getDirection(true, mediaDirection.receiveAudio, mediaDirection.sendAudio),\n video: Media.getDirection(true, mediaDirection.receiveVideo, mediaDirection.sendVideo),\n screenShareVideo: Media.getDirection(\n false,\n mediaDirection.receiveShare,\n mediaDirection.sendShare\n ),\n },\n remoteQualityLevel,\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 *\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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"}
|