@webex/plugin-meetings 2.60.0 → 2.60.1-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +46 -8
- package/dist/annotation/annotation.types.d.ts +42 -0
- package/dist/annotation/annotation.types.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.d.ts +31 -0
- package/dist/annotation/constants.js +41 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.d.ts +117 -0
- package/dist/annotation/index.js +357 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.d.ts +8 -0
- package/dist/breakouts/breakout.js +215 -0
- package/dist/breakouts/breakout.js.map +1 -0
- package/dist/breakouts/collection.d.ts +5 -0
- package/dist/breakouts/collection.js +22 -0
- package/dist/breakouts/collection.js.map +1 -0
- package/dist/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/breakouts/edit-lock-error.js +51 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.d.ts +8 -0
- package/dist/breakouts/events.js +44 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.d.ts +5 -0
- package/dist/breakouts/index.js +1047 -0
- package/dist/breakouts/index.js.map +1 -0
- package/dist/breakouts/request.d.ts +22 -0
- package/dist/breakouts/request.js +77 -0
- package/dist/breakouts/request.js.map +1 -0
- package/dist/breakouts/utils.d.ts +15 -0
- package/dist/breakouts/utils.js +64 -0
- package/dist/breakouts/utils.js.map +1 -0
- package/dist/common/browser-detection.js +2 -3
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +3 -4
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +1 -2
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +1 -2
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +1 -2
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +1 -2
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +1 -2
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/common/errors/no-meeting-info.js +50 -0
- package/dist/common/errors/no-meeting-info.js.map +1 -0
- package/dist/common/errors/parameter.js +3 -4
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +1 -2
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +1 -2
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/{reclaim-host-role-error.js → reclaim-host-role-errors.js} +7 -11
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
- package/dist/common/errors/reconnection-in-progress.js +1 -2
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +1 -2
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +1 -2
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.d.ts +20 -8
- package/dist/common/errors/webex-errors.js +48 -28
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +1 -2
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +1 -2
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +1 -2
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +1 -2
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +1 -2
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +1 -2
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +2 -3
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.d.ts +3 -1
- package/dist/common/logs/request.js +8 -5
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.d.ts +9 -7
- package/dist/common/queue.js +22 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.d.ts +6 -7
- package/dist/config.js +8 -10
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +217 -97
- package/dist/constants.js +416 -441
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +3 -6
- package/dist/controls-options-manager/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.d.ts +11 -1
- package/dist/controls-options-manager/enums.js +15 -6
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.d.ts +17 -1
- package/dist/controls-options-manager/index.js +127 -38
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/types.d.ts +43 -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.d.ts +1 -7
- package/dist/controls-options-manager/util.js +309 -19
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.js +121 -5
- package/dist/index.js.map +1 -1
- package/dist/interceptors/index.d.ts +2 -0
- package/dist/interceptors/index.js +15 -0
- package/dist/interceptors/index.js.map +1 -0
- package/dist/interceptors/locusRetry.d.ts +27 -0
- package/dist/interceptors/locusRetry.js +94 -0
- package/dist/interceptors/locusRetry.js.map +1 -0
- package/dist/interpretation/collection.d.ts +5 -0
- package/dist/interpretation/collection.js +22 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.d.ts +5 -0
- package/dist/interpretation/index.js +365 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.d.ts +5 -0
- package/dist/interpretation/siLanguage.js +24 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +100 -11
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +3 -4
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +1 -2
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +1 -2
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.d.ts +57 -4
- package/dist/locus-info/index.js +425 -84
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +13 -5
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +58 -3
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.d.ts +66 -6
- package/dist/locus-info/parser.js +253 -80
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +97 -13
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.d.ts +2 -0
- package/dist/media/index.js +107 -319
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.d.ts +38 -53
- package/dist/media/properties.js +96 -153
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +1 -22
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.d.ts +234 -230
- package/dist/mediaQualityMetrics/config.js +302 -498
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/in-meeting-actions.d.ts +88 -0
- package/dist/meeting/in-meeting-actions.js +94 -3
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.d.ts +591 -494
- package/dist/meeting/index.js +4732 -2990
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/meeting/locusMediaRequest.js +291 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.d.ts +93 -25
- package/dist/meeting/muteState.js +224 -133
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.d.ts +82 -47
- package/dist/meeting/request.js +297 -199
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.d.ts +11 -0
- package/dist/meeting/request.type.js +7 -0
- package/dist/meeting/request.type.js.map +1 -0
- package/dist/meeting/state.js +1 -2
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.d.ts +102 -1
- package/dist/meeting/util.js +605 -435
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +3 -4
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.d.ts +13 -1
- package/dist/meeting-info/index.js +74 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.d.ts +31 -1
- package/dist/meeting-info/meeting-info-v2.js +200 -63
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +1 -2
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +2 -3
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +39 -41
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.d.ts +17 -0
- package/dist/meetings/collection.js +42 -4
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.d.ts +93 -21
- package/dist/meetings/index.js +490 -127
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.d.ts +4 -0
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +4 -3
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +107 -6
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.d.ts +13 -1
- package/dist/member/index.js +45 -2
- package/dist/member/index.js.map +1 -1
- package/dist/member/member.types.js +3 -4
- package/dist/member/member.types.js.map +1 -1
- package/dist/member/types.d.ts +32 -0
- package/dist/member/types.js +23 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +120 -29
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.d.ts +5 -0
- package/dist/members/collection.js +11 -2
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.d.ts +56 -11
- package/dist/members/index.js +174 -47
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.d.ts +67 -11
- package/dist/members/request.js +102 -54
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +3 -4
- package/dist/members/types.js.map +1 -1
- package/dist/members/util.d.ts +214 -1
- package/dist/members/util.js +327 -284
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.d.ts +15 -6
- package/dist/metrics/constants.js +17 -9
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.d.ts +4 -111
- package/dist/metrics/index.js +4 -452
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.d.ts +118 -0
- package/dist/multistream/mediaRequestManager.js +344 -0
- package/dist/multistream/mediaRequestManager.js.map +1 -0
- package/dist/multistream/receiveSlot.d.ts +68 -0
- package/dist/multistream/receiveSlot.js +200 -0
- package/dist/multistream/receiveSlot.js.map +1 -0
- package/dist/multistream/receiveSlotManager.d.ts +56 -0
- package/dist/multistream/receiveSlotManager.js +174 -0
- package/dist/multistream/receiveSlotManager.js.map +1 -0
- package/dist/multistream/remoteMedia.d.ts +72 -0
- package/dist/multistream/remoteMedia.js +268 -0
- package/dist/multistream/remoteMedia.js.map +1 -0
- package/dist/multistream/remoteMediaGroup.d.ts +47 -0
- package/dist/multistream/remoteMediaGroup.js +267 -0
- package/dist/multistream/remoteMediaGroup.js.map +1 -0
- package/dist/multistream/remoteMediaManager.d.ts +285 -0
- package/dist/multistream/remoteMediaManager.js +1211 -0
- package/dist/multistream/remoteMediaManager.js.map +1 -0
- package/dist/multistream/sendSlotManager.d.ts +61 -0
- package/dist/multistream/sendSlotManager.js +236 -0
- package/dist/multistream/sendSlotManager.js.map +1 -0
- package/dist/networkQualityMonitor/index.js +5 -4
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/personal-meeting-room/index.js +2 -3
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +2 -3
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +1 -2
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/clusterReachability.d.ts +109 -0
- package/dist/reachability/clusterReachability.js +357 -0
- package/dist/reachability/clusterReachability.js.map +1 -0
- package/dist/reachability/index.d.ts +61 -95
- package/dist/reachability/index.js +300 -393
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.d.ts +7 -3
- package/dist/reachability/request.js +18 -10
- package/dist/reachability/request.js.map +1 -1
- package/dist/reachability/util.d.ts +8 -0
- package/dist/reachability/util.js +29 -0
- package/dist/reachability/util.js.map +1 -0
- package/dist/reactions/constants.d.ts +3 -0
- package/dist/reactions/constants.js +12 -0
- package/dist/reactions/constants.js.map +1 -0
- package/dist/reactions/reactions.d.ts +2 -2
- package/dist/reactions/reactions.js +4 -6
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.d.ts +23 -3
- package/dist/reactions/reactions.type.js +21 -23
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.d.ts +32 -8
- package/dist/reconnection-manager/index.js +282 -231
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +4 -5
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.d.ts +15 -1
- package/dist/recording-controller/index.js +57 -46
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.d.ts +5 -4
- package/dist/recording-controller/util.js +10 -10
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.d.ts +9 -47
- package/dist/roap/index.js +101 -235
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.d.ts +18 -12
- package/dist/roap/request.js +126 -180
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.d.ts +27 -16
- package/dist/roap/turnDiscovery.js +115 -105
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.d.ts +4 -0
- package/dist/rtcMetrics/constants.js +11 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.d.ts +54 -0
- package/dist/rtcMetrics/index.js +140 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/global.d.ts +1 -83
- package/dist/statsAnalyzer/global.js +2 -85
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.d.ts +50 -30
- package/dist/statsAnalyzer/index.js +435 -510
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +8 -6
- package/dist/statsAnalyzer/mqaUtil.js +120 -83
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +1 -2
- package/dist/transcription/index.js.map +1 -1
- package/dist/webinar/collection.d.ts +16 -0
- package/dist/webinar/collection.js +43 -0
- package/dist/webinar/collection.js.map +1 -0
- package/dist/webinar/index.d.ts +5 -0
- package/dist/webinar/index.js +68 -0
- package/dist/webinar/index.js.map +1 -0
- package/package.json +38 -26
- 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/errors/no-meeting-info.ts +24 -0
- package/src/common/errors/webex-errors.ts +36 -12
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/logs/request.ts +5 -1
- package/src/common/queue.ts +22 -8
- package/src/config.ts +6 -7
- package/src/constants.ts +244 -97
- package/src/controls-options-manager/enums.ts +12 -0
- package/src/controls-options-manager/index.ts +116 -21
- package/src/controls-options-manager/types.ts +59 -0
- package/src/controls-options-manager/util.ts +294 -14
- package/src/index.ts +44 -0
- package/src/interceptors/index.ts +3 -0
- package/src/interceptors/locusRetry.ts +67 -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 +110 -0
- package/src/locus-info/index.ts +449 -61
- package/src/locus-info/infoUtils.ts +14 -2
- package/src/locus-info/mediaSharesUtils.ts +64 -0
- package/src/locus-info/parser.ts +258 -47
- package/src/locus-info/selfUtils.ts +85 -2
- package/src/media/index.ts +153 -370
- package/src/media/properties.ts +106 -136
- package/src/media/util.ts +0 -21
- package/src/mediaQualityMetrics/config.ts +244 -377
- package/src/meeting/in-meeting-actions.ts +176 -0
- package/src/meeting/index.ts +3944 -2489
- package/src/meeting/locusMediaRequest.ts +313 -0
- package/src/meeting/muteState.ts +224 -138
- package/src/meeting/request.ts +207 -127
- package/src/meeting/request.type.ts +13 -0
- package/src/meeting/util.ts +590 -423
- package/src/meeting-info/index.ts +81 -8
- package/src/meeting-info/meeting-info-v2.ts +163 -13
- package/src/meeting-info/util.ts +1 -1
- package/src/meeting-info/utilv2.ts +28 -28
- package/src/meetings/collection.ts +33 -0
- package/src/meetings/index.ts +487 -126
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +116 -5
- package/src/member/index.ts +43 -1
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +125 -28
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +187 -52
- package/src/members/request.ts +87 -27
- package/src/members/util.ts +332 -291
- package/src/metrics/constants.ts +15 -6
- package/src/metrics/index.ts +1 -471
- package/src/multistream/mediaRequestManager.ts +440 -0
- package/src/multistream/receiveSlot.ts +184 -0
- package/src/multistream/receiveSlotManager.ts +166 -0
- package/src/multistream/remoteMedia.ts +254 -0
- package/src/multistream/remoteMediaGroup.ts +284 -0
- package/src/multistream/remoteMediaManager.ts +1145 -0
- package/src/multistream/sendSlotManager.ts +170 -0
- package/src/networkQualityMonitor/index.ts +6 -6
- package/src/reachability/clusterReachability.ts +320 -0
- package/src/reachability/index.ts +243 -347
- package/src/reachability/request.ts +17 -8
- package/src/reachability/util.ts +24 -0
- package/src/reactions/constants.ts +4 -0
- package/src/reactions/reactions.ts +4 -4
- package/src/reactions/reactions.type.ts +30 -4
- package/src/reconnection-manager/index.ts +168 -156
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +98 -241
- package/src/roap/request.ts +74 -148
- package/src/roap/turnDiscovery.ts +62 -56
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +124 -0
- package/src/statsAnalyzer/global.ts +1 -84
- package/src/statsAnalyzer/index.ts +477 -643
- package/src/statsAnalyzer/mqaUtil.ts +115 -114
- package/src/webinar/collection.ts +31 -0
- package/src/webinar/index.ts +62 -0
- package/test/integration/spec/converged-space-meetings.js +233 -0
- package/test/integration/spec/journey.js +320 -264
- package/test/integration/spec/space-meeting.js +77 -4
- 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/queue.js +31 -2
- package/test/unit/spec/controls-options-manager/index.js +163 -0
- package/test/unit/spec/controls-options-manager/util.js +576 -60
- package/test/unit/spec/fixture/locus.js +1 -0
- package/test/unit/spec/interceptors/locusRetry.ts +131 -0
- 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 +323 -30
- package/test/unit/spec/locus-info/index.js +1390 -16
- package/test/unit/spec/locus-info/infoUtils.js +54 -16
- package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -0
- package/test/unit/spec/locus-info/lib/selfConstant.js +48 -0
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +32 -0
- package/test/unit/spec/locus-info/parser.js +116 -35
- package/test/unit/spec/locus-info/selfUtils.js +275 -0
- package/test/unit/spec/media/index.ts +290 -0
- package/test/unit/spec/media/properties.ts +75 -84
- package/test/unit/spec/meeting/in-meeting-actions.ts +86 -0
- package/test/unit/spec/meeting/index.js +8187 -2769
- package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
- package/test/unit/spec/meeting/muteState.js +409 -213
- package/test/unit/spec/meeting/request.js +512 -42
- package/test/unit/spec/meeting/utils.js +741 -24
- package/test/unit/spec/meeting-info/index.js +300 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +527 -5
- package/test/unit/spec/meeting-info/utilv2.js +21 -0
- package/test/unit/spec/meetings/collection.js +26 -0
- package/test/unit/spec/meetings/index.js +1313 -243
- package/test/unit/spec/meetings/utils.js +202 -2
- package/test/unit/spec/member/index.js +32 -9
- package/test/unit/spec/member/util.js +499 -61
- package/test/unit/spec/members/index.js +394 -5
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +173 -38
- package/test/unit/spec/metrics/index.js +1 -50
- package/test/unit/spec/multistream/mediaRequestManager.ts +1418 -0
- package/test/unit/spec/multistream/receiveSlot.ts +163 -0
- package/test/unit/spec/multistream/receiveSlotManager.ts +203 -0
- package/test/unit/spec/multistream/remoteMedia.ts +255 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +662 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +1924 -0
- package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
- package/test/unit/spec/networkQualityMonitor/index.js +4 -4
- package/test/unit/spec/reachability/clusterReachability.ts +279 -0
- package/test/unit/spec/reachability/index.ts +531 -24
- package/test/unit/spec/reachability/request.js +68 -0
- package/test/unit/spec/reachability/util.ts +40 -0
- package/test/unit/spec/reconnection-manager/index.js +162 -24
- package/test/unit/spec/recording-controller/index.js +293 -218
- package/test/unit/spec/recording-controller/util.js +223 -96
- package/test/unit/spec/roap/index.ts +200 -76
- package/test/unit/spec/roap/request.ts +255 -0
- package/test/unit/spec/roap/turnDiscovery.ts +86 -48
- package/test/unit/spec/rtcMetrics/index.ts +93 -0
- package/test/unit/spec/stats-analyzer/index.js +261 -167
- package/test/unit/spec/webinar/collection.ts +13 -0
- package/test/unit/spec/webinar/index.ts +60 -0
- package/test/utils/constants.js +9 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +0 -45
- package/test/utils/webex-config.js +4 -0
- package/test/utils/webex-test-users.js +7 -3
- package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
- package/dist/meeting/effectsState.d.ts +0 -42
- package/dist/meeting/effectsState.js +0 -260
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.d.ts +0 -169
- package/dist/metrics/config.js +0 -289
- package/dist/metrics/config.js.map +0 -1
- package/dist/peer-connection-manager/index.d.ts +0 -6
- package/dist/peer-connection-manager/index.js +0 -671
- package/dist/peer-connection-manager/index.js.map +0 -1
- package/dist/peer-connection-manager/util.d.ts +0 -6
- package/dist/peer-connection-manager/util.js +0 -110
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/dist/roap/collection.d.ts +0 -10
- package/dist/roap/collection.js +0 -63
- package/dist/roap/collection.js.map +0 -1
- package/dist/roap/handler.d.ts +0 -47
- package/dist/roap/handler.js +0 -279
- package/dist/roap/handler.js.map +0 -1
- package/dist/roap/state.d.ts +0 -9
- package/dist/roap/state.js +0 -127
- package/dist/roap/state.js.map +0 -1
- package/dist/roap/util.d.ts +0 -2
- package/dist/roap/util.js +0 -76
- package/dist/roap/util.js.map +0 -1
- package/src/index.js +0 -15
- package/src/meeting/effectsState.ts +0 -209
- package/src/metrics/config.ts +0 -485
- package/src/peer-connection-manager/index.ts +0 -847
- package/src/peer-connection-manager/util.ts +0 -119
- package/src/roap/collection.ts +0 -62
- package/src/roap/handler.ts +0 -294
- package/src/roap/state.ts +0 -156
- package/src/roap/util.ts +0 -100
- package/test/unit/spec/meeting/effectsState.js +0 -281
- package/test/unit/spec/peerconnection-manager/index.js +0 -218
- package/test/unit/spec/peerconnection-manager/utils.js +0 -49
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +0 -388
- package/test/unit/spec/roap/util.js +0 -30
- /package/dist/common/errors/{reclaim-host-role-error.d.ts → reclaim-host-role-errors.d.ts} +0 -0
- /package/src/common/errors/{reclaim-host-role-error.ts → reclaim-host-role-errors.ts} +0 -0
package/dist/media/index.js
CHANGED
|
@@ -13,19 +13,19 @@ _Object$defineProperty(exports, "__esModule", {
|
|
|
13
13
|
exports.default = void 0;
|
|
14
14
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
15
15
|
var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
|
|
16
|
-
var
|
|
16
|
+
var _internalMediaCore = require("@webex/internal-media-core");
|
|
17
17
|
var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
|
|
18
18
|
var _constants = require("../constants");
|
|
19
19
|
var _config = _interopRequireDefault(require("../config"));
|
|
20
|
-
var
|
|
21
|
-
var _reconnection = _interopRequireDefault(require("../common/errors/reconnection"));
|
|
22
|
-
var _media = _interopRequireDefault(require("../common/errors/media"));
|
|
20
|
+
var _config2 = _interopRequireDefault(require("../common/config"));
|
|
23
21
|
var _browserDetection = _interopRequireDefault(require("../common/browser-detection"));
|
|
24
|
-
|
|
25
|
-
function
|
|
22
|
+
var _rtcMetrics = _interopRequireDefault(require("../rtcMetrics"));
|
|
23
|
+
function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
24
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; } /*!
|
|
25
|
+
* Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
|
|
26
|
+
*/ /* globals navigator */
|
|
26
27
|
var _BrowserDetection = (0, _browserDetection.default)(),
|
|
27
28
|
isBrowser = _BrowserDetection.isBrowser;
|
|
28
|
-
|
|
29
29
|
/**
|
|
30
30
|
* MediaDirection
|
|
31
31
|
* @typedef {Object} MediaDirection
|
|
@@ -56,63 +56,6 @@ var _BrowserDetection = (0, _browserDetection.default)(),
|
|
|
56
56
|
*/
|
|
57
57
|
var Media = {};
|
|
58
58
|
|
|
59
|
-
/**
|
|
60
|
-
* @param {boolean} enabled
|
|
61
|
-
* @param {MediaStreamTrack} track
|
|
62
|
-
* @returns {Boolean}
|
|
63
|
-
* @public
|
|
64
|
-
*/
|
|
65
|
-
Media.setLocalTrack = function (enabled, track) {
|
|
66
|
-
if (track) {
|
|
67
|
-
track.enabled = enabled;
|
|
68
|
-
return true;
|
|
69
|
-
}
|
|
70
|
-
return false;
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* @param {RTCPeerConnection} peerConnection
|
|
75
|
-
* @param {Object} meetingProperties
|
|
76
|
-
* @param {string} meetingProperties.meetingId
|
|
77
|
-
* @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH
|
|
78
|
-
* @returns {Promise}
|
|
79
|
-
*/
|
|
80
|
-
Media.reconnectMedia = function (peerConnection, _ref) {
|
|
81
|
-
var meetingId = _ref.meetingId,
|
|
82
|
-
remoteQualityLevel = _ref.remoteQualityLevel,
|
|
83
|
-
enableRtx = _ref.enableRtx,
|
|
84
|
-
enableExtmap = _ref.enableExtmap;
|
|
85
|
-
if (peerConnection.connectionState === _constants.PEER_CONNECTION_STATE.CLOSED || peerConnection.connectionState === _constants.PEER_CONNECTION_STATE.FAILED) {
|
|
86
|
-
return _promise.default.reject(new _reconnection.default('Reinitiate peerconnection'));
|
|
87
|
-
}
|
|
88
|
-
return _peerConnectionManager.default.createOffer(peerConnection, {
|
|
89
|
-
meetingId: meetingId,
|
|
90
|
-
remoteQualityLevel: remoteQualityLevel,
|
|
91
|
-
enableRtx: enableRtx,
|
|
92
|
-
enableExtmap: enableExtmap
|
|
93
|
-
});
|
|
94
|
-
};
|
|
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
|
-
Media.generateLocalMedias = function (mediaId, audioMuted, videoMuted) {
|
|
104
|
-
if (mediaId) {
|
|
105
|
-
return [{
|
|
106
|
-
localSdp: (0, _stringify.default)({
|
|
107
|
-
audioMuted: audioMuted,
|
|
108
|
-
videoMuted: videoMuted
|
|
109
|
-
}),
|
|
110
|
-
mediaId: mediaId
|
|
111
|
-
}];
|
|
112
|
-
}
|
|
113
|
-
return [];
|
|
114
|
-
};
|
|
115
|
-
|
|
116
59
|
/**
|
|
117
60
|
* make a browser call to get the media
|
|
118
61
|
* @param {SendOptions} options
|
|
@@ -137,184 +80,111 @@ Media.getLocalMedia = function (options, config) {
|
|
|
137
80
|
}
|
|
138
81
|
return _promise.default.resolve(undefined);
|
|
139
82
|
};
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
* @param {string} trackType type of track (audio/video)
|
|
143
|
-
* @param {object} track tracks passed
|
|
144
|
-
* @param {boolean} receiveTracks do you want to receive tracks from the remote side
|
|
145
|
-
* @returns {Object} returns direction tracks to be added in transceiver
|
|
146
|
-
*/
|
|
147
|
-
Media.checkTracks = function (trackType, track, receiveTracks) {
|
|
148
|
-
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
149
|
-
var getDirection = function getDirection(sendTracks, receiveTracks) {
|
|
150
|
-
if (sendTracks && receiveTracks) {
|
|
151
|
-
return 'sendrecv';
|
|
152
|
-
}
|
|
153
|
-
if (sendTracks && !receiveTracks) {
|
|
154
|
-
return 'sendonly';
|
|
155
|
-
}
|
|
156
|
-
if (!sendTracks && receiveTracks) {
|
|
157
|
-
return 'recvonly';
|
|
158
|
-
}
|
|
83
|
+
Media.getDirection = function (forceSendRecv, receive, send) {
|
|
84
|
+
if (!receive && !send) {
|
|
159
85
|
return 'inactive';
|
|
160
|
-
};
|
|
161
|
-
if (track) {
|
|
162
|
-
return {
|
|
163
|
-
track: track,
|
|
164
|
-
direction: getDirection(!!track, receiveTracks)
|
|
165
|
-
};
|
|
166
86
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
* @param {MediaDirection} mediaProperties
|
|
175
|
-
* @param {Object} meetingProperties
|
|
176
|
-
* @param {string} meetingProperties.meetingId
|
|
177
|
-
* @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH
|
|
178
|
-
* @returns {Array} [peerConnection, ]
|
|
179
|
-
*/
|
|
180
|
-
Media.attachMedia = function (mediaProperties, _ref2) {
|
|
181
|
-
var meetingId = _ref2.meetingId,
|
|
182
|
-
remoteQualityLevel = _ref2.remoteQualityLevel,
|
|
183
|
-
enableRtx = _ref2.enableRtx,
|
|
184
|
-
enableExtmap = _ref2.enableExtmap;
|
|
185
|
-
var mediaDirection = mediaProperties.mediaDirection,
|
|
186
|
-
audioTrack = mediaProperties.audioTrack,
|
|
187
|
-
videoTrack = mediaProperties.videoTrack,
|
|
188
|
-
shareTrack = mediaProperties.shareTrack,
|
|
189
|
-
peerConnection = mediaProperties.peerConnection;
|
|
190
|
-
var result = null;
|
|
191
|
-
|
|
192
|
-
// Add Transceiver for audio
|
|
193
|
-
result = Media.checkTracks('audio', mediaDirection.sendAudio && audioTrack, mediaDirection.receiveAudio);
|
|
194
|
-
peerConnection.audioTransceiver = peerConnection.addTransceiver(result.track, {
|
|
195
|
-
direction: result.direction
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
// Add Transceiver for video
|
|
199
|
-
result = Media.checkTracks('video', mediaDirection.sendVideo && videoTrack, mediaDirection.receiveVideo);
|
|
200
|
-
peerConnection.videoTransceiver = peerConnection.addTransceiver(result.track, {
|
|
201
|
-
direction: result.direction
|
|
202
|
-
});
|
|
203
|
-
|
|
204
|
-
// Add Transceiver for share
|
|
205
|
-
result = Media.checkTracks('video', mediaDirection.sendShare && shareTrack, mediaDirection.receiveShare);
|
|
206
|
-
peerConnection.shareTransceiver = peerConnection.addTransceiver(result.track, {
|
|
207
|
-
direction: result.direction
|
|
208
|
-
});
|
|
209
|
-
peerConnection.onnegotiationneeded = function (event) {
|
|
210
|
-
_loggerProxy.default.logger.info("Media:index#attachMedia --> onnegotiationneeded#PeerConnection: ".concat(event));
|
|
211
|
-
};
|
|
212
|
-
return _peerConnectionManager.default.createOffer(peerConnection, {
|
|
213
|
-
meetingId: meetingId,
|
|
214
|
-
remoteQualityLevel: remoteQualityLevel,
|
|
215
|
-
enableRtx: enableRtx,
|
|
216
|
-
enableExtmap: enableExtmap
|
|
217
|
-
});
|
|
218
|
-
};
|
|
219
|
-
|
|
220
|
-
/**
|
|
221
|
-
* updates all the media streams and creates a new media offer
|
|
222
|
-
* @param {MediaDirection} mediaProperties
|
|
223
|
-
* @param {Object} meetingProperties
|
|
224
|
-
* @param {string} meetingProperties.meetingId
|
|
225
|
-
* @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH
|
|
226
|
-
* @returns {Promise}
|
|
227
|
-
*/
|
|
228
|
-
Media.updateMedia = function (mediaProperties, _ref3) {
|
|
229
|
-
var meetingId = _ref3.meetingId,
|
|
230
|
-
remoteQualityLevel = _ref3.remoteQualityLevel,
|
|
231
|
-
enableRtx = _ref3.enableRtx,
|
|
232
|
-
enableExtmap = _ref3.enableExtmap;
|
|
233
|
-
var mediaDirection = mediaProperties.mediaDirection,
|
|
234
|
-
audioTrack = mediaProperties.audioTrack,
|
|
235
|
-
videoTrack = mediaProperties.videoTrack,
|
|
236
|
-
shareTrack = mediaProperties.shareTrack,
|
|
237
|
-
peerConnection = mediaProperties.peerConnection;
|
|
238
|
-
|
|
239
|
-
// update audio transceiver
|
|
240
|
-
Media.setTrackOnTransceiver(peerConnection.audioTransceiver, {
|
|
241
|
-
type: 'audio',
|
|
242
|
-
track: audioTrack,
|
|
243
|
-
sendTrack: mediaDirection.sendAudio && audioTrack,
|
|
244
|
-
receiveTrack: mediaDirection.receiveAudio
|
|
245
|
-
});
|
|
246
|
-
|
|
247
|
-
// update video transceiver
|
|
248
|
-
Media.setTrackOnTransceiver(peerConnection.videoTransceiver, {
|
|
249
|
-
type: 'video',
|
|
250
|
-
track: videoTrack,
|
|
251
|
-
sendTrack: mediaDirection.sendVideo && videoTrack,
|
|
252
|
-
receiveTrack: mediaDirection.receiveVideo
|
|
253
|
-
});
|
|
254
|
-
|
|
255
|
-
// update content transceiver
|
|
256
|
-
Media.setTrackOnTransceiver(peerConnection.shareTransceiver, {
|
|
257
|
-
type: 'video',
|
|
258
|
-
track: shareTrack,
|
|
259
|
-
sendTrack: mediaDirection.sendShare && shareTrack,
|
|
260
|
-
receiveTrack: mediaDirection.receiveShare
|
|
261
|
-
});
|
|
262
|
-
peerConnection.onnegotiationneeded = function (event) {
|
|
263
|
-
_loggerProxy.default.logger.info("Media:index#updateMedia --> onnegotiationneeded#PeerConnection: ".concat(event));
|
|
264
|
-
};
|
|
265
|
-
return _peerConnectionManager.default.createOffer(peerConnection, {
|
|
266
|
-
meetingId: meetingId,
|
|
267
|
-
remoteQualityLevel: remoteQualityLevel,
|
|
268
|
-
enableRtx: enableRtx,
|
|
269
|
-
enableExtmap: enableExtmap
|
|
270
|
-
});
|
|
87
|
+
if (forceSendRecv || receive && send) {
|
|
88
|
+
return 'sendrecv';
|
|
89
|
+
}
|
|
90
|
+
if (receive) {
|
|
91
|
+
return 'recvonly';
|
|
92
|
+
}
|
|
93
|
+
return 'sendonly';
|
|
271
94
|
};
|
|
272
95
|
|
|
273
96
|
/**
|
|
274
|
-
*
|
|
97
|
+
* creates a webrtc media connection with provided tracks and mediaDirection configuration
|
|
98
|
+
*
|
|
99
|
+
* @param {boolean} isMultistream
|
|
100
|
+
* @param {string} debugId string useful for debugging (will appear in media connection logs)
|
|
101
|
+
* @param {object} webex main `webex` object.
|
|
102
|
+
* @param {string} meetingId id for the meeting using this connection
|
|
103
|
+
* @param {string} correlationId id used in requests to correlate to this session
|
|
275
104
|
* @param {Object} options
|
|
276
|
-
* @param {
|
|
277
|
-
*
|
|
105
|
+
* @param {Object} [options.mediaProperties] contains mediaDirection and local tracks:
|
|
106
|
+
* audioTrack, videoTrack, shareVideoTrack, and shareAudioTrack
|
|
107
|
+
* @param {string} [options.remoteQualityLevel] LOW|MEDIUM|HIGH applicable only to non-multistream connections
|
|
108
|
+
* @param {boolean} [options.enableRtx] applicable only to non-multistream connections
|
|
109
|
+
* @param {boolean} [options.enableExtmap] applicable only to non-multistream connections
|
|
110
|
+
* @param {Object} [options.turnServerInfo]
|
|
111
|
+
* @param {BundlePolicy} [options.bundlePolicy]
|
|
112
|
+
* @returns {RoapMediaConnection | MultistreamRoapMediaConnection}
|
|
278
113
|
*/
|
|
279
|
-
Media.
|
|
280
|
-
var
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
114
|
+
Media.createMediaConnection = function (isMultistream, debugId, webex, meetingId, correlationId, options) {
|
|
115
|
+
var _audioStream$outputSt, _videoStream$outputSt, _shareVideoStream$out, _shareAudioStream$out;
|
|
116
|
+
var mediaProperties = options.mediaProperties,
|
|
117
|
+
remoteQualityLevel = options.remoteQualityLevel,
|
|
118
|
+
enableRtx = options.enableRtx,
|
|
119
|
+
enableExtmap = options.enableExtmap,
|
|
120
|
+
turnServerInfo = options.turnServerInfo,
|
|
121
|
+
bundlePolicy = options.bundlePolicy;
|
|
122
|
+
var iceServers = [];
|
|
123
|
+
if (turnServerInfo) {
|
|
124
|
+
iceServers.push({
|
|
125
|
+
urls: turnServerInfo.url,
|
|
126
|
+
username: turnServerInfo.username || '',
|
|
127
|
+
credential: turnServerInfo.password || ''
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
if (isMultistream) {
|
|
131
|
+
var config = {
|
|
132
|
+
iceServers: iceServers
|
|
133
|
+
};
|
|
134
|
+
if (bundlePolicy) {
|
|
135
|
+
config.bundlePolicy = bundlePolicy;
|
|
289
136
|
}
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
137
|
+
var rtcMetrics = new _rtcMetrics.default(webex, meetingId, correlationId);
|
|
138
|
+
return new _internalMediaCore.MultistreamRoapMediaConnection(config, meetingId, /* the rtc metrics objects callbacks */
|
|
139
|
+
function (data) {
|
|
140
|
+
return rtcMetrics.addMetrics(data);
|
|
141
|
+
}, function () {
|
|
142
|
+
return rtcMetrics.closeMetrics();
|
|
143
|
+
}, function () {
|
|
144
|
+
return rtcMetrics.sendMetricsInQueue();
|
|
145
|
+
});
|
|
293
146
|
}
|
|
294
|
-
|
|
147
|
+
if (!mediaProperties) {
|
|
148
|
+
throw new Error('mediaProperties have to be provided for non-multistream media connections');
|
|
149
|
+
}
|
|
150
|
+
var mediaDirection = mediaProperties.mediaDirection,
|
|
151
|
+
audioStream = mediaProperties.audioStream,
|
|
152
|
+
videoStream = mediaProperties.videoStream,
|
|
153
|
+
shareVideoStream = mediaProperties.shareVideoStream,
|
|
154
|
+
shareAudioStream = mediaProperties.shareAudioStream;
|
|
155
|
+
return new _internalMediaCore.RoapMediaConnection({
|
|
156
|
+
iceServers: iceServers,
|
|
157
|
+
skipInactiveTransceivers: false,
|
|
158
|
+
requireH264: true,
|
|
159
|
+
sdpMunging: {
|
|
160
|
+
convertPort9to0: false,
|
|
161
|
+
addContentSlides: true,
|
|
162
|
+
bandwidthLimits: {
|
|
163
|
+
audio: _config2.default.meetings.bandwidth.audio,
|
|
164
|
+
video: _config2.default.meetings.bandwidth.video
|
|
165
|
+
},
|
|
166
|
+
startBitrate: _config2.default.meetings.bandwidth.startBitrate,
|
|
167
|
+
periodicKeyframes: 20,
|
|
168
|
+
// it's always been hardcoded in SDK so for now keeping it that way
|
|
169
|
+
disableExtmap: !enableExtmap,
|
|
170
|
+
disableRtx: !enableRtx // see https://bugs.chromium.org/p/chromium/issues/detail?id=1020642 why we might want to remove RTX from SDP
|
|
171
|
+
}
|
|
172
|
+
}, {
|
|
173
|
+
// TODO: RoapMediaConnection is not ready to use stream classes yet, so we pass the raw MediaStreamTrack for now SPARK-460530
|
|
174
|
+
localTracks: {
|
|
175
|
+
audio: audioStream === null || audioStream === void 0 ? void 0 : (_audioStream$outputSt = audioStream.outputStream) === null || _audioStream$outputSt === void 0 ? void 0 : _audioStream$outputSt.getTracks()[0],
|
|
176
|
+
video: videoStream === null || videoStream === void 0 ? void 0 : (_videoStream$outputSt = videoStream.outputStream) === null || _videoStream$outputSt === void 0 ? void 0 : _videoStream$outputSt.getTracks()[0],
|
|
177
|
+
screenShareVideo: shareVideoStream === null || shareVideoStream === void 0 ? void 0 : (_shareVideoStream$out = shareVideoStream.outputStream) === null || _shareVideoStream$out === void 0 ? void 0 : _shareVideoStream$out.getTracks()[0],
|
|
178
|
+
screenShareAudio: shareAudioStream === null || shareAudioStream === void 0 ? void 0 : (_shareAudioStream$out = shareAudioStream.outputStream) === null || _shareAudioStream$out === void 0 ? void 0 : _shareAudioStream$out.getTracks()[0] // TODO: add type for screenShareAudio in internal-media-core SPARK-446923
|
|
179
|
+
},
|
|
295
180
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
* @param {Object} options see #Media.setTrackOnTransceiver
|
|
304
|
-
* @returns {Promise}
|
|
305
|
-
*/
|
|
306
|
-
Media.updateTransceiver = function (_ref4, peerConnection, transceiver, options) {
|
|
307
|
-
var meetingId = _ref4.meetingId,
|
|
308
|
-
remoteQualityLevel = _ref4.remoteQualityLevel,
|
|
309
|
-
enableRtx = _ref4.enableRtx,
|
|
310
|
-
enableExtmap = _ref4.enableExtmap;
|
|
311
|
-
Media.setTrackOnTransceiver(transceiver, options);
|
|
312
|
-
return _peerConnectionManager.default.createOffer(peerConnection, {
|
|
313
|
-
meetingId: meetingId,
|
|
314
|
-
remoteQualityLevel: remoteQualityLevel,
|
|
315
|
-
enableRtx: enableRtx,
|
|
316
|
-
enableExtmap: enableExtmap
|
|
317
|
-
});
|
|
181
|
+
direction: {
|
|
182
|
+
audio: Media.getDirection(true, mediaDirection.receiveAudio, mediaDirection.sendAudio),
|
|
183
|
+
video: Media.getDirection(true, mediaDirection.receiveVideo, mediaDirection.sendVideo),
|
|
184
|
+
screenShareVideo: Media.getDirection(false, mediaDirection.receiveShare, mediaDirection.sendShare)
|
|
185
|
+
},
|
|
186
|
+
remoteQualityLevel: remoteQualityLevel
|
|
187
|
+
}, debugId);
|
|
318
188
|
};
|
|
319
189
|
|
|
320
190
|
/**
|
|
@@ -445,56 +315,6 @@ Media.getMedia = function (audio, video, config) {
|
|
|
445
315
|
});
|
|
446
316
|
};
|
|
447
317
|
|
|
448
|
-
/**
|
|
449
|
-
* Checks if the machine has at least one audio or video device (Dont use this for screen share)
|
|
450
|
-
* @param {object} [options]
|
|
451
|
-
* {
|
|
452
|
-
* sendAudio: true/false,
|
|
453
|
-
* sendVideo: true/false
|
|
454
|
-
* }
|
|
455
|
-
* @returns {Object} {
|
|
456
|
-
* sendAudio: true/false,
|
|
457
|
-
* sendVideo: true/false
|
|
458
|
-
*}
|
|
459
|
-
*/
|
|
460
|
-
Media.getSupportedDevice = function (_ref5) {
|
|
461
|
-
var sendAudio = _ref5.sendAudio,
|
|
462
|
-
sendVideo = _ref5.sendVideo;
|
|
463
|
-
return _promise.default.resolve().then(function () {
|
|
464
|
-
if (!navigator.mediaDevices || navigator.mediaDevices.enumerateDevices === undefined) {
|
|
465
|
-
return {
|
|
466
|
-
sendAudio: false,
|
|
467
|
-
sendVideo: false
|
|
468
|
-
};
|
|
469
|
-
}
|
|
470
|
-
return navigator.mediaDevices.enumerateDevices().then(function (devices) {
|
|
471
|
-
var supported = {
|
|
472
|
-
audio: devices.filter(function (device) {
|
|
473
|
-
return device.kind === _constants.AUDIO_INPUT;
|
|
474
|
-
}).length > 0,
|
|
475
|
-
video: devices.filter(function (device) {
|
|
476
|
-
return device.kind === _constants.VIDEO_INPUT;
|
|
477
|
-
}).length > 0
|
|
478
|
-
};
|
|
479
|
-
return {
|
|
480
|
-
sendAudio: supported.audio && sendAudio,
|
|
481
|
-
sendVideo: supported.video && sendVideo
|
|
482
|
-
};
|
|
483
|
-
});
|
|
484
|
-
});
|
|
485
|
-
};
|
|
486
|
-
|
|
487
|
-
/**
|
|
488
|
-
* proxy to browser navigator.mediaDevices.enumerateDevices()
|
|
489
|
-
* @returns {Promise}
|
|
490
|
-
*/
|
|
491
|
-
Media.getDevices = function () {
|
|
492
|
-
if (navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {
|
|
493
|
-
return navigator.mediaDevices.enumerateDevices();
|
|
494
|
-
}
|
|
495
|
-
return _promise.default.reject(new _media.default('enumerateDevices not supported.'));
|
|
496
|
-
};
|
|
497
|
-
|
|
498
318
|
/**
|
|
499
319
|
*
|
|
500
320
|
* Toggle a specific stream
|
|
@@ -505,49 +325,18 @@ Media.toggleStream = function () {};
|
|
|
505
325
|
|
|
506
326
|
/**
|
|
507
327
|
* Stop input stream
|
|
508
|
-
* @param {
|
|
509
|
-
* @returns {null}
|
|
510
|
-
*/
|
|
511
|
-
Media.stopTracks = function (track) {
|
|
512
|
-
if (!track) {
|
|
513
|
-
return _promise.default.resolve();
|
|
514
|
-
}
|
|
515
|
-
return _promise.default.resolve().then(function () {
|
|
516
|
-
if (track && track.stop) {
|
|
517
|
-
try {
|
|
518
|
-
track.stop();
|
|
519
|
-
} catch (e) {
|
|
520
|
-
_loggerProxy.default.logger.error("Media:index#stopTracks --> Unable to stop the track with state ".concat(track.readyState, ", error: ").concat(e));
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
});
|
|
524
|
-
};
|
|
525
|
-
|
|
526
|
-
/**
|
|
527
|
-
*
|
|
528
|
-
* Stop input stream
|
|
529
|
-
* @param {Stream} stream A media stream
|
|
328
|
+
* @param {LocalStream} stream A local stream
|
|
530
329
|
* @returns {null}
|
|
531
|
-
* @deprecated after v1.89.3
|
|
532
330
|
*/
|
|
533
331
|
Media.stopStream = function (stream) {
|
|
534
|
-
_loggerProxy.default.logger.warn('Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3');
|
|
535
332
|
if (!stream) {
|
|
536
333
|
return _promise.default.resolve();
|
|
537
334
|
}
|
|
538
|
-
|
|
539
|
-
/*
|
|
540
|
-
* To release local media
|
|
541
|
-
* 1) Chrome requires all tracks to be stopped (stream.stop got deprecated)
|
|
542
|
-
* 2) Firefox requires the stream to be stopped
|
|
543
|
-
*/
|
|
544
335
|
return _promise.default.resolve().then(function () {
|
|
545
|
-
|
|
546
|
-
stream.getTracks().forEach(function (track) {
|
|
547
|
-
track.stop();
|
|
548
|
-
});
|
|
549
|
-
} else if (stream.stop) {
|
|
336
|
+
try {
|
|
550
337
|
stream.stop();
|
|
338
|
+
} catch (e) {
|
|
339
|
+
_loggerProxy.default.logger.error("Media:index#stopStream --> Unable to stop the stream with ready state => ".concat(stream.readyState, ", error: ").concat(e));
|
|
551
340
|
}
|
|
552
341
|
});
|
|
553
342
|
};
|
|
@@ -582,6 +371,5 @@ Media.getUserMedia = function (mediaSetting, audioVideo, sharePreferences, confi
|
|
|
582
371
|
});
|
|
583
372
|
});
|
|
584
373
|
};
|
|
585
|
-
var _default = Media;
|
|
586
|
-
exports.default = _default;
|
|
374
|
+
var _default = exports.default = Media;
|
|
587
375
|
//# sourceMappingURL=index.js.map
|
package/dist/media/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_loggerProxy","_interopRequireDefault","require","_constants","_config","_peerConnectionManager","_reconnection","_media","_browserDetection","ownKeys","object","enumerableOnly","keys","_Object$keys","_Object$getOwnPropertySymbols","symbols","filter","sym","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","Object","forEach","key","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_BrowserDetection","BrowserDetection","isBrowser","Media","setLocalTrack","enabled","track","reconnectMedia","peerConnection","_ref","meetingId","remoteQualityLevel","enableRtx","enableExtmap","connectionState","PEER_CONNECTION_STATE","CLOSED","FAILED","_promise","reject","ReconnectionError","PeerConnectionManager","createOffer","generateLocalMedias","mediaId","audioMuted","videoMuted","localSdp","_stringify","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","resolve","undefined","checkTracks","trackType","receiveTracks","getDirection","sendTracks","direction","attachMedia","mediaProperties","_ref2","mediaDirection","audioTrack","videoTrack","shareTrack","result","receiveAudio","audioTransceiver","addTransceiver","receiveVideo","videoTransceiver","receiveShare","shareTransceiver","onnegotiationneeded","event","LoggerProxy","logger","info","concat","updateMedia","_ref3","setTrackOnTransceiver","type","sendTrack","receiveTrack","transceiver","sender","replaceTrack","e","error","updateTransceiver","_ref4","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","_Config$meetings","Config","meetings","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","audio","video","navigator","mediaDevices","then","stream","getVideoTracks","applyConstraints","getDisplayMediaParams","defaultWidth","ideal","max","maxWidth","defaultHeight","maxHeight","deviceId","facingMode","fake","process","env","NODE_ENV","getUserMedia","catch","err","logPath","constraint","getSupportedDevice","_ref5","enumerateDevices","devices","supported","device","kind","AUDIO_INPUT","VIDEO_INPUT","getDevices","MediaError","toggleStream","stopTracks","stop","readyState","stopStream","warn","getTracks","mediaSetting","audioVideo","localStream","shareStream","_default","exports"],"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 PEER_CONNECTION_STATE,\n MEDIA_TRACK_CONSTRAINT,\n} from '../constants';\nimport Config from '../config';\nimport PeerConnectionManager from '../peer-connection-manager';\nimport ReconnectionError from '../common/errors/reconnection';\nimport MediaError from '../common/errors/media';\nimport BrowserDetection from '../common/browser-detection';\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 * @param {RTCPeerConnection} peerConnection\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.reconnectMedia = (\n peerConnection: RTCPeerConnection,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n }\n) => {\n if (\n peerConnection.connectionState === PEER_CONNECTION_STATE.CLOSED ||\n peerConnection.connectionState === PEER_CONNECTION_STATE.FAILED\n ) {\n return Promise.reject(new ReconnectionError('Reinitiate peerconnection'));\n }\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n });\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 {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 * Returns the direction and tracks\n * @param {string} trackType type of track (audio/video)\n * @param {object} track tracks passed\n * @param {boolean} receiveTracks do you want to receive tracks from the remote side\n * @returns {Object} returns direction tracks to be added in transceiver\n */\nMedia.checkTracks = (trackType: string, track: object, receiveTracks: boolean) => {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const getDirection = (sendTracks, receiveTracks) => {\n if (sendTracks && receiveTracks) {\n return 'sendrecv';\n }\n if (sendTracks && !receiveTracks) {\n return 'sendonly';\n }\n if (!sendTracks && receiveTracks) {\n return 'recvonly';\n }\n\n return 'inactive';\n };\n\n if (track) {\n return {track, direction: getDirection(!!track, receiveTracks)};\n }\n\n return {track: trackType, direction: getDirection(!!track, receiveTracks)};\n};\n/**\n * creates peerconnection and attaches streams\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Array} [peerConnection, ]\n */\nMedia.attachMedia = (\n mediaProperties: any,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n }\n) => {\n const {mediaDirection, audioTrack, videoTrack, shareTrack, peerConnection} = mediaProperties;\n\n let result = null;\n\n // Add Transceiver for audio\n result = Media.checkTracks(\n 'audio',\n mediaDirection.sendAudio && audioTrack,\n mediaDirection.receiveAudio\n );\n peerConnection.audioTransceiver = peerConnection.addTransceiver(result.track, {\n direction: result.direction,\n });\n\n // Add Transceiver for video\n result = Media.checkTracks(\n 'video',\n mediaDirection.sendVideo && videoTrack,\n mediaDirection.receiveVideo\n );\n peerConnection.videoTransceiver = peerConnection.addTransceiver(result.track, {\n direction: result.direction,\n });\n\n // Add Transceiver for share\n result = Media.checkTracks(\n 'video',\n mediaDirection.sendShare && shareTrack,\n mediaDirection.receiveShare\n );\n peerConnection.shareTransceiver = peerConnection.addTransceiver(result.track, {\n direction: result.direction,\n });\n\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(\n `Media:index#attachMedia --> onnegotiationneeded#PeerConnection: ${event}`\n );\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n });\n};\n\n/**\n * updates all the media streams and creates a new media offer\n * @param {MediaDirection} mediaProperties\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @returns {Promise}\n */\nMedia.updateMedia = (\n mediaProperties: any,\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n }\n) => {\n const {mediaDirection, audioTrack, videoTrack, shareTrack, peerConnection} = mediaProperties;\n\n // update audio transceiver\n Media.setTrackOnTransceiver(peerConnection.audioTransceiver, {\n type: 'audio',\n track: audioTrack,\n sendTrack: mediaDirection.sendAudio && audioTrack,\n receiveTrack: mediaDirection.receiveAudio,\n });\n\n // update video transceiver\n Media.setTrackOnTransceiver(peerConnection.videoTransceiver, {\n type: 'video',\n track: videoTrack,\n sendTrack: mediaDirection.sendVideo && videoTrack,\n receiveTrack: mediaDirection.receiveVideo,\n });\n\n // update content transceiver\n Media.setTrackOnTransceiver(peerConnection.shareTransceiver, {\n type: 'video',\n track: shareTrack,\n sendTrack: mediaDirection.sendShare && shareTrack,\n receiveTrack: mediaDirection.receiveShare,\n });\n peerConnection.onnegotiationneeded = (event) => {\n LoggerProxy.logger.info(\n `Media:index#updateMedia --> onnegotiationneeded#PeerConnection: ${event}`\n );\n };\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n });\n};\n\n/**\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options\n * @param {MediaStreamTrack} options.track\n * @returns {undefined}\n */\nMedia.setTrackOnTransceiver = (\n transceiver: RTCRtpTransceiver,\n options: {\n track: MediaStreamTrack;\n type: any;\n sendTrack: any;\n receiveTrack: any;\n }\n) => {\n const {type, track, sendTrack, receiveTrack} = options;\n\n try {\n const result = Media.checkTracks(type, sendTrack && track, receiveTrack);\n\n transceiver.direction = result.direction;\n if (options.track) {\n transceiver.sender.replaceTrack(track);\n }\n } catch (e) {\n LoggerProxy.logger.error(`Media:index#setTrackOnTransceiver --> ${e}`);\n throw e;\n }\n};\n\n/**\n * creates a new offer\n * @param {Object} meetingProperties\n * @param {string} meetingProperties.meetingId\n * @param {string} meetingProperties.remoteQualityLevel LOW|MEDIUM|HIGH\n * @param {RTCPeerConnection} peerConnection\n * @param {RTCRtpTransceiver} transceiver\n * @param {Object} options see #Media.setTrackOnTransceiver\n * @returns {Promise}\n */\nMedia.updateTransceiver = (\n {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\n }: {\n meetingId: string;\n remoteQualityLevel: string;\n enableRtx: any;\n enableExtmap: any;\n },\n peerConnection: RTCPeerConnection,\n transceiver: RTCRtpTransceiver,\n options: object\n) => {\n Media.setTrackOnTransceiver(transceiver, options);\n\n return PeerConnectionManager.createOffer(peerConnection, {\n meetingId,\n remoteQualityLevel,\n enableRtx,\n enableExtmap,\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 *\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(\n 'Media:index#stopStream --> [DEPRECATION WARNING]: stopStream has been deprecated after v1.89.3'\n );\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 } 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) =>\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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"}
|
|
1
|
+
{"version":3,"names":["_internalMediaCore","require","_loggerProxy","_interopRequireDefault","_constants","_config","_config2","_browserDetection","_rtcMetrics","ownKeys","e","r","t","_Object$keys","_Object$getOwnPropertySymbols","o","filter","_Object$getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","Object","forEach","_defineProperty2","default","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_Object$defineProperty","_BrowserDetection","BrowserDetection","isBrowser","Media","getLocalMedia","options","config","sendAudio","sendVideo","sendShare","sharePreferences","isSharing","getMedia","getDisplayMedia","_promise","resolve","undefined","getDirection","forceSendRecv","receive","send","createMediaConnection","isMultistream","debugId","webex","meetingId","correlationId","_audioStream$outputSt","_videoStream$outputSt","_shareVideoStream$out","_shareAudioStream$out","mediaProperties","remoteQualityLevel","enableRtx","enableExtmap","turnServerInfo","bundlePolicy","iceServers","urls","url","username","credential","password","rtcMetrics","RtcMetrics","MultistreamRoapMediaConnection","data","addMetrics","closeMetrics","sendMetricsInQueue","Error","mediaDirection","audioStream","videoStream","shareVideoStream","shareAudioStream","RoapMediaConnection","skipInactiveTransceivers","requireH264","sdpMunging","convertPort9to0","addContentSlides","bandwidthLimits","audio","StaticConfig","meetings","bandwidth","video","startBitrate","periodicKeyframes","disableExtmap","disableRtx","localTracks","outputStream","getTracks","screenShareVideo","screenShareAudio","direction","receiveAudio","receiveVideo","receiveShare","customResolution","screenResolution","customShareFrameRate","screenFrameRate","hasSharePreferences","hasCustomConstraints","shareConstraints","hasHighFrameRate","highFrameRate","_Config$meetings","Config","resolution","videoShareFrameRate","aspectRatio","cursor","MEDIA_TRACK_CONSTRAINT","CURSOR","AWLAYS","frameRate","height","idealHeight","width","idealWidth","mediaConfig","navigator","mediaDevices","then","stream","getVideoTracks","applyConstraints","getDisplayMediaParams","defaultWidth","ideal","max","maxWidth","defaultHeight","maxHeight","deviceId","facingMode","fake","process","env","NODE_ENV","getUserMedia","catch","err","logPath","LoggerProxy","logger","error","concat","constraint","toggleStream","stopStream","stop","readyState","mediaSetting","audioVideo","localStream","shareStream","_default","exports"],"sources":["index.ts"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n/* globals navigator */\n\nimport {\n RoapMediaConnection,\n MultistreamRoapMediaConnection,\n type MultistreamConnectionConfig,\n} from '@webex/internal-media-core';\nimport {\n LocalStream,\n LocalCameraStream,\n LocalDisplayStream,\n LocalSystemAudioStream,\n LocalMicrophoneStream,\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\nexport type BundlePolicy = MultistreamConnectionConfig['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 {string} correlationId id used in requests to correlate to this session\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 correlationId: 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 audioStream?: LocalMicrophoneStream;\n videoStream?: LocalCameraStream;\n shareVideoStream?: LocalDisplayStream;\n shareAudioStream?: LocalSystemAudioStream;\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 };\n\n if (bundlePolicy) {\n config.bundlePolicy = bundlePolicy;\n }\n\n const rtcMetrics = new RtcMetrics(webex, meetingId, correlationId);\n\n return new MultistreamRoapMediaConnection(\n config,\n meetingId,\n /* the rtc metrics objects callbacks */\n (data) => rtcMetrics.addMetrics(data),\n () => rtcMetrics.closeMetrics(),\n () => rtcMetrics.sendMetricsInQueue()\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, audioStream, videoStream, shareVideoStream, shareAudioStream} =\n 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 // TODO: RoapMediaConnection is not ready to use stream classes yet, so we pass the raw MediaStreamTrack for now SPARK-460530\n localTracks: {\n audio: audioStream?.outputStream?.getTracks()[0],\n video: videoStream?.outputStream?.getTracks()[0],\n screenShareVideo: shareVideoStream?.outputStream?.getTracks()[0],\n screenShareAudio: shareAudioStream?.outputStream?.getTracks()[0], // TODO: add type for screenShareAudio in internal-media-core SPARK-446923\n } as unknown,\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 {LocalStream} stream A local stream\n * @returns {null}\n */\nMedia.stopStream = (stream: LocalStream) => {\n if (!stream) {\n return Promise.resolve();\n }\n\n return Promise.resolve().then(() => {\n try {\n stream.stop();\n } catch (e) {\n LoggerProxy.logger.error(\n `Media:index#stopStream --> Unable to stop the stream with ready state => ${stream.readyState}, error: ${e}`\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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"}
|