@webex/plugin-meetings 3.8.0 → 3.8.1-next.10
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 +26 -13
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +70 -6
- package/dist/breakouts/index.js.map +1 -1
- package/dist/common/errors/webex-errors.js +12 -2
- package/dist/common/errors/webex-errors.js.map +1 -1
- package/dist/config.js +5 -1
- package/dist/config.js.map +1 -1
- package/dist/constants.js +28 -123
- package/dist/constants.js.map +1 -1
- package/dist/controls-options-manager/enums.js +3 -0
- package/dist/controls-options-manager/enums.js.map +1 -1
- package/dist/controls-options-manager/types.js.map +1 -1
- package/dist/controls-options-manager/util.js +78 -0
- package/dist/controls-options-manager/util.js.map +1 -1
- package/dist/interpretation/index.js +4 -4
- package/dist/interpretation/index.js.map +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/controlsUtils.js +37 -11
- package/dist/locus-info/controlsUtils.js.map +1 -1
- package/dist/locus-info/index.js +92 -12
- package/dist/locus-info/index.js.map +1 -1
- package/dist/locus-info/selfUtils.js +432 -418
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/media/index.js +17 -17
- package/dist/media/index.js.map +1 -1
- package/dist/media/properties.js +94 -6
- package/dist/media/properties.js.map +1 -1
- package/dist/meeting/brbState.js +9 -2
- package/dist/meeting/brbState.js.map +1 -1
- package/dist/meeting/in-meeting-actions.js +21 -1
- package/dist/meeting/in-meeting-actions.js.map +1 -1
- package/dist/meeting/index.js +678 -344
- package/dist/meeting/index.js.map +1 -1
- package/dist/meeting/locusMediaRequest.js +21 -22
- package/dist/meeting/locusMediaRequest.js.map +1 -1
- package/dist/meeting/muteState.js +4 -4
- package/dist/meeting/muteState.js.map +1 -1
- package/dist/meeting/request.js +30 -0
- package/dist/meeting/request.js.map +1 -1
- package/dist/meeting/request.type.js.map +1 -1
- package/dist/meeting/util.js +13 -2
- package/dist/meeting/util.js.map +1 -1
- package/dist/meeting-info/meeting-info-v2.js +373 -68
- package/dist/meeting-info/meeting-info-v2.js.map +1 -1
- package/dist/meeting-info/utilv2.js +5 -1
- package/dist/meeting-info/utilv2.js.map +1 -1
- package/dist/meetings/index.js +136 -1
- package/dist/meetings/index.js.map +1 -1
- package/dist/meetings/util.js +14 -0
- package/dist/meetings/util.js.map +1 -1
- package/dist/member/index.js +55 -9
- package/dist/member/index.js.map +1 -1
- package/dist/member/types.js +3 -0
- package/dist/member/types.js.map +1 -1
- package/dist/member/util.js +335 -353
- package/dist/member/util.js.map +1 -1
- package/dist/members/collection.js.map +1 -1
- package/dist/members/index.js +137 -29
- package/dist/members/index.js.map +1 -1
- package/dist/members/request.js +38 -0
- package/dist/members/request.js.map +1 -1
- package/dist/members/util.js +36 -1
- package/dist/members/util.js.map +1 -1
- package/dist/metrics/constants.js +10 -0
- package/dist/metrics/constants.js.map +1 -1
- package/dist/multistream/remoteMediaManager.js +40 -8
- package/dist/multistream/remoteMediaManager.js.map +1 -1
- package/dist/reachability/clusterReachability.js +63 -27
- package/dist/reachability/clusterReachability.js.map +1 -1
- package/dist/reachability/index.js +107 -47
- package/dist/reachability/index.js.map +1 -1
- package/dist/reachability/reachability.types.js +14 -0
- package/dist/reachability/reachability.types.js.map +1 -1
- package/dist/reachability/request.js +19 -3
- package/dist/reachability/request.js.map +1 -1
- package/dist/reconnection-manager/index.js +2 -2
- package/dist/reconnection-manager/index.js.map +1 -1
- package/dist/recording-controller/util.js +5 -5
- package/dist/recording-controller/util.js.map +1 -1
- package/dist/roap/index.js.map +1 -1
- package/dist/roap/turnDiscovery.js +45 -27
- package/dist/roap/turnDiscovery.js.map +1 -1
- package/dist/roap/types.js +17 -0
- package/dist/roap/types.js.map +1 -0
- package/dist/types/common/errors/webex-errors.d.ts +7 -1
- package/dist/types/config.d.ts +3 -0
- package/dist/types/constants.d.ts +20 -85
- package/dist/types/controls-options-manager/enums.d.ts +4 -1
- package/dist/types/controls-options-manager/types.d.ts +10 -1
- package/dist/types/locus-info/index.d.ts +3 -3
- package/dist/types/locus-info/selfUtils.d.ts +216 -1
- package/dist/types/media/properties.d.ts +15 -0
- package/dist/types/meeting/in-meeting-actions.d.ts +20 -0
- package/dist/types/meeting/index.d.ts +65 -1
- package/dist/types/meeting/muteState.d.ts +0 -1
- package/dist/types/meeting/request.d.ts +12 -1
- package/dist/types/meeting/request.type.d.ts +6 -0
- package/dist/types/meeting/util.d.ts +3 -1
- package/dist/types/meeting-info/meeting-info-v2.d.ts +82 -1
- package/dist/types/meetings/index.d.ts +57 -0
- package/dist/types/member/index.d.ts +21 -6
- package/dist/types/member/types.d.ts +73 -14
- package/dist/types/member/util.d.ts +156 -1
- package/dist/types/members/collection.d.ts +6 -5
- package/dist/types/members/index.d.ts +32 -43
- package/dist/types/members/request.d.ts +26 -0
- package/dist/types/members/util.d.ts +27 -0
- package/dist/types/metrics/constants.d.ts +10 -0
- package/dist/types/multistream/remoteMediaManager.d.ts +10 -1
- package/dist/types/reachability/clusterReachability.d.ts +15 -7
- package/dist/types/reachability/index.d.ts +10 -1
- package/dist/types/reachability/reachability.types.d.ts +5 -0
- package/dist/types/roap/index.d.ts +3 -2
- package/dist/types/roap/turnDiscovery.d.ts +5 -17
- package/dist/types/roap/types.d.ts +16 -0
- package/dist/webinar/index.js +2 -2
- package/dist/webinar/index.js.map +1 -1
- package/package.json +24 -23
- package/src/breakouts/index.ts +69 -0
- package/src/common/errors/webex-errors.ts +8 -1
- package/src/config.ts +3 -0
- package/src/constants.ts +30 -90
- package/src/controls-options-manager/enums.ts +3 -0
- package/src/controls-options-manager/types.ts +16 -1
- package/src/controls-options-manager/util.ts +93 -0
- package/src/interpretation/index.ts +3 -3
- package/src/locus-info/controlsUtils.ts +59 -14
- package/src/locus-info/index.ts +97 -13
- package/src/locus-info/selfUtils.ts +496 -442
- package/src/media/index.ts +23 -21
- package/src/media/properties.ts +96 -0
- package/src/meeting/brbState.ts +11 -2
- package/src/meeting/in-meeting-actions.ts +40 -0
- package/src/meeting/index.ts +470 -105
- package/src/meeting/locusMediaRequest.ts +27 -22
- package/src/meeting/muteState.ts +4 -4
- package/src/meeting/request.ts +36 -1
- package/src/meeting/request.type.ts +7 -0
- package/src/meeting/util.ts +11 -2
- package/src/meeting-info/meeting-info-v2.ts +254 -8
- package/src/meeting-info/utilv2.ts +5 -0
- package/src/meetings/index.ts +148 -1
- package/src/meetings/util.ts +18 -0
- package/src/member/index.ts +68 -22
- package/src/member/types.ts +82 -16
- package/src/member/util.ts +357 -350
- package/src/members/collection.ts +4 -3
- package/src/members/index.ts +137 -18
- package/src/members/request.ts +44 -0
- package/src/members/util.ts +43 -1
- package/src/metrics/constants.ts +10 -0
- package/src/multistream/remoteMediaManager.ts +32 -10
- package/src/reachability/clusterReachability.ts +73 -26
- package/src/reachability/index.ts +62 -1
- package/src/reachability/reachability.types.ts +6 -0
- package/src/reachability/request.ts +7 -0
- package/src/reconnection-manager/index.ts +2 -2
- package/src/recording-controller/util.ts +17 -13
- package/src/roap/index.ts +3 -7
- package/src/roap/turnDiscovery.ts +34 -39
- package/src/roap/types.ts +23 -0
- package/src/webinar/index.ts +1 -1
- package/test/unit/spec/breakouts/index.ts +167 -95
- package/test/unit/spec/controls-options-manager/util.js +178 -0
- package/test/unit/spec/interpretation/index.ts +39 -1
- package/test/unit/spec/locus-info/controlsUtils.js +155 -9
- package/test/unit/spec/locus-info/index.js +209 -73
- package/test/unit/spec/locus-info/selfUtils.js +98 -24
- package/test/unit/spec/media/index.ts +150 -18
- package/test/unit/spec/media/properties.ts +130 -0
- package/test/unit/spec/meeting/brbState.ts +40 -2
- package/test/unit/spec/meeting/in-meeting-actions.ts +23 -4
- package/test/unit/spec/meeting/index.js +804 -139
- package/test/unit/spec/meeting/locusMediaRequest.ts +95 -87
- package/test/unit/spec/meeting/muteState.js +73 -2
- package/test/unit/spec/meeting/request.js +32 -1
- package/test/unit/spec/meeting/utils.js +119 -18
- package/test/unit/spec/meeting-info/meetinginfov2.js +484 -114
- package/test/unit/spec/meeting-info/utilv2.js +19 -0
- package/test/unit/spec/meetings/index.js +146 -2
- package/test/unit/spec/member/index.js +7 -0
- package/test/unit/spec/member/util.js +24 -0
- package/test/unit/spec/members/index.js +304 -78
- package/test/unit/spec/members/request.js +68 -22
- package/test/unit/spec/members/utils.js +75 -0
- package/test/unit/spec/multistream/remoteMediaManager.ts +397 -118
- package/test/unit/spec/reachability/clusterReachability.ts +88 -56
- package/test/unit/spec/reachability/index.ts +97 -0
- package/test/unit/spec/reachability/request.js +47 -2
- package/test/unit/spec/reconnection-manager/index.js +4 -4
- package/test/unit/spec/roap/turnDiscovery.ts +110 -28
- package/test/unit/spec/webinar/index.ts +5 -0
- package/dist/annotation/annotation.types.d.ts +0 -42
- package/dist/annotation/constants.d.ts +0 -31
- package/dist/annotation/index.d.ts +0 -117
- package/dist/breakouts/breakout.d.ts +0 -8
- package/dist/breakouts/collection.d.ts +0 -5
- package/dist/breakouts/edit-lock-error.d.ts +0 -15
- package/dist/breakouts/events.d.ts +0 -8
- package/dist/breakouts/index.d.ts +0 -5
- package/dist/breakouts/request.d.ts +0 -22
- package/dist/breakouts/utils.d.ts +0 -15
- package/dist/common/browser-detection.d.ts +0 -9
- package/dist/common/collection.d.ts +0 -48
- package/dist/common/config.d.ts +0 -2
- package/dist/common/errors/captcha-error.d.ts +0 -15
- package/dist/common/errors/intent-to-join.d.ts +0 -16
- package/dist/common/errors/join-meeting.d.ts +0 -17
- package/dist/common/errors/media.d.ts +0 -15
- package/dist/common/errors/no-meeting-info.d.ts +0 -14
- package/dist/common/errors/parameter.d.ts +0 -15
- package/dist/common/errors/password-error.d.ts +0 -15
- package/dist/common/errors/permission.d.ts +0 -14
- package/dist/common/errors/reclaim-host-role-error.js +0 -149
- package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
- package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
- package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
- package/dist/common/errors/reconnection-in-progress.js +0 -33
- package/dist/common/errors/reconnection-in-progress.js.map +0 -1
- package/dist/common/errors/reconnection.d.ts +0 -15
- package/dist/common/errors/stats.d.ts +0 -15
- package/dist/common/errors/webex-errors.d.ts +0 -93
- package/dist/common/errors/webex-meetings-error.d.ts +0 -20
- package/dist/common/events/events-scope.d.ts +0 -17
- package/dist/common/events/events.d.ts +0 -12
- package/dist/common/events/trigger-proxy.d.ts +0 -2
- package/dist/common/events/util.d.ts +0 -2
- package/dist/common/logs/logger-config.d.ts +0 -2
- package/dist/common/logs/logger-proxy.d.ts +0 -2
- package/dist/common/logs/request.d.ts +0 -36
- package/dist/common/queue.d.ts +0 -34
- package/dist/config.d.ts +0 -72
- package/dist/constants.d.ts +0 -1088
- package/dist/controls-options-manager/constants.d.ts +0 -4
- package/dist/controls-options-manager/enums.d.ts +0 -15
- package/dist/controls-options-manager/index.d.ts +0 -136
- package/dist/controls-options-manager/types.d.ts +0 -43
- package/dist/controls-options-manager/util.d.ts +0 -1
- package/dist/index.d.ts +0 -7
- package/dist/interceptors/index.d.ts +0 -2
- package/dist/interceptors/locusRetry.d.ts +0 -27
- package/dist/interpretation/collection.d.ts +0 -5
- package/dist/interpretation/index.d.ts +0 -5
- package/dist/interpretation/siLanguage.d.ts +0 -5
- package/dist/locus-info/controlsUtils.d.ts +0 -2
- package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
- package/dist/locus-info/fullState.d.ts +0 -2
- package/dist/locus-info/hostUtils.d.ts +0 -2
- package/dist/locus-info/index.d.ts +0 -322
- package/dist/locus-info/infoUtils.d.ts +0 -2
- package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
- package/dist/locus-info/parser.d.ts +0 -272
- package/dist/locus-info/selfUtils.d.ts +0 -2
- package/dist/media/index.d.ts +0 -34
- package/dist/media/properties.d.ts +0 -93
- package/dist/media/util.d.ts +0 -2
- package/dist/mediaQualityMetrics/config.d.ts +0 -241
- package/dist/mediaQualityMetrics/config.js +0 -502
- package/dist/mediaQualityMetrics/config.js.map +0 -1
- package/dist/meeting/effectsState.js +0 -260
- package/dist/meeting/effectsState.js.map +0 -1
- package/dist/meeting/in-meeting-actions.d.ts +0 -167
- package/dist/meeting/index.d.ts +0 -1825
- package/dist/meeting/locusMediaRequest.d.ts +0 -74
- package/dist/meeting/muteState.d.ts +0 -178
- package/dist/meeting/request.d.ts +0 -295
- package/dist/meeting/request.type.d.ts +0 -11
- package/dist/meeting/state.d.ts +0 -9
- package/dist/meeting/util.d.ts +0 -119
- package/dist/meeting/voicea-meeting.d.ts +0 -16
- package/dist/meeting-info/collection.d.ts +0 -20
- package/dist/meeting-info/index.d.ts +0 -69
- package/dist/meeting-info/meeting-info-v2.d.ts +0 -123
- package/dist/meeting-info/request.d.ts +0 -22
- package/dist/meeting-info/util.d.ts +0 -2
- package/dist/meeting-info/utilv2.d.ts +0 -2
- package/dist/meetings/collection.d.ts +0 -40
- package/dist/meetings/index.d.ts +0 -390
- package/dist/meetings/meetings.types.d.ts +0 -4
- package/dist/meetings/request.d.ts +0 -27
- package/dist/meetings/util.d.ts +0 -18
- package/dist/member/index.d.ts +0 -160
- package/dist/member/member.types.js +0 -17
- package/dist/member/member.types.js.map +0 -1
- package/dist/member/types.d.ts +0 -32
- package/dist/member/util.d.ts +0 -2
- package/dist/members/collection.d.ts +0 -29
- package/dist/members/index.d.ts +0 -353
- package/dist/members/request.d.ts +0 -114
- package/dist/members/types.d.ts +0 -25
- package/dist/members/util.d.ts +0 -215
- package/dist/metrics/config.js +0 -276
- package/dist/metrics/config.js.map +0 -1
- package/dist/metrics/constants.d.ts +0 -70
- package/dist/metrics/index.d.ts +0 -45
- package/dist/multistream/mediaRequestManager.d.ts +0 -119
- package/dist/multistream/receiveSlot.d.ts +0 -68
- package/dist/multistream/receiveSlotManager.d.ts +0 -56
- package/dist/multistream/remoteMedia.d.ts +0 -72
- package/dist/multistream/remoteMediaGroup.d.ts +0 -49
- package/dist/multistream/remoteMediaManager.d.ts +0 -300
- package/dist/multistream/sendSlotManager.d.ts +0 -69
- package/dist/networkQualityMonitor/index.d.ts +0 -70
- package/dist/networkQualityMonitor/index.js +0 -221
- package/dist/networkQualityMonitor/index.js.map +0 -1
- 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.js +0 -109
- package/dist/peer-connection-manager/util.js.map +0 -1
- package/dist/personal-meeting-room/index.d.ts +0 -47
- package/dist/personal-meeting-room/request.d.ts +0 -14
- package/dist/personal-meeting-room/util.d.ts +0 -2
- package/dist/reachability/clusterReachability.d.ts +0 -109
- package/dist/reachability/index.d.ts +0 -105
- package/dist/reachability/request.d.ts +0 -39
- package/dist/reachability/util.d.ts +0 -8
- package/dist/reactions/constants.d.ts +0 -3
- package/dist/reactions/reactions.d.ts +0 -4
- package/dist/reactions/reactions.type.d.ts +0 -52
- package/dist/reconnection-manager/index.d.ts +0 -136
- package/dist/recording-controller/enums.d.ts +0 -7
- package/dist/recording-controller/index.d.ts +0 -207
- package/dist/recording-controller/util.d.ts +0 -14
- package/dist/roap/collection.js +0 -62
- package/dist/roap/collection.js.map +0 -1
- package/dist/roap/handler.js +0 -275
- package/dist/roap/handler.js.map +0 -1
- package/dist/roap/index.d.ts +0 -86
- package/dist/roap/request.d.ts +0 -39
- package/dist/roap/state.js +0 -126
- package/dist/roap/state.js.map +0 -1
- package/dist/roap/turnDiscovery.d.ts +0 -155
- package/dist/roap/util.js +0 -75
- package/dist/roap/util.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 -61
- package/dist/rtcMetrics/index.js +0 -197
- package/dist/rtcMetrics/index.js.map +0 -1
- package/dist/statsAnalyzer/global.d.ts +0 -36
- package/dist/statsAnalyzer/global.js +0 -126
- package/dist/statsAnalyzer/global.js.map +0 -1
- package/dist/statsAnalyzer/index.d.ts +0 -217
- package/dist/statsAnalyzer/index.js +0 -1013
- package/dist/statsAnalyzer/index.js.map +0 -1
- package/dist/statsAnalyzer/mqaUtil.d.ts +0 -48
- package/dist/statsAnalyzer/mqaUtil.js +0 -179
- package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
- package/dist/transcription/index.d.ts +0 -64
- package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
- package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
- package/dist/types/networkQualityMonitor/index.d.ts +0 -70
- package/dist/types/rtcMetrics/constants.d.ts +0 -4
- package/dist/types/rtcMetrics/index.d.ts +0 -71
- package/dist/types/statsAnalyzer/global.d.ts +0 -36
- package/dist/types/statsAnalyzer/index.d.ts +0 -217
- package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
- package/dist/webinar/collection.d.ts +0 -16
- package/dist/webinar/index.d.ts +0 -5
@@ -18,7 +18,8 @@ import {CSI, ReceiveSlotId} from '@webex/plugin-meetings/src/multistream/receive
|
|
18
18
|
import testUtils from '../../../utils/testUtils';
|
19
19
|
import LoggerProxy from '@webex/plugin-meetings/src/common/logs/logger-proxy';
|
20
20
|
import LoggerConfig from '@webex/plugin-meetings/src/common/logs/logger-config';
|
21
|
-
import {
|
21
|
+
import {expect} from 'chai';
|
22
|
+
import {RemoteMedia} from '@webex/plugin-meetings/src/multistream/remoteMedia';
|
22
23
|
|
23
24
|
class FakeSlot extends EventEmitter {
|
24
25
|
public mediaType: MediaType;
|
@@ -147,14 +148,8 @@ describe('RemoteMediaManager', () => {
|
|
147
148
|
|
148
149
|
fakeAudioSlot = new FakeSlot(MediaType.AudioMain, 'fake audio slot');
|
149
150
|
fakeVideoSlot = new FakeSlot(MediaType.VideoMain, 'fake video slot');
|
150
|
-
fakeScreenShareAudioSlot = new FakeSlot(
|
151
|
-
|
152
|
-
'fake screen share audio slot'
|
153
|
-
);
|
154
|
-
fakeScreenShareVideoSlot = new FakeSlot(
|
155
|
-
MediaType.VideoSlides,
|
156
|
-
'fake screen share video slot'
|
157
|
-
);
|
151
|
+
fakeScreenShareAudioSlot = new FakeSlot(MediaType.AudioSlides, 'fake screen share audio slot');
|
152
|
+
fakeScreenShareVideoSlot = new FakeSlot(MediaType.VideoSlides, 'fake screen share video slot');
|
158
153
|
|
159
154
|
fakeReceiveSlotManager = {
|
160
155
|
allocateSlot: sinon.stub().callsFake((mediaType) => {
|
@@ -356,7 +351,7 @@ describe('RemoteMediaManager', () => {
|
|
356
351
|
receiveSlots: Array(1).fill(fakeAudioSlot),
|
357
352
|
codecInfo: undefined,
|
358
353
|
}),
|
359
|
-
false
|
354
|
+
false
|
360
355
|
);
|
361
356
|
}
|
362
357
|
});
|
@@ -395,10 +390,8 @@ describe('RemoteMediaManager', () => {
|
|
395
390
|
// requires 3 main audio slots and one interpretation audio slot
|
396
391
|
assert.callCount(fakeReceiveSlotManager.allocateSlot, 4);
|
397
392
|
|
398
|
-
|
399
393
|
resetHistory();
|
400
394
|
|
401
|
-
|
402
395
|
remoteMediaManager.setReceiveNamedMediaGroup(MediaType.AudioMain, 28);
|
403
396
|
|
404
397
|
// check that setNamedMediaGroup has been called
|
@@ -406,9 +399,8 @@ describe('RemoteMediaManager', () => {
|
|
406
399
|
assert.calledWith(
|
407
400
|
createdInterpretationAudioGroup.setNamedMediaGroup,
|
408
401
|
{type: 1, value: 28},
|
409
|
-
true
|
402
|
+
true
|
410
403
|
);
|
411
|
-
|
412
404
|
});
|
413
405
|
|
414
406
|
it('ignore duplicated group when call setReceiveNamedMediaGroup', async () => {
|
@@ -445,7 +437,6 @@ describe('RemoteMediaManager', () => {
|
|
445
437
|
// we're using the default config that requires 3 main audio slots
|
446
438
|
assert.callCount(fakeReceiveSlotManager.allocateSlot, 4);
|
447
439
|
|
448
|
-
|
449
440
|
resetHistory();
|
450
441
|
|
451
442
|
remoteMediaManager.setReceiveNamedMediaGroup(MediaType.AudioMain, 24);
|
@@ -456,10 +447,8 @@ describe('RemoteMediaManager', () => {
|
|
456
447
|
await testUtils.flushPromises();
|
457
448
|
assert.callCount(fakeReceiveSlotManager.allocateSlot, 0);
|
458
449
|
assert.notCalled(fakeReceiveSlotManager.allocateSlot);
|
459
|
-
|
460
450
|
});
|
461
451
|
|
462
|
-
|
463
452
|
it('should throw error if set receive named media group which type is not audio', async () => {
|
464
453
|
let createdAudioGroup: RemoteMediaGroup | null = null;
|
465
454
|
let audioStopStub;
|
@@ -493,7 +482,9 @@ describe('RemoteMediaManager', () => {
|
|
493
482
|
throw new Error('Expected an error but none was thrown');
|
494
483
|
} catch (error) {
|
495
484
|
// Check if the error message matches the expected one
|
496
|
-
expect(error.message).to.equal(
|
485
|
+
expect(error.message).to.equal(
|
486
|
+
'cannot set receive named media group which media type is not audio-main'
|
487
|
+
);
|
497
488
|
}
|
498
489
|
});
|
499
490
|
});
|
@@ -627,11 +618,11 @@ describe('RemoteMediaManager', () => {
|
|
627
618
|
initialLayoutId: 'first',
|
628
619
|
layouts: {
|
629
620
|
first: {
|
630
|
-
screenShareVideo: {
|
621
|
+
screenShareVideo: {size: 'small'},
|
631
622
|
},
|
632
623
|
second: {
|
633
|
-
screenShareVideo: {
|
634
|
-
}
|
624
|
+
screenShareVideo: {size: 'medium'},
|
625
|
+
},
|
635
626
|
},
|
636
627
|
},
|
637
628
|
};
|
@@ -669,8 +660,6 @@ describe('RemoteMediaManager', () => {
|
|
669
660
|
// we don't expect any audio and for video there should be no VideoSlides, so all the calls should be just for VideoMain
|
670
661
|
assert.alwaysCalledWith(fakeReceiveSlotManager.allocateSlot, MediaType.VideoMain);
|
671
662
|
});
|
672
|
-
|
673
|
-
|
674
663
|
});
|
675
664
|
|
676
665
|
describe('constructor', () => {
|
@@ -778,7 +767,6 @@ describe('RemoteMediaManager', () => {
|
|
778
767
|
);
|
779
768
|
}, 'invalid config: duplicate member video pane id: paneB');
|
780
769
|
});
|
781
|
-
|
782
770
|
});
|
783
771
|
|
784
772
|
describe('stop', () => {
|
@@ -864,7 +852,6 @@ describe('RemoteMediaManager', () => {
|
|
864
852
|
});
|
865
853
|
|
866
854
|
describe('setPreferLiveVideo', () => {
|
867
|
-
|
868
855
|
it('sets preferLiveVideo', async () => {
|
869
856
|
const config = cloneDeep(DefaultTestConfiguration);
|
870
857
|
let stubs = [];
|
@@ -878,7 +865,9 @@ describe('RemoteMediaManager', () => {
|
|
878
865
|
);
|
879
866
|
|
880
867
|
remoteMediaManager.on(Event.VideoLayoutChanged, (layoutInfo: VideoLayoutChangedEventData) => {
|
881
|
-
Object.values(layoutInfo.activeSpeakerVideoPanes).forEach((group) =>
|
868
|
+
Object.values(layoutInfo.activeSpeakerVideoPanes).forEach((group) =>
|
869
|
+
stubs.push(sinon.stub(group, 'setPreferLiveVideo'))
|
870
|
+
);
|
882
871
|
});
|
883
872
|
|
884
873
|
await remoteMediaManager.start();
|
@@ -886,9 +875,8 @@ describe('RemoteMediaManager', () => {
|
|
886
875
|
assert(stubs.length > 0);
|
887
876
|
await remoteMediaManager.setPreferLiveVideo(true);
|
888
877
|
|
889
|
-
|
890
878
|
stubs.forEach((stub) => {
|
891
|
-
assert.calledWith(stub, true, false)
|
879
|
+
assert.calledWith(stub, true, false);
|
892
880
|
});
|
893
881
|
|
894
882
|
expect(config.video.preferLiveVideo).to.equal(true);
|
@@ -944,10 +932,7 @@ describe('RemoteMediaManager', () => {
|
|
944
932
|
|
945
933
|
await remoteMediaManager.setLayout('Stage');
|
946
934
|
|
947
|
-
assert.calledWith(
|
948
|
-
logger.log,
|
949
|
-
'RemoteMediaManager#setLayout --> new layout selected: Stage'
|
950
|
-
);
|
935
|
+
assert.calledWith(logger.log, 'RemoteMediaManager#setLayout --> new layout selected: Stage');
|
951
936
|
assert.calledWith(
|
952
937
|
logger.log,
|
953
938
|
'RemoteMediaManager#logMainVideoReceiveSlots --> MAIN VIDEO receive slots: unused=0, activeSpeaker=6, receiverSelected=4\ngroup: thumbnails\nfake video slot, fake video slot, fake video slot, fake video slot, fake video slot, fake video slot\nreceiverSelected:\n stage-1: fake video slot\n stage-2: fake video slot\n stage-3: fake video slot\n stage-4: fake video slot\n'
|
@@ -956,7 +941,7 @@ describe('RemoteMediaManager', () => {
|
|
956
941
|
|
957
942
|
it('logs layout changes - active speaker', async () => {
|
958
943
|
const config = cloneDeep(DefaultTestConfiguration);
|
959
|
-
config.video.initialLayoutId = 'OnePlusFive'
|
944
|
+
config.video.initialLayoutId = 'OnePlusFive';
|
960
945
|
|
961
946
|
remoteMediaManager = new RemoteMediaManager(
|
962
947
|
fakeReceiveSlotManager,
|
@@ -980,7 +965,6 @@ describe('RemoteMediaManager', () => {
|
|
980
965
|
);
|
981
966
|
});
|
982
967
|
|
983
|
-
|
984
968
|
it('releases slots when switching to layout that requires less active speaker slots', async () => {
|
985
969
|
// start with "AllEqual" layout that needs just 9 video slots
|
986
970
|
const config = cloneDeep(DefaultTestConfiguration);
|
@@ -1010,7 +994,6 @@ describe('RemoteMediaManager', () => {
|
|
1010
994
|
});
|
1011
995
|
|
1012
996
|
it('releases slots and reallocates slots when switching to layouts in correct order', async () => {
|
1013
|
-
|
1014
997
|
const config = cloneDeep(DefaultTestConfiguration);
|
1015
998
|
let count = 0;
|
1016
999
|
|
@@ -1026,7 +1009,7 @@ describe('RemoteMediaManager', () => {
|
|
1026
1009
|
return Promise.resolve(fakeScreenShareVideoSlot);
|
1027
1010
|
}
|
1028
1011
|
throw new Error(`invalid mediaType: ${mediaType}`);
|
1029
|
-
})
|
1012
|
+
});
|
1030
1013
|
|
1031
1014
|
remoteMediaManager = new RemoteMediaManager(
|
1032
1015
|
fakeReceiveSlotManager,
|
@@ -1038,57 +1021,70 @@ describe('RemoteMediaManager', () => {
|
|
1038
1021
|
|
1039
1022
|
resetHistory();
|
1040
1023
|
|
1041
|
-
assert.deepEqual(
|
1042
|
-
|
1043
|
-
|
1044
|
-
|
1045
|
-
|
1046
|
-
|
1047
|
-
|
1048
|
-
|
1049
|
-
|
1050
|
-
|
1051
|
-
|
1024
|
+
assert.deepEqual(
|
1025
|
+
remoteMediaManager.slots.video.activeSpeaker.map((slot: any) => slot.id),
|
1026
|
+
[
|
1027
|
+
'fake video 0',
|
1028
|
+
'fake video 1',
|
1029
|
+
'fake video 2',
|
1030
|
+
'fake video 3',
|
1031
|
+
'fake video 4',
|
1032
|
+
'fake video 5',
|
1033
|
+
'fake video 6',
|
1034
|
+
'fake video 7',
|
1035
|
+
'fake video 8',
|
1036
|
+
]
|
1037
|
+
);
|
1052
1038
|
|
1053
|
-
assert.deepEqual(
|
1054
|
-
|
1055
|
-
|
1056
|
-
|
1057
|
-
|
1058
|
-
|
1059
|
-
|
1060
|
-
|
1061
|
-
|
1062
|
-
|
1063
|
-
|
1039
|
+
assert.deepEqual(
|
1040
|
+
remoteMediaManager.receiveSlotAllocations.activeSpeaker['main'].slots.map(
|
1041
|
+
(slot: any) => slot.id
|
1042
|
+
),
|
1043
|
+
[
|
1044
|
+
'fake video 0',
|
1045
|
+
'fake video 1',
|
1046
|
+
'fake video 2',
|
1047
|
+
'fake video 3',
|
1048
|
+
'fake video 4',
|
1049
|
+
'fake video 5',
|
1050
|
+
'fake video 6',
|
1051
|
+
'fake video 7',
|
1052
|
+
'fake video 8',
|
1053
|
+
]
|
1054
|
+
);
|
1064
1055
|
|
1065
1056
|
// switch to "OnePlusFive" layout that requires 3 less video slots (6)
|
1066
1057
|
await remoteMediaManager.setLayout('OnePlusFive');
|
1067
1058
|
|
1068
1059
|
assert.deepEqual(remoteMediaManager.slots.video.unused, []);
|
1069
1060
|
|
1070
|
-
assert.deepEqual(
|
1071
|
-
|
1072
|
-
|
1073
|
-
|
1074
|
-
|
1075
|
-
|
1076
|
-
|
1077
|
-
|
1061
|
+
assert.deepEqual(
|
1062
|
+
remoteMediaManager.slots.video.activeSpeaker.map((slot: any) => slot.id),
|
1063
|
+
[
|
1064
|
+
'fake video 0',
|
1065
|
+
'fake video 1',
|
1066
|
+
'fake video 2',
|
1067
|
+
'fake video 3',
|
1068
|
+
'fake video 4',
|
1069
|
+
'fake video 5',
|
1070
|
+
]
|
1071
|
+
);
|
1078
1072
|
|
1079
1073
|
// we're checking that the slots are in the same order as in the previous layout
|
1080
1074
|
// first one goes into main
|
1081
|
-
assert.deepEqual(
|
1082
|
-
|
1083
|
-
|
1075
|
+
assert.deepEqual(
|
1076
|
+
remoteMediaManager.receiveSlotAllocations.activeSpeaker['mainBigOne'].slots.map(
|
1077
|
+
(slot: any) => slot.id
|
1078
|
+
),
|
1079
|
+
['fake video 0']
|
1080
|
+
);
|
1084
1081
|
// and rest go in the pips
|
1085
|
-
assert.deepEqual(
|
1086
|
-
|
1087
|
-
|
1088
|
-
|
1089
|
-
|
1090
|
-
|
1091
|
-
])
|
1082
|
+
assert.deepEqual(
|
1083
|
+
remoteMediaManager.receiveSlotAllocations.activeSpeaker[
|
1084
|
+
'secondarySetOfSmallPanes'
|
1085
|
+
].slots.map((slot: any) => slot.id),
|
1086
|
+
['fake video 1', 'fake video 2', 'fake video 3', 'fake video 4', 'fake video 5']
|
1087
|
+
);
|
1092
1088
|
|
1093
1089
|
// verify that 3 main video slots were released
|
1094
1090
|
assert.callCount(fakeReceiveSlotManager.releaseSlot, 3);
|
@@ -1103,37 +1099,45 @@ describe('RemoteMediaManager', () => {
|
|
1103
1099
|
assert.deepEqual(remoteMediaManager.slots.video.unused, []);
|
1104
1100
|
|
1105
1101
|
// checking that slots are in the same order as in previous layout + 3 new ones
|
1106
|
-
assert.deepEqual(
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1110
|
-
|
1111
|
-
|
1112
|
-
|
1113
|
-
|
1114
|
-
|
1115
|
-
|
1116
|
-
|
1102
|
+
assert.deepEqual(
|
1103
|
+
remoteMediaManager.slots.video.activeSpeaker.map((slot: any) => slot.id),
|
1104
|
+
[
|
1105
|
+
'fake video 0',
|
1106
|
+
'fake video 1',
|
1107
|
+
'fake video 2',
|
1108
|
+
'fake video 3',
|
1109
|
+
'fake video 4',
|
1110
|
+
'fake video 5',
|
1111
|
+
'fake video 10',
|
1112
|
+
'fake video 11',
|
1113
|
+
'fake video 12',
|
1114
|
+
]
|
1115
|
+
);
|
1117
1116
|
|
1118
|
-
assert.deepEqual(
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1125
|
-
|
1126
|
-
|
1127
|
-
|
1128
|
-
|
1129
|
-
|
1130
|
-
|
1131
|
-
|
1132
|
-
|
1133
|
-
|
1134
|
-
|
1135
|
-
|
1136
|
-
|
1117
|
+
assert.deepEqual(
|
1118
|
+
remoteMediaManager.receiveSlotAllocations.activeSpeaker['main'].slots.map(
|
1119
|
+
(slot: any) => slot.id
|
1120
|
+
),
|
1121
|
+
[
|
1122
|
+
'fake video 0',
|
1123
|
+
'fake video 1',
|
1124
|
+
'fake video 2',
|
1125
|
+
'fake video 3',
|
1126
|
+
'fake video 4',
|
1127
|
+
'fake video 5',
|
1128
|
+
'fake video 10',
|
1129
|
+
'fake video 11',
|
1130
|
+
'fake video 12',
|
1131
|
+
]
|
1132
|
+
);
|
1133
|
+
|
1134
|
+
// verify that 3 main video slots were allocated
|
1135
|
+
assert.callCount(fakeReceiveSlotManager.allocateSlot, 3);
|
1136
|
+
fakeReceiveSlotManager.allocateSlot.getCalls().forEach((call) => {
|
1137
|
+
const mediaType = call.args[0];
|
1138
|
+
|
1139
|
+
assert.strictEqual(mediaType, MediaType.VideoMain);
|
1140
|
+
});
|
1137
1141
|
});
|
1138
1142
|
|
1139
1143
|
it('stops all current video remoteMedia instances when switching to new layout', async () => {
|
@@ -1275,9 +1279,7 @@ describe('RemoteMediaManager', () => {
|
|
1275
1279
|
);
|
1276
1280
|
receivedLayoutInfo.activeSpeakerVideoPanes.big
|
1277
1281
|
.getRemoteMedia()
|
1278
|
-
.forEach((remoteMedia) =>
|
1279
|
-
assert.strictEqual(remoteMedia.mediaType, MediaType.VideoMain)
|
1280
|
-
);
|
1282
|
+
.forEach((remoteMedia) => assert.strictEqual(remoteMedia.mediaType, MediaType.VideoMain));
|
1281
1283
|
|
1282
1284
|
// "small" group
|
1283
1285
|
assert.strictEqual(
|
@@ -1286,9 +1288,7 @@ describe('RemoteMediaManager', () => {
|
|
1286
1288
|
);
|
1287
1289
|
receivedLayoutInfo.activeSpeakerVideoPanes.small
|
1288
1290
|
.getRemoteMedia()
|
1289
|
-
.forEach((remoteMedia) =>
|
1290
|
-
assert.strictEqual(remoteMedia.mediaType, MediaType.VideoMain)
|
1291
|
-
);
|
1291
|
+
.forEach((remoteMedia) => assert.strictEqual(remoteMedia.mediaType, MediaType.VideoMain));
|
1292
1292
|
}
|
1293
1293
|
});
|
1294
1294
|
|
@@ -1713,6 +1713,279 @@ describe('RemoteMediaManager', () => {
|
|
1713
1713
|
});
|
1714
1714
|
});
|
1715
1715
|
|
1716
|
+
describe('setRemoteVideoCsis', () => {
|
1717
|
+
const setup = async () => {
|
1718
|
+
let receiveSlotId = 0;
|
1719
|
+
let layoutInfo: VideoLayoutChangedEventData;
|
1720
|
+
|
1721
|
+
fakeReceiveSlotManager.allocateSlot.callsFake(
|
1722
|
+
async (mediaType: MediaType) => new FakeSlot(mediaType, `receive-slot-${receiveSlotId++}`)
|
1723
|
+
);
|
1724
|
+
|
1725
|
+
remoteMediaManager.on(Event.VideoLayoutChanged, (info: VideoLayoutChangedEventData) => {
|
1726
|
+
layoutInfo = info;
|
1727
|
+
});
|
1728
|
+
|
1729
|
+
await remoteMediaManager.start();
|
1730
|
+
await remoteMediaManager.setLayout('Stage');
|
1731
|
+
|
1732
|
+
assert.isNotNull(layoutInfo);
|
1733
|
+
resetHistory();
|
1734
|
+
|
1735
|
+
return {layoutInfo};
|
1736
|
+
};
|
1737
|
+
|
1738
|
+
const addRequestCall = (remoteMedia: RemoteMedia, csi: CSI) => [
|
1739
|
+
sinon.match({
|
1740
|
+
policyInfo: sinon.match({policy: 'receiver-selected', csi}),
|
1741
|
+
receiveSlots: [remoteMedia.getUnderlyingReceiveSlot()],
|
1742
|
+
}),
|
1743
|
+
false,
|
1744
|
+
];
|
1745
|
+
|
1746
|
+
const cancelRequestCall = (requestId: string) => [requestId, false];
|
1747
|
+
|
1748
|
+
const commitCall = () => [];
|
1749
|
+
|
1750
|
+
const checkCalls = (
|
1751
|
+
checks: {addRequest?: any[][]; cancelRequest?: any[][]; commit?: any[][]} = {}
|
1752
|
+
) => {
|
1753
|
+
// Check calls are made as expected
|
1754
|
+
['addRequest', 'cancelRequest', 'commit'].forEach((name) => {
|
1755
|
+
const spy = fakeMediaRequestManagers.video[name];
|
1756
|
+
const calls = checks[name] || [];
|
1757
|
+
|
1758
|
+
assert.callCount(spy, calls.length);
|
1759
|
+
calls.forEach((call, index) => {
|
1760
|
+
assert.calledWithExactly(spy.getCall(index), ...call);
|
1761
|
+
});
|
1762
|
+
});
|
1763
|
+
|
1764
|
+
// Check that commit is always done after all add and cancel requests
|
1765
|
+
if (checks.commit?.length) {
|
1766
|
+
if (checks.addRequest?.length) {
|
1767
|
+
assert.callOrder(
|
1768
|
+
fakeMediaRequestManagers.video.addRequest,
|
1769
|
+
fakeMediaRequestManagers.video.commit
|
1770
|
+
);
|
1771
|
+
}
|
1772
|
+
if (checks.cancelRequest?.length) {
|
1773
|
+
assert.callOrder(
|
1774
|
+
fakeMediaRequestManagers.video.cancelRequest,
|
1775
|
+
fakeMediaRequestManagers.video.commit
|
1776
|
+
);
|
1777
|
+
}
|
1778
|
+
}
|
1779
|
+
|
1780
|
+
resetHistory();
|
1781
|
+
};
|
1782
|
+
|
1783
|
+
it('does nothing when the input array is empty', async () => {
|
1784
|
+
await setup();
|
1785
|
+
|
1786
|
+
remoteMediaManager.setRemoteVideoCsis([]);
|
1787
|
+
|
1788
|
+
checkCalls();
|
1789
|
+
});
|
1790
|
+
|
1791
|
+
it('errors when one remote media is not found for a single remote media', async () => {
|
1792
|
+
const id = 'UNKNOWN';
|
1793
|
+
|
1794
|
+
await setup();
|
1795
|
+
|
1796
|
+
assert.throws(
|
1797
|
+
() => remoteMediaManager.setRemoteVideoCsis([{remoteMedia: {id}, csi: 1234}]),
|
1798
|
+
Error,
|
1799
|
+
`remoteMedia ${id} not found`
|
1800
|
+
);
|
1801
|
+
|
1802
|
+
checkCalls();
|
1803
|
+
});
|
1804
|
+
|
1805
|
+
it('errors when one remote media is not found for multiple remote medias', async () => {
|
1806
|
+
const {layoutInfo} = await setup();
|
1807
|
+
const id = 'UNKNOWN';
|
1808
|
+
|
1809
|
+
assert.throws(
|
1810
|
+
() =>
|
1811
|
+
remoteMediaManager.setRemoteVideoCsis([
|
1812
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-1'], csi: 1234},
|
1813
|
+
{remoteMedia: {id}, csi: 2345},
|
1814
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-2'], csi: 3456},
|
1815
|
+
]),
|
1816
|
+
Error,
|
1817
|
+
`remoteMedia ${id} not found`
|
1818
|
+
);
|
1819
|
+
|
1820
|
+
checkCalls();
|
1821
|
+
});
|
1822
|
+
|
1823
|
+
it('sets, updates, then unsets a single csi', async () => {
|
1824
|
+
const {layoutInfo} = await setup();
|
1825
|
+
const requestIds = ['request-0', 'request-1'];
|
1826
|
+
const csis = [1234, 2345];
|
1827
|
+
|
1828
|
+
// Set remote video CSIs
|
1829
|
+
fakeMediaRequestManagers.video.addRequest.onCall(0).returns(requestIds[0]);
|
1830
|
+
|
1831
|
+
remoteMediaManager.setRemoteVideoCsis([
|
1832
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-1'], csi: csis[0]},
|
1833
|
+
]);
|
1834
|
+
|
1835
|
+
checkCalls({
|
1836
|
+
addRequest: [addRequestCall(layoutInfo.memberVideoPanes['stage-1'], csis[0])],
|
1837
|
+
commit: [commitCall()],
|
1838
|
+
});
|
1839
|
+
|
1840
|
+
// Update remote video CSIs
|
1841
|
+
fakeMediaRequestManagers.video.addRequest.onCall(0).returns(requestIds[1]);
|
1842
|
+
|
1843
|
+
remoteMediaManager.setRemoteVideoCsis([
|
1844
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-1'], csi: csis[1]},
|
1845
|
+
]);
|
1846
|
+
|
1847
|
+
checkCalls({
|
1848
|
+
addRequest: [addRequestCall(layoutInfo.memberVideoPanes['stage-1'], csis[1])],
|
1849
|
+
cancelRequest: [cancelRequestCall(requestIds[0])],
|
1850
|
+
commit: [commitCall()],
|
1851
|
+
});
|
1852
|
+
|
1853
|
+
// Unset remote video CSIs
|
1854
|
+
remoteMediaManager.setRemoteVideoCsis([
|
1855
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-1'], csi: undefined},
|
1856
|
+
]);
|
1857
|
+
|
1858
|
+
checkCalls({
|
1859
|
+
cancelRequest: [cancelRequestCall(requestIds[1])],
|
1860
|
+
commit: [commitCall()],
|
1861
|
+
});
|
1862
|
+
});
|
1863
|
+
|
1864
|
+
it('sets, updates, then unsets multiple csis', async () => {
|
1865
|
+
const {layoutInfo} = await setup();
|
1866
|
+
const requestIds = [
|
1867
|
+
'request-0',
|
1868
|
+
'request-1',
|
1869
|
+
'request-2',
|
1870
|
+
'request-3',
|
1871
|
+
'request-4',
|
1872
|
+
'request-5',
|
1873
|
+
];
|
1874
|
+
const csis = [1234, 2345, 3456, 4567, 5678, 67890];
|
1875
|
+
|
1876
|
+
// Set remote video CSIs
|
1877
|
+
fakeMediaRequestManagers.video.addRequest.onCall(0).returns(requestIds[0]);
|
1878
|
+
fakeMediaRequestManagers.video.addRequest.onCall(1).returns(requestIds[1]);
|
1879
|
+
fakeMediaRequestManagers.video.addRequest.onCall(2).returns(requestIds[2]);
|
1880
|
+
|
1881
|
+
remoteMediaManager.setRemoteVideoCsis([
|
1882
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-2'], csi: csis[0]},
|
1883
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-3'], csi: csis[1]},
|
1884
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-4'], csi: csis[2]},
|
1885
|
+
]);
|
1886
|
+
|
1887
|
+
checkCalls({
|
1888
|
+
addRequest: [
|
1889
|
+
addRequestCall(layoutInfo.memberVideoPanes['stage-2'], csis[0]),
|
1890
|
+
addRequestCall(layoutInfo.memberVideoPanes['stage-3'], csis[1]),
|
1891
|
+
addRequestCall(layoutInfo.memberVideoPanes['stage-4'], csis[2]),
|
1892
|
+
],
|
1893
|
+
commit: [commitCall()],
|
1894
|
+
});
|
1895
|
+
|
1896
|
+
// Update remote video CSIs
|
1897
|
+
fakeMediaRequestManagers.video.addRequest.onCall(0).returns(requestIds[3]);
|
1898
|
+
fakeMediaRequestManagers.video.addRequest.onCall(1).returns(requestIds[4]);
|
1899
|
+
fakeMediaRequestManagers.video.addRequest.onCall(2).returns(requestIds[5]);
|
1900
|
+
|
1901
|
+
remoteMediaManager.setRemoteVideoCsis([
|
1902
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-2'], csi: csis[3]},
|
1903
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-3'], csi: csis[4]},
|
1904
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-4'], csi: csis[5]},
|
1905
|
+
]);
|
1906
|
+
|
1907
|
+
checkCalls({
|
1908
|
+
addRequest: [
|
1909
|
+
addRequestCall(layoutInfo.memberVideoPanes['stage-2'], csis[3]),
|
1910
|
+
addRequestCall(layoutInfo.memberVideoPanes['stage-3'], csis[4]),
|
1911
|
+
addRequestCall(layoutInfo.memberVideoPanes['stage-4'], csis[5]),
|
1912
|
+
],
|
1913
|
+
cancelRequest: [
|
1914
|
+
cancelRequestCall(requestIds[0]),
|
1915
|
+
cancelRequestCall(requestIds[1]),
|
1916
|
+
cancelRequestCall(requestIds[2]),
|
1917
|
+
],
|
1918
|
+
commit: [commitCall()],
|
1919
|
+
});
|
1920
|
+
|
1921
|
+
// Unset remote video CSIs
|
1922
|
+
remoteMediaManager.setRemoteVideoCsis([
|
1923
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-2'], csi: undefined},
|
1924
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-3'], csi: undefined},
|
1925
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-4'], csi: undefined},
|
1926
|
+
]);
|
1927
|
+
|
1928
|
+
checkCalls({
|
1929
|
+
cancelRequest: [
|
1930
|
+
cancelRequestCall(requestIds[3]),
|
1931
|
+
cancelRequestCall(requestIds[4]),
|
1932
|
+
cancelRequestCall(requestIds[5]),
|
1933
|
+
],
|
1934
|
+
commit: [commitCall()],
|
1935
|
+
});
|
1936
|
+
});
|
1937
|
+
|
1938
|
+
it('sets, updates and unsets multiple csis simultaneously', async () => {
|
1939
|
+
const {layoutInfo} = await setup();
|
1940
|
+
const requestIds = ['request-0', 'request-1', 'request-2', 'request-3', 'request-4'];
|
1941
|
+
const csis = [1234, 2345, 3456, 4567, 5678];
|
1942
|
+
|
1943
|
+
// Initially set some video CSIs
|
1944
|
+
fakeMediaRequestManagers.video.addRequest.onCall(0).returns(requestIds[0]);
|
1945
|
+
fakeMediaRequestManagers.video.addRequest.onCall(1).returns(requestIds[1]);
|
1946
|
+
fakeMediaRequestManagers.video.addRequest.onCall(2).returns(requestIds[2]);
|
1947
|
+
|
1948
|
+
remoteMediaManager.setRemoteVideoCsis([
|
1949
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-1'], csi: csis[0]},
|
1950
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-2'], csi: csis[1]},
|
1951
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-3'], csi: csis[2]},
|
1952
|
+
]);
|
1953
|
+
|
1954
|
+
checkCalls({
|
1955
|
+
addRequest: [
|
1956
|
+
addRequestCall(layoutInfo.memberVideoPanes['stage-1'], csis[0]),
|
1957
|
+
addRequestCall(layoutInfo.memberVideoPanes['stage-2'], csis[1]),
|
1958
|
+
addRequestCall(layoutInfo.memberVideoPanes['stage-3'], csis[2]),
|
1959
|
+
],
|
1960
|
+
commit: [commitCall()],
|
1961
|
+
});
|
1962
|
+
|
1963
|
+
// Set, update, and unset video CSIs
|
1964
|
+
fakeMediaRequestManagers.video.addRequest.onCall(0).returns(requestIds[3]);
|
1965
|
+
fakeMediaRequestManagers.video.addRequest.onCall(1).returns(requestIds[4]);
|
1966
|
+
|
1967
|
+
remoteMediaManager.setRemoteVideoCsis([
|
1968
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-1'], csi: undefined},
|
1969
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-2'], csi: null},
|
1970
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-3'], csi: csis[3]},
|
1971
|
+
{remoteMedia: layoutInfo.memberVideoPanes['stage-4'], csi: csis[4]},
|
1972
|
+
]);
|
1973
|
+
|
1974
|
+
checkCalls({
|
1975
|
+
addRequest: [
|
1976
|
+
addRequestCall(layoutInfo.memberVideoPanes['stage-3'], csis[3]),
|
1977
|
+
addRequestCall(layoutInfo.memberVideoPanes['stage-4'], csis[4]),
|
1978
|
+
],
|
1979
|
+
cancelRequest: [
|
1980
|
+
cancelRequestCall(requestIds[0]),
|
1981
|
+
cancelRequestCall(requestIds[1]),
|
1982
|
+
cancelRequestCall(requestIds[2]),
|
1983
|
+
],
|
1984
|
+
commit: [commitCall()],
|
1985
|
+
});
|
1986
|
+
});
|
1987
|
+
});
|
1988
|
+
|
1716
1989
|
describe('setRemoteVideoCsi', () => {
|
1717
1990
|
it('sends correct media requests', async () => {
|
1718
1991
|
let currentLayoutInfo: VideoLayoutChangedEventData | null = null;
|
@@ -1994,7 +2267,9 @@ describe('RemoteMediaManager', () => {
|
|
1994
2267
|
|
1995
2268
|
remoteMediaManager.on(Event.VideoLayoutChanged, (layoutInfo: VideoLayoutChangedEventData) => {
|
1996
2269
|
currentLayoutInfo = layoutInfo;
|
1997
|
-
Object.values(layoutInfo.activeSpeakerVideoPanes).forEach((group) =>
|
2270
|
+
Object.values(layoutInfo.activeSpeakerVideoPanes).forEach((group) =>
|
2271
|
+
stubs.push(sinon.stub(group, 'setActiveSpeakerCsis'))
|
2272
|
+
);
|
1998
2273
|
});
|
1999
2274
|
|
2000
2275
|
await remoteMediaManager.start();
|
@@ -2003,16 +2278,20 @@ describe('RemoteMediaManager', () => {
|
|
2003
2278
|
assert.isNotNull(currentLayoutInfo);
|
2004
2279
|
|
2005
2280
|
if (currentLayoutInfo) {
|
2006
|
-
|
2007
|
-
|
2008
|
-
const remoteMedia2 =
|
2281
|
+
const remoteMedia1 =
|
2282
|
+
currentLayoutInfo.activeSpeakerVideoPanes.mainBigOne.getRemoteMedia()[0];
|
2283
|
+
const remoteMedia2 =
|
2284
|
+
currentLayoutInfo.activeSpeakerVideoPanes.secondarySetOfSmallPanes.getRemoteMedia()[0];
|
2009
2285
|
|
2010
2286
|
const remoteMediaCsis = [{remoteMedia: remoteMedia1}, {remoteMedia: remoteMedia2}];
|
2011
2287
|
|
2012
|
-
remoteMediaManager.setActiveSpeakerCsis([
|
2288
|
+
remoteMediaManager.setActiveSpeakerCsis([
|
2289
|
+
{remoteMedia: remoteMedia1},
|
2290
|
+
{remoteMedia: remoteMedia2},
|
2291
|
+
]);
|
2013
2292
|
|
2014
2293
|
stubs.forEach((stub, index) => {
|
2015
|
-
assert.calledWith(stub, [remoteMediaCsis[index]], false)
|
2294
|
+
assert.calledWith(stub, [remoteMediaCsis[index]], false);
|
2016
2295
|
});
|
2017
2296
|
assert.calledOnce(fakeMediaRequestManagers.video.commit);
|
2018
2297
|
}
|