mediasoup-client 3.6.75 → 3.6.77
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/lib/Transport.d.ts.map +1 -1
- package/lib/Transport.js +132 -61
- package/lib/handlers/Chrome74.d.ts.map +1 -1
- package/lib/handlers/Chrome74.js +8 -1
- package/lib/handlers/Firefox60.d.ts.map +1 -1
- package/lib/handlers/Firefox60.js +9 -1
- package/lib/handlers/Safari12.d.ts.map +1 -1
- package/lib/handlers/Safari12.js +9 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/tests/test.js +34 -0
- package/package.json +2 -1
package/lib/Transport.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Transport.d.ts","sourceRoot":"","sources":["../src/Transport.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Transport.d.ts","sourceRoot":"","sources":["../src/Transport.ts"],"names":[],"mappings":"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"}
|
package/lib/Transport.js
CHANGED
|
@@ -22,9 +22,13 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
25
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
29
|
exports.Transport = void 0;
|
|
27
30
|
const awaitqueue_1 = require("awaitqueue");
|
|
31
|
+
const queue_microtask_1 = __importDefault(require("queue-microtask"));
|
|
28
32
|
const Logger_1 = require("./Logger");
|
|
29
33
|
const EnhancedEventEmitter_1 = require("./EnhancedEventEmitter");
|
|
30
34
|
const errors_1 = require("./errors");
|
|
@@ -161,8 +165,9 @@ class Transport extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
161
165
|
* Close the Transport.
|
|
162
166
|
*/
|
|
163
167
|
close() {
|
|
164
|
-
if (this._closed)
|
|
168
|
+
if (this._closed) {
|
|
165
169
|
return;
|
|
170
|
+
}
|
|
166
171
|
logger.debug('close()');
|
|
167
172
|
this._closed = true;
|
|
168
173
|
// Stop the AwaitQueue.
|
|
@@ -198,8 +203,9 @@ class Transport extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
198
203
|
* @returns {RTCStatsReport}
|
|
199
204
|
*/
|
|
200
205
|
async getStats() {
|
|
201
|
-
if (this._closed)
|
|
206
|
+
if (this._closed) {
|
|
202
207
|
throw new errors_1.InvalidStateError('closed');
|
|
208
|
+
}
|
|
203
209
|
return this._handler.getTransportStats();
|
|
204
210
|
}
|
|
205
211
|
/**
|
|
@@ -207,10 +213,12 @@ class Transport extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
207
213
|
*/
|
|
208
214
|
async restartIce({ iceParameters }) {
|
|
209
215
|
logger.debug('restartIce()');
|
|
210
|
-
if (this._closed)
|
|
216
|
+
if (this._closed) {
|
|
211
217
|
throw new errors_1.InvalidStateError('closed');
|
|
212
|
-
|
|
218
|
+
}
|
|
219
|
+
else if (!iceParameters) {
|
|
213
220
|
throw new TypeError('missing iceParameters');
|
|
221
|
+
}
|
|
214
222
|
// Enqueue command.
|
|
215
223
|
return this._awaitQueue.push(async () => this._handler.restartIce(iceParameters), 'transport.restartIce()');
|
|
216
224
|
}
|
|
@@ -219,10 +227,12 @@ class Transport extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
219
227
|
*/
|
|
220
228
|
async updateIceServers({ iceServers } = {}) {
|
|
221
229
|
logger.debug('updateIceServers()');
|
|
222
|
-
if (this._closed)
|
|
230
|
+
if (this._closed) {
|
|
223
231
|
throw new errors_1.InvalidStateError('closed');
|
|
224
|
-
|
|
232
|
+
}
|
|
233
|
+
else if (!Array.isArray(iceServers)) {
|
|
225
234
|
throw new TypeError('missing iceServers');
|
|
235
|
+
}
|
|
226
236
|
// Enqueue command.
|
|
227
237
|
return this._awaitQueue.push(async () => this._handler.updateIceServers(iceServers), 'transport.updateIceServers()');
|
|
228
238
|
}
|
|
@@ -231,22 +241,30 @@ class Transport extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
231
241
|
*/
|
|
232
242
|
async produce({ track, encodings, codecOptions, codec, stopTracks = true, disableTrackOnPause = true, zeroRtpOnPause = false, appData = {} } = {}) {
|
|
233
243
|
logger.debug('produce() [track:%o]', track);
|
|
234
|
-
if (this._closed)
|
|
244
|
+
if (this._closed) {
|
|
235
245
|
throw new errors_1.InvalidStateError('closed');
|
|
236
|
-
|
|
246
|
+
}
|
|
247
|
+
else if (!track) {
|
|
237
248
|
throw new TypeError('missing track');
|
|
238
|
-
|
|
249
|
+
}
|
|
250
|
+
else if (this._direction !== 'send') {
|
|
239
251
|
throw new errors_1.UnsupportedError('not a sending Transport');
|
|
240
|
-
|
|
252
|
+
}
|
|
253
|
+
else if (!this._canProduceByKind[track.kind]) {
|
|
241
254
|
throw new errors_1.UnsupportedError(`cannot produce ${track.kind}`);
|
|
242
|
-
|
|
255
|
+
}
|
|
256
|
+
else if (track.readyState === 'ended') {
|
|
243
257
|
throw new errors_1.InvalidStateError('track ended');
|
|
244
|
-
|
|
258
|
+
}
|
|
259
|
+
else if (this.listenerCount('connect') === 0 && this._connectionState === 'new') {
|
|
245
260
|
throw new TypeError('no "connect" listener set into this transport');
|
|
246
|
-
|
|
261
|
+
}
|
|
262
|
+
else if (this.listenerCount('produce') === 0) {
|
|
247
263
|
throw new TypeError('no "produce" listener set into this transport');
|
|
248
|
-
|
|
264
|
+
}
|
|
265
|
+
else if (appData && typeof appData !== 'object') {
|
|
249
266
|
throw new TypeError('if given, appData must be an object');
|
|
267
|
+
}
|
|
250
268
|
// Enqueue command.
|
|
251
269
|
return this._awaitQueue.push(async () => {
|
|
252
270
|
let normalizedEncodings;
|
|
@@ -260,24 +278,33 @@ class Transport extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
260
278
|
normalizedEncodings = encodings
|
|
261
279
|
.map((encoding) => {
|
|
262
280
|
const normalizedEncoding = { active: true };
|
|
263
|
-
if (encoding.active === false)
|
|
281
|
+
if (encoding.active === false) {
|
|
264
282
|
normalizedEncoding.active = false;
|
|
265
|
-
|
|
283
|
+
}
|
|
284
|
+
if (typeof encoding.dtx === 'boolean') {
|
|
266
285
|
normalizedEncoding.dtx = encoding.dtx;
|
|
267
|
-
|
|
286
|
+
}
|
|
287
|
+
if (typeof encoding.scalabilityMode === 'string') {
|
|
268
288
|
normalizedEncoding.scalabilityMode = encoding.scalabilityMode;
|
|
269
|
-
|
|
289
|
+
}
|
|
290
|
+
if (typeof encoding.scaleResolutionDownBy === 'number') {
|
|
270
291
|
normalizedEncoding.scaleResolutionDownBy = encoding.scaleResolutionDownBy;
|
|
271
|
-
|
|
292
|
+
}
|
|
293
|
+
if (typeof encoding.maxBitrate === 'number') {
|
|
272
294
|
normalizedEncoding.maxBitrate = encoding.maxBitrate;
|
|
273
|
-
|
|
295
|
+
}
|
|
296
|
+
if (typeof encoding.maxFramerate === 'number') {
|
|
274
297
|
normalizedEncoding.maxFramerate = encoding.maxFramerate;
|
|
275
|
-
|
|
298
|
+
}
|
|
299
|
+
if (typeof encoding.adaptivePtime === 'boolean') {
|
|
276
300
|
normalizedEncoding.adaptivePtime = encoding.adaptivePtime;
|
|
277
|
-
|
|
301
|
+
}
|
|
302
|
+
if (typeof encoding.priority === 'string') {
|
|
278
303
|
normalizedEncoding.priority = encoding.priority;
|
|
279
|
-
|
|
304
|
+
}
|
|
305
|
+
if (typeof encoding.networkPriority === 'string') {
|
|
280
306
|
normalizedEncoding.networkPriority = encoding.networkPriority;
|
|
307
|
+
}
|
|
281
308
|
return normalizedEncoding;
|
|
282
309
|
});
|
|
283
310
|
}
|
|
@@ -338,24 +365,32 @@ class Transport extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
338
365
|
async consume({ id, producerId, kind, rtpParameters, streamId, appData = {} }) {
|
|
339
366
|
logger.debug('consume()');
|
|
340
367
|
rtpParameters = utils.clone(rtpParameters, undefined);
|
|
341
|
-
if (this._closed)
|
|
368
|
+
if (this._closed) {
|
|
342
369
|
throw new errors_1.InvalidStateError('closed');
|
|
343
|
-
|
|
370
|
+
}
|
|
371
|
+
else if (this._direction !== 'recv') {
|
|
344
372
|
throw new errors_1.UnsupportedError('not a receiving Transport');
|
|
345
|
-
|
|
373
|
+
}
|
|
374
|
+
else if (typeof id !== 'string') {
|
|
346
375
|
throw new TypeError('missing id');
|
|
347
|
-
|
|
376
|
+
}
|
|
377
|
+
else if (typeof producerId !== 'string') {
|
|
348
378
|
throw new TypeError('missing producerId');
|
|
349
|
-
|
|
379
|
+
}
|
|
380
|
+
else if (kind !== 'audio' && kind !== 'video') {
|
|
350
381
|
throw new TypeError(`invalid kind '${kind}'`);
|
|
351
|
-
|
|
382
|
+
}
|
|
383
|
+
else if (this.listenerCount('connect') === 0 && this._connectionState === 'new') {
|
|
352
384
|
throw new TypeError('no "connect" listener set into this transport');
|
|
353
|
-
|
|
385
|
+
}
|
|
386
|
+
else if (appData && typeof appData !== 'object') {
|
|
354
387
|
throw new TypeError('if given, appData must be an object');
|
|
388
|
+
}
|
|
355
389
|
// Ensure the device can consume it.
|
|
356
390
|
const canConsume = ortc.canReceive(rtpParameters, this._extendedRtpCapabilities);
|
|
357
|
-
if (!canConsume)
|
|
391
|
+
if (!canConsume) {
|
|
358
392
|
throw new errors_1.UnsupportedError('cannot consume this Producer');
|
|
393
|
+
}
|
|
359
394
|
const consumerCreationTask = new ConsumerCreationTask({
|
|
360
395
|
id,
|
|
361
396
|
producerId,
|
|
@@ -367,9 +402,14 @@ class Transport extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
367
402
|
// Store the Consumer creation task.
|
|
368
403
|
this._pendingConsumerTasks.push(consumerCreationTask);
|
|
369
404
|
// There is no Consumer creation in progress, create it now.
|
|
370
|
-
|
|
371
|
-
this.
|
|
372
|
-
|
|
405
|
+
(0, queue_microtask_1.default)(() => {
|
|
406
|
+
if (this._closed) {
|
|
407
|
+
throw new errors_1.InvalidStateError('closed');
|
|
408
|
+
}
|
|
409
|
+
if (this._consumerCreationInProgress === false) {
|
|
410
|
+
this.createPendingConsumers();
|
|
411
|
+
}
|
|
412
|
+
});
|
|
373
413
|
return consumerCreationTask.promise;
|
|
374
414
|
}
|
|
375
415
|
/**
|
|
@@ -377,20 +417,27 @@ class Transport extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
377
417
|
*/
|
|
378
418
|
async produceData({ ordered = true, maxPacketLifeTime, maxRetransmits, label = '', protocol = '', appData = {} } = {}) {
|
|
379
419
|
logger.debug('produceData()');
|
|
380
|
-
if (this._closed)
|
|
420
|
+
if (this._closed) {
|
|
381
421
|
throw new errors_1.InvalidStateError('closed');
|
|
382
|
-
|
|
422
|
+
}
|
|
423
|
+
else if (this._direction !== 'send') {
|
|
383
424
|
throw new errors_1.UnsupportedError('not a sending Transport');
|
|
384
|
-
|
|
425
|
+
}
|
|
426
|
+
else if (!this._maxSctpMessageSize) {
|
|
385
427
|
throw new errors_1.UnsupportedError('SCTP not enabled by remote Transport');
|
|
386
|
-
|
|
428
|
+
}
|
|
429
|
+
else if (this.listenerCount('connect') === 0 && this._connectionState === 'new') {
|
|
387
430
|
throw new TypeError('no "connect" listener set into this transport');
|
|
388
|
-
|
|
431
|
+
}
|
|
432
|
+
else if (this.listenerCount('producedata') === 0) {
|
|
389
433
|
throw new TypeError('no "producedata" listener set into this transport');
|
|
390
|
-
|
|
434
|
+
}
|
|
435
|
+
else if (appData && typeof appData !== 'object') {
|
|
391
436
|
throw new TypeError('if given, appData must be an object');
|
|
392
|
-
|
|
437
|
+
}
|
|
438
|
+
if (maxPacketLifeTime || maxRetransmits) {
|
|
393
439
|
ordered = false;
|
|
440
|
+
}
|
|
394
441
|
// Enqueue command.
|
|
395
442
|
return this._awaitQueue.push(async () => {
|
|
396
443
|
const { dataChannel, sctpStreamParameters } = await this._handler.sendDataChannel({
|
|
@@ -424,20 +471,27 @@ class Transport extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
424
471
|
async consumeData({ id, dataProducerId, sctpStreamParameters, label = '', protocol = '', appData = {} }) {
|
|
425
472
|
logger.debug('consumeData()');
|
|
426
473
|
sctpStreamParameters = utils.clone(sctpStreamParameters, undefined);
|
|
427
|
-
if (this._closed)
|
|
474
|
+
if (this._closed) {
|
|
428
475
|
throw new errors_1.InvalidStateError('closed');
|
|
429
|
-
|
|
476
|
+
}
|
|
477
|
+
else if (this._direction !== 'recv') {
|
|
430
478
|
throw new errors_1.UnsupportedError('not a receiving Transport');
|
|
431
|
-
|
|
479
|
+
}
|
|
480
|
+
else if (!this._maxSctpMessageSize) {
|
|
432
481
|
throw new errors_1.UnsupportedError('SCTP not enabled by remote Transport');
|
|
433
|
-
|
|
482
|
+
}
|
|
483
|
+
else if (typeof id !== 'string') {
|
|
434
484
|
throw new TypeError('missing id');
|
|
435
|
-
|
|
485
|
+
}
|
|
486
|
+
else if (typeof dataProducerId !== 'string') {
|
|
436
487
|
throw new TypeError('missing dataProducerId');
|
|
437
|
-
|
|
488
|
+
}
|
|
489
|
+
else if (this.listenerCount('connect') === 0 && this._connectionState === 'new') {
|
|
438
490
|
throw new TypeError('no "connect" listener set into this transport');
|
|
439
|
-
|
|
491
|
+
}
|
|
492
|
+
else if (appData && typeof appData !== 'object') {
|
|
440
493
|
throw new TypeError('if given, appData must be an object');
|
|
494
|
+
}
|
|
441
495
|
// This may throw.
|
|
442
496
|
ortc.validateSctpStreamParameters(sctpStreamParameters);
|
|
443
497
|
// Enqueue command.
|
|
@@ -505,7 +559,8 @@ class Transport extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
505
559
|
this.handleConsumer(consumer);
|
|
506
560
|
// If this is the first video Consumer and the Consumer for RTP probation
|
|
507
561
|
// has not yet been created, it's time to create it.
|
|
508
|
-
if (!this._probatorConsumerCreated &&
|
|
562
|
+
if (!this._probatorConsumerCreated &&
|
|
563
|
+
!videoConsumerForProbator && kind === 'video') {
|
|
509
564
|
videoConsumerForProbator = consumer;
|
|
510
565
|
}
|
|
511
566
|
// Emit observer event.
|
|
@@ -640,19 +695,22 @@ class Transport extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
640
695
|
this.safeEmit('connect', { dtlsParameters }, callback, errback);
|
|
641
696
|
});
|
|
642
697
|
handler.on('@connectionstatechange', (connectionState) => {
|
|
643
|
-
if (connectionState === this._connectionState)
|
|
698
|
+
if (connectionState === this._connectionState) {
|
|
644
699
|
return;
|
|
700
|
+
}
|
|
645
701
|
logger.debug('connection state changed to %s', connectionState);
|
|
646
702
|
this._connectionState = connectionState;
|
|
647
|
-
if (!this._closed)
|
|
703
|
+
if (!this._closed) {
|
|
648
704
|
this.safeEmit('connectionstatechange', connectionState);
|
|
705
|
+
}
|
|
649
706
|
});
|
|
650
707
|
}
|
|
651
708
|
handleProducer(producer) {
|
|
652
709
|
producer.on('@close', () => {
|
|
653
710
|
this._producers.delete(producer.id);
|
|
654
|
-
if (this._closed)
|
|
711
|
+
if (this._closed) {
|
|
655
712
|
return;
|
|
713
|
+
}
|
|
656
714
|
this._awaitQueue.push(async () => this._handler.stopSending(producer.localId), 'producer @close event')
|
|
657
715
|
.catch((error) => logger.warn('producer.close() failed:%o', error));
|
|
658
716
|
});
|
|
@@ -682,8 +740,9 @@ class Transport extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
682
740
|
.catch(errback);
|
|
683
741
|
});
|
|
684
742
|
producer.on('@getstats', (callback, errback) => {
|
|
685
|
-
if (this._closed)
|
|
743
|
+
if (this._closed) {
|
|
686
744
|
return errback(new errors_1.InvalidStateError('closed'));
|
|
745
|
+
}
|
|
687
746
|
this._handler.getSenderStats(producer.localId)
|
|
688
747
|
.then(callback)
|
|
689
748
|
.catch(errback);
|
|
@@ -694,8 +753,9 @@ class Transport extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
694
753
|
this._consumers.delete(consumer.id);
|
|
695
754
|
this._pendingPauseConsumers.delete(consumer.id);
|
|
696
755
|
this._pendingResumeConsumers.delete(consumer.id);
|
|
697
|
-
if (this._closed)
|
|
756
|
+
if (this._closed) {
|
|
698
757
|
return;
|
|
758
|
+
}
|
|
699
759
|
// Store the Consumer into the close list.
|
|
700
760
|
this._pendingCloseConsumers.set(consumer.id, consumer);
|
|
701
761
|
// There is no Consumer close in progress, do it now.
|
|
@@ -711,9 +771,14 @@ class Transport extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
711
771
|
// Store the Consumer into the pending list.
|
|
712
772
|
this._pendingPauseConsumers.set(consumer.id, consumer);
|
|
713
773
|
// There is no Consumer pause in progress, do it now.
|
|
714
|
-
|
|
715
|
-
this.
|
|
716
|
-
|
|
774
|
+
(0, queue_microtask_1.default)(() => {
|
|
775
|
+
if (this._closed) {
|
|
776
|
+
return;
|
|
777
|
+
}
|
|
778
|
+
if (this._consumerPauseInProgress === false) {
|
|
779
|
+
this.pausePendingConsumers();
|
|
780
|
+
}
|
|
781
|
+
});
|
|
717
782
|
});
|
|
718
783
|
consumer.on('@resume', () => {
|
|
719
784
|
// If Consumer is pending to be paused, remove from pending pause list.
|
|
@@ -723,13 +788,19 @@ class Transport extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
723
788
|
// Store the Consumer into the pending list.
|
|
724
789
|
this._pendingResumeConsumers.set(consumer.id, consumer);
|
|
725
790
|
// There is no Consumer resume in progress, do it now.
|
|
726
|
-
|
|
727
|
-
this.
|
|
728
|
-
|
|
791
|
+
(0, queue_microtask_1.default)(() => {
|
|
792
|
+
if (this._closed) {
|
|
793
|
+
return;
|
|
794
|
+
}
|
|
795
|
+
if (this._consumerResumeInProgress === false) {
|
|
796
|
+
this.resumePendingConsumers();
|
|
797
|
+
}
|
|
798
|
+
});
|
|
729
799
|
});
|
|
730
800
|
consumer.on('@getstats', (callback, errback) => {
|
|
731
|
-
if (this._closed)
|
|
801
|
+
if (this._closed) {
|
|
732
802
|
return errback(new errors_1.InvalidStateError('closed'));
|
|
803
|
+
}
|
|
733
804
|
this._handler.getReceiverStats(consumer.localId)
|
|
734
805
|
.then(callback)
|
|
735
806
|
.catch(errback);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chrome74.d.ts","sourceRoot":"","sources":["../../src/handlers/Chrome74.ts"],"names":[],"mappings":"AAMA,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,EAC/B,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,aAAa,EAAY,MAAM,cAAc,CAAC;AACvD,OAAO,EACN,eAAe,EAGf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAwB,MAAM,mBAAmB,CAAC;AAM3E,qBAAa,QAAS,SAAQ,gBAAgB;IAG7C,OAAO,CAAC,UAAU,CAAC,CAAkB;IAErC,OAAO,CAAC,UAAU,CAAC,CAAY;IAE/B,OAAO,CAAC,2BAA2B,CAAC,CAAmC;IAGvE,OAAO,CAAC,iCAAiC,CAAC,CAAmC;IAG7E,OAAO,CAAC,oBAAoB,CAAC,CAAW;IAExC,OAAO,CAAC,GAAG,CAAM;IAEjB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CACxB;IAEX,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IAEjD,OAAO,CAAC,2BAA2B,CAAS;IAE5C,OAAO,CAAC,qBAAqB,CAAK;IAElC,OAAO,CAAC,eAAe,CAAS;IAEhC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,cAAc;;IAUtC,IAAI,IAAI,IAAI,MAAM,CAGjB;IAED,KAAK,IAAI,IAAI;IAcP,wBAAwB,IAAI,OAAO,CAAC,eAAe,CAAC;IAsCpD,yBAAyB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAS5D,GAAG,CACF,EACC,SAAS,EACT,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,EAAE,iBAAiB,GAClB,IAAI;IAiFD,gBAAgB,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3D,UAAU,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAgDvD,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC;IAK5C,IAAI,CACT,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,kBAAkB,GAC3D,OAAO,CAAC,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"Chrome74.d.ts","sourceRoot":"","sources":["../../src/handlers/Chrome74.ts"],"names":[],"mappings":"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"}
|
package/lib/handlers/Chrome74.js
CHANGED
|
@@ -282,7 +282,14 @@ class Chrome74 extends HandlerInterface_1.HandlerInterface {
|
|
|
282
282
|
(sendingRtpParameters.codecs[0].mimeType.toLowerCase() === 'video/vp8' ||
|
|
283
283
|
sendingRtpParameters.codecs[0].mimeType.toLowerCase() === 'video/h264')) {
|
|
284
284
|
for (const encoding of sendingRtpParameters.encodings) {
|
|
285
|
-
encoding.scalabilityMode
|
|
285
|
+
if (encoding.scalabilityMode) {
|
|
286
|
+
encoding.scalabilityMode = `S1T${layers.temporalLayers}`;
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
// By default Chrome enables 2 temporal layers (not in all OS but
|
|
290
|
+
// anyway).
|
|
291
|
+
encoding.scalabilityMode = 'S1T2';
|
|
292
|
+
}
|
|
286
293
|
}
|
|
287
294
|
}
|
|
288
295
|
this._remoteSdp.send({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Firefox60.d.ts","sourceRoot":"","sources":["../../src/handlers/Firefox60.ts"],"names":[],"mappings":"AAOA,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,EAC/B,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Firefox60.d.ts","sourceRoot":"","sources":["../../src/handlers/Firefox60.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,6 +33,7 @@ const sdpCommonUtils = __importStar(require("./sdp/commonUtils"));
|
|
|
33
33
|
const sdpUnifiedPlanUtils = __importStar(require("./sdp/unifiedPlanUtils"));
|
|
34
34
|
const HandlerInterface_1 = require("./HandlerInterface");
|
|
35
35
|
const RemoteSdp_1 = require("./sdp/RemoteSdp");
|
|
36
|
+
const scalabilityModes_1 = require("../scalabilityModes");
|
|
36
37
|
const logger = new Logger_1.Logger('Firefox60');
|
|
37
38
|
const SCTP_NUM_STREAMS = { OS: 16, MIS: 2048 };
|
|
38
39
|
class Firefox60 extends HandlerInterface_1.HandlerInterface {
|
|
@@ -259,6 +260,7 @@ class Firefox60 extends HandlerInterface_1.HandlerInterface {
|
|
|
259
260
|
// Firefox does not respect ICE-Lite.
|
|
260
261
|
if (!this._transportReady)
|
|
261
262
|
await this.setupTransport({ localDtlsRole: 'client', localSdpObject });
|
|
263
|
+
const layers = (0, scalabilityModes_1.parse)((encodings || [{}])[0].scalabilityMode);
|
|
262
264
|
logger.debug('send() | calling pc.setLocalDescription() [offer:%o]', offer);
|
|
263
265
|
await this._pc.setLocalDescription(offer);
|
|
264
266
|
// We can now get the transceiver.mid.
|
|
@@ -293,7 +295,13 @@ class Firefox60 extends HandlerInterface_1.HandlerInterface {
|
|
|
293
295
|
(sendingRtpParameters.codecs[0].mimeType.toLowerCase() === 'video/vp8' ||
|
|
294
296
|
sendingRtpParameters.codecs[0].mimeType.toLowerCase() === 'video/h264')) {
|
|
295
297
|
for (const encoding of sendingRtpParameters.encodings) {
|
|
296
|
-
encoding.scalabilityMode
|
|
298
|
+
if (encoding.scalabilityMode) {
|
|
299
|
+
encoding.scalabilityMode = `S1T${layers.temporalLayers}`;
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
// By default Firefox enables 2 temporal layers.
|
|
303
|
+
encoding.scalabilityMode = 'S1T2';
|
|
304
|
+
}
|
|
297
305
|
}
|
|
298
306
|
}
|
|
299
307
|
this._remoteSdp.send({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Safari12.d.ts","sourceRoot":"","sources":["../../src/handlers/Safari12.ts"],"names":[],"mappings":"AAMA,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,EAC/B,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Safari12.d.ts","sourceRoot":"","sources":["../../src/handlers/Safari12.ts"],"names":[],"mappings":"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"}
|
package/lib/handlers/Safari12.js
CHANGED
|
@@ -32,6 +32,7 @@ const sdpCommonUtils = __importStar(require("./sdp/commonUtils"));
|
|
|
32
32
|
const sdpUnifiedPlanUtils = __importStar(require("./sdp/unifiedPlanUtils"));
|
|
33
33
|
const HandlerInterface_1 = require("./HandlerInterface");
|
|
34
34
|
const RemoteSdp_1 = require("./sdp/RemoteSdp");
|
|
35
|
+
const scalabilityModes_1 = require("../scalabilityModes");
|
|
35
36
|
const logger = new Logger_1.Logger('Safari12');
|
|
36
37
|
const SCTP_NUM_STREAMS = { OS: 1024, MIS: 1024 };
|
|
37
38
|
class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
@@ -217,6 +218,7 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
217
218
|
localSdpObject
|
|
218
219
|
});
|
|
219
220
|
}
|
|
221
|
+
const layers = (0, scalabilityModes_1.parse)((encodings || [{}])[0].scalabilityMode);
|
|
220
222
|
if (encodings && encodings.length > 1) {
|
|
221
223
|
logger.debug('send() | enabling legacy simulcast');
|
|
222
224
|
localSdpObject = sdpTransform.parse(offer.sdp);
|
|
@@ -254,7 +256,13 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
254
256
|
(sendingRtpParameters.codecs[0].mimeType.toLowerCase() === 'video/vp8' ||
|
|
255
257
|
sendingRtpParameters.codecs[0].mimeType.toLowerCase() === 'video/h264')) {
|
|
256
258
|
for (const encoding of sendingRtpParameters.encodings) {
|
|
257
|
-
encoding.scalabilityMode
|
|
259
|
+
if (encoding.scalabilityMode) {
|
|
260
|
+
encoding.scalabilityMode = `S1T${layers.temporalLayers}`;
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
// By default Safari enables 3 temporal layers.
|
|
264
|
+
encoding.scalabilityMode = 'S1T3';
|
|
265
|
+
}
|
|
258
266
|
}
|
|
259
267
|
}
|
|
260
268
|
this._remoteSdp.send({
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
package/lib/tests/test.js
CHANGED
|
@@ -614,6 +614,40 @@ test('transport.consume() succeeds', async () => {
|
|
|
614
614
|
expect(videoConsumer.appData).toEqual({});
|
|
615
615
|
recvTransport.removeAllListeners('connect');
|
|
616
616
|
}, 500);
|
|
617
|
+
test('transport.consume() batches consumers created in same macrotask into the same task', async () => {
|
|
618
|
+
const videoConsumerRemoteParameters1 = fakeParameters.generateConsumerRemoteParameters({ codecMimeType: 'video/VP8' });
|
|
619
|
+
const videoConsumerRemoteParameters2 = fakeParameters.generateConsumerRemoteParameters({ codecMimeType: 'video/VP8' });
|
|
620
|
+
const pushSpy = jest.spyOn(recvTransport._awaitQueue, 'push');
|
|
621
|
+
const waitForConsumer = (id) => {
|
|
622
|
+
return new Promise((resolve) => {
|
|
623
|
+
recvTransport.observer.on('newconsumer', (consumer) => {
|
|
624
|
+
if (consumer.id === id) {
|
|
625
|
+
resolve();
|
|
626
|
+
}
|
|
627
|
+
});
|
|
628
|
+
});
|
|
629
|
+
};
|
|
630
|
+
const allConsumersCreated = Promise.all([
|
|
631
|
+
waitForConsumer(videoConsumerRemoteParameters1.id),
|
|
632
|
+
waitForConsumer(videoConsumerRemoteParameters2.id)
|
|
633
|
+
]);
|
|
634
|
+
await Promise.all([
|
|
635
|
+
recvTransport.consume({
|
|
636
|
+
id: videoConsumerRemoteParameters1.id,
|
|
637
|
+
producerId: videoConsumerRemoteParameters1.producerId,
|
|
638
|
+
kind: videoConsumerRemoteParameters1.kind,
|
|
639
|
+
rtpParameters: videoConsumerRemoteParameters1.rtpParameters
|
|
640
|
+
}),
|
|
641
|
+
recvTransport.consume({
|
|
642
|
+
id: videoConsumerRemoteParameters2.id,
|
|
643
|
+
producerId: videoConsumerRemoteParameters2.producerId,
|
|
644
|
+
kind: videoConsumerRemoteParameters2.kind,
|
|
645
|
+
rtpParameters: videoConsumerRemoteParameters2.rtpParameters
|
|
646
|
+
})
|
|
647
|
+
]);
|
|
648
|
+
await allConsumersCreated;
|
|
649
|
+
expect(pushSpy).toBeCalledTimes(1);
|
|
650
|
+
}, 500);
|
|
617
651
|
test('transport.consume() without remote Consumer parameters rejects with TypeError', async () => {
|
|
618
652
|
// @ts-ignore
|
|
619
653
|
await expect(recvTransport.consume({}))
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mediasoup-client",
|
|
3
|
-
"version": "3.6.
|
|
3
|
+
"version": "3.6.77",
|
|
4
4
|
"description": "mediasoup client side JavaScript library",
|
|
5
5
|
"contributors": [
|
|
6
6
|
"Iñaki Baz Castillo <ibc@aliax.net> (https://inakibaz.me)",
|
|
@@ -67,6 +67,7 @@
|
|
|
67
67
|
"debug": "^4.3.4",
|
|
68
68
|
"events": "^3.3.0",
|
|
69
69
|
"h264-profile-level-id": "^1.0.1",
|
|
70
|
+
"queue-microtask": "^1.2.3",
|
|
70
71
|
"sdp-transform": "^2.14.1",
|
|
71
72
|
"supports-color": "^9.3.1"
|
|
72
73
|
},
|