@webex/plugin-meetings 2.60.1-next.9 → 2.60.2
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 +8 -58
- package/dist/common/browser-detection.js +3 -2
- package/dist/common/browser-detection.js.map +1 -1
- package/dist/common/collection.js +4 -3
- package/dist/common/collection.js.map +1 -1
- package/dist/common/config.js +2 -1
- package/dist/common/config.js.map +1 -1
- package/dist/common/errors/captcha-error.js +2 -1
- package/dist/common/errors/captcha-error.js.map +1 -1
- package/dist/common/errors/intent-to-join.js +2 -1
- package/dist/common/errors/intent-to-join.js.map +1 -1
- package/dist/common/errors/join-meeting.js +2 -1
- package/dist/common/errors/join-meeting.js.map +1 -1
- package/dist/common/errors/media.js +2 -1
- package/dist/common/errors/media.js.map +1 -1
- package/dist/common/errors/parameter.js +4 -3
- package/dist/common/errors/parameter.js.map +1 -1
- package/dist/common/errors/password-error.js +2 -1
- package/dist/common/errors/password-error.js.map +1 -1
- package/dist/common/errors/permission.js +2 -1
- package/dist/common/errors/permission.js.map +1 -1
- package/dist/common/errors/{reclaim-host-role-errors.js → reclaim-host-role-error.js} +11 -7
- package/dist/common/errors/reclaim-host-role-error.js.map +1 -0
- package/dist/common/errors/reconnection-in-progress.js +2 -1
- package/dist/common/errors/reconnection-in-progress.js.map +1 -1
- package/dist/common/errors/reconnection.js +2 -1
- package/dist/common/errors/reconnection.js.map +1 -1
- package/dist/common/errors/stats.js +2 -1
- package/dist/common/errors/stats.js.map +1 -1
- package/dist/common/errors/webex-errors.d.ts +8 -20
- package/dist/common/errors/webex-errors.js +28 -48
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/errors/webex-meetings-error.js +2 -1
- package/dist/common/errors/webex-meetings-error.js.map +1 -1
- package/dist/common/events/events-scope.js +2 -1
- package/dist/common/events/events-scope.js.map +1 -1
- package/dist/common/events/events.js +2 -1
- package/dist/common/events/events.js.map +1 -1
- package/dist/common/events/trigger-proxy.js +2 -1
- package/dist/common/events/trigger-proxy.js.map +1 -1
- package/dist/common/events/util.js +2 -1
- package/dist/common/events/util.js.map +1 -1
- package/dist/common/logs/logger-config.js +2 -1
- package/dist/common/logs/logger-config.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +3 -2
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.d.ts +1 -3
- package/dist/common/logs/request.js +5 -8
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.d.ts +7 -9
- package/dist/common/queue.js +9 -22
- package/dist/common/queue.js.map +1 -1
- package/dist/config.d.ts +7 -6
- package/dist/config.js +10 -8
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +100 -234
- package/dist/constants.js +444 -433
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/constants.js +6 -3
- package/dist/controls-options-manager/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.d.ts +1 -11
- package/dist/controls-options-manager/enums.js +6 -15
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.d.ts +1 -17
- package/dist/controls-options-manager/index.js +38 -127
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/util.d.ts +7 -1
- package/dist/controls-options-manager/util.js +19 -309
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.d.ts +3 -6
- package/dist/index.js +5 -121
- package/dist/index.js.map +1 -1
- package/dist/locus-info/controlsUtils.js +11 -100
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/embeddedAppsUtils.js +4 -3
- package/dist/locus-info/embeddedAppsUtils.js.map +1 -1
- package/dist/locus-info/fullState.js +2 -1
- package/dist/locus-info/fullState.js.map +1 -1
- package/dist/locus-info/hostUtils.js +2 -1
- package/dist/locus-info/hostUtils.js.map +1 -1
- package/dist/locus-info/index.d.ts +4 -57
- package/dist/locus-info/index.js +84 -425
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +5 -13
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +3 -58
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.d.ts +6 -66
- package/dist/locus-info/parser.js +80 -253
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +13 -97
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.d.ts +0 -2
- package/dist/media/index.js +319 -107
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.d.ts +53 -38
- package/dist/media/properties.js +153 -96
- package/dist/media/properties.js.map +1 -1
- package/dist/media/util.js +22 -1
- package/dist/media/util.js.map +1 -1
- package/dist/mediaQualityMetrics/config.d.ts +230 -234
- package/dist/mediaQualityMetrics/config.js +498 -302
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/effectsState.d.ts +42 -0
- package/dist/meeting/effectsState.js +260 -0
- package/dist/meeting/effectsState.js.map +1 -0
- package/dist/meeting/in-meeting-actions.d.ts +0 -88
- package/dist/meeting/in-meeting-actions.js +3 -94
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.d.ts +520 -705
- package/dist/meeting/index.js +3083 -5041
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/muteState.d.ts +25 -93
- package/dist/meeting/muteState.js +133 -224
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.d.ts +47 -82
- package/dist/meeting/request.js +199 -304
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/state.js +2 -1
- package/dist/meeting/state.js.map +1 -1
- package/dist/meeting/util.d.ts +1 -118
- package/dist/meeting/util.js +435 -676
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/collection.js +4 -3
- package/dist/meeting-info/collection.js.map +1 -1
- package/dist/meeting-info/index.d.ts +1 -13
- package/dist/meeting-info/index.js +7 -74
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.d.ts +1 -31
- package/dist/meeting-info/meeting-info-v2.js +63 -200
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/request.js +2 -1
- package/dist/meeting-info/request.js.map +1 -1
- package/dist/meeting-info/util.js +3 -2
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +41 -39
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.d.ts +0 -17
- package/dist/meetings/collection.js +4 -42
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.d.ts +20 -114
- package/dist/meetings/index.js +133 -540
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/request.js +3 -4
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +6 -107
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.d.ts +1 -13
- package/dist/member/index.js +2 -45
- package/dist/member/index.js.map +1 -1
- package/dist/member/member.types.js +4 -3
- package/dist/member/member.types.js.map +1 -1
- package/dist/member/util.js +29 -120
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.d.ts +0 -5
- package/dist/members/collection.js +2 -11
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.d.ts +11 -56
- package/dist/members/index.js +47 -174
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.d.ts +11 -67
- package/dist/members/request.js +54 -102
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +4 -3
- package/dist/members/types.js.map +1 -1
- package/dist/members/util.d.ts +1 -214
- package/dist/members/util.js +284 -327
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/config.d.ts +169 -0
- package/dist/metrics/config.js +289 -0
- package/dist/metrics/config.js.map +1 -0
- package/dist/metrics/constants.d.ts +6 -15
- package/dist/metrics/constants.js +9 -17
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.d.ts +111 -4
- package/dist/metrics/index.js +452 -4
- package/dist/metrics/index.js.map +1 -1
- package/dist/networkQualityMonitor/index.js +4 -5
- package/dist/networkQualityMonitor/index.js.map +1 -1
- package/dist/peer-connection-manager/index.d.ts +6 -0
- package/dist/peer-connection-manager/index.js +671 -0
- package/dist/peer-connection-manager/index.js.map +1 -0
- package/dist/peer-connection-manager/util.d.ts +6 -0
- package/dist/peer-connection-manager/util.js +110 -0
- package/dist/peer-connection-manager/util.js.map +1 -0
- package/dist/personal-meeting-room/index.js +3 -2
- package/dist/personal-meeting-room/index.js.map +1 -1
- package/dist/personal-meeting-room/request.js +3 -2
- package/dist/personal-meeting-room/request.js.map +1 -1
- package/dist/personal-meeting-room/util.js +2 -1
- package/dist/personal-meeting-room/util.js.map +1 -1
- package/dist/reachability/index.d.ts +95 -61
- package/dist/reachability/index.js +392 -304
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.d.ts +3 -7
- package/dist/reachability/request.js +10 -18
- package/dist/reachability/request.js.map +1 -1
- package/dist/reactions/reactions.d.ts +2 -2
- package/dist/reactions/reactions.js +6 -4
- package/dist/reactions/reactions.js.map +1 -1
- package/dist/reactions/reactions.type.d.ts +3 -23
- package/dist/reactions/reactions.type.js +23 -21
- package/dist/reactions/reactions.type.js.map +1 -1
- package/dist/reconnection-manager/index.d.ts +8 -32
- package/dist/reconnection-manager/index.js +232 -285
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/enums.js +5 -4
- package/dist/recording-controller/enums.js.map +1 -1
- package/dist/recording-controller/index.d.ts +1 -15
- package/dist/recording-controller/index.js +46 -57
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.d.ts +4 -5
- package/dist/recording-controller/util.js +10 -10
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/collection.d.ts +10 -0
- package/dist/roap/collection.js +63 -0
- package/dist/roap/collection.js.map +1 -0
- package/dist/roap/handler.d.ts +47 -0
- package/dist/roap/handler.js +279 -0
- package/dist/roap/handler.js.map +1 -0
- package/dist/roap/index.d.ts +47 -9
- package/dist/roap/index.js +238 -100
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.d.ts +12 -18
- package/dist/roap/request.js +180 -126
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/state.d.ts +9 -0
- package/dist/roap/state.js +127 -0
- package/dist/roap/state.js.map +1 -0
- package/dist/roap/turnDiscovery.d.ts +16 -27
- package/dist/roap/turnDiscovery.js +105 -115
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/util.d.ts +2 -0
- package/dist/roap/util.js +76 -0
- package/dist/roap/util.js.map +1 -0
- package/dist/statsAnalyzer/global.d.ts +83 -1
- package/dist/statsAnalyzer/global.js +85 -2
- package/dist/statsAnalyzer/global.js.map +1 -1
- package/dist/statsAnalyzer/index.d.ts +30 -50
- package/dist/statsAnalyzer/index.js +511 -436
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +6 -8
- package/dist/statsAnalyzer/mqaUtil.js +90 -130
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/transcription/index.js +2 -1
- package/dist/transcription/index.js.map +1 -1
- package/package.json +26 -39
- package/src/common/errors/webex-errors.ts +12 -36
- package/src/common/logs/logger-proxy.ts +1 -1
- package/src/common/logs/request.ts +1 -5
- package/src/common/queue.ts +8 -22
- package/src/config.ts +7 -6
- package/src/constants.ts +100 -265
- package/src/controls-options-manager/enums.ts +0 -12
- package/src/controls-options-manager/index.ts +21 -116
- package/src/controls-options-manager/util.ts +14 -294
- package/src/index.js +15 -0
- package/src/locus-info/controlsUtils.ts +0 -110
- package/src/locus-info/index.ts +61 -450
- package/src/locus-info/infoUtils.ts +2 -14
- package/src/locus-info/mediaSharesUtils.ts +0 -64
- package/src/locus-info/parser.ts +47 -258
- package/src/locus-info/selfUtils.ts +2 -85
- package/src/media/index.ts +370 -153
- package/src/media/properties.ts +136 -106
- package/src/media/util.ts +21 -0
- package/src/mediaQualityMetrics/config.ts +377 -244
- package/src/meeting/effectsState.ts +209 -0
- package/src/meeting/in-meeting-actions.ts +0 -176
- package/src/meeting/index.ts +2581 -4306
- package/src/meeting/muteState.ts +138 -224
- package/src/meeting/request.ts +127 -214
- package/src/meeting/util.ts +423 -687
- package/src/meeting-info/index.ts +8 -81
- package/src/meeting-info/meeting-info-v2.ts +13 -163
- package/src/meeting-info/util.ts +1 -1
- package/src/meeting-info/utilv2.ts +28 -28
- package/src/meetings/collection.ts +0 -33
- package/src/meetings/index.ts +136 -531
- package/src/meetings/request.ts +0 -2
- package/src/meetings/util.ts +5 -116
- package/src/member/index.ts +1 -43
- package/src/member/util.ts +28 -125
- package/src/members/collection.ts +0 -8
- package/src/members/index.ts +52 -187
- package/src/members/request.ts +27 -87
- package/src/members/util.ts +291 -332
- package/src/metrics/config.ts +485 -0
- package/src/metrics/constants.ts +6 -15
- package/src/metrics/index.ts +471 -1
- package/src/networkQualityMonitor/index.ts +6 -6
- package/src/peer-connection-manager/index.ts +847 -0
- package/src/peer-connection-manager/util.ts +119 -0
- package/src/reachability/index.ts +347 -246
- package/src/reachability/request.ts +8 -17
- package/src/reactions/reactions.ts +4 -4
- package/src/reactions/reactions.type.ts +4 -30
- package/src/reconnection-manager/index.ts +156 -168
- package/src/recording-controller/index.ts +3 -20
- package/src/recording-controller/util.ts +9 -26
- package/src/roap/collection.ts +62 -0
- package/src/roap/handler.ts +294 -0
- package/src/roap/index.ts +241 -96
- package/src/roap/request.ts +148 -74
- package/src/roap/state.ts +156 -0
- package/src/roap/turnDiscovery.ts +56 -62
- package/src/roap/util.ts +100 -0
- package/src/statsAnalyzer/global.ts +84 -1
- package/src/statsAnalyzer/index.ts +645 -479
- package/src/statsAnalyzer/mqaUtil.ts +126 -128
- package/test/integration/spec/journey.js +264 -320
- package/test/integration/spec/space-meeting.js +4 -77
- package/test/unit/spec/common/queue.js +2 -31
- package/test/unit/spec/controls-options-manager/index.js +0 -163
- package/test/unit/spec/controls-options-manager/util.js +60 -576
- package/test/unit/spec/fixture/locus.js +0 -1
- package/test/unit/spec/locus-info/controlsUtils.js +30 -323
- package/test/unit/spec/locus-info/index.js +15 -1437
- package/test/unit/spec/locus-info/infoUtils.js +16 -54
- package/test/unit/spec/locus-info/lib/SeqCmp.json +0 -16
- package/test/unit/spec/locus-info/lib/selfConstant.js +0 -48
- package/test/unit/spec/locus-info/parser.js +35 -116
- package/test/unit/spec/locus-info/selfUtils.js +0 -275
- package/test/unit/spec/media/properties.ts +84 -75
- package/test/unit/spec/meeting/effectsState.js +281 -0
- package/test/unit/spec/meeting/in-meeting-actions.ts +0 -86
- package/test/unit/spec/meeting/index.js +2313 -8384
- package/test/unit/spec/meeting/muteState.js +213 -409
- package/test/unit/spec/meeting/request.js +43 -523
- package/test/unit/spec/meeting/utils.js +24 -834
- package/test/unit/spec/meeting-info/meetinginfov2.js +5 -527
- package/test/unit/spec/meeting-info/utilv2.js +0 -21
- package/test/unit/spec/meetings/collection.js +0 -26
- package/test/unit/spec/meetings/index.js +232 -1445
- package/test/unit/spec/meetings/utils.js +2 -202
- package/test/unit/spec/member/index.js +9 -32
- package/test/unit/spec/member/util.js +61 -499
- package/test/unit/spec/members/index.js +5 -394
- package/test/unit/spec/members/request.js +27 -206
- package/test/unit/spec/members/utils.js +38 -173
- package/test/unit/spec/metrics/index.js +50 -1
- package/test/unit/spec/networkQualityMonitor/index.js +4 -4
- package/test/unit/spec/peerconnection-manager/index.js +218 -0
- package/test/unit/spec/peerconnection-manager/utils.js +49 -0
- package/test/unit/spec/peerconnection-manager/utils.test-fixtures.ts +388 -0
- package/test/unit/spec/reachability/index.ts +24 -532
- package/test/unit/spec/reconnection-manager/index.js +24 -163
- package/test/unit/spec/recording-controller/index.js +218 -293
- package/test/unit/spec/recording-controller/util.js +96 -223
- package/test/unit/spec/roap/index.ts +77 -187
- package/test/unit/spec/roap/turnDiscovery.ts +48 -86
- package/test/unit/spec/roap/util.js +30 -0
- package/test/unit/spec/stats-analyzer/index.js +165 -644
- package/test/utils/testUtils.js +45 -0
- package/test/utils/webex-config.js +0 -4
- package/test/utils/webex-test-users.js +3 -7
- package/dist/annotation/annotation.types.d.ts +0 -42
- package/dist/annotation/annotation.types.js +0 -7
- package/dist/annotation/annotation.types.js.map +0 -1
- package/dist/annotation/constants.d.ts +0 -31
- package/dist/annotation/constants.js +0 -41
- package/dist/annotation/constants.js.map +0 -1
- package/dist/annotation/index.d.ts +0 -117
- package/dist/annotation/index.js +0 -357
- package/dist/annotation/index.js.map +0 -1
- package/dist/breakouts/breakout.d.ts +0 -8
- package/dist/breakouts/breakout.js +0 -215
- package/dist/breakouts/breakout.js.map +0 -1
- package/dist/breakouts/collection.d.ts +0 -5
- package/dist/breakouts/collection.js +0 -22
- package/dist/breakouts/collection.js.map +0 -1
- package/dist/breakouts/edit-lock-error.d.ts +0 -15
- package/dist/breakouts/edit-lock-error.js +0 -51
- package/dist/breakouts/edit-lock-error.js.map +0 -1
- package/dist/breakouts/events.d.ts +0 -8
- package/dist/breakouts/events.js +0 -44
- package/dist/breakouts/events.js.map +0 -1
- package/dist/breakouts/index.d.ts +0 -5
- package/dist/breakouts/index.js +0 -1047
- package/dist/breakouts/index.js.map +0 -1
- package/dist/breakouts/request.d.ts +0 -22
- package/dist/breakouts/request.js +0 -77
- package/dist/breakouts/request.js.map +0 -1
- package/dist/breakouts/utils.d.ts +0 -15
- package/dist/breakouts/utils.js +0 -64
- package/dist/breakouts/utils.js.map +0 -1
- package/dist/common/errors/no-meeting-info.d.ts +0 -14
- package/dist/common/errors/no-meeting-info.js +0 -50
- package/dist/common/errors/no-meeting-info.js.map +0 -1
- package/dist/common/errors/reclaim-host-role-errors.js.map +0 -1
- package/dist/controls-options-manager/types.d.ts +0 -43
- package/dist/controls-options-manager/types.js +0 -7
- package/dist/controls-options-manager/types.js.map +0 -1
- package/dist/interceptors/index.d.ts +0 -2
- package/dist/interceptors/index.js +0 -15
- package/dist/interceptors/index.js.map +0 -1
- package/dist/interceptors/locusRetry.d.ts +0 -27
- package/dist/interceptors/locusRetry.js +0 -94
- package/dist/interceptors/locusRetry.js.map +0 -1
- package/dist/interpretation/collection.d.ts +0 -5
- package/dist/interpretation/collection.js +0 -22
- package/dist/interpretation/collection.js.map +0 -1
- package/dist/interpretation/index.d.ts +0 -5
- package/dist/interpretation/index.js +0 -365
- package/dist/interpretation/index.js.map +0 -1
- package/dist/interpretation/siLanguage.d.ts +0 -5
- package/dist/interpretation/siLanguage.js +0 -24
- package/dist/interpretation/siLanguage.js.map +0 -1
- package/dist/meeting/locusMediaRequest.d.ts +0 -74
- package/dist/meeting/locusMediaRequest.js +0 -291
- package/dist/meeting/locusMediaRequest.js.map +0 -1
- package/dist/meeting/request.type.d.ts +0 -11
- package/dist/meeting/request.type.js +0 -7
- package/dist/meeting/request.type.js.map +0 -1
- package/dist/meeting/voicea-meeting.d.ts +0 -20
- package/dist/meeting/voicea-meeting.js +0 -201
- package/dist/meeting/voicea-meeting.js.map +0 -1
- package/dist/meetings/meetings.types.d.ts +0 -4
- package/dist/meetings/meetings.types.js +0 -7
- package/dist/meetings/meetings.types.js.map +0 -1
- package/dist/member/types.d.ts +0 -32
- package/dist/member/types.js +0 -23
- package/dist/member/types.js.map +0 -1
- package/dist/multistream/mediaRequestManager.d.ts +0 -118
- package/dist/multistream/mediaRequestManager.js +0 -344
- package/dist/multistream/mediaRequestManager.js.map +0 -1
- package/dist/multistream/receiveSlot.d.ts +0 -68
- package/dist/multistream/receiveSlot.js +0 -200
- package/dist/multistream/receiveSlot.js.map +0 -1
- package/dist/multistream/receiveSlotManager.d.ts +0 -56
- package/dist/multistream/receiveSlotManager.js +0 -174
- package/dist/multistream/receiveSlotManager.js.map +0 -1
- package/dist/multistream/remoteMedia.d.ts +0 -72
- package/dist/multistream/remoteMedia.js +0 -268
- package/dist/multistream/remoteMedia.js.map +0 -1
- package/dist/multistream/remoteMediaGroup.d.ts +0 -47
- package/dist/multistream/remoteMediaGroup.js +0 -267
- package/dist/multistream/remoteMediaGroup.js.map +0 -1
- package/dist/multistream/remoteMediaManager.d.ts +0 -285
- package/dist/multistream/remoteMediaManager.js +0 -1211
- package/dist/multistream/remoteMediaManager.js.map +0 -1
- package/dist/multistream/sendSlotManager.d.ts +0 -61
- package/dist/multistream/sendSlotManager.js +0 -236
- package/dist/multistream/sendSlotManager.js.map +0 -1
- package/dist/reachability/clusterReachability.d.ts +0 -109
- package/dist/reachability/clusterReachability.js +0 -357
- package/dist/reachability/clusterReachability.js.map +0 -1
- package/dist/reachability/util.d.ts +0 -8
- package/dist/reachability/util.js +0 -29
- package/dist/reachability/util.js.map +0 -1
- package/dist/reactions/constants.d.ts +0 -3
- package/dist/reactions/constants.js +0 -12
- package/dist/reactions/constants.js.map +0 -1
- package/dist/rtcMetrics/constants.d.ts +0 -4
- package/dist/rtcMetrics/constants.js +0 -11
- package/dist/rtcMetrics/constants.js.map +0 -1
- package/dist/rtcMetrics/index.d.ts +0 -54
- package/dist/rtcMetrics/index.js +0 -140
- package/dist/rtcMetrics/index.js.map +0 -1
- package/dist/webinar/collection.d.ts +0 -16
- package/dist/webinar/collection.js +0 -43
- package/dist/webinar/collection.js.map +0 -1
- package/dist/webinar/index.d.ts +0 -5
- package/dist/webinar/index.js +0 -68
- package/dist/webinar/index.js.map +0 -1
- package/src/annotation/annotation.types.ts +0 -50
- package/src/annotation/constants.ts +0 -36
- package/src/annotation/index.ts +0 -328
- package/src/breakouts/README.md +0 -220
- package/src/breakouts/breakout.ts +0 -188
- package/src/breakouts/collection.ts +0 -19
- package/src/breakouts/edit-lock-error.ts +0 -25
- package/src/breakouts/events.ts +0 -56
- package/src/breakouts/index.ts +0 -925
- package/src/breakouts/request.ts +0 -55
- package/src/breakouts/utils.ts +0 -57
- package/src/common/errors/no-meeting-info.ts +0 -24
- package/src/controls-options-manager/types.ts +0 -59
- package/src/index.ts +0 -44
- package/src/interceptors/index.ts +0 -3
- package/src/interceptors/locusRetry.ts +0 -67
- package/src/interpretation/README.md +0 -60
- package/src/interpretation/collection.ts +0 -19
- package/src/interpretation/index.ts +0 -332
- package/src/interpretation/siLanguage.ts +0 -18
- package/src/meeting/locusMediaRequest.ts +0 -313
- package/src/meeting/request.type.ts +0 -13
- package/src/meeting/voicea-meeting.ts +0 -161
- package/src/meetings/meetings.types.ts +0 -12
- package/src/member/types.ts +0 -38
- package/src/multistream/mediaRequestManager.ts +0 -440
- package/src/multistream/receiveSlot.ts +0 -184
- package/src/multistream/receiveSlotManager.ts +0 -166
- package/src/multistream/remoteMedia.ts +0 -254
- package/src/multistream/remoteMediaGroup.ts +0 -284
- package/src/multistream/remoteMediaManager.ts +0 -1145
- package/src/multistream/sendSlotManager.ts +0 -170
- package/src/reachability/clusterReachability.ts +0 -320
- package/src/reachability/util.ts +0 -24
- package/src/reactions/constants.ts +0 -4
- package/src/rtcMetrics/constants.ts +0 -3
- package/src/rtcMetrics/index.ts +0 -124
- package/src/webinar/collection.ts +0 -31
- package/src/webinar/index.ts +0 -62
- package/test/integration/spec/converged-space-meetings.js +0 -233
- package/test/unit/spec/annotation/index.ts +0 -418
- package/test/unit/spec/breakouts/breakout.ts +0 -237
- package/test/unit/spec/breakouts/collection.ts +0 -15
- package/test/unit/spec/breakouts/edit-lock-error.ts +0 -30
- package/test/unit/spec/breakouts/events.ts +0 -89
- package/test/unit/spec/breakouts/index.ts +0 -1790
- package/test/unit/spec/breakouts/request.ts +0 -104
- package/test/unit/spec/breakouts/utils.js +0 -72
- package/test/unit/spec/interceptors/locusRetry.ts +0 -131
- package/test/unit/spec/interpretation/collection.ts +0 -15
- package/test/unit/spec/interpretation/index.ts +0 -589
- package/test/unit/spec/interpretation/siLanguage.ts +0 -28
- package/test/unit/spec/locus-info/mediaSharesUtils.ts +0 -32
- package/test/unit/spec/media/index.ts +0 -290
- package/test/unit/spec/meeting/locusMediaRequest.ts +0 -442
- package/test/unit/spec/meeting-info/index.js +0 -300
- package/test/unit/spec/multistream/mediaRequestManager.ts +0 -1418
- package/test/unit/spec/multistream/receiveSlot.ts +0 -163
- package/test/unit/spec/multistream/receiveSlotManager.ts +0 -203
- package/test/unit/spec/multistream/remoteMedia.ts +0 -255
- package/test/unit/spec/multistream/remoteMediaGroup.ts +0 -662
- package/test/unit/spec/multistream/remoteMediaManager.ts +0 -1924
- package/test/unit/spec/multistream/sendSlotManager.ts +0 -242
- package/test/unit/spec/reachability/clusterReachability.ts +0 -279
- package/test/unit/spec/reachability/request.js +0 -68
- package/test/unit/spec/reachability/util.ts +0 -40
- package/test/unit/spec/roap/request.ts +0 -255
- package/test/unit/spec/rtcMetrics/index.ts +0 -93
- package/test/unit/spec/webinar/collection.ts +0 -13
- package/test/unit/spec/webinar/index.ts +0 -60
- package/test/utils/constants.js +0 -9
- package/test/utils/integrationTestUtils.js +0 -46
- /package/dist/common/errors/{reclaim-host-role-errors.d.ts → reclaim-host-role-error.d.ts} +0 -0
- /package/src/common/errors/{reclaim-host-role-errors.ts → reclaim-host-role-error.ts} +0 -0
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
/* eslint-disable valid-jsdoc */
|
|
2
|
-
import {
|
|
3
|
-
MediaType,
|
|
4
|
-
ReceiveSlot as WcmeReceiveSlot,
|
|
5
|
-
ReceiveSlotEvents as WcmeReceiveSlotEvents,
|
|
6
|
-
StreamState,
|
|
7
|
-
} from '@webex/internal-media-core';
|
|
8
|
-
|
|
9
|
-
import LoggerProxy from '../common/logs/logger-proxy';
|
|
10
|
-
import EventsScope from '../common/events/events-scope';
|
|
11
|
-
|
|
12
|
-
export const ReceiveSlotEvents = {
|
|
13
|
-
SourceUpdate: 'sourceUpdate',
|
|
14
|
-
MaxFsUpdate: 'maxFsUpdate',
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
export type {StreamState} from '@webex/internal-media-core';
|
|
18
|
-
export type CSI = number;
|
|
19
|
-
export type MemberId = string;
|
|
20
|
-
export type ReceiveSlotId = string;
|
|
21
|
-
|
|
22
|
-
let receiveSlotCounter = 0;
|
|
23
|
-
|
|
24
|
-
export type FindMemberIdCallback = (csi: CSI) => MemberId | undefined;
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Class representing a receive slot. A single receive slot is able to receive a single track
|
|
28
|
-
* for example some participant's main video or audio
|
|
29
|
-
*/
|
|
30
|
-
export class ReceiveSlot extends EventsScope {
|
|
31
|
-
private readonly mcReceiveSlot: WcmeReceiveSlot;
|
|
32
|
-
|
|
33
|
-
private readonly findMemberIdCallback: FindMemberIdCallback;
|
|
34
|
-
|
|
35
|
-
public readonly id: ReceiveSlotId;
|
|
36
|
-
|
|
37
|
-
public readonly mediaType: MediaType;
|
|
38
|
-
|
|
39
|
-
#memberId?: MemberId;
|
|
40
|
-
|
|
41
|
-
#csi?: CSI;
|
|
42
|
-
|
|
43
|
-
#sourceState: StreamState;
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* constructor - don't use it directly, you should always use meeting.receiveSlotManager.allocateSlot()
|
|
47
|
-
* to create any receive slots
|
|
48
|
-
*
|
|
49
|
-
* @param {MediaType} mediaType
|
|
50
|
-
* @param {ReceiveSlot} mcReceiveSlot
|
|
51
|
-
* @param {FindMemberIdCallback} findMemberIdCallback callback for finding memberId for given CSI
|
|
52
|
-
*/
|
|
53
|
-
constructor(
|
|
54
|
-
mediaType: MediaType,
|
|
55
|
-
mcReceiveSlot: WcmeReceiveSlot,
|
|
56
|
-
findMemberIdCallback: FindMemberIdCallback
|
|
57
|
-
) {
|
|
58
|
-
super();
|
|
59
|
-
|
|
60
|
-
receiveSlotCounter += 1;
|
|
61
|
-
|
|
62
|
-
this.findMemberIdCallback = findMemberIdCallback;
|
|
63
|
-
this.mediaType = mediaType;
|
|
64
|
-
this.mcReceiveSlot = mcReceiveSlot;
|
|
65
|
-
this.#sourceState = 'no source';
|
|
66
|
-
this.id = `r${receiveSlotCounter}`;
|
|
67
|
-
|
|
68
|
-
this.setupEventListeners();
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Getter for memberId
|
|
73
|
-
*/
|
|
74
|
-
public get memberId() {
|
|
75
|
-
return this.#memberId;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Getter for csi
|
|
80
|
-
*/
|
|
81
|
-
public get csi() {
|
|
82
|
-
return this.#csi;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
* Set the max frame size for this slot
|
|
87
|
-
* @param newFs frame size
|
|
88
|
-
*/
|
|
89
|
-
public setMaxFs(newFs) {
|
|
90
|
-
// emit event for media request manager to listen to
|
|
91
|
-
|
|
92
|
-
this.emit(
|
|
93
|
-
{
|
|
94
|
-
file: 'meeting/receiveSlot',
|
|
95
|
-
function: 'findMemberId',
|
|
96
|
-
},
|
|
97
|
-
ReceiveSlotEvents.MaxFsUpdate,
|
|
98
|
-
{
|
|
99
|
-
maxFs: newFs,
|
|
100
|
-
}
|
|
101
|
-
);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Getter for sourceState
|
|
106
|
-
*/
|
|
107
|
-
public get sourceState() {
|
|
108
|
-
return this.#sourceState;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* registers event handlers with the underlying ReceiveSlot
|
|
113
|
-
*/
|
|
114
|
-
private setupEventListeners() {
|
|
115
|
-
const scope = {
|
|
116
|
-
file: 'meeting/receiveSlot',
|
|
117
|
-
function: 'setupEventListeners',
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
this.mcReceiveSlot.on(
|
|
121
|
-
WcmeReceiveSlotEvents.SourceUpdate,
|
|
122
|
-
(state: StreamState, csi?: number) => {
|
|
123
|
-
LoggerProxy.logger.log(
|
|
124
|
-
`ReceiveSlot#setupEventListeners --> got source update on receive slot ${this.id}, mediaType=${this.mediaType}, csi=${csi}, state=${state}`
|
|
125
|
-
);
|
|
126
|
-
this.#memberId = csi ? this.findMemberIdCallback(csi) : undefined;
|
|
127
|
-
this.#csi = csi;
|
|
128
|
-
this.#sourceState = state;
|
|
129
|
-
|
|
130
|
-
this.emit(scope, ReceiveSlotEvents.SourceUpdate, {
|
|
131
|
-
state: this.#sourceState,
|
|
132
|
-
csi: this.#csi,
|
|
133
|
-
memberId: this.#memberId,
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/** Tries to find the member id for this receive slot if it hasn't got one */
|
|
140
|
-
public findMemberId() {
|
|
141
|
-
if (this.#memberId === undefined && this.#csi) {
|
|
142
|
-
this.#memberId = this.findMemberIdCallback(this.#csi);
|
|
143
|
-
|
|
144
|
-
if (this.#memberId) {
|
|
145
|
-
// if we found the memberId, simulate source update so that the client app knows that something's changed
|
|
146
|
-
this.emit(
|
|
147
|
-
{
|
|
148
|
-
file: 'meeting/receiveSlot',
|
|
149
|
-
function: 'findMemberId',
|
|
150
|
-
},
|
|
151
|
-
ReceiveSlotEvents.SourceUpdate,
|
|
152
|
-
{
|
|
153
|
-
state: this.#sourceState,
|
|
154
|
-
csi: this.#csi,
|
|
155
|
-
memberId: this.#memberId,
|
|
156
|
-
}
|
|
157
|
-
);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* @returns {string} a log message used to identify the receive slot
|
|
164
|
-
*/
|
|
165
|
-
public get logString() {
|
|
166
|
-
return `ReceiveSlot - ${this.id}: ${JSON.stringify(this.mcReceiveSlot.id)}`;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/**
|
|
170
|
-
* The MediaStream object associated with this slot.
|
|
171
|
-
*
|
|
172
|
-
* @returns {MediaStream} The MediaStreamTrack.
|
|
173
|
-
*/
|
|
174
|
-
get stream(): MediaStream {
|
|
175
|
-
return this.mcReceiveSlot.stream;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* The underlying WCME receive slot
|
|
180
|
-
*/
|
|
181
|
-
get wcmeReceiveSlot(): WcmeReceiveSlot {
|
|
182
|
-
return this.mcReceiveSlot;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
/* eslint-disable valid-jsdoc */
|
|
2
|
-
/* eslint-disable import/prefer-default-export */
|
|
3
|
-
import {MediaType, ReceiveSlot as WcmeReceiveSlot} from '@webex/internal-media-core';
|
|
4
|
-
import LoggerProxy from '../common/logs/logger-proxy';
|
|
5
|
-
|
|
6
|
-
import {FindMemberIdCallback, ReceiveSlot} from './receiveSlot';
|
|
7
|
-
|
|
8
|
-
export type CreateSlotCallback = (mediaType: MediaType) => Promise<WcmeReceiveSlot>;
|
|
9
|
-
|
|
10
|
-
export type {CSI, FindMemberIdCallback} from './receiveSlot';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Manages all receive slots used by a meeting. WMCE receive slots cannot be ever deleted,
|
|
14
|
-
* so this manager has a pool in order to re-use the slots that were released earlier.
|
|
15
|
-
*/
|
|
16
|
-
export class ReceiveSlotManager {
|
|
17
|
-
private allocatedSlots: {[key in MediaType]: ReceiveSlot[]};
|
|
18
|
-
|
|
19
|
-
private freeSlots: {[key in MediaType]: ReceiveSlot[]};
|
|
20
|
-
|
|
21
|
-
private createSlotCallback: CreateSlotCallback;
|
|
22
|
-
|
|
23
|
-
private findMemberIdByCsiCallback: FindMemberIdCallback;
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Constructor
|
|
27
|
-
* @param {Meeting} meeting
|
|
28
|
-
*/
|
|
29
|
-
constructor(
|
|
30
|
-
createSlotCallback: CreateSlotCallback,
|
|
31
|
-
findMemberIdByCsiCallback: FindMemberIdCallback
|
|
32
|
-
) {
|
|
33
|
-
this.allocatedSlots = {
|
|
34
|
-
[MediaType.AudioMain]: [],
|
|
35
|
-
[MediaType.VideoMain]: [],
|
|
36
|
-
[MediaType.AudioSlides]: [],
|
|
37
|
-
[MediaType.VideoSlides]: [],
|
|
38
|
-
};
|
|
39
|
-
this.freeSlots = {
|
|
40
|
-
[MediaType.AudioMain]: [],
|
|
41
|
-
[MediaType.VideoMain]: [],
|
|
42
|
-
[MediaType.AudioSlides]: [],
|
|
43
|
-
[MediaType.VideoSlides]: [],
|
|
44
|
-
};
|
|
45
|
-
this.createSlotCallback = createSlotCallback;
|
|
46
|
-
this.findMemberIdByCsiCallback = findMemberIdByCsiCallback;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Creates a new receive slot or returns one from the existing pool of free slots
|
|
51
|
-
*
|
|
52
|
-
* @param {MediaType} mediaType
|
|
53
|
-
* @returns {Promise<ReceiveSlot>}
|
|
54
|
-
*/
|
|
55
|
-
async allocateSlot(mediaType: MediaType): Promise<ReceiveSlot> {
|
|
56
|
-
// try to use one of the free ones
|
|
57
|
-
const availableSlot = this.freeSlots[mediaType].pop();
|
|
58
|
-
|
|
59
|
-
if (availableSlot) {
|
|
60
|
-
this.allocatedSlots[mediaType].push(availableSlot);
|
|
61
|
-
|
|
62
|
-
LoggerProxy.logger.log(`${mediaType}: receive slot re-used: ${availableSlot.id}`);
|
|
63
|
-
|
|
64
|
-
return availableSlot;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
// we have to create a new one
|
|
68
|
-
const wcmeReceiveSlot = await this.createSlotCallback(mediaType);
|
|
69
|
-
|
|
70
|
-
const receiveSlot = new ReceiveSlot(mediaType, wcmeReceiveSlot, this.findMemberIdByCsiCallback);
|
|
71
|
-
|
|
72
|
-
this.allocatedSlots[mediaType].push(receiveSlot);
|
|
73
|
-
LoggerProxy.logger.log(`${mediaType}: new receive slot allocated: ${receiveSlot.id}`);
|
|
74
|
-
|
|
75
|
-
return receiveSlot;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Releases the slot back to the pool so it can be re-used by others in the future
|
|
80
|
-
* @param {ReceiveSlot} slot
|
|
81
|
-
*/
|
|
82
|
-
releaseSlot(slot: ReceiveSlot) {
|
|
83
|
-
const idx = this.allocatedSlots[slot.mediaType].findIndex(
|
|
84
|
-
(allocatedSlot) => allocatedSlot === slot
|
|
85
|
-
);
|
|
86
|
-
|
|
87
|
-
if (idx >= 0) {
|
|
88
|
-
this.allocatedSlots[slot.mediaType].splice(idx, 1);
|
|
89
|
-
this.freeSlots[slot.mediaType].push(slot);
|
|
90
|
-
LoggerProxy.logger.log(`${slot.mediaType}: receive slot released: ${slot.id}`);
|
|
91
|
-
} else {
|
|
92
|
-
LoggerProxy.logger.warn(
|
|
93
|
-
`ReceiveSlotManager#releaseSlot --> trying to release a ${slot.mediaType}} slot that is not managed by this ReceiveSlotManager`
|
|
94
|
-
);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Resets the slot manager - this method should be called when the media connection is torn down
|
|
100
|
-
*/
|
|
101
|
-
reset() {
|
|
102
|
-
this.allocatedSlots = {
|
|
103
|
-
[MediaType.AudioMain]: [],
|
|
104
|
-
[MediaType.VideoMain]: [],
|
|
105
|
-
[MediaType.AudioSlides]: [],
|
|
106
|
-
[MediaType.VideoSlides]: [],
|
|
107
|
-
};
|
|
108
|
-
this.freeSlots = {
|
|
109
|
-
[MediaType.AudioMain]: [],
|
|
110
|
-
[MediaType.VideoMain]: [],
|
|
111
|
-
[MediaType.AudioSlides]: [],
|
|
112
|
-
[MediaType.VideoSlides]: [],
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Returns statistics about the managed slots
|
|
118
|
-
*
|
|
119
|
-
* @returns {Object}
|
|
120
|
-
*/
|
|
121
|
-
getStats() {
|
|
122
|
-
const numAllocatedSlots = {};
|
|
123
|
-
const numFreeSlots = {};
|
|
124
|
-
|
|
125
|
-
Object.keys(this.allocatedSlots).forEach((key) => {
|
|
126
|
-
if (this.allocatedSlots[key].length > 0) {
|
|
127
|
-
numAllocatedSlots[key] = this.allocatedSlots[key].length;
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
Object.keys(this.freeSlots).forEach((key) => {
|
|
132
|
-
if (this.freeSlots[key].length > 0) {
|
|
133
|
-
numFreeSlots[key] = this.freeSlots[key].length;
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
return {
|
|
138
|
-
numAllocatedSlots,
|
|
139
|
-
numFreeSlots,
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Tries to find the member id on all allocated receive slots
|
|
145
|
-
* This function should be called when new members are added to the meeting.
|
|
146
|
-
*/
|
|
147
|
-
updateMemberIds() {
|
|
148
|
-
Object.keys(this.allocatedSlots).forEach((key) => {
|
|
149
|
-
this.allocatedSlots[key].forEach((slot: ReceiveSlot) => {
|
|
150
|
-
slot.findMemberId();
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Find a receive slot by a ssrc.
|
|
157
|
-
*
|
|
158
|
-
* @param ssrc - The ssrc of the receive slot to find.
|
|
159
|
-
* @returns - The receive slot with this ssrc, undefined if not found.
|
|
160
|
-
*/
|
|
161
|
-
findReceiveSlotBySsrc(ssrc: number): ReceiveSlot | undefined {
|
|
162
|
-
return Object.values(this.allocatedSlots)
|
|
163
|
-
.flat()
|
|
164
|
-
.find((r) => ssrc && r.wcmeReceiveSlot?.id?.ssrc === ssrc);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
@@ -1,254 +0,0 @@
|
|
|
1
|
-
/* eslint-disable valid-jsdoc */
|
|
2
|
-
import {MediaType, StreamState} from '@webex/internal-media-core';
|
|
3
|
-
import LoggerProxy from '../common/logs/logger-proxy';
|
|
4
|
-
import EventsScope from '../common/events/events-scope';
|
|
5
|
-
|
|
6
|
-
import {MediaRequestId, MediaRequestManager} from './mediaRequestManager';
|
|
7
|
-
import {CSI, ReceiveSlot, ReceiveSlotEvents} from './receiveSlot';
|
|
8
|
-
|
|
9
|
-
export const RemoteMediaEvents = {
|
|
10
|
-
SourceUpdate: ReceiveSlotEvents.SourceUpdate,
|
|
11
|
-
Stopped: 'stopped',
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export type RemoteVideoResolution =
|
|
15
|
-
| 'thumbnail' // the smallest possible resolution, 90p or less
|
|
16
|
-
| 'very small' // 180p or less
|
|
17
|
-
| 'small' // 360p or less
|
|
18
|
-
| 'medium' // 720p or less
|
|
19
|
-
| 'large' // 1080p or less
|
|
20
|
-
| 'best'; // highest possible resolution
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Converts pane size into h264 maxFs
|
|
24
|
-
* @param {PaneSize} paneSize
|
|
25
|
-
* @returns {number}
|
|
26
|
-
*/
|
|
27
|
-
export function getMaxFs(paneSize: RemoteVideoResolution): number {
|
|
28
|
-
let maxFs;
|
|
29
|
-
|
|
30
|
-
switch (paneSize) {
|
|
31
|
-
case 'thumbnail':
|
|
32
|
-
maxFs = 60;
|
|
33
|
-
break;
|
|
34
|
-
case 'very small':
|
|
35
|
-
maxFs = 240;
|
|
36
|
-
break;
|
|
37
|
-
case 'small':
|
|
38
|
-
maxFs = 920;
|
|
39
|
-
break;
|
|
40
|
-
case 'medium':
|
|
41
|
-
maxFs = 3600;
|
|
42
|
-
break;
|
|
43
|
-
case 'large':
|
|
44
|
-
maxFs = 8192;
|
|
45
|
-
break;
|
|
46
|
-
case 'best':
|
|
47
|
-
maxFs = 8192; // for now 'best' is 1080p, so same as 'large'
|
|
48
|
-
break;
|
|
49
|
-
default:
|
|
50
|
-
LoggerProxy.logger.warn(
|
|
51
|
-
`RemoteMedia#getMaxFs --> unsupported paneSize: ${paneSize}, using "medium" instead`
|
|
52
|
-
);
|
|
53
|
-
maxFs = 3600;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return maxFs;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
type Options = {
|
|
60
|
-
resolution?: RemoteVideoResolution; // applies only to groups of type MediaType.VideoMain and MediaType.VideoSlides
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
export type RemoteMediaId = string;
|
|
64
|
-
|
|
65
|
-
let remoteMediaCounter = 0;
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Class representing a remote audio/video stream.
|
|
69
|
-
*
|
|
70
|
-
* Internally it is associated with a specific receive slot
|
|
71
|
-
* and a media request for it.
|
|
72
|
-
*/
|
|
73
|
-
export class RemoteMedia extends EventsScope {
|
|
74
|
-
private receiveSlot?: ReceiveSlot;
|
|
75
|
-
|
|
76
|
-
private readonly mediaRequestManager: MediaRequestManager;
|
|
77
|
-
|
|
78
|
-
private readonly options: Options;
|
|
79
|
-
|
|
80
|
-
private mediaRequestId?: MediaRequestId;
|
|
81
|
-
|
|
82
|
-
public readonly id: RemoteMediaId;
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Constructs RemoteMedia instance
|
|
86
|
-
*
|
|
87
|
-
* @param receiveSlot
|
|
88
|
-
* @param mediaRequestManager
|
|
89
|
-
* @param options
|
|
90
|
-
*/
|
|
91
|
-
constructor(
|
|
92
|
-
receiveSlot: ReceiveSlot,
|
|
93
|
-
mediaRequestManager: MediaRequestManager,
|
|
94
|
-
options?: Options
|
|
95
|
-
) {
|
|
96
|
-
super();
|
|
97
|
-
remoteMediaCounter += 1;
|
|
98
|
-
this.receiveSlot = receiveSlot;
|
|
99
|
-
this.mediaRequestManager = mediaRequestManager;
|
|
100
|
-
this.options = options || {};
|
|
101
|
-
this.setupEventListeners();
|
|
102
|
-
this.id = `RM${remoteMediaCounter}-${this.receiveSlot.id}`;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Supply the width and height of the video element
|
|
107
|
-
* to restrict the requested resolution to this size
|
|
108
|
-
* @param width width of the video element
|
|
109
|
-
* @param height height of the video element
|
|
110
|
-
*/
|
|
111
|
-
public setSizeHint(width, height) {
|
|
112
|
-
// only base on height for now
|
|
113
|
-
let fs: number;
|
|
114
|
-
|
|
115
|
-
if (height < 135) {
|
|
116
|
-
fs = 60;
|
|
117
|
-
} else if (height < 270) {
|
|
118
|
-
fs = 240;
|
|
119
|
-
} else if (height < 540) {
|
|
120
|
-
fs = 920;
|
|
121
|
-
} else if (height <= 720) {
|
|
122
|
-
fs = 3600;
|
|
123
|
-
} else {
|
|
124
|
-
fs = 8192;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
this.receiveSlot?.setMaxFs(fs);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* Invalidates the remote media by clearing the reference to a receive slot and
|
|
132
|
-
* cancelling the media request.
|
|
133
|
-
* After this call the remote media is unusable.
|
|
134
|
-
*
|
|
135
|
-
* @param {boolean} commit - whether to commit the cancellation of the media request
|
|
136
|
-
* @internal
|
|
137
|
-
*/
|
|
138
|
-
public stop(commit = true) {
|
|
139
|
-
this.cancelMediaRequest(commit);
|
|
140
|
-
this.receiveSlot?.removeAllListeners();
|
|
141
|
-
this.receiveSlot = undefined;
|
|
142
|
-
this.emit(
|
|
143
|
-
{
|
|
144
|
-
file: 'multistream/remoteMedia',
|
|
145
|
-
function: 'stop',
|
|
146
|
-
},
|
|
147
|
-
RemoteMediaEvents.Stopped,
|
|
148
|
-
{}
|
|
149
|
-
);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Sends a new media request. This method can only be used for receiver-selected policy,
|
|
154
|
-
* because only in that policy we have a 1-1 relationship between RemoteMedia and MediaRequest
|
|
155
|
-
* and the request id is then stored in this RemoteMedia instance.
|
|
156
|
-
* For active-speaker policy, the same request is shared among many RemoteMedia instances,
|
|
157
|
-
* so it's managed through RemoteMediaGroup
|
|
158
|
-
*
|
|
159
|
-
* @internal
|
|
160
|
-
*/
|
|
161
|
-
public sendMediaRequest(csi: CSI, commit: boolean) {
|
|
162
|
-
if (this.mediaRequestId) {
|
|
163
|
-
this.cancelMediaRequest(false);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
if (!this.receiveSlot) {
|
|
167
|
-
throw new Error('sendMediaRequest() called on an invalidated RemoteMedia instance');
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
this.mediaRequestId = this.mediaRequestManager.addRequest(
|
|
171
|
-
{
|
|
172
|
-
policyInfo: {
|
|
173
|
-
policy: 'receiver-selected',
|
|
174
|
-
csi,
|
|
175
|
-
},
|
|
176
|
-
receiveSlots: [this.receiveSlot],
|
|
177
|
-
codecInfo: this.options.resolution && {
|
|
178
|
-
codec: 'h264',
|
|
179
|
-
maxFs: getMaxFs(this.options.resolution),
|
|
180
|
-
},
|
|
181
|
-
},
|
|
182
|
-
commit
|
|
183
|
-
);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
/**
|
|
187
|
-
* @internal
|
|
188
|
-
*/
|
|
189
|
-
public cancelMediaRequest(commit: boolean) {
|
|
190
|
-
if (this.mediaRequestId) {
|
|
191
|
-
this.mediaRequestManager.cancelRequest(this.mediaRequestId, commit);
|
|
192
|
-
this.mediaRequestId = undefined;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* registers event listeners on the receive slot and forwards all the events
|
|
198
|
-
*/
|
|
199
|
-
private setupEventListeners() {
|
|
200
|
-
if (this.receiveSlot) {
|
|
201
|
-
const scope = {
|
|
202
|
-
file: 'multistream/remoteMedia',
|
|
203
|
-
function: 'setupEventListeners',
|
|
204
|
-
};
|
|
205
|
-
|
|
206
|
-
this.receiveSlot.on(ReceiveSlotEvents.SourceUpdate, (data) => {
|
|
207
|
-
this.emit(scope, RemoteMediaEvents.SourceUpdate, data);
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* Getter for mediaType
|
|
214
|
-
*/
|
|
215
|
-
public get mediaType(): MediaType {
|
|
216
|
-
return this.receiveSlot?.mediaType;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
/**
|
|
220
|
-
* Getter for memberId
|
|
221
|
-
*/
|
|
222
|
-
public get memberId() {
|
|
223
|
-
return this.receiveSlot?.memberId;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* Getter for csi
|
|
228
|
-
*/
|
|
229
|
-
public get csi() {
|
|
230
|
-
return this.receiveSlot?.csi;
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
/**
|
|
234
|
-
* Getter for source state
|
|
235
|
-
*/
|
|
236
|
-
public get sourceState(): StreamState {
|
|
237
|
-
return this.receiveSlot?.sourceState;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
/**
|
|
241
|
-
* Getter for remote media stream
|
|
242
|
-
*/
|
|
243
|
-
public get stream() {
|
|
244
|
-
return this.receiveSlot?.stream;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* @internal
|
|
249
|
-
* @returns {ReceiveSlot}
|
|
250
|
-
*/
|
|
251
|
-
public getUnderlyingReceiveSlot() {
|
|
252
|
-
return this.receiveSlot;
|
|
253
|
-
}
|
|
254
|
-
}
|