@webex/plugin-meetings 3.0.0-beta.76 → 3.0.0-beta.78
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/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/locus-info/selfUtils.js +1 -1
- package/dist/locus-info/selfUtils.js.map +1 -1
- package/dist/meeting/index.js +20 -10
- package/dist/meeting/index.js.map +1 -1
- package/dist/multistream/mediaRequestManager.js +51 -9
- package/dist/multistream/mediaRequestManager.js.map +1 -1
- package/dist/types/multistream/mediaRequestManager.d.ts +28 -1
- package/package.json +19 -19
- package/src/locus-info/selfUtils.ts +1 -0
- package/src/meeting/index.ts +46 -22
- package/src/multistream/mediaRequestManager.ts +53 -8
- package/test/unit/spec/meeting/utils.js +1 -1
- package/test/unit/spec/multistream/mediaRequestManager.ts +326 -107
|
@@ -4,23 +4,26 @@ import sinon from 'sinon';
|
|
|
4
4
|
import {assert} from '@webex/test-helper-chai';
|
|
5
5
|
import {getMaxFs} from '@webex/plugin-meetings/src/multistream/remoteMedia';
|
|
6
6
|
import FakeTimers from '@sinonjs/fake-timers';
|
|
7
|
+
import * as mediaCore from '@webex/internal-media-core';
|
|
7
8
|
|
|
8
9
|
type ExpectedActiveSpeaker = {
|
|
9
10
|
policy: 'active-speaker';
|
|
11
|
+
maxPayloadBitsPerSecond?: number;
|
|
10
12
|
priority: number;
|
|
11
13
|
receiveSlots: Array<ReceiveSlot>;
|
|
12
|
-
maxFs
|
|
14
|
+
maxFs?: number;
|
|
15
|
+
maxMbps?: number;
|
|
13
16
|
};
|
|
14
17
|
type ExpectedReceiverSelected = {
|
|
15
18
|
policy: 'receiver-selected';
|
|
19
|
+
maxPayloadBitsPerSecond?: number;
|
|
16
20
|
csi: number;
|
|
17
21
|
receiveSlot: ReceiveSlot;
|
|
18
|
-
maxFs
|
|
22
|
+
maxFs?: number;
|
|
23
|
+
maxMbps?: number;
|
|
19
24
|
};
|
|
20
25
|
type ExpectedRequest = ExpectedActiveSpeaker | ExpectedReceiverSelected;
|
|
21
26
|
|
|
22
|
-
const maxPayloadBitsPerSecond = 10 * 1000 * 1000; // for now we always send this fixed constant
|
|
23
|
-
|
|
24
27
|
const degradationPreferences = {
|
|
25
28
|
maxMacroblocksLimit: Infinity, // no limit
|
|
26
29
|
};
|
|
@@ -29,8 +32,16 @@ describe('MediaRequestManager', () => {
|
|
|
29
32
|
const CROSS_PRIORITY_DUPLICATION = true;
|
|
30
33
|
const CROSS_POLICY_DUPLICATION = true;
|
|
31
34
|
const PREFER_LIVE_VIDEO = true;
|
|
32
|
-
const
|
|
33
|
-
const
|
|
35
|
+
const MAX_FPS = 3000;
|
|
36
|
+
const MAX_FS_360p = 920;
|
|
37
|
+
const MAX_FS_720p = 3600;
|
|
38
|
+
const MAX_FS_1080p = 8192;
|
|
39
|
+
const MAX_MBPS_360p = 27600;
|
|
40
|
+
const MAX_MBPS_720p = 108000;
|
|
41
|
+
const MAX_MBPS_1080p = 245760;
|
|
42
|
+
const MAX_PAYLOADBITSPS_360p = 640000;
|
|
43
|
+
const MAX_PAYLOADBITSPS_720p = 2500000;
|
|
44
|
+
const MAX_PAYLOADBITSPS_1080p = 4000000;
|
|
34
45
|
|
|
35
46
|
const NUM_SLOTS = 10;
|
|
36
47
|
|
|
@@ -41,10 +52,10 @@ describe('MediaRequestManager', () => {
|
|
|
41
52
|
|
|
42
53
|
beforeEach(() => {
|
|
43
54
|
sendMediaRequestsCallback = sinon.stub();
|
|
44
|
-
mediaRequestManager = new MediaRequestManager(
|
|
55
|
+
mediaRequestManager = new MediaRequestManager(sendMediaRequestsCallback, {
|
|
45
56
|
degradationPreferences,
|
|
46
|
-
|
|
47
|
-
);
|
|
57
|
+
kind: 'video',
|
|
58
|
+
});
|
|
48
59
|
|
|
49
60
|
// create some fake receive slots used by the tests
|
|
50
61
|
fakeWcmeSlots = Array(NUM_SLOTS)
|
|
@@ -109,7 +120,10 @@ describe('MediaRequestManager', () => {
|
|
|
109
120
|
// It should be used only for verifying requests created with
|
|
110
121
|
// addActiveSpeakerRequest() or addReceiverSelectedRequest(), because of some
|
|
111
122
|
// hardcoded values used in them
|
|
112
|
-
const checkMediaRequestsSent = (
|
|
123
|
+
const checkMediaRequestsSent = (
|
|
124
|
+
expectedRequests: ExpectedRequest[],
|
|
125
|
+
isCodecInfoDefined: boolean = true
|
|
126
|
+
) => {
|
|
113
127
|
assert.calledOnce(sendMediaRequestsCallback);
|
|
114
128
|
assert.calledWith(
|
|
115
129
|
sendMediaRequestsCallback,
|
|
@@ -124,15 +138,18 @@ describe('MediaRequestManager', () => {
|
|
|
124
138
|
preferLiveVideo: PREFER_LIVE_VIDEO,
|
|
125
139
|
}),
|
|
126
140
|
receiveSlots: expectedRequest.receiveSlots,
|
|
127
|
-
maxPayloadBitsPerSecond,
|
|
128
|
-
codecInfos:
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
141
|
+
maxPayloadBitsPerSecond: expectedRequest.maxPayloadBitsPerSecond,
|
|
142
|
+
codecInfos: isCodecInfoDefined
|
|
143
|
+
? [
|
|
144
|
+
sinon.match({
|
|
145
|
+
payloadType: 0x80,
|
|
146
|
+
h264: sinon.match({
|
|
147
|
+
maxMbps: expectedRequest.maxMbps,
|
|
148
|
+
maxFs: expectedRequest.maxFs,
|
|
149
|
+
}),
|
|
150
|
+
}),
|
|
151
|
+
]
|
|
152
|
+
: [],
|
|
136
153
|
});
|
|
137
154
|
}
|
|
138
155
|
if (expectedRequest.policy === 'receiver-selected') {
|
|
@@ -142,15 +159,18 @@ describe('MediaRequestManager', () => {
|
|
|
142
159
|
csi: expectedRequest.csi,
|
|
143
160
|
}),
|
|
144
161
|
receiveSlots: [expectedRequest.receiveSlot],
|
|
145
|
-
maxPayloadBitsPerSecond,
|
|
146
|
-
codecInfos:
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
162
|
+
maxPayloadBitsPerSecond: expectedRequest.maxPayloadBitsPerSecond,
|
|
163
|
+
codecInfos: isCodecInfoDefined
|
|
164
|
+
? [
|
|
165
|
+
sinon.match({
|
|
166
|
+
payloadType: 0x80,
|
|
167
|
+
h264: sinon.match({
|
|
168
|
+
maxMbps: expectedRequest.maxMbps,
|
|
169
|
+
maxFs: expectedRequest.maxFs,
|
|
170
|
+
}),
|
|
171
|
+
}),
|
|
172
|
+
]
|
|
173
|
+
: [],
|
|
154
174
|
});
|
|
155
175
|
}
|
|
156
176
|
|
|
@@ -184,8 +204,8 @@ describe('MediaRequestManager', () => {
|
|
|
184
204
|
receiveSlots: [fakeReceiveSlots[0], fakeReceiveSlots[1], fakeReceiveSlots[2]],
|
|
185
205
|
codecInfo: {
|
|
186
206
|
codec: 'h264',
|
|
187
|
-
maxFs:
|
|
188
|
-
maxFps:
|
|
207
|
+
maxFs: MAX_FS_360p,
|
|
208
|
+
maxFps: MAX_FPS,
|
|
189
209
|
},
|
|
190
210
|
},
|
|
191
211
|
false
|
|
@@ -199,9 +219,9 @@ describe('MediaRequestManager', () => {
|
|
|
199
219
|
receiveSlots: [fakeReceiveSlots[3]],
|
|
200
220
|
codecInfo: {
|
|
201
221
|
codec: 'h264',
|
|
202
|
-
maxFs:
|
|
203
|
-
maxFps:
|
|
204
|
-
maxMbps:
|
|
222
|
+
maxFs: MAX_FS_720p,
|
|
223
|
+
maxFps: MAX_FPS,
|
|
224
|
+
maxMbps: MAX_MBPS_720p,
|
|
205
225
|
},
|
|
206
226
|
},
|
|
207
227
|
false
|
|
@@ -217,9 +237,9 @@ describe('MediaRequestManager', () => {
|
|
|
217
237
|
receiveSlots: [fakeReceiveSlots[4]],
|
|
218
238
|
codecInfo: {
|
|
219
239
|
codec: 'h264',
|
|
220
|
-
maxFs:
|
|
221
|
-
maxFps:
|
|
222
|
-
maxMbps:
|
|
240
|
+
maxFs: MAX_FS_1080p,
|
|
241
|
+
maxFps: MAX_FPS,
|
|
242
|
+
maxMbps: MAX_MBPS_1080p,
|
|
223
243
|
},
|
|
224
244
|
},
|
|
225
245
|
true
|
|
@@ -237,13 +257,14 @@ describe('MediaRequestManager', () => {
|
|
|
237
257
|
preferLiveVideo: false,
|
|
238
258
|
}),
|
|
239
259
|
receiveSlots: [fakeWcmeSlots[0], fakeWcmeSlots[1], fakeWcmeSlots[2]],
|
|
260
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_360p,
|
|
240
261
|
codecInfos: [
|
|
241
262
|
sinon.match({
|
|
242
263
|
payloadType: 0x80,
|
|
243
264
|
h264: sinon.match({
|
|
244
|
-
maxFs:
|
|
245
|
-
maxFps:
|
|
246
|
-
maxMbps:
|
|
265
|
+
maxFs: MAX_FS_360p,
|
|
266
|
+
maxFps: MAX_FPS,
|
|
267
|
+
maxMbps: MAX_MBPS_360p,
|
|
247
268
|
}),
|
|
248
269
|
}),
|
|
249
270
|
],
|
|
@@ -254,13 +275,14 @@ describe('MediaRequestManager', () => {
|
|
|
254
275
|
csi: 123,
|
|
255
276
|
}),
|
|
256
277
|
receiveSlots: [fakeWcmeSlots[3]],
|
|
278
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_720p,
|
|
257
279
|
codecInfos: [
|
|
258
280
|
sinon.match({
|
|
259
281
|
payloadType: 0x80,
|
|
260
282
|
h264: sinon.match({
|
|
261
|
-
maxFs:
|
|
262
|
-
maxFps:
|
|
263
|
-
maxMbps:
|
|
283
|
+
maxFs: MAX_FS_720p,
|
|
284
|
+
maxFps: MAX_FPS,
|
|
285
|
+
maxMbps: MAX_MBPS_720p,
|
|
264
286
|
}),
|
|
265
287
|
}),
|
|
266
288
|
],
|
|
@@ -271,13 +293,14 @@ describe('MediaRequestManager', () => {
|
|
|
271
293
|
csi: 123,
|
|
272
294
|
}),
|
|
273
295
|
receiveSlots: [fakeWcmeSlots[4]],
|
|
296
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
274
297
|
codecInfos: [
|
|
275
298
|
sinon.match({
|
|
276
299
|
payloadType: 0x80,
|
|
277
300
|
h264: sinon.match({
|
|
278
|
-
maxFs:
|
|
279
|
-
maxFps:
|
|
280
|
-
maxMbps:
|
|
301
|
+
maxFs: MAX_FS_1080p,
|
|
302
|
+
maxFps: MAX_FPS,
|
|
303
|
+
maxMbps: MAX_MBPS_1080p,
|
|
281
304
|
}),
|
|
282
305
|
}),
|
|
283
306
|
],
|
|
@@ -287,32 +310,38 @@ describe('MediaRequestManager', () => {
|
|
|
287
310
|
|
|
288
311
|
it('keeps adding requests with every call to addRequest()', () => {
|
|
289
312
|
// start with 1 request
|
|
290
|
-
addReceiverSelectedRequest(100, fakeReceiveSlots[0],
|
|
313
|
+
addReceiverSelectedRequest(100, fakeReceiveSlots[0], MAX_FS_1080p, true);
|
|
291
314
|
|
|
292
315
|
checkMediaRequestsSent([
|
|
293
316
|
{
|
|
294
317
|
policy: 'receiver-selected',
|
|
295
318
|
csi: 100,
|
|
296
319
|
receiveSlot: fakeWcmeSlots[0],
|
|
297
|
-
|
|
320
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
321
|
+
maxFs: MAX_FS_1080p,
|
|
322
|
+
maxMbps: MAX_MBPS_1080p,
|
|
298
323
|
},
|
|
299
324
|
]);
|
|
300
325
|
|
|
301
326
|
// now add another one
|
|
302
|
-
addReceiverSelectedRequest(101, fakeReceiveSlots[1],
|
|
327
|
+
addReceiverSelectedRequest(101, fakeReceiveSlots[1], MAX_FS_1080p, true);
|
|
303
328
|
|
|
304
329
|
checkMediaRequestsSent([
|
|
305
330
|
{
|
|
306
331
|
policy: 'receiver-selected',
|
|
307
332
|
csi: 100,
|
|
308
333
|
receiveSlot: fakeWcmeSlots[0],
|
|
309
|
-
|
|
334
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
335
|
+
maxFs: MAX_FS_1080p,
|
|
336
|
+
maxMbps: MAX_MBPS_1080p,
|
|
310
337
|
},
|
|
311
338
|
{
|
|
312
339
|
policy: 'receiver-selected',
|
|
313
340
|
csi: 101,
|
|
314
341
|
receiveSlot: fakeWcmeSlots[1],
|
|
315
|
-
|
|
342
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
343
|
+
maxFs: MAX_FS_1080p,
|
|
344
|
+
maxMbps: MAX_MBPS_1080p,
|
|
316
345
|
},
|
|
317
346
|
]);
|
|
318
347
|
|
|
@@ -320,7 +349,7 @@ describe('MediaRequestManager', () => {
|
|
|
320
349
|
addActiveSpeakerRequest(
|
|
321
350
|
1,
|
|
322
351
|
[fakeReceiveSlots[2], fakeReceiveSlots[3], fakeReceiveSlots[4]],
|
|
323
|
-
|
|
352
|
+
MAX_FS_720p,
|
|
324
353
|
true
|
|
325
354
|
);
|
|
326
355
|
|
|
@@ -329,37 +358,35 @@ describe('MediaRequestManager', () => {
|
|
|
329
358
|
policy: 'receiver-selected',
|
|
330
359
|
csi: 100,
|
|
331
360
|
receiveSlot: fakeWcmeSlots[0],
|
|
332
|
-
|
|
361
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
362
|
+
maxFs: MAX_FS_1080p,
|
|
363
|
+
maxMbps: MAX_MBPS_1080p,
|
|
333
364
|
},
|
|
334
365
|
{
|
|
335
366
|
policy: 'receiver-selected',
|
|
336
367
|
csi: 101,
|
|
337
368
|
receiveSlot: fakeWcmeSlots[1],
|
|
338
|
-
|
|
369
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
370
|
+
maxFs: MAX_FS_1080p,
|
|
371
|
+
maxMbps: MAX_MBPS_1080p,
|
|
339
372
|
},
|
|
340
373
|
{
|
|
341
374
|
policy: 'active-speaker',
|
|
342
375
|
priority: 1,
|
|
343
376
|
receiveSlots: [fakeWcmeSlots[2], fakeWcmeSlots[3], fakeWcmeSlots[4]],
|
|
344
|
-
|
|
377
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_720p,
|
|
378
|
+
maxFs: MAX_FS_720p,
|
|
379
|
+
maxMbps: MAX_MBPS_720p,
|
|
345
380
|
},
|
|
346
381
|
]);
|
|
347
382
|
});
|
|
348
383
|
|
|
349
384
|
it('cancels the requests correctly when cancelRequest() is called with commit=true', () => {
|
|
350
385
|
const requestIds = [
|
|
351
|
-
addActiveSpeakerRequest(
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
),
|
|
356
|
-
addActiveSpeakerRequest(
|
|
357
|
-
255,
|
|
358
|
-
[fakeReceiveSlots[2], fakeReceiveSlots[3]],
|
|
359
|
-
ACTIVE_SPEAKER_MAX_FS
|
|
360
|
-
),
|
|
361
|
-
addReceiverSelectedRequest(100, fakeReceiveSlots[4], RECEIVER_SELECTED_MAX_FS),
|
|
362
|
-
addReceiverSelectedRequest(200, fakeReceiveSlots[5], RECEIVER_SELECTED_MAX_FS),
|
|
386
|
+
addActiveSpeakerRequest(255, [fakeReceiveSlots[0], fakeReceiveSlots[1]], MAX_FS_720p),
|
|
387
|
+
addActiveSpeakerRequest(255, [fakeReceiveSlots[2], fakeReceiveSlots[3]], MAX_FS_720p),
|
|
388
|
+
addReceiverSelectedRequest(100, fakeReceiveSlots[4], MAX_FS_1080p),
|
|
389
|
+
addReceiverSelectedRequest(200, fakeReceiveSlots[5], MAX_FS_1080p),
|
|
363
390
|
];
|
|
364
391
|
|
|
365
392
|
// cancel one of the active speaker requests
|
|
@@ -371,19 +398,25 @@ describe('MediaRequestManager', () => {
|
|
|
371
398
|
policy: 'active-speaker',
|
|
372
399
|
priority: 255,
|
|
373
400
|
receiveSlots: [fakeWcmeSlots[0], fakeWcmeSlots[1]],
|
|
374
|
-
|
|
401
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_720p,
|
|
402
|
+
maxFs: MAX_FS_720p,
|
|
403
|
+
maxMbps: MAX_MBPS_720p,
|
|
375
404
|
},
|
|
376
405
|
{
|
|
377
406
|
policy: 'receiver-selected',
|
|
378
407
|
csi: 100,
|
|
379
408
|
receiveSlot: fakeWcmeSlots[4],
|
|
380
|
-
|
|
409
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
410
|
+
maxFs: MAX_FS_1080p,
|
|
411
|
+
maxMbps: MAX_MBPS_1080p,
|
|
381
412
|
},
|
|
382
413
|
{
|
|
383
414
|
policy: 'receiver-selected',
|
|
384
415
|
csi: 200,
|
|
385
416
|
receiveSlot: fakeWcmeSlots[5],
|
|
386
|
-
|
|
417
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
418
|
+
maxFs: MAX_FS_1080p,
|
|
419
|
+
maxMbps: MAX_MBPS_1080p,
|
|
387
420
|
},
|
|
388
421
|
]);
|
|
389
422
|
|
|
@@ -396,13 +429,17 @@ describe('MediaRequestManager', () => {
|
|
|
396
429
|
policy: 'active-speaker',
|
|
397
430
|
priority: 255,
|
|
398
431
|
receiveSlots: [fakeWcmeSlots[0], fakeWcmeSlots[1]],
|
|
399
|
-
|
|
432
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_720p,
|
|
433
|
+
maxFs: MAX_FS_720p,
|
|
434
|
+
maxMbps: MAX_MBPS_720p,
|
|
400
435
|
},
|
|
401
436
|
{
|
|
402
437
|
policy: 'receiver-selected',
|
|
403
438
|
csi: 100,
|
|
404
439
|
receiveSlot: fakeWcmeSlots[4],
|
|
405
|
-
|
|
440
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
441
|
+
maxFs: MAX_FS_1080p,
|
|
442
|
+
maxMbps: MAX_MBPS_1080p,
|
|
406
443
|
},
|
|
407
444
|
]);
|
|
408
445
|
});
|
|
@@ -411,10 +448,10 @@ describe('MediaRequestManager', () => {
|
|
|
411
448
|
addActiveSpeakerRequest(
|
|
412
449
|
10,
|
|
413
450
|
[fakeReceiveSlots[0], fakeReceiveSlots[1], fakeReceiveSlots[2]],
|
|
414
|
-
|
|
451
|
+
MAX_FS_720p,
|
|
415
452
|
false
|
|
416
453
|
);
|
|
417
|
-
addReceiverSelectedRequest(123, fakeReceiveSlots[3],
|
|
454
|
+
addReceiverSelectedRequest(123, fakeReceiveSlots[3], MAX_FS_1080p, false);
|
|
418
455
|
|
|
419
456
|
// nothing should be sent out as we didn't commit the requests
|
|
420
457
|
assert.notCalled(sendMediaRequestsCallback);
|
|
@@ -428,13 +465,17 @@ describe('MediaRequestManager', () => {
|
|
|
428
465
|
policy: 'active-speaker',
|
|
429
466
|
priority: 10,
|
|
430
467
|
receiveSlots: [fakeWcmeSlots[0], fakeWcmeSlots[1], fakeWcmeSlots[2]],
|
|
431
|
-
|
|
468
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_720p,
|
|
469
|
+
maxFs: MAX_FS_720p,
|
|
470
|
+
maxMbps: MAX_MBPS_720p,
|
|
432
471
|
},
|
|
433
472
|
{
|
|
434
473
|
policy: 'receiver-selected',
|
|
435
474
|
csi: 123,
|
|
436
475
|
receiveSlot: fakeWcmeSlots[3],
|
|
437
|
-
|
|
476
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
477
|
+
maxFs: MAX_FS_1080p,
|
|
478
|
+
maxMbps: MAX_MBPS_1080p,
|
|
438
479
|
},
|
|
439
480
|
]);
|
|
440
481
|
});
|
|
@@ -445,12 +486,12 @@ describe('MediaRequestManager', () => {
|
|
|
445
486
|
addActiveSpeakerRequest(
|
|
446
487
|
250,
|
|
447
488
|
[fakeReceiveSlots[0], fakeReceiveSlots[1], fakeReceiveSlots[2]],
|
|
448
|
-
|
|
489
|
+
MAX_FS_720p,
|
|
449
490
|
false
|
|
450
491
|
),
|
|
451
|
-
addReceiverSelectedRequest(98765, fakeReceiveSlots[3],
|
|
452
|
-
addReceiverSelectedRequest(99999, fakeReceiveSlots[4],
|
|
453
|
-
addReceiverSelectedRequest(88888, fakeReceiveSlots[5],
|
|
492
|
+
addReceiverSelectedRequest(98765, fakeReceiveSlots[3], MAX_FS_1080p, false),
|
|
493
|
+
addReceiverSelectedRequest(99999, fakeReceiveSlots[4], MAX_FS_1080p, false),
|
|
494
|
+
addReceiverSelectedRequest(88888, fakeReceiveSlots[5], MAX_FS_1080p, true),
|
|
454
495
|
];
|
|
455
496
|
|
|
456
497
|
checkMediaRequestsSent([
|
|
@@ -458,25 +499,33 @@ describe('MediaRequestManager', () => {
|
|
|
458
499
|
policy: 'active-speaker',
|
|
459
500
|
priority: 250,
|
|
460
501
|
receiveSlots: [fakeWcmeSlots[0], fakeWcmeSlots[1], fakeWcmeSlots[2]],
|
|
461
|
-
|
|
502
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_720p,
|
|
503
|
+
maxFs: MAX_FS_720p,
|
|
504
|
+
maxMbps: MAX_MBPS_720p,
|
|
462
505
|
},
|
|
463
506
|
{
|
|
464
507
|
policy: 'receiver-selected',
|
|
465
508
|
csi: 98765,
|
|
466
509
|
receiveSlot: fakeWcmeSlots[3],
|
|
467
|
-
|
|
510
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
511
|
+
maxFs: MAX_FS_1080p,
|
|
512
|
+
maxMbps: MAX_MBPS_1080p,
|
|
468
513
|
},
|
|
469
514
|
{
|
|
470
515
|
policy: 'receiver-selected',
|
|
471
516
|
csi: 99999,
|
|
472
517
|
receiveSlot: fakeWcmeSlots[4],
|
|
473
|
-
|
|
518
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
519
|
+
maxFs: MAX_FS_1080p,
|
|
520
|
+
maxMbps: MAX_MBPS_1080p,
|
|
474
521
|
},
|
|
475
522
|
{
|
|
476
523
|
policy: 'receiver-selected',
|
|
477
524
|
csi: 88888,
|
|
478
525
|
receiveSlot: fakeWcmeSlots[5],
|
|
479
|
-
|
|
526
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
527
|
+
maxFs: MAX_FS_1080p,
|
|
528
|
+
maxMbps: MAX_MBPS_1080p,
|
|
480
529
|
},
|
|
481
530
|
]);
|
|
482
531
|
|
|
@@ -495,25 +544,27 @@ describe('MediaRequestManager', () => {
|
|
|
495
544
|
policy: 'receiver-selected',
|
|
496
545
|
csi: 98765,
|
|
497
546
|
receiveSlot: fakeWcmeSlots[3],
|
|
498
|
-
|
|
547
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
548
|
+
maxFs: MAX_FS_1080p,
|
|
549
|
+
maxMbps: MAX_MBPS_1080p,
|
|
499
550
|
},
|
|
500
551
|
]);
|
|
501
552
|
});
|
|
502
553
|
|
|
503
554
|
it('sends the wcme media requests when commit() is called', () => {
|
|
504
555
|
// send some requests, all of them with commit=false
|
|
505
|
-
addReceiverSelectedRequest(123000, fakeReceiveSlots[0],
|
|
506
|
-
addReceiverSelectedRequest(456000, fakeReceiveSlots[1],
|
|
556
|
+
addReceiverSelectedRequest(123000, fakeReceiveSlots[0], MAX_FS_1080p, false);
|
|
557
|
+
addReceiverSelectedRequest(456000, fakeReceiveSlots[1], MAX_FS_1080p, false);
|
|
507
558
|
addActiveSpeakerRequest(
|
|
508
559
|
255,
|
|
509
560
|
[fakeReceiveSlots[2], fakeReceiveSlots[3], fakeReceiveSlots[4]],
|
|
510
|
-
|
|
561
|
+
MAX_FS_720p,
|
|
511
562
|
false
|
|
512
563
|
);
|
|
513
564
|
addActiveSpeakerRequest(
|
|
514
565
|
254,
|
|
515
566
|
[fakeReceiveSlots[5], fakeReceiveSlots[6], fakeReceiveSlots[7]],
|
|
516
|
-
|
|
567
|
+
MAX_FS_720p,
|
|
517
568
|
false
|
|
518
569
|
);
|
|
519
570
|
|
|
@@ -529,43 +580,51 @@ describe('MediaRequestManager', () => {
|
|
|
529
580
|
policy: 'receiver-selected',
|
|
530
581
|
csi: 123000,
|
|
531
582
|
receiveSlot: fakeWcmeSlots[0],
|
|
532
|
-
|
|
583
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
584
|
+
maxFs: MAX_FS_1080p,
|
|
585
|
+
maxMbps: MAX_MBPS_1080p,
|
|
533
586
|
},
|
|
534
587
|
{
|
|
535
588
|
policy: 'receiver-selected',
|
|
536
589
|
csi: 456000,
|
|
537
590
|
receiveSlot: fakeWcmeSlots[1],
|
|
538
|
-
|
|
591
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
592
|
+
maxFs: MAX_FS_1080p,
|
|
593
|
+
maxMbps: MAX_MBPS_1080p,
|
|
539
594
|
},
|
|
540
595
|
{
|
|
541
596
|
policy: 'active-speaker',
|
|
542
597
|
priority: 255,
|
|
543
598
|
receiveSlots: [fakeWcmeSlots[2], fakeWcmeSlots[3], fakeWcmeSlots[4]],
|
|
544
|
-
|
|
599
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_720p,
|
|
600
|
+
maxFs: MAX_FS_720p,
|
|
601
|
+
maxMbps: MAX_MBPS_720p,
|
|
545
602
|
},
|
|
546
603
|
{
|
|
547
604
|
policy: 'active-speaker',
|
|
548
605
|
priority: 254,
|
|
549
606
|
receiveSlots: [fakeWcmeSlots[5], fakeWcmeSlots[6], fakeWcmeSlots[7]],
|
|
550
|
-
|
|
607
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_720p,
|
|
608
|
+
maxFs: MAX_FS_720p,
|
|
609
|
+
maxMbps: MAX_MBPS_720p,
|
|
551
610
|
},
|
|
552
611
|
]);
|
|
553
612
|
});
|
|
554
613
|
|
|
555
614
|
it('avoids sending duplicate requests and clears all the requests on reset()', () => {
|
|
556
615
|
// send some requests and commit them one by one
|
|
557
|
-
addReceiverSelectedRequest(1500, fakeReceiveSlots[0],
|
|
558
|
-
addReceiverSelectedRequest(1501, fakeReceiveSlots[1],
|
|
616
|
+
addReceiverSelectedRequest(1500, fakeReceiveSlots[0], MAX_FS_1080p, false);
|
|
617
|
+
addReceiverSelectedRequest(1501, fakeReceiveSlots[1], MAX_FS_1080p, false);
|
|
559
618
|
addActiveSpeakerRequest(
|
|
560
619
|
255,
|
|
561
620
|
[fakeReceiveSlots[2], fakeReceiveSlots[3], fakeReceiveSlots[4]],
|
|
562
|
-
|
|
621
|
+
MAX_FS_720p,
|
|
563
622
|
false
|
|
564
623
|
);
|
|
565
624
|
addActiveSpeakerRequest(
|
|
566
625
|
254,
|
|
567
626
|
[fakeReceiveSlots[5], fakeReceiveSlots[6], fakeReceiveSlots[7]],
|
|
568
|
-
|
|
627
|
+
MAX_FS_720p,
|
|
569
628
|
false
|
|
570
629
|
);
|
|
571
630
|
|
|
@@ -578,25 +637,33 @@ describe('MediaRequestManager', () => {
|
|
|
578
637
|
policy: 'receiver-selected',
|
|
579
638
|
csi: 1500,
|
|
580
639
|
receiveSlot: fakeWcmeSlots[0],
|
|
581
|
-
|
|
640
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
641
|
+
maxFs: MAX_FS_1080p,
|
|
642
|
+
maxMbps: MAX_MBPS_1080p,
|
|
582
643
|
},
|
|
583
644
|
{
|
|
584
645
|
policy: 'receiver-selected',
|
|
585
646
|
csi: 1501,
|
|
586
647
|
receiveSlot: fakeWcmeSlots[1],
|
|
587
|
-
|
|
648
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
649
|
+
maxFs: MAX_FS_1080p,
|
|
650
|
+
maxMbps: MAX_MBPS_1080p,
|
|
588
651
|
},
|
|
589
652
|
{
|
|
590
653
|
policy: 'active-speaker',
|
|
591
654
|
priority: 255,
|
|
592
655
|
receiveSlots: [fakeWcmeSlots[2], fakeWcmeSlots[3], fakeWcmeSlots[4]],
|
|
593
|
-
|
|
656
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_720p,
|
|
657
|
+
maxFs: MAX_FS_720p,
|
|
658
|
+
maxMbps: MAX_MBPS_720p,
|
|
594
659
|
},
|
|
595
660
|
{
|
|
596
661
|
policy: 'active-speaker',
|
|
597
662
|
priority: 254,
|
|
598
663
|
receiveSlots: [fakeWcmeSlots[5], fakeWcmeSlots[6], fakeWcmeSlots[7]],
|
|
599
|
-
|
|
664
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_720p,
|
|
665
|
+
maxFs: MAX_FS_720p,
|
|
666
|
+
maxMbps: MAX_MBPS_720p,
|
|
600
667
|
},
|
|
601
668
|
]);
|
|
602
669
|
|
|
@@ -615,7 +682,7 @@ describe('MediaRequestManager', () => {
|
|
|
615
682
|
});
|
|
616
683
|
|
|
617
684
|
it('makes sure to call requests correctly after reset was called and another request was added', () => {
|
|
618
|
-
addReceiverSelectedRequest(1500, fakeReceiveSlots[0],
|
|
685
|
+
addReceiverSelectedRequest(1500, fakeReceiveSlots[0], MAX_FS_1080p, false);
|
|
619
686
|
|
|
620
687
|
assert.notCalled(sendMediaRequestsCallback);
|
|
621
688
|
|
|
@@ -625,7 +692,9 @@ describe('MediaRequestManager', () => {
|
|
|
625
692
|
policy: 'receiver-selected',
|
|
626
693
|
csi: 1500,
|
|
627
694
|
receiveSlot: fakeWcmeSlots[0],
|
|
628
|
-
|
|
695
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
696
|
+
maxFs: MAX_FS_1080p,
|
|
697
|
+
maxMbps: MAX_MBPS_1080p,
|
|
629
698
|
},
|
|
630
699
|
]);
|
|
631
700
|
|
|
@@ -637,7 +706,7 @@ describe('MediaRequestManager', () => {
|
|
|
637
706
|
checkMediaRequestsSent([]);
|
|
638
707
|
|
|
639
708
|
//add new request
|
|
640
|
-
addReceiverSelectedRequest(1501, fakeReceiveSlots[1],
|
|
709
|
+
addReceiverSelectedRequest(1501, fakeReceiveSlots[1], MAX_FS_1080p, false);
|
|
641
710
|
|
|
642
711
|
// commit
|
|
643
712
|
mediaRequestManager.commit();
|
|
@@ -648,21 +717,25 @@ describe('MediaRequestManager', () => {
|
|
|
648
717
|
policy: 'receiver-selected',
|
|
649
718
|
csi: 1501,
|
|
650
719
|
receiveSlot: fakeWcmeSlots[1],
|
|
651
|
-
|
|
720
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
721
|
+
maxFs: MAX_FS_1080p,
|
|
722
|
+
maxMbps: MAX_MBPS_1080p,
|
|
652
723
|
},
|
|
653
724
|
]);
|
|
654
725
|
});
|
|
655
726
|
|
|
656
727
|
it('can send same media request after previous requests have been cleared', () => {
|
|
657
728
|
// add a request and commit
|
|
658
|
-
addReceiverSelectedRequest(1500, fakeReceiveSlots[0],
|
|
729
|
+
addReceiverSelectedRequest(1500, fakeReceiveSlots[0], MAX_FS_1080p, false);
|
|
659
730
|
mediaRequestManager.commit();
|
|
660
731
|
checkMediaRequestsSent([
|
|
661
732
|
{
|
|
662
733
|
policy: 'receiver-selected',
|
|
663
734
|
csi: 1500,
|
|
735
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
664
736
|
receiveSlot: fakeWcmeSlots[0],
|
|
665
|
-
maxFs:
|
|
737
|
+
maxFs: MAX_FS_1080p,
|
|
738
|
+
maxMbps: MAX_MBPS_1080p,
|
|
666
739
|
},
|
|
667
740
|
]);
|
|
668
741
|
|
|
@@ -677,8 +750,10 @@ describe('MediaRequestManager', () => {
|
|
|
677
750
|
{
|
|
678
751
|
policy: 'receiver-selected',
|
|
679
752
|
csi: 1500,
|
|
753
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
680
754
|
receiveSlot: fakeWcmeSlots[0],
|
|
681
|
-
maxFs:
|
|
755
|
+
maxFs: MAX_FS_1080p,
|
|
756
|
+
maxMbps: MAX_MBPS_1080p,
|
|
682
757
|
},
|
|
683
758
|
]);
|
|
684
759
|
});
|
|
@@ -708,7 +783,9 @@ describe('MediaRequestManager', () => {
|
|
|
708
783
|
policy: 'active-speaker',
|
|
709
784
|
priority: 255,
|
|
710
785
|
receiveSlots: fakeWcmeSlots.slice(0, 4),
|
|
786
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
711
787
|
maxFs: getMaxFs('large'),
|
|
788
|
+
maxMbps: MAX_MBPS_1080p,
|
|
712
789
|
},
|
|
713
790
|
]);
|
|
714
791
|
});
|
|
@@ -735,13 +812,17 @@ describe('MediaRequestManager', () => {
|
|
|
735
812
|
policy: 'active-speaker',
|
|
736
813
|
priority: 255,
|
|
737
814
|
receiveSlots: fakeWcmeSlots.slice(0, 3),
|
|
815
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_720p,
|
|
738
816
|
maxFs: getMaxFs('medium'),
|
|
817
|
+
maxMbps: MAX_MBPS_720p,
|
|
739
818
|
},
|
|
740
819
|
{
|
|
741
820
|
policy: 'receiver-selected',
|
|
742
821
|
csi: 123,
|
|
743
822
|
receiveSlot: fakeWcmeSlots[3],
|
|
823
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_720p,
|
|
744
824
|
maxFs: getMaxFs('medium'),
|
|
825
|
+
maxMbps: MAX_MBPS_720p,
|
|
745
826
|
},
|
|
746
827
|
]);
|
|
747
828
|
|
|
@@ -754,7 +835,9 @@ describe('MediaRequestManager', () => {
|
|
|
754
835
|
policy: 'active-speaker',
|
|
755
836
|
priority: 255,
|
|
756
837
|
receiveSlots: fakeWcmeSlots.slice(0, 3),
|
|
838
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
757
839
|
maxFs: getMaxFs('large'),
|
|
840
|
+
maxMbps: MAX_MBPS_1080p,
|
|
758
841
|
},
|
|
759
842
|
]);
|
|
760
843
|
});
|
|
@@ -773,7 +856,9 @@ describe('MediaRequestManager', () => {
|
|
|
773
856
|
policy: 'active-speaker',
|
|
774
857
|
priority: 255,
|
|
775
858
|
receiveSlots: fakeWcmeSlots.slice(0, 10),
|
|
859
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_360p,
|
|
776
860
|
maxFs: getMaxFs('small'),
|
|
861
|
+
maxMbps: MAX_MBPS_360p,
|
|
777
862
|
},
|
|
778
863
|
]);
|
|
779
864
|
});
|
|
@@ -793,13 +878,17 @@ describe('MediaRequestManager', () => {
|
|
|
793
878
|
policy: 'active-speaker',
|
|
794
879
|
priority: 255,
|
|
795
880
|
receiveSlots: fakeWcmeSlots.slice(0, 5),
|
|
881
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_720p,
|
|
796
882
|
maxFs: getMaxFs('medium'),
|
|
883
|
+
maxMbps: MAX_MBPS_720p,
|
|
797
884
|
},
|
|
798
885
|
{
|
|
799
886
|
policy: 'active-speaker',
|
|
800
887
|
priority: 254,
|
|
801
888
|
receiveSlots: fakeWcmeSlots.slice(5, 10),
|
|
889
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_360p,
|
|
802
890
|
maxFs: getMaxFs('small'),
|
|
891
|
+
maxMbps: MAX_MBPS_360p,
|
|
803
892
|
},
|
|
804
893
|
]);
|
|
805
894
|
});
|
|
@@ -835,7 +924,137 @@ describe('MediaRequestManager', () => {
|
|
|
835
924
|
priority: 255,
|
|
836
925
|
receiveSlots: fakeWcmeSlots.slice(0, 10),
|
|
837
926
|
maxFs: preferredFrameSize,
|
|
927
|
+
maxPayloadBitsPerSecond: 99000,
|
|
928
|
+
maxMbps: 3000,
|
|
838
929
|
},
|
|
839
930
|
]);
|
|
840
931
|
});
|
|
932
|
+
|
|
933
|
+
describe('maxPayloadBitsPerSecond', () => {
|
|
934
|
+
let getRecommendedMaxBitrateForFrameSizeSpy;
|
|
935
|
+
|
|
936
|
+
beforeEach(() => {
|
|
937
|
+
sendMediaRequestsCallback.resetHistory();
|
|
938
|
+
getRecommendedMaxBitrateForFrameSizeSpy = sinon.spy(
|
|
939
|
+
mediaCore,
|
|
940
|
+
'getRecommendedMaxBitrateForFrameSize'
|
|
941
|
+
);
|
|
942
|
+
});
|
|
943
|
+
|
|
944
|
+
afterEach(() => {
|
|
945
|
+
getRecommendedMaxBitrateForFrameSizeSpy.restore();
|
|
946
|
+
});
|
|
947
|
+
|
|
948
|
+
it('returns the default maxPayloadBitsPerSecond if kind is "audio"', () => {
|
|
949
|
+
const mediaRequestManagerAudio = new MediaRequestManager(sendMediaRequestsCallback, {
|
|
950
|
+
degradationPreferences,
|
|
951
|
+
kind: 'audio',
|
|
952
|
+
});
|
|
953
|
+
mediaRequestManagerAudio.addRequest(
|
|
954
|
+
{
|
|
955
|
+
policyInfo: {
|
|
956
|
+
policy: 'receiver-selected',
|
|
957
|
+
csi: 123,
|
|
958
|
+
},
|
|
959
|
+
receiveSlots: [fakeReceiveSlots[0]],
|
|
960
|
+
codecInfo: undefined,
|
|
961
|
+
},
|
|
962
|
+
false
|
|
963
|
+
);
|
|
964
|
+
|
|
965
|
+
mediaRequestManagerAudio.commit();
|
|
966
|
+
|
|
967
|
+
checkMediaRequestsSent(
|
|
968
|
+
[
|
|
969
|
+
{
|
|
970
|
+
policy: 'receiver-selected',
|
|
971
|
+
csi: 123,
|
|
972
|
+
receiveSlot: fakeWcmeSlots[0],
|
|
973
|
+
// returns RecommendedOpusBitrates.FB_MONO_MUSIC as expected:
|
|
974
|
+
maxPayloadBitsPerSecond: 64000,
|
|
975
|
+
},
|
|
976
|
+
// set isCodecInfoDefined to false, since we don't pass in a codec info when audio:
|
|
977
|
+
],
|
|
978
|
+
false
|
|
979
|
+
);
|
|
980
|
+
|
|
981
|
+
assert.notCalled(getRecommendedMaxBitrateForFrameSizeSpy);
|
|
982
|
+
});
|
|
983
|
+
|
|
984
|
+
it('returns the recommended maxPayloadBitsPerSecond if kind is "video"', () => {
|
|
985
|
+
mediaRequestManager.addRequest(
|
|
986
|
+
{
|
|
987
|
+
policyInfo: {
|
|
988
|
+
policy: 'receiver-selected',
|
|
989
|
+
csi: 123,
|
|
990
|
+
},
|
|
991
|
+
receiveSlots: [fakeReceiveSlots[0]],
|
|
992
|
+
codecInfo: {
|
|
993
|
+
codec: 'h264',
|
|
994
|
+
maxFs: MAX_FS_1080p,
|
|
995
|
+
maxFps: MAX_FPS,
|
|
996
|
+
maxMbps: MAX_MBPS_1080p,
|
|
997
|
+
},
|
|
998
|
+
},
|
|
999
|
+
false
|
|
1000
|
+
);
|
|
1001
|
+
|
|
1002
|
+
mediaRequestManager.commit();
|
|
1003
|
+
|
|
1004
|
+
checkMediaRequestsSent([
|
|
1005
|
+
{
|
|
1006
|
+
policy: 'receiver-selected',
|
|
1007
|
+
csi: 123,
|
|
1008
|
+
receiveSlot: fakeWcmeSlots[0],
|
|
1009
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
1010
|
+
maxFs: MAX_FS_1080p,
|
|
1011
|
+
maxMbps: MAX_MBPS_1080p,
|
|
1012
|
+
},
|
|
1013
|
+
]);
|
|
1014
|
+
|
|
1015
|
+
// calls the utility function as expected with maxFs passed in (no need to do
|
|
1016
|
+
// further tests here, since the util function itself should be tested for different inputs)
|
|
1017
|
+
assert.calledWith(getRecommendedMaxBitrateForFrameSizeSpy, MAX_FS_1080p);
|
|
1018
|
+
});
|
|
1019
|
+
});
|
|
1020
|
+
|
|
1021
|
+
describe('maxMbps', () => {
|
|
1022
|
+
beforeEach(() => {
|
|
1023
|
+
sendMediaRequestsCallback.resetHistory();
|
|
1024
|
+
});
|
|
1025
|
+
|
|
1026
|
+
it('returns the correct maxMbps value', () => {
|
|
1027
|
+
mediaRequestManager.addRequest(
|
|
1028
|
+
{
|
|
1029
|
+
policyInfo: {
|
|
1030
|
+
policy: 'receiver-selected',
|
|
1031
|
+
csi: 123,
|
|
1032
|
+
},
|
|
1033
|
+
receiveSlots: [fakeReceiveSlots[0]],
|
|
1034
|
+
codecInfo: {
|
|
1035
|
+
codec: 'h264',
|
|
1036
|
+
maxFs: MAX_FS_1080p,
|
|
1037
|
+
maxFps: MAX_FPS,
|
|
1038
|
+
// random value to pass in, to show that the output (below) is calculated
|
|
1039
|
+
// from the maxFs and maxFps values only:
|
|
1040
|
+
maxMbps: 123,
|
|
1041
|
+
},
|
|
1042
|
+
},
|
|
1043
|
+
false
|
|
1044
|
+
);
|
|
1045
|
+
|
|
1046
|
+
mediaRequestManager.commit();
|
|
1047
|
+
|
|
1048
|
+
checkMediaRequestsSent([
|
|
1049
|
+
{
|
|
1050
|
+
policy: 'receiver-selected',
|
|
1051
|
+
csi: 123,
|
|
1052
|
+
receiveSlot: fakeWcmeSlots[0],
|
|
1053
|
+
maxPayloadBitsPerSecond: MAX_PAYLOADBITSPS_1080p,
|
|
1054
|
+
maxFs: MAX_FS_1080p,
|
|
1055
|
+
maxMbps: MAX_MBPS_1080p,
|
|
1056
|
+
},
|
|
1057
|
+
]);
|
|
1058
|
+
});
|
|
1059
|
+
});
|
|
841
1060
|
});
|