@webex/plugin-meetings 3.0.0-beta.31 → 3.0.0-beta.310
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.js +7 -0
- package/dist/annotation/annotation.types.js.map +1 -0
- package/dist/annotation/constants.js +49 -0
- package/dist/annotation/constants.js.map +1 -0
- package/dist/annotation/index.js +342 -0
- package/dist/annotation/index.js.map +1 -0
- package/dist/breakouts/breakout.js +94 -15
- package/dist/breakouts/breakout.js.map +1 -1
- package/dist/breakouts/edit-lock-error.js +52 -0
- package/dist/breakouts/edit-lock-error.js.map +1 -0
- package/dist/breakouts/events.js +45 -0
- package/dist/breakouts/events.js.map +1 -0
- package/dist/breakouts/index.js +709 -35
- package/dist/breakouts/index.js.map +1 -1
- package/dist/breakouts/utils.js +45 -1
- package/dist/breakouts/utils.js.map +1 -1
- package/dist/common/errors/no-meeting-info.js +51 -0
- package/dist/common/errors/no-meeting-info.js.map +1 -0
- package/dist/common/errors/reclaim-host-role-errors.js +158 -0
- package/dist/common/errors/reclaim-host-role-errors.js.map +1 -0
- package/dist/common/errors/webex-errors.js +48 -7
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/common/logs/logger-proxy.js +1 -1
- package/dist/common/logs/logger-proxy.js.map +1 -1
- package/dist/common/logs/request.js +5 -1
- package/dist/common/logs/request.js.map +1 -1
- package/dist/common/queue.js +24 -9
- package/dist/common/queue.js.map +1 -1
- package/dist/config.js +5 -11
- package/dist/config.js.map +1 -1
- package/dist/constants.js +233 -29
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +14 -2
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/index.js +109 -15
- package/dist/controls-options-manager/index.js.map +1 -1
- package/dist/controls-options-manager/types.js +7 -0
- package/dist/controls-options-manager/types.js.map +1 -0
- package/dist/controls-options-manager/util.js +309 -18
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/index.js +112 -1
- package/dist/index.js.map +1 -1
- package/dist/interpretation/collection.js +23 -0
- package/dist/interpretation/collection.js.map +1 -0
- package/dist/interpretation/index.js +366 -0
- package/dist/interpretation/index.js.map +1 -0
- package/dist/interpretation/siLanguage.js +25 -0
- package/dist/interpretation/siLanguage.js.map +1 -0
- package/dist/locus-info/controlsUtils.js +91 -2
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +383 -62
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/infoUtils.js +7 -1
- package/dist/locus-info/infoUtils.js.map +1 -1
- package/dist/locus-info/mediaSharesUtils.js +57 -1
- package/dist/locus-info/mediaSharesUtils.js.map +1 -1
- package/dist/locus-info/parser.js +249 -72
- package/dist/locus-info/parser.js.map +1 -1
- package/dist/locus-info/selfUtils.js +89 -14
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +61 -116
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +73 -124
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +82 -2
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +3777 -2929
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +292 -0
- package/dist/meeting/locusMediaRequest.js.map +1 -0
- package/dist/meeting/muteState.js +230 -124
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +260 -196
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/util.js +601 -417
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/index.js +73 -7
- package/dist/meeting-info/index.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +192 -51
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/util.js +1 -1
- package/dist/meeting-info/util.js.map +1 -1
- package/dist/meeting-info/utilv2.js +36 -36
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/collection.js +39 -0
- package/dist/meetings/collection.js.map +1 -1
- package/dist/meetings/index.js +415 -115
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/meetings.types.js +7 -0
- package/dist/meetings/meetings.types.js.map +1 -0
- package/dist/meetings/request.js +2 -0
- package/dist/meetings/request.js.map +1 -1
- package/dist/meetings/util.js +72 -6
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +58 -0
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +25 -0
- package/dist/member/types.js.map +1 -0
- package/dist/member/util.js +132 -25
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js +10 -0
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +102 -6
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +106 -38
- package/dist/members/request.js.map +1 -1
- package/dist/members/types.js +15 -0
- package/dist/members/types.js.map +1 -0
- package/dist/members/util.js +326 -232
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +13 -5
- package/dist/metrics/constants.js.map +1 -1
- package/dist/metrics/index.js +1 -468
- package/dist/metrics/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +238 -49
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/multistream/receiveSlot.js +29 -16
- package/dist/multistream/receiveSlot.js.map +1 -1
- package/dist/multistream/receiveSlotManager.js +39 -36
- package/dist/multistream/receiveSlotManager.js.map +1 -1
- package/dist/multistream/remoteMedia.js +44 -18
- package/dist/multistream/remoteMedia.js.map +1 -1
- package/dist/multistream/remoteMediaGroup.js +60 -3
- package/dist/multistream/remoteMediaGroup.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +209 -59
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/multistream/sendSlotManager.js +233 -0
- package/dist/multistream/sendSlotManager.js.map +1 -0
- package/dist/reachability/index.js +225 -59
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/request.js +17 -8
- package/dist/reachability/request.js.map +1 -1
- package/dist/reconnection-manager/index.js +201 -156
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/index.js +21 -2
- package/dist/recording-controller/index.js.map +1 -1
- package/dist/recording-controller/util.js +9 -8
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js +62 -32
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/request.js +112 -97
- package/dist/roap/request.js.map +1 -1
- package/dist/roap/turnDiscovery.js +95 -36
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/rtcMetrics/constants.js +12 -0
- package/dist/rtcMetrics/constants.js.map +1 -0
- package/dist/rtcMetrics/index.js +117 -0
- package/dist/rtcMetrics/index.js.map +1 -0
- package/dist/statsAnalyzer/index.js +86 -78
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +11 -10
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/types/annotation/annotation.types.d.ts +42 -0
- package/dist/types/annotation/constants.d.ts +31 -0
- package/dist/types/annotation/index.d.ts +117 -0
- package/dist/types/breakouts/edit-lock-error.d.ts +15 -0
- package/dist/types/breakouts/events.d.ts +8 -0
- package/dist/types/breakouts/utils.d.ts +14 -0
- package/dist/types/common/errors/no-meeting-info.d.ts +14 -0
- package/dist/types/common/errors/reclaim-host-role-errors.d.ts +60 -0
- package/dist/types/common/errors/webex-errors.d.ts +25 -1
- package/dist/types/common/logs/request.d.ts +2 -0
- package/dist/types/common/queue.d.ts +9 -7
- package/dist/types/config.d.ts +1 -7
- package/dist/types/constants.d.ts +194 -24
- package/dist/types/controls-options-manager/enums.d.ts +11 -1
- package/dist/types/controls-options-manager/index.d.ts +17 -1
- package/dist/types/controls-options-manager/types.d.ts +43 -0
- package/dist/types/controls-options-manager/util.d.ts +1 -7
- package/dist/types/index.d.ts +6 -4
- package/dist/types/interpretation/collection.d.ts +5 -0
- package/dist/types/interpretation/index.d.ts +5 -0
- package/dist/types/interpretation/siLanguage.d.ts +5 -0
- package/dist/types/locus-info/index.d.ts +57 -4
- package/dist/types/locus-info/parser.d.ts +67 -6
- package/dist/types/media/index.d.ts +2 -0
- package/dist/types/media/properties.d.ts +34 -48
- package/dist/types/meeting/in-meeting-actions.d.ts +82 -2
- package/dist/types/meeting/index.d.ts +463 -510
- package/dist/types/meeting/locusMediaRequest.d.ts +74 -0
- package/dist/types/meeting/muteState.d.ts +99 -23
- package/dist/types/meeting/request.d.ts +72 -43
- package/dist/types/meeting/util.d.ts +101 -1
- package/dist/types/meeting-info/index.d.ts +13 -1
- package/dist/types/meeting-info/meeting-info-v2.d.ts +31 -1
- package/dist/types/meetings/collection.d.ts +17 -0
- package/dist/types/meetings/index.d.ts +98 -20
- package/dist/types/meetings/meetings.types.d.ts +4 -0
- package/dist/types/member/index.d.ts +14 -0
- package/dist/types/member/types.d.ts +32 -0
- package/dist/types/members/collection.d.ts +5 -0
- package/dist/types/members/index.d.ts +35 -2
- package/dist/types/members/request.d.ts +73 -9
- package/dist/types/members/types.d.ts +25 -0
- package/dist/types/members/util.d.ts +214 -1
- package/dist/types/metrics/constants.d.ts +12 -4
- package/dist/types/metrics/index.d.ts +4 -119
- package/dist/types/multistream/mediaRequestManager.d.ts +73 -5
- package/dist/types/multistream/receiveSlot.d.ts +13 -11
- package/dist/types/multistream/receiveSlotManager.d.ts +14 -4
- package/dist/types/multistream/remoteMedia.d.ts +8 -29
- package/dist/types/multistream/remoteMediaGroup.d.ts +0 -9
- package/dist/types/multistream/remoteMediaManager.d.ts +46 -2
- package/dist/types/multistream/sendSlotManager.d.ts +61 -0
- package/dist/types/reachability/index.d.ts +61 -7
- package/dist/types/reachability/request.d.ts +7 -3
- package/dist/types/reconnection-manager/index.d.ts +9 -0
- package/dist/types/recording-controller/index.d.ts +15 -1
- package/dist/types/recording-controller/util.d.ts +5 -4
- package/dist/types/roap/index.d.ts +2 -1
- package/dist/types/roap/request.d.ts +15 -11
- package/dist/types/roap/turnDiscovery.d.ts +21 -3
- package/dist/types/rtcMetrics/constants.d.ts +4 -0
- package/dist/types/rtcMetrics/index.d.ts +47 -0
- package/dist/types/statsAnalyzer/index.d.ts +7 -1
- package/dist/types/webinar/collection.d.ts +16 -0
- package/dist/types/webinar/index.d.ts +5 -0
- package/dist/webinar/collection.js +44 -0
- package/dist/webinar/collection.js.map +1 -0
- package/dist/webinar/index.js +69 -0
- package/dist/webinar/index.js.map +1 -0
- package/package.json +23 -20
- 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 +42 -12
- package/src/breakouts/breakout.ts +67 -9
- package/src/breakouts/edit-lock-error.ts +25 -0
- package/src/breakouts/events.ts +56 -0
- package/src/breakouts/index.ts +592 -20
- package/src/breakouts/utils.ts +42 -0
- package/src/common/errors/no-meeting-info.ts +24 -0
- package/src/common/errors/reclaim-host-role-errors.ts +134 -0
- package/src/common/errors/webex-errors.ts +44 -2
- 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 +4 -10
- package/src/constants.ts +221 -19
- 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 +40 -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 +108 -0
- package/src/locus-info/index.ts +413 -59
- package/src/locus-info/infoUtils.ts +10 -2
- package/src/locus-info/mediaSharesUtils.ts +64 -0
- package/src/locus-info/parser.ts +258 -47
- package/src/locus-info/selfUtils.ts +81 -5
- package/src/media/index.ts +102 -122
- package/src/media/properties.ts +87 -110
- package/src/meeting/in-meeting-actions.ts +163 -3
- package/src/meeting/index.ts +3132 -2541
- package/src/meeting/locusMediaRequest.ts +313 -0
- package/src/meeting/muteState.ts +229 -131
- package/src/meeting/request.ts +177 -121
- package/src/meeting/util.ts +588 -394
- package/src/meeting-info/index.ts +81 -8
- package/src/meeting-info/meeting-info-v2.ts +170 -14
- package/src/meeting-info/util.ts +1 -1
- package/src/meeting-info/utilv2.ts +23 -23
- package/src/meetings/collection.ts +33 -0
- package/src/meetings/index.ts +445 -123
- package/src/meetings/meetings.types.ts +12 -0
- package/src/meetings/request.ts +2 -0
- package/src/meetings/util.ts +80 -11
- package/src/member/index.ts +58 -0
- package/src/member/types.ts +38 -0
- package/src/member/util.ts +141 -25
- package/src/members/collection.ts +8 -0
- package/src/members/index.ts +134 -8
- package/src/members/request.ts +97 -17
- package/src/members/types.ts +29 -0
- package/src/members/util.ts +333 -240
- package/src/metrics/constants.ts +12 -4
- package/src/metrics/index.ts +1 -490
- package/src/multistream/mediaRequestManager.ts +289 -79
- package/src/multistream/receiveSlot.ts +31 -17
- package/src/multistream/receiveSlotManager.ts +34 -24
- package/src/multistream/remoteMedia.ts +27 -2
- package/src/multistream/remoteMediaGroup.ts +59 -0
- package/src/multistream/remoteMediaManager.ts +148 -30
- package/src/multistream/sendSlotManager.ts +170 -0
- package/src/reachability/index.ts +228 -37
- package/src/reachability/request.ts +17 -8
- package/src/reconnection-manager/index.ts +83 -56
- package/src/recording-controller/index.ts +20 -3
- package/src/recording-controller/util.ts +26 -9
- package/src/roap/index.ts +63 -32
- package/src/roap/request.ts +100 -104
- package/src/roap/turnDiscovery.ts +48 -26
- package/src/rtcMetrics/constants.ts +3 -0
- package/src/rtcMetrics/index.ts +100 -0
- package/src/statsAnalyzer/index.ts +105 -91
- package/src/statsAnalyzer/mqaUtil.ts +13 -14
- package/src/webinar/collection.ts +31 -0
- package/src/webinar/index.ts +62 -0
- package/test/integration/spec/converged-space-meetings.js +60 -3
- package/test/integration/spec/journey.js +320 -261
- package/test/integration/spec/space-meeting.js +76 -3
- package/test/unit/spec/annotation/index.ts +418 -0
- package/test/unit/spec/breakouts/breakout.ts +118 -28
- 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 +1395 -69
- package/test/unit/spec/breakouts/utils.js +52 -1
- 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/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 +316 -43
- package/test/unit/spec/locus-info/index.js +1304 -33
- package/test/unit/spec/locus-info/infoUtils.js +37 -15
- package/test/unit/spec/locus-info/lib/SeqCmp.json +16 -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/selfConstant.js +27 -4
- package/test/unit/spec/locus-info/selfUtils.js +208 -17
- package/test/unit/spec/media/index.ts +104 -37
- package/test/unit/spec/media/properties.ts +2 -2
- package/test/unit/spec/meeting/in-meeting-actions.ts +81 -3
- package/test/unit/spec/meeting/index.js +5216 -1956
- package/test/unit/spec/meeting/locusMediaRequest.ts +442 -0
- package/test/unit/spec/meeting/muteState.js +408 -208
- package/test/unit/spec/meeting/request.js +483 -49
- package/test/unit/spec/meeting/utils.js +679 -64
- package/test/unit/spec/meeting-info/index.js +300 -0
- package/test/unit/spec/meeting-info/meetinginfov2.js +526 -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 +1011 -205
- package/test/unit/spec/meetings/utils.js +202 -2
- package/test/unit/spec/member/index.js +61 -6
- package/test/unit/spec/member/util.js +510 -34
- package/test/unit/spec/members/index.js +432 -1
- package/test/unit/spec/members/request.js +206 -27
- package/test/unit/spec/members/utils.js +210 -0
- package/test/unit/spec/metrics/index.js +1 -50
- package/test/unit/spec/multistream/mediaRequestManager.ts +803 -162
- package/test/unit/spec/multistream/receiveSlot.ts +28 -20
- package/test/unit/spec/multistream/receiveSlotManager.ts +32 -30
- package/test/unit/spec/multistream/remoteMedia.ts +30 -0
- package/test/unit/spec/multistream/remoteMediaGroup.ts +266 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +326 -0
- package/test/unit/spec/multistream/sendSlotManager.ts +242 -0
- package/test/unit/spec/reachability/index.ts +549 -9
- package/test/unit/spec/reachability/request.js +68 -0
- package/test/unit/spec/reconnection-manager/index.js +85 -9
- package/test/unit/spec/recording-controller/index.js +294 -218
- package/test/unit/spec/recording-controller/util.js +223 -96
- package/test/unit/spec/roap/index.ts +178 -64
- package/test/unit/spec/roap/request.ts +203 -85
- package/test/unit/spec/roap/turnDiscovery.ts +82 -36
- package/test/unit/spec/rtcMetrics/index.ts +73 -0
- package/test/unit/spec/stats-analyzer/index.js +136 -2
- package/test/unit/spec/webinar/collection.ts +13 -0
- package/test/unit/spec/webinar/index.ts +60 -0
- package/test/utils/integrationTestUtils.js +46 -0
- package/test/utils/testUtils.js +0 -52
- package/dist/meeting/effectsState.js +0 -262
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/metrics/config.js +0 -299
- package/dist/metrics/config.js.map +0 -1
- package/dist/types/meeting/effectsState.d.ts +0 -42
- package/dist/types/metrics/config.d.ts +0 -178
- package/src/index.js +0 -16
- package/src/meeting/effectsState.ts +0 -211
- package/src/metrics/config.ts +0 -495
- package/test/unit/spec/meeting/effectsState.js +0 -285
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable valid-jsdoc */
|
|
2
|
-
import {MediaType,
|
|
2
|
+
import {MediaType, StreamState} from '@webex/internal-media-core';
|
|
3
3
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
4
4
|
import EventsScope from '../common/events/events-scope';
|
|
5
5
|
|
|
@@ -102,6 +102,31 @@ export class RemoteMedia extends EventsScope {
|
|
|
102
102
|
this.id = `RM${remoteMediaCounter}-${this.receiveSlot.id}`;
|
|
103
103
|
}
|
|
104
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
|
+
|
|
105
130
|
/**
|
|
106
131
|
* Invalidates the remote media by clearing the reference to a receive slot and
|
|
107
132
|
* cancelling the media request.
|
|
@@ -208,7 +233,7 @@ export class RemoteMedia extends EventsScope {
|
|
|
208
233
|
/**
|
|
209
234
|
* Getter for source state
|
|
210
235
|
*/
|
|
211
|
-
public get sourceState():
|
|
236
|
+
public get sourceState(): StreamState {
|
|
212
237
|
return this.receiveSlot?.sourceState;
|
|
213
238
|
}
|
|
214
239
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* eslint-disable valid-jsdoc */
|
|
2
2
|
/* eslint-disable require-jsdoc */
|
|
3
3
|
/* eslint-disable import/prefer-default-export */
|
|
4
|
+
import {forEach} from 'lodash';
|
|
4
5
|
import LoggerProxy from '../common/logs/logger-proxy';
|
|
5
6
|
|
|
6
7
|
import {getMaxFs, RemoteMedia, RemoteVideoResolution} from './remoteMedia';
|
|
@@ -66,6 +67,53 @@ export class RemoteMediaGroup {
|
|
|
66
67
|
return [...this.unpinnedRemoteMedia, ...this.pinnedRemoteMedia];
|
|
67
68
|
}
|
|
68
69
|
|
|
70
|
+
/**
|
|
71
|
+
* Sets CSIs for multiple RemoteMedia instances belonging to this RemoteMediaGroup.
|
|
72
|
+
* For each entry in the remoteMediaCsis array:
|
|
73
|
+
* - if csi is specified, the RemoteMedia instance is pinned to that CSI
|
|
74
|
+
* - if csi is undefined, the RemoteMedia instance is unpinned
|
|
75
|
+
* @internal
|
|
76
|
+
*/
|
|
77
|
+
public setActiveSpeakerCsis(
|
|
78
|
+
remoteMediaCsis: {remoteMedia: RemoteMedia; csi?: number}[],
|
|
79
|
+
commit = true
|
|
80
|
+
): void {
|
|
81
|
+
forEach(remoteMediaCsis, ({csi, remoteMedia}) => {
|
|
82
|
+
if (csi) {
|
|
83
|
+
if (!(this.pinnedRemoteMedia.indexOf(remoteMedia) >= 0)) {
|
|
84
|
+
const unpinId = this.unpinnedRemoteMedia.indexOf(remoteMedia);
|
|
85
|
+
if (unpinId >= 0) {
|
|
86
|
+
this.unpinnedRemoteMedia.splice(unpinId, 1);
|
|
87
|
+
this.pinnedRemoteMedia.push(remoteMedia);
|
|
88
|
+
} else {
|
|
89
|
+
throw new Error(
|
|
90
|
+
`failed to pin a remote media object ${remoteMedia.id}, because it is not found in this remote media group`
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
remoteMedia.sendMediaRequest(csi, false);
|
|
95
|
+
} else {
|
|
96
|
+
if (!(this.unpinnedRemoteMedia.indexOf(remoteMedia) >= 0)) {
|
|
97
|
+
const pinId = this.pinnedRemoteMedia.indexOf(remoteMedia);
|
|
98
|
+
if (pinId >= 0) {
|
|
99
|
+
this.pinnedRemoteMedia.splice(pinId, 1);
|
|
100
|
+
this.unpinnedRemoteMedia.push(remoteMedia);
|
|
101
|
+
} else {
|
|
102
|
+
throw new Error(
|
|
103
|
+
`failed to unpin a remote media object ${remoteMedia.id}, because it is not found in this remote media group`
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
remoteMedia.cancelMediaRequest(false);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
this.cancelActiveSpeakerMediaRequest(false);
|
|
111
|
+
this.sendActiveSpeakerMediaRequest(false);
|
|
112
|
+
if (commit) {
|
|
113
|
+
this.mediaRequestManager.commit();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
69
117
|
/**
|
|
70
118
|
* Pins a specific remote media instance to a specfic CSI, so the media will
|
|
71
119
|
* no longer come from active speaker, but from that CSI.
|
|
@@ -151,6 +199,17 @@ export class RemoteMediaGroup {
|
|
|
151
199
|
throw new Error(`remote media object ${remoteMedia.id} not found in the group`);
|
|
152
200
|
}
|
|
153
201
|
|
|
202
|
+
/**
|
|
203
|
+
* setPreferLiveVideo - sets preferLiveVideo to true/false
|
|
204
|
+
* @internal
|
|
205
|
+
*/
|
|
206
|
+
public setPreferLiveVideo(preferLiveVideo: boolean, commit: boolean) {
|
|
207
|
+
if (this.options.preferLiveVideo !== preferLiveVideo) {
|
|
208
|
+
this.options.preferLiveVideo = preferLiveVideo;
|
|
209
|
+
this.sendActiveSpeakerMediaRequest(commit);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
154
213
|
private sendActiveSpeakerMediaRequest(commit: boolean) {
|
|
155
214
|
this.cancelActiveSpeakerMediaRequest(false);
|
|
156
215
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable valid-jsdoc */
|
|
2
|
-
import {cloneDeep, remove} from 'lodash';
|
|
2
|
+
import {cloneDeep, forEach, remove} from 'lodash';
|
|
3
3
|
import {EventMap} from 'typed-emitter';
|
|
4
4
|
import {MediaType} from '@webex/internal-media-core';
|
|
5
5
|
|
|
@@ -96,6 +96,7 @@ const OnePlusFiveLayout: VideoLayout = {
|
|
|
96
96
|
};
|
|
97
97
|
|
|
98
98
|
// A layout with 2 big panes for 2 main active speakers and a strip of 6 small panes for other active speakers:
|
|
99
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
99
100
|
const TwoMainPlusSixSmallLayout: VideoLayout = {
|
|
100
101
|
activeSpeakerVideoPaneGroups: [
|
|
101
102
|
{
|
|
@@ -472,6 +473,8 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
472
473
|
if (!this.started) {
|
|
473
474
|
throw new Error('setLayout() called before start()');
|
|
474
475
|
}
|
|
476
|
+
LoggerProxy.logger.log(`RemoteMediaManager#setLayout --> new layout selected: ${layoutId}`);
|
|
477
|
+
|
|
475
478
|
this.currentLayoutId = layoutId;
|
|
476
479
|
this.currentLayout = cloneDeep(this.config.video.layouts[this.currentLayoutId]);
|
|
477
480
|
|
|
@@ -490,6 +493,38 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
490
493
|
return this.currentLayoutId;
|
|
491
494
|
}
|
|
492
495
|
|
|
496
|
+
/**
|
|
497
|
+
* sets the preferLiveVideo
|
|
498
|
+
*/
|
|
499
|
+
public setPreferLiveVideo(preferLiveVideo: boolean) {
|
|
500
|
+
LoggerProxy.logger.log(
|
|
501
|
+
`RemoteMediaManager#setPreferLiveVideo --> setPreferLiveVideo is called to set preferLiveVideo to ${preferLiveVideo}`
|
|
502
|
+
);
|
|
503
|
+
this.config.video.preferLiveVideo = preferLiveVideo;
|
|
504
|
+
Object.values(this.media.video.activeSpeakerGroups).forEach((activeSpeakerGroup) => {
|
|
505
|
+
activeSpeakerGroup.setPreferLiveVideo(preferLiveVideo, false);
|
|
506
|
+
});
|
|
507
|
+
this.mediaRequestManagers.video.commit();
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* Sets CSIs for multiple RemoteMedia instances belonging to RemoteMediaGroup.
|
|
512
|
+
* For each entry in the remoteMediaCsis array:
|
|
513
|
+
* - if csi is specified, the RemoteMedia instance is pinned to that CSI
|
|
514
|
+
* - if csi is undefined, the RemoteMedia instance is unpinned
|
|
515
|
+
*/
|
|
516
|
+
public setActiveSpeakerCsis(remoteMediaCsis: {remoteMedia: RemoteMedia; csi?: number}[]) {
|
|
517
|
+
Object.values(this.media.video.activeSpeakerGroups).forEach((remoteMediaGroup) => {
|
|
518
|
+
const groupRemoteMediaCsis = remoteMediaCsis.filter(({remoteMedia}) =>
|
|
519
|
+
remoteMediaGroup.includes(remoteMedia)
|
|
520
|
+
);
|
|
521
|
+
if (groupRemoteMediaCsis.length > 0) {
|
|
522
|
+
remoteMediaGroup.setActiveSpeakerCsis(groupRemoteMediaCsis, false);
|
|
523
|
+
}
|
|
524
|
+
});
|
|
525
|
+
this.mediaRequestManagers.video.commit();
|
|
526
|
+
}
|
|
527
|
+
|
|
493
528
|
/**
|
|
494
529
|
* Creates the audio slots
|
|
495
530
|
*/
|
|
@@ -601,25 +636,37 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
601
636
|
}
|
|
602
637
|
|
|
603
638
|
/**
|
|
604
|
-
* Allocates receive slots to all video panes
|
|
639
|
+
* Allocates receive slots to all active speaker video panes
|
|
640
|
+
* in the current selected layout.
|
|
641
|
+
*
|
|
642
|
+
* Allocation tries to keep the same order of the slots between the previous
|
|
643
|
+
* layout and the new one. Sorting helps making sure that highest priority slots
|
|
644
|
+
* go in the same order in the new layout.
|
|
605
645
|
*/
|
|
606
|
-
private
|
|
607
|
-
this.
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
646
|
+
private allocateSlotsToActiveSpeakerPaneGroups() {
|
|
647
|
+
this.currentLayout?.activeSpeakerVideoPaneGroups
|
|
648
|
+
// sorting in descending order based on group priority
|
|
649
|
+
?.sort((a, b) => (a.priority < b.priority ? 1 : -1))
|
|
650
|
+
?.forEach((group) => {
|
|
651
|
+
this.receiveSlotAllocations.activeSpeaker[group.id] = {slots: []};
|
|
652
|
+
|
|
653
|
+
for (let paneIndex = 0; paneIndex < group.numPanes; paneIndex += 1) {
|
|
654
|
+
// allocate a slot from the "unused" list, by grabbing in same order (shift) as previous layout
|
|
655
|
+
const freeSlot = this.slots.video.unused.shift();
|
|
656
|
+
|
|
657
|
+
if (freeSlot) {
|
|
658
|
+
this.slots.video.activeSpeaker.push(freeSlot);
|
|
659
|
+
this.receiveSlotAllocations.activeSpeaker[group.id].slots.push(freeSlot);
|
|
660
|
+
}
|
|
619
661
|
}
|
|
620
|
-
}
|
|
621
|
-
|
|
662
|
+
});
|
|
663
|
+
}
|
|
622
664
|
|
|
665
|
+
/**
|
|
666
|
+
* Allocates receive slots to all receiver selected video panes
|
|
667
|
+
* in the current selected layout
|
|
668
|
+
*/
|
|
669
|
+
private allocateSlotsToReceiverSelectedVideoPaneGroups() {
|
|
623
670
|
this.currentLayout?.memberVideoPanes?.forEach((memberPane) => {
|
|
624
671
|
// check if there is existing slot for this csi
|
|
625
672
|
const existingSlot = this.slots.video.receiverSelected.find(
|
|
@@ -646,19 +693,15 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
646
693
|
}
|
|
647
694
|
|
|
648
695
|
/**
|
|
649
|
-
*
|
|
650
|
-
* and allocates them to the right video panes / pane groups
|
|
651
|
-
*
|
|
652
|
-
* @returns {Promise}
|
|
696
|
+
* Ensures that we have enough slots for the current layout.
|
|
653
697
|
*/
|
|
654
|
-
private async
|
|
698
|
+
private async refillRequiredSlotsIfNeeded() {
|
|
655
699
|
const requiredNumSlots = this.getRequiredNumVideoSlotsForLayout(this.currentLayout);
|
|
656
700
|
const totalNumSlots =
|
|
657
701
|
this.slots.video.unused.length +
|
|
658
702
|
this.slots.video.activeSpeaker.length +
|
|
659
703
|
this.slots.video.receiverSelected.length;
|
|
660
704
|
|
|
661
|
-
// ensure we have enough total slots for current layout
|
|
662
705
|
if (totalNumSlots < requiredNumSlots) {
|
|
663
706
|
let numSlotsToCreate = requiredNumSlots - totalNumSlots;
|
|
664
707
|
|
|
@@ -671,20 +714,95 @@ export class RemoteMediaManager extends EventsScope {
|
|
|
671
714
|
numSlotsToCreate -= 1;
|
|
672
715
|
}
|
|
673
716
|
}
|
|
717
|
+
}
|
|
674
718
|
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
719
|
+
/**
|
|
720
|
+
* Move all active speaker slots to "unused"
|
|
721
|
+
*/
|
|
722
|
+
private trimActiveSpeakerSlots() {
|
|
679
723
|
this.slots.video.unused.push(...this.slots.video.activeSpeaker);
|
|
680
724
|
this.slots.video.activeSpeaker.length = 0;
|
|
725
|
+
}
|
|
681
726
|
|
|
682
|
-
|
|
683
|
-
|
|
727
|
+
/**
|
|
728
|
+
* Logs the state of the receive slots
|
|
729
|
+
*/
|
|
730
|
+
private logMainVideoReceiveSlots() {
|
|
731
|
+
let logMessage = '';
|
|
732
|
+
forEach(this.receiveSlotAllocations.activeSpeaker, (group, groupName) => {
|
|
733
|
+
logMessage += `\ngroup: ${groupName}\n${group.slots
|
|
734
|
+
.map((slot) => slot.logString)
|
|
735
|
+
.join(', ')}`;
|
|
736
|
+
});
|
|
737
|
+
|
|
738
|
+
logMessage += '\nreceiverSelected:\n';
|
|
739
|
+
forEach(this.receiveSlotAllocations.receiverSelected, (slot, key) => {
|
|
740
|
+
logMessage += ` ${key}: ${slot.logString}\n`;
|
|
741
|
+
});
|
|
742
|
+
|
|
743
|
+
LoggerProxy.logger.log(
|
|
744
|
+
`RemoteMediaManager#logMainVideoReceiveSlots --> MAIN VIDEO receive slots: unused=${this.slots.video.unused.length}, activeSpeaker=${this.slots.video.activeSpeaker.length}, receiverSelected=${this.slots.video.receiverSelected.length}${logMessage}`
|
|
745
|
+
);
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
/** logs main audio slots */
|
|
749
|
+
private logMainAudioReceiveSlots() {
|
|
750
|
+
LoggerProxy.logger.log(
|
|
751
|
+
`RemoteMediaManager#logMainAudioReceiveSlots --> MAIN AUDIO receive slots: ${this.slots.audio
|
|
752
|
+
.map((slot) => slot.logString)
|
|
753
|
+
.join(', ')}`
|
|
754
|
+
);
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
/** logs slides video slots */
|
|
758
|
+
private logSlidesVideoReceiveSlots() {
|
|
759
|
+
LoggerProxy.logger.log(
|
|
760
|
+
`RemoteMediaManager#logSlidesVideoReceiveSlots --> SLIDES VIDEO receive slot: ${this.slots.screenShare.video?.logString}`
|
|
761
|
+
);
|
|
762
|
+
}
|
|
684
763
|
|
|
764
|
+
/** logs slides audio slots */
|
|
765
|
+
private logSlidesAudioReceiveSlots() {
|
|
685
766
|
LoggerProxy.logger.log(
|
|
686
|
-
`RemoteMediaManager#
|
|
767
|
+
`RemoteMediaManager#logSlidesAudioReceiveSlots --> SLIDES AUDIO receive slots: ${this.slots.screenShare.audio
|
|
768
|
+
.map((slot) => slot.logString)
|
|
769
|
+
.join(', ')}`
|
|
687
770
|
);
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
/** Logs all current receive slots */
|
|
774
|
+
public logAllReceiveSlots() {
|
|
775
|
+
this.logMainVideoReceiveSlots();
|
|
776
|
+
this.logMainAudioReceiveSlots();
|
|
777
|
+
this.logSlidesVideoReceiveSlots();
|
|
778
|
+
this.logSlidesAudioReceiveSlots();
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
/**
|
|
782
|
+
* Makes sure we have the right number of receive slots created for the current layout
|
|
783
|
+
* and allocates them to the right video panes / pane groups
|
|
784
|
+
*
|
|
785
|
+
* @returns {Promise}
|
|
786
|
+
*/
|
|
787
|
+
private async updateVideoReceiveSlots() {
|
|
788
|
+
// move all active speaker slots to "unused"
|
|
789
|
+
this.trimActiveSpeakerSlots();
|
|
790
|
+
|
|
791
|
+
// move all no longer needed receiver-selected slots to "unused"
|
|
792
|
+
this.trimReceiverSelectedSlots();
|
|
793
|
+
|
|
794
|
+
// ensure we have enough total slots for current layout
|
|
795
|
+
await this.refillRequiredSlotsIfNeeded();
|
|
796
|
+
|
|
797
|
+
// allocate the slots to the right panes / pane groups
|
|
798
|
+
// reset allocations
|
|
799
|
+
this.receiveSlotAllocations = {activeSpeaker: {}, receiverSelected: {}};
|
|
800
|
+
// allocate active speaker
|
|
801
|
+
this.allocateSlotsToActiveSpeakerPaneGroups();
|
|
802
|
+
// allocate receiver selected
|
|
803
|
+
this.allocateSlotsToReceiverSelectedVideoPaneGroups();
|
|
804
|
+
|
|
805
|
+
this.logMainVideoReceiveSlots();
|
|
688
806
|
|
|
689
807
|
// If this is the initial layout, there may be some "unused" slots left because of the preallocation
|
|
690
808
|
// done in this.preallocateVideoReceiveSlots(), so release them now
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import {
|
|
2
|
+
SendSlot,
|
|
3
|
+
MediaType,
|
|
4
|
+
LocalStream,
|
|
5
|
+
MultistreamRoapMediaConnection,
|
|
6
|
+
} from '@webex/internal-media-core';
|
|
7
|
+
|
|
8
|
+
export default class SendSlotManager {
|
|
9
|
+
private readonly slots: Map<MediaType, SendSlot> = new Map();
|
|
10
|
+
private readonly LoggerProxy: any;
|
|
11
|
+
|
|
12
|
+
constructor(LoggerProxy: any) {
|
|
13
|
+
this.LoggerProxy = LoggerProxy;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* This method is used to create a sendSlot for the given mediaType and returns the created sendSlot
|
|
18
|
+
* @param {MultistreamRoapMediaConnection} mediaConnection MultistreamRoapMediaConnection for which a sendSlot needs to be created
|
|
19
|
+
* @param {MediaType} mediaType MediaType for which a sendSlot needs to be created (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)
|
|
20
|
+
* @param {boolean} active This is optional boolean to set the active state of the sendSlot. Default is true
|
|
21
|
+
* @returns {SendSlot} slot The created sendSlot
|
|
22
|
+
*/
|
|
23
|
+
public createSlot(
|
|
24
|
+
mediaConnection: MultistreamRoapMediaConnection,
|
|
25
|
+
mediaType: MediaType,
|
|
26
|
+
active = true
|
|
27
|
+
): SendSlot {
|
|
28
|
+
if (this.slots.has(mediaType)) {
|
|
29
|
+
throw new Error(`Slot for ${mediaType} already exists`);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const slot: SendSlot = mediaConnection.createSendSlot(mediaType, active);
|
|
33
|
+
|
|
34
|
+
this.slots.set(mediaType, slot);
|
|
35
|
+
|
|
36
|
+
this.LoggerProxy.logger.info(
|
|
37
|
+
`SendSlotsManager->createSlot#Created slot for ${mediaType} with active ${active}`
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
return slot;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* This method is used to retrieve the sendSlot for the given mediaType
|
|
45
|
+
* @param {MediaType} mediaType of which the slot needs to be retrieved
|
|
46
|
+
* @returns {SendSlot}
|
|
47
|
+
*/
|
|
48
|
+
public getSlot(mediaType: MediaType): SendSlot {
|
|
49
|
+
const slot = this.slots.get(mediaType);
|
|
50
|
+
|
|
51
|
+
if (!slot) {
|
|
52
|
+
throw new Error(`Slot for ${mediaType} does not exist`);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return slot;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* This method publishes the given stream to the sendSlot for the given mediaType
|
|
60
|
+
* @param {MediaType} mediaType MediaType of the sendSlot to which a stream needs to be published (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)
|
|
61
|
+
* @param {LocalStream} stream LocalStream to be published
|
|
62
|
+
* @returns {Promise<void>}
|
|
63
|
+
*/
|
|
64
|
+
public async publishStream(mediaType: MediaType, stream: LocalStream): Promise<void> {
|
|
65
|
+
const slot = this.slots.get(mediaType);
|
|
66
|
+
|
|
67
|
+
if (!slot) {
|
|
68
|
+
throw new Error(`Slot for ${mediaType} does not exist`);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
await slot.publishStream(stream);
|
|
72
|
+
|
|
73
|
+
this.LoggerProxy.logger.info(
|
|
74
|
+
`SendSlotsManager->publishStream#Published stream for ${mediaType} and stream with label ${stream.label} and muted ${stream.muted}`
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* This method unpublishes the stream from the sendSlot of the given mediaType
|
|
80
|
+
* @param {MediaType} mediaType MediaType of the sendSlot from which a stream needs to be unpublished (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)
|
|
81
|
+
* @returns {Promise<void>}
|
|
82
|
+
*/
|
|
83
|
+
public async unpublishStream(mediaType: MediaType): Promise<void> {
|
|
84
|
+
const slot = this.slots.get(mediaType);
|
|
85
|
+
|
|
86
|
+
if (!slot) {
|
|
87
|
+
throw new Error(`Slot for ${mediaType} does not exist`);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
await slot.unpublishStream();
|
|
91
|
+
|
|
92
|
+
this.LoggerProxy.logger.info(
|
|
93
|
+
`SendSlotsManager->unpublishStream#Unpublished stream for ${mediaType}`
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* This method is used to set the active state of the sendSlot for the given mediaType
|
|
99
|
+
* @param {MediaType} mediaType The MediaType of the sendSlot for which the active state needs to be set (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)
|
|
100
|
+
* @param {boolean} active The boolean to set the active state of the sendSlot. Default is true
|
|
101
|
+
* @returns {void}
|
|
102
|
+
*/
|
|
103
|
+
public setActive(mediaType: MediaType, active = true): void {
|
|
104
|
+
const slot = this.slots.get(mediaType);
|
|
105
|
+
|
|
106
|
+
if (!slot) {
|
|
107
|
+
throw new Error(`Slot for ${mediaType} does not exist`);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
slot.active = active;
|
|
111
|
+
|
|
112
|
+
this.LoggerProxy.logger.info(
|
|
113
|
+
`SendSlotsManager->setActive#Set active for ${mediaType} to ${active}`
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* This method is used to set the codec parameters for the sendSlot of the given mediaType
|
|
119
|
+
* @param {MediaType} mediaType MediaType of the sendSlot for which the codec parameters needs to be set (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)
|
|
120
|
+
* @param {Object} codecParameters
|
|
121
|
+
* @returns {Promise<void>}
|
|
122
|
+
*/
|
|
123
|
+
public async setCodecParameters(
|
|
124
|
+
mediaType: MediaType,
|
|
125
|
+
codecParameters: {
|
|
126
|
+
[key: string]: string | undefined; // As per ts-sdp undefined is considered as a valid value to be used for codec parameters
|
|
127
|
+
}
|
|
128
|
+
): Promise<void> {
|
|
129
|
+
// These codec parameter changes underneath are SDP value changes that are taken care by WCME automatically. So no need for any change in streams from the web sdk side
|
|
130
|
+
const slot = this.slots.get(mediaType);
|
|
131
|
+
|
|
132
|
+
if (!slot) {
|
|
133
|
+
throw new Error(`Slot for ${mediaType} does not exist`);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
await slot.setCodecParameters(codecParameters);
|
|
137
|
+
|
|
138
|
+
this.LoggerProxy.logger.info(
|
|
139
|
+
`SendSlotsManager->setCodecParameters#Set codec parameters for ${mediaType} to ${codecParameters}`
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* This method is used to delete the codec parameters for the sendSlot of the given mediaType
|
|
145
|
+
* @param {MediaType} mediaType MediaType of the sendSlot for which the codec parameters needs to be deleted (AUDIO_MAIN/VIDEO_MAIN/AUDIO_SLIDES/VIDEO_SLIDES)
|
|
146
|
+
* @param {Array<String>} parameters Array of keys of the codec parameters to be deleted
|
|
147
|
+
* @returns {Promise<void>}
|
|
148
|
+
*/
|
|
149
|
+
public async deleteCodecParameters(mediaType: MediaType, parameters: string[]): Promise<void> {
|
|
150
|
+
const slot = this.slots.get(mediaType);
|
|
151
|
+
|
|
152
|
+
if (!slot) {
|
|
153
|
+
throw new Error(`Slot for ${mediaType} does not exist`);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
await slot.deleteCodecParameters(parameters);
|
|
157
|
+
|
|
158
|
+
this.LoggerProxy.logger.info(
|
|
159
|
+
`SendSlotsManager->deleteCodecParameters#Deleted the following codec parameters -> ${parameters} for ${mediaType}`
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* This method is used to reset the SendSlotsManager by deleting all the sendSlots
|
|
165
|
+
* @returns {undefined}
|
|
166
|
+
*/
|
|
167
|
+
public reset(): void {
|
|
168
|
+
this.slots.clear();
|
|
169
|
+
}
|
|
170
|
+
}
|