mediasoup-client 3.6.80 → 3.6.81
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/Consumer.d.ts.map +1 -1
- package/lib/Consumer.js +6 -3
- package/lib/DataConsumer.d.ts.map +1 -1
- package/lib/DataConsumer.js +14 -7
- package/lib/DataProducer.d.ts.map +1 -1
- package/lib/DataProducer.js +18 -9
- package/lib/Device.d.ts.map +1 -1
- package/lib/Device.js +24 -12
- package/lib/Producer.d.ts +1 -0
- package/lib/Producer.d.ts.map +1 -1
- package/lib/Producer.js +28 -14
- package/lib/handlers/Chrome111.d.ts.map +1 -1
- package/lib/handlers/Chrome111.js +33 -15
- package/lib/handlers/Chrome55.d.ts.map +1 -1
- package/lib/handlers/Chrome55.js +12 -6
- package/lib/handlers/Chrome67.d.ts.map +1 -1
- package/lib/handlers/Chrome67.js +32 -16
- package/lib/handlers/Chrome70.d.ts.map +1 -1
- package/lib/handlers/Chrome70.js +28 -14
- package/lib/handlers/Chrome74.d.ts.map +1 -1
- package/lib/handlers/Chrome74.js +35 -16
- package/lib/handlers/Edge11.d.ts.map +1 -1
- package/lib/handlers/Edge11.js +30 -15
- package/lib/handlers/FakeHandler.d.ts.map +1 -1
- package/lib/handlers/FakeHandler.js +16 -8
- package/lib/handlers/Firefox60.d.ts.map +1 -1
- package/lib/handlers/Firefox60.js +38 -19
- package/lib/handlers/ReactNative.d.ts.map +1 -1
- package/lib/handlers/ReactNative.js +12 -6
- package/lib/handlers/ReactNativeUnifiedPlan.d.ts.map +1 -1
- package/lib/handlers/ReactNativeUnifiedPlan.js +35 -16
- package/lib/handlers/Safari11.d.ts.map +1 -1
- package/lib/handlers/Safari11.js +32 -16
- package/lib/handlers/Safari12.d.ts.map +1 -1
- package/lib/handlers/Safari12.js +37 -17
- package/lib/handlers/ortc/edgeUtils.d.ts.map +1 -1
- package/lib/handlers/ortc/edgeUtils.js +8 -4
- package/lib/handlers/ortc/utils.d.ts +6 -0
- package/lib/handlers/ortc/utils.d.ts.map +1 -0
- package/lib/handlers/ortc/utils.js +20 -0
- package/lib/handlers/sdp/MediaSection.d.ts.map +1 -1
- package/lib/handlers/sdp/MediaSection.js +56 -23
- package/lib/handlers/sdp/RemoteSdp.d.ts.map +1 -1
- package/lib/handlers/sdp/RemoteSdp.js +8 -4
- package/lib/handlers/sdp/commonUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/commonUtils.js +26 -13
- package/lib/handlers/sdp/plainRtpUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/plainRtpUtils.js +8 -4
- package/lib/handlers/sdp/planBUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/planBUtils.js +22 -11
- package/lib/handlers/sdp/unifiedPlanUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/unifiedPlanUtils.js +16 -8
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/ortc.d.ts.map +1 -1
- package/lib/ortc.js +196 -98
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +2 -1
- package/package.json +3 -3
|
@@ -30,6 +30,7 @@ const utils = __importStar(require("../utils"));
|
|
|
30
30
|
const ortc = __importStar(require("../ortc"));
|
|
31
31
|
const sdpCommonUtils = __importStar(require("./sdp/commonUtils"));
|
|
32
32
|
const sdpUnifiedPlanUtils = __importStar(require("./sdp/unifiedPlanUtils"));
|
|
33
|
+
const ortcUtils = __importStar(require("./ortc/utils"));
|
|
33
34
|
const HandlerInterface_1 = require("./HandlerInterface");
|
|
34
35
|
const RemoteSdp_1 = require("./sdp/RemoteSdp");
|
|
35
36
|
const scalabilityModes_1 = require("../scalabilityModes");
|
|
@@ -92,6 +93,8 @@ class ReactNativeUnifiedPlan extends HandlerInterface_1.HandlerInterface {
|
|
|
92
93
|
catch (error) { }
|
|
93
94
|
const sdpObject = sdpTransform.parse(offer.sdp);
|
|
94
95
|
const nativeRtpCapabilities = sdpCommonUtils.extractRtpCapabilities({ sdpObject });
|
|
96
|
+
// libwebrtc supports NACK for OPUS but doesn't announce it.
|
|
97
|
+
ortcUtils.addNackSuppportForOpus(nativeRtpCapabilities);
|
|
95
98
|
return nativeRtpCapabilities;
|
|
96
99
|
}
|
|
97
100
|
catch (error) {
|
|
@@ -179,8 +182,9 @@ class ReactNativeUnifiedPlan extends HandlerInterface_1.HandlerInterface {
|
|
|
179
182
|
logger.debug('restartIce()');
|
|
180
183
|
// Provide the remote SDP handler with new remote ICE parameters.
|
|
181
184
|
this._remoteSdp.updateIceParameters(iceParameters);
|
|
182
|
-
if (!this._transportReady)
|
|
185
|
+
if (!this._transportReady) {
|
|
183
186
|
return;
|
|
187
|
+
}
|
|
184
188
|
if (this._direction === 'send') {
|
|
185
189
|
const offer = await this._pc.createOffer({ iceRestart: true });
|
|
186
190
|
logger.debug('restartIce() | calling pc.setLocalDescription() [offer:%o]', offer);
|
|
@@ -272,8 +276,9 @@ class ReactNativeUnifiedPlan extends HandlerInterface_1.HandlerInterface {
|
|
|
272
276
|
let newEncodings = sdpUnifiedPlanUtils.getRtpEncodings({ offerMediaObject });
|
|
273
277
|
Object.assign(newEncodings[0], encodings[0]);
|
|
274
278
|
// Hack for VP9 SVC.
|
|
275
|
-
if (hackVp9Svc)
|
|
279
|
+
if (hackVp9Svc) {
|
|
276
280
|
newEncodings = [newEncodings[0]];
|
|
281
|
+
}
|
|
277
282
|
sendingRtpParameters.encodings = newEncodings;
|
|
278
283
|
}
|
|
279
284
|
// Otherwise if more than 1 encoding are given use them verbatim.
|
|
@@ -317,8 +322,9 @@ class ReactNativeUnifiedPlan extends HandlerInterface_1.HandlerInterface {
|
|
|
317
322
|
this.assertSendDirection();
|
|
318
323
|
logger.debug('stopSending() [localId:%s]', localId);
|
|
319
324
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
320
|
-
if (!transceiver)
|
|
325
|
+
if (!transceiver) {
|
|
321
326
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
327
|
+
}
|
|
322
328
|
transceiver.sender.replaceTrack(null);
|
|
323
329
|
this._pc.removeTrack(transceiver.sender);
|
|
324
330
|
const mediaSectionClosed = this._remoteSdp.closeMediaSection(transceiver.mid);
|
|
@@ -340,8 +346,9 @@ class ReactNativeUnifiedPlan extends HandlerInterface_1.HandlerInterface {
|
|
|
340
346
|
this.assertSendDirection();
|
|
341
347
|
logger.debug('pauseSending() [localId:%s]', localId);
|
|
342
348
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
343
|
-
if (!transceiver)
|
|
349
|
+
if (!transceiver) {
|
|
344
350
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
351
|
+
}
|
|
345
352
|
transceiver.direction = 'inactive';
|
|
346
353
|
this._remoteSdp.pauseMediaSection(localId);
|
|
347
354
|
const offer = await this._pc.createOffer();
|
|
@@ -356,8 +363,9 @@ class ReactNativeUnifiedPlan extends HandlerInterface_1.HandlerInterface {
|
|
|
356
363
|
logger.debug('resumeSending() [localId:%s]', localId);
|
|
357
364
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
358
365
|
this._remoteSdp.resumeSendingMediaSection(localId);
|
|
359
|
-
if (!transceiver)
|
|
366
|
+
if (!transceiver) {
|
|
360
367
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
368
|
+
}
|
|
361
369
|
transceiver.direction = 'sendonly';
|
|
362
370
|
const offer = await this._pc.createOffer();
|
|
363
371
|
logger.debug('resumeSending() | calling pc.setLocalDescription() [offer:%o]', offer);
|
|
@@ -375,22 +383,26 @@ class ReactNativeUnifiedPlan extends HandlerInterface_1.HandlerInterface {
|
|
|
375
383
|
logger.debug('replaceTrack() [localId:%s, no track]', localId);
|
|
376
384
|
}
|
|
377
385
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
378
|
-
if (!transceiver)
|
|
386
|
+
if (!transceiver) {
|
|
379
387
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
388
|
+
}
|
|
380
389
|
await transceiver.sender.replaceTrack(track);
|
|
381
390
|
}
|
|
382
391
|
async setMaxSpatialLayer(localId, spatialLayer) {
|
|
383
392
|
this.assertSendDirection();
|
|
384
393
|
logger.debug('setMaxSpatialLayer() [localId:%s, spatialLayer:%s]', localId, spatialLayer);
|
|
385
394
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
386
|
-
if (!transceiver)
|
|
395
|
+
if (!transceiver) {
|
|
387
396
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
397
|
+
}
|
|
388
398
|
const parameters = transceiver.sender.getParameters();
|
|
389
399
|
parameters.encodings.forEach((encoding, idx) => {
|
|
390
|
-
if (idx <= spatialLayer)
|
|
400
|
+
if (idx <= spatialLayer) {
|
|
391
401
|
encoding.active = true;
|
|
392
|
-
|
|
402
|
+
}
|
|
403
|
+
else {
|
|
393
404
|
encoding.active = false;
|
|
405
|
+
}
|
|
394
406
|
});
|
|
395
407
|
await transceiver.sender.setParameters(parameters);
|
|
396
408
|
this._remoteSdp.muxMediaSectionSimulcast(localId, parameters.encodings);
|
|
@@ -405,8 +417,9 @@ class ReactNativeUnifiedPlan extends HandlerInterface_1.HandlerInterface {
|
|
|
405
417
|
this.assertSendDirection();
|
|
406
418
|
logger.debug('setRtpEncodingParameters() [localId:%s, params:%o]', localId, params);
|
|
407
419
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
408
|
-
if (!transceiver)
|
|
420
|
+
if (!transceiver) {
|
|
409
421
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
422
|
+
}
|
|
410
423
|
const parameters = transceiver.sender.getParameters();
|
|
411
424
|
parameters.encodings.forEach((encoding, idx) => {
|
|
412
425
|
parameters.encodings[idx] = { ...encoding, ...params };
|
|
@@ -423,8 +436,9 @@ class ReactNativeUnifiedPlan extends HandlerInterface_1.HandlerInterface {
|
|
|
423
436
|
async getSenderStats(localId) {
|
|
424
437
|
this.assertSendDirection();
|
|
425
438
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
426
|
-
if (!transceiver)
|
|
439
|
+
if (!transceiver) {
|
|
427
440
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
441
|
+
}
|
|
428
442
|
return transceiver.sender.getStats();
|
|
429
443
|
}
|
|
430
444
|
async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) {
|
|
@@ -541,8 +555,9 @@ class ReactNativeUnifiedPlan extends HandlerInterface_1.HandlerInterface {
|
|
|
541
555
|
for (const localId of localIds) {
|
|
542
556
|
logger.debug('stopReceiving() [localId:%s]', localId);
|
|
543
557
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
544
|
-
if (!transceiver)
|
|
558
|
+
if (!transceiver) {
|
|
545
559
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
560
|
+
}
|
|
546
561
|
this._remoteSdp.closeMediaSection(transceiver.mid);
|
|
547
562
|
}
|
|
548
563
|
const offer = { type: 'offer', sdp: this._remoteSdp.getSdp() };
|
|
@@ -560,8 +575,9 @@ class ReactNativeUnifiedPlan extends HandlerInterface_1.HandlerInterface {
|
|
|
560
575
|
for (const localId of localIds) {
|
|
561
576
|
logger.debug('pauseReceiving() [localId:%s]', localId);
|
|
562
577
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
563
|
-
if (!transceiver)
|
|
578
|
+
if (!transceiver) {
|
|
564
579
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
580
|
+
}
|
|
565
581
|
transceiver.direction = 'inactive';
|
|
566
582
|
this._remoteSdp.pauseMediaSection(localId);
|
|
567
583
|
}
|
|
@@ -577,8 +593,9 @@ class ReactNativeUnifiedPlan extends HandlerInterface_1.HandlerInterface {
|
|
|
577
593
|
for (const localId of localIds) {
|
|
578
594
|
logger.debug('resumeReceiving() [localId:%s]', localId);
|
|
579
595
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
580
|
-
if (!transceiver)
|
|
596
|
+
if (!transceiver) {
|
|
581
597
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
598
|
+
}
|
|
582
599
|
transceiver.direction = 'recvonly';
|
|
583
600
|
this._remoteSdp.resumeReceivingMediaSection(localId);
|
|
584
601
|
}
|
|
@@ -592,8 +609,9 @@ class ReactNativeUnifiedPlan extends HandlerInterface_1.HandlerInterface {
|
|
|
592
609
|
async getReceiverStats(localId) {
|
|
593
610
|
this.assertRecvDirection();
|
|
594
611
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
595
|
-
if (!transceiver)
|
|
612
|
+
if (!transceiver) {
|
|
596
613
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
614
|
+
}
|
|
597
615
|
return transceiver.receiver.getStats();
|
|
598
616
|
}
|
|
599
617
|
async receiveDataChannel({ sctpStreamParameters, label, protocol }) {
|
|
@@ -632,8 +650,9 @@ class ReactNativeUnifiedPlan extends HandlerInterface_1.HandlerInterface {
|
|
|
632
650
|
return { dataChannel };
|
|
633
651
|
}
|
|
634
652
|
async setupTransport({ localDtlsRole, localSdpObject }) {
|
|
635
|
-
if (!localSdpObject)
|
|
653
|
+
if (!localSdpObject) {
|
|
636
654
|
localSdpObject = sdpTransform.parse(this._pc.localDescription.sdp);
|
|
655
|
+
}
|
|
637
656
|
// Get our local DTLS parameters.
|
|
638
657
|
const dtlsParameters = sdpCommonUtils.extractDtlsParameters({ sdpObject: localSdpObject });
|
|
639
658
|
// Set our DTLS role.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Safari11.d.ts","sourceRoot":"","sources":["../../src/handlers/Safari11.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;AAE5B,OAAO,EAAE,aAAa,EAAY,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,eAAe,EAAiB,MAAM,kBAAkB,CAAC;AAClE,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,WAAW,CAAqB;IAEjD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAC9B;IAEX,OAAO,CAAC,gBAAgB,CAAK;IAG7B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAQrB;IAEf,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;IAuCpD,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;
|
|
1
|
+
{"version":3,"file":"Safari11.d.ts","sourceRoot":"","sources":["../../src/handlers/Safari11.ts"],"names":[],"mappings":"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"}
|
package/lib/handlers/Safari11.js
CHANGED
|
@@ -180,8 +180,9 @@ class Safari11 extends HandlerInterface_1.HandlerInterface {
|
|
|
180
180
|
logger.debug('restartIce()');
|
|
181
181
|
// Provide the remote SDP handler with new remote ICE parameters.
|
|
182
182
|
this._remoteSdp.updateIceParameters(iceParameters);
|
|
183
|
-
if (!this._transportReady)
|
|
183
|
+
if (!this._transportReady) {
|
|
184
184
|
return;
|
|
185
|
+
}
|
|
185
186
|
if (this._direction === 'send') {
|
|
186
187
|
const offer = await this._pc.createOffer({ iceRestart: true });
|
|
187
188
|
logger.debug('restartIce() | calling pc.setLocalDescription() [offer:%o]', offer);
|
|
@@ -251,8 +252,9 @@ class Safari11 extends HandlerInterface_1.HandlerInterface {
|
|
|
251
252
|
// Complete encodings with given values.
|
|
252
253
|
if (encodings) {
|
|
253
254
|
for (let idx = 0; idx < sendingRtpParameters.encodings.length; ++idx) {
|
|
254
|
-
if (encodings[idx])
|
|
255
|
+
if (encodings[idx]) {
|
|
255
256
|
Object.assign(sendingRtpParameters.encodings[idx], encodings[idx]);
|
|
257
|
+
}
|
|
256
258
|
}
|
|
257
259
|
}
|
|
258
260
|
// If VP8 and there is effective simulcast, add scalabilityMode to each
|
|
@@ -287,10 +289,12 @@ class Safari11 extends HandlerInterface_1.HandlerInterface {
|
|
|
287
289
|
async stopSending(localId) {
|
|
288
290
|
this.assertSendDirection();
|
|
289
291
|
const rtpSender = this._mapSendLocalIdRtpSender.get(localId);
|
|
290
|
-
if (!rtpSender)
|
|
292
|
+
if (!rtpSender) {
|
|
291
293
|
throw new Error('associated RTCRtpSender not found');
|
|
292
|
-
|
|
294
|
+
}
|
|
295
|
+
if (rtpSender.track) {
|
|
293
296
|
this._sendStream.removeTrack(rtpSender.track);
|
|
297
|
+
}
|
|
294
298
|
this._mapSendLocalIdRtpSender.delete(localId);
|
|
295
299
|
const offer = await this._pc.createOffer();
|
|
296
300
|
logger.debug('stopSending() | calling pc.setLocalDescription() [offer:%o]', offer);
|
|
@@ -306,8 +310,9 @@ class Safari11 extends HandlerInterface_1.HandlerInterface {
|
|
|
306
310
|
}
|
|
307
311
|
throw error;
|
|
308
312
|
}
|
|
309
|
-
if (this._pc.signalingState === 'stable')
|
|
313
|
+
if (this._pc.signalingState === 'stable') {
|
|
310
314
|
return;
|
|
315
|
+
}
|
|
311
316
|
const answer = { type: 'answer', sdp: this._remoteSdp.getSdp() };
|
|
312
317
|
logger.debug('stopSending() | calling pc.setRemoteDescription() [answer:%o]', answer);
|
|
313
318
|
await this._pc.setRemoteDescription(answer);
|
|
@@ -329,29 +334,35 @@ class Safari11 extends HandlerInterface_1.HandlerInterface {
|
|
|
329
334
|
logger.debug('replaceTrack() [localId:%s, no track]', localId);
|
|
330
335
|
}
|
|
331
336
|
const rtpSender = this._mapSendLocalIdRtpSender.get(localId);
|
|
332
|
-
if (!rtpSender)
|
|
337
|
+
if (!rtpSender) {
|
|
333
338
|
throw new Error('associated RTCRtpSender not found');
|
|
339
|
+
}
|
|
334
340
|
const oldTrack = rtpSender.track;
|
|
335
341
|
await rtpSender.replaceTrack(track);
|
|
336
342
|
// Remove the old track from the local stream.
|
|
337
|
-
if (oldTrack)
|
|
343
|
+
if (oldTrack) {
|
|
338
344
|
this._sendStream.removeTrack(oldTrack);
|
|
345
|
+
}
|
|
339
346
|
// Add the new track to the local stream.
|
|
340
|
-
if (track)
|
|
347
|
+
if (track) {
|
|
341
348
|
this._sendStream.addTrack(track);
|
|
349
|
+
}
|
|
342
350
|
}
|
|
343
351
|
async setMaxSpatialLayer(localId, spatialLayer) {
|
|
344
352
|
this.assertSendDirection();
|
|
345
353
|
logger.debug('setMaxSpatialLayer() [localId:%s, spatialLayer:%s]', localId, spatialLayer);
|
|
346
354
|
const rtpSender = this._mapSendLocalIdRtpSender.get(localId);
|
|
347
|
-
if (!rtpSender)
|
|
355
|
+
if (!rtpSender) {
|
|
348
356
|
throw new Error('associated RTCRtpSender not found');
|
|
357
|
+
}
|
|
349
358
|
const parameters = rtpSender.getParameters();
|
|
350
359
|
parameters.encodings.forEach((encoding, idx) => {
|
|
351
|
-
if (idx <= spatialLayer)
|
|
360
|
+
if (idx <= spatialLayer) {
|
|
352
361
|
encoding.active = true;
|
|
353
|
-
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
354
364
|
encoding.active = false;
|
|
365
|
+
}
|
|
355
366
|
});
|
|
356
367
|
await rtpSender.setParameters(parameters);
|
|
357
368
|
}
|
|
@@ -359,8 +370,9 @@ class Safari11 extends HandlerInterface_1.HandlerInterface {
|
|
|
359
370
|
this.assertSendDirection();
|
|
360
371
|
logger.debug('setRtpEncodingParameters() [localId:%s, params:%o]', localId, params);
|
|
361
372
|
const rtpSender = this._mapSendLocalIdRtpSender.get(localId);
|
|
362
|
-
if (!rtpSender)
|
|
373
|
+
if (!rtpSender) {
|
|
363
374
|
throw new Error('associated RTCRtpSender not found');
|
|
375
|
+
}
|
|
364
376
|
const parameters = rtpSender.getParameters();
|
|
365
377
|
parameters.encodings.forEach((encoding, idx) => {
|
|
366
378
|
parameters.encodings[idx] = { ...encoding, ...params };
|
|
@@ -370,8 +382,9 @@ class Safari11 extends HandlerInterface_1.HandlerInterface {
|
|
|
370
382
|
async getSenderStats(localId) {
|
|
371
383
|
this.assertSendDirection();
|
|
372
384
|
const rtpSender = this._mapSendLocalIdRtpSender.get(localId);
|
|
373
|
-
if (!rtpSender)
|
|
385
|
+
if (!rtpSender) {
|
|
374
386
|
throw new Error('associated RTCRtpSender not found');
|
|
387
|
+
}
|
|
375
388
|
return rtpSender.getStats();
|
|
376
389
|
}
|
|
377
390
|
async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) {
|
|
@@ -467,8 +480,9 @@ class Safari11 extends HandlerInterface_1.HandlerInterface {
|
|
|
467
480
|
const localId = trackId;
|
|
468
481
|
const rtpReceiver = this._pc.getReceivers()
|
|
469
482
|
.find((r) => r.track && r.track.id === localId);
|
|
470
|
-
if (!rtpReceiver)
|
|
483
|
+
if (!rtpReceiver) {
|
|
471
484
|
throw new Error('new RTCRtpReceiver not');
|
|
485
|
+
}
|
|
472
486
|
// Insert into the map.
|
|
473
487
|
this._mapRecvLocalIdInfo.set(localId, { mid, rtpParameters, rtpReceiver });
|
|
474
488
|
results.push({
|
|
@@ -498,8 +512,9 @@ class Safari11 extends HandlerInterface_1.HandlerInterface {
|
|
|
498
512
|
async getReceiverStats(localId) {
|
|
499
513
|
this.assertRecvDirection();
|
|
500
514
|
const { rtpReceiver } = this._mapRecvLocalIdInfo.get(localId) || {};
|
|
501
|
-
if (!rtpReceiver)
|
|
515
|
+
if (!rtpReceiver) {
|
|
502
516
|
throw new Error('associated RTCRtpReceiver not found');
|
|
517
|
+
}
|
|
503
518
|
return rtpReceiver.getStats();
|
|
504
519
|
}
|
|
505
520
|
async pauseReceiving(
|
|
@@ -548,8 +563,9 @@ class Safari11 extends HandlerInterface_1.HandlerInterface {
|
|
|
548
563
|
return { dataChannel };
|
|
549
564
|
}
|
|
550
565
|
async setupTransport({ localDtlsRole, localSdpObject }) {
|
|
551
|
-
if (!localSdpObject)
|
|
566
|
+
if (!localSdpObject) {
|
|
552
567
|
localSdpObject = sdpTransform.parse(this._pc.localDescription.sdp);
|
|
568
|
+
}
|
|
553
569
|
// Get our local DTLS parameters.
|
|
554
570
|
const dtlsParameters = sdpCommonUtils.extractDtlsParameters({ sdpObject: localSdpObject });
|
|
555
571
|
// Set our DTLS role.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Safari12.d.ts","sourceRoot":"","sources":["../../src/handlers/Safari12.ts"],"names":[],"mappings":"
|
|
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
|
@@ -30,6 +30,7 @@ const utils = __importStar(require("../utils"));
|
|
|
30
30
|
const ortc = __importStar(require("../ortc"));
|
|
31
31
|
const sdpCommonUtils = __importStar(require("./sdp/commonUtils"));
|
|
32
32
|
const sdpUnifiedPlanUtils = __importStar(require("./sdp/unifiedPlanUtils"));
|
|
33
|
+
const ortcUtils = __importStar(require("./ortc/utils"));
|
|
33
34
|
const HandlerInterface_1 = require("./HandlerInterface");
|
|
34
35
|
const RemoteSdp_1 = require("./sdp/RemoteSdp");
|
|
35
36
|
const scalabilityModes_1 = require("../scalabilityModes");
|
|
@@ -87,6 +88,8 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
87
88
|
catch (error) { }
|
|
88
89
|
const sdpObject = sdpTransform.parse(offer.sdp);
|
|
89
90
|
const nativeRtpCapabilities = sdpCommonUtils.extractRtpCapabilities({ sdpObject });
|
|
91
|
+
// libwebrtc supports NACK for OPUS but doesn't announce it.
|
|
92
|
+
ortcUtils.addNackSuppportForOpus(nativeRtpCapabilities);
|
|
90
93
|
return nativeRtpCapabilities;
|
|
91
94
|
}
|
|
92
95
|
catch (error) {
|
|
@@ -173,8 +176,9 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
173
176
|
logger.debug('restartIce()');
|
|
174
177
|
// Provide the remote SDP handler with new remote ICE parameters.
|
|
175
178
|
this._remoteSdp.updateIceParameters(iceParameters);
|
|
176
|
-
if (!this._transportReady)
|
|
179
|
+
if (!this._transportReady) {
|
|
177
180
|
return;
|
|
181
|
+
}
|
|
178
182
|
if (this._direction === 'send') {
|
|
179
183
|
const offer = await this._pc.createOffer({ iceRestart: true });
|
|
180
184
|
logger.debug('restartIce() | calling pc.setLocalDescription() [offer:%o]', offer);
|
|
@@ -246,8 +250,9 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
246
250
|
// Complete encodings with given values.
|
|
247
251
|
if (encodings) {
|
|
248
252
|
for (let idx = 0; idx < sendingRtpParameters.encodings.length; ++idx) {
|
|
249
|
-
if (encodings[idx])
|
|
253
|
+
if (encodings[idx]) {
|
|
250
254
|
Object.assign(sendingRtpParameters.encodings[idx], encodings[idx]);
|
|
255
|
+
}
|
|
251
256
|
}
|
|
252
257
|
}
|
|
253
258
|
// If VP8 or H264 and there is effective simulcast, add scalabilityMode to
|
|
@@ -286,8 +291,9 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
286
291
|
this.assertSendDirection();
|
|
287
292
|
logger.debug('stopSending() [localId:%s]', localId);
|
|
288
293
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
289
|
-
if (!transceiver)
|
|
294
|
+
if (!transceiver) {
|
|
290
295
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
296
|
+
}
|
|
291
297
|
transceiver.sender.replaceTrack(null);
|
|
292
298
|
this._pc.removeTrack(transceiver.sender);
|
|
293
299
|
const mediaSectionClosed = this._remoteSdp.closeMediaSection(transceiver.mid);
|
|
@@ -310,8 +316,9 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
310
316
|
this.assertSendDirection();
|
|
311
317
|
logger.debug('pauseSending() [localId:%s]', localId);
|
|
312
318
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
313
|
-
if (!transceiver)
|
|
319
|
+
if (!transceiver) {
|
|
314
320
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
321
|
+
}
|
|
315
322
|
transceiver.direction = 'inactive';
|
|
316
323
|
this._remoteSdp.pauseMediaSection(localId);
|
|
317
324
|
const offer = await this._pc.createOffer();
|
|
@@ -326,8 +333,9 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
326
333
|
this.assertSendDirection();
|
|
327
334
|
logger.debug('resumeSending() [localId:%s]', localId);
|
|
328
335
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
329
|
-
if (!transceiver)
|
|
336
|
+
if (!transceiver) {
|
|
330
337
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
338
|
+
}
|
|
331
339
|
transceiver.direction = 'sendonly';
|
|
332
340
|
this._remoteSdp.resumeSendingMediaSection(localId);
|
|
333
341
|
const offer = await this._pc.createOffer();
|
|
@@ -346,22 +354,26 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
346
354
|
logger.debug('replaceTrack() [localId:%s, no track]', localId);
|
|
347
355
|
}
|
|
348
356
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
349
|
-
if (!transceiver)
|
|
357
|
+
if (!transceiver) {
|
|
350
358
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
359
|
+
}
|
|
351
360
|
await transceiver.sender.replaceTrack(track);
|
|
352
361
|
}
|
|
353
362
|
async setMaxSpatialLayer(localId, spatialLayer) {
|
|
354
363
|
this.assertSendDirection();
|
|
355
364
|
logger.debug('setMaxSpatialLayer() [localId:%s, spatialLayer:%s]', localId, spatialLayer);
|
|
356
365
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
357
|
-
if (!transceiver)
|
|
366
|
+
if (!transceiver) {
|
|
358
367
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
368
|
+
}
|
|
359
369
|
const parameters = transceiver.sender.getParameters();
|
|
360
370
|
parameters.encodings.forEach((encoding, idx) => {
|
|
361
|
-
if (idx <= spatialLayer)
|
|
371
|
+
if (idx <= spatialLayer) {
|
|
362
372
|
encoding.active = true;
|
|
363
|
-
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
364
375
|
encoding.active = false;
|
|
376
|
+
}
|
|
365
377
|
});
|
|
366
378
|
await transceiver.sender.setParameters(parameters);
|
|
367
379
|
this._remoteSdp.muxMediaSectionSimulcast(localId, parameters.encodings);
|
|
@@ -376,8 +388,9 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
376
388
|
this.assertSendDirection();
|
|
377
389
|
logger.debug('setRtpEncodingParameters() [localId:%s, params:%o]', localId, params);
|
|
378
390
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
379
|
-
if (!transceiver)
|
|
391
|
+
if (!transceiver) {
|
|
380
392
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
393
|
+
}
|
|
381
394
|
const parameters = transceiver.sender.getParameters();
|
|
382
395
|
parameters.encodings.forEach((encoding, idx) => {
|
|
383
396
|
parameters.encodings[idx] = { ...encoding, ...params };
|
|
@@ -394,8 +407,9 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
394
407
|
async getSenderStats(localId) {
|
|
395
408
|
this.assertSendDirection();
|
|
396
409
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
397
|
-
if (!transceiver)
|
|
410
|
+
if (!transceiver) {
|
|
398
411
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
412
|
+
}
|
|
399
413
|
return transceiver.sender.getStats();
|
|
400
414
|
}
|
|
401
415
|
async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) {
|
|
@@ -492,8 +506,9 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
492
506
|
const localId = mapLocalId.get(trackId);
|
|
493
507
|
const transceiver = this._pc.getTransceivers()
|
|
494
508
|
.find((t) => t.mid === localId);
|
|
495
|
-
if (!transceiver)
|
|
509
|
+
if (!transceiver) {
|
|
496
510
|
throw new Error('new RTCRtpTransceiver not found');
|
|
511
|
+
}
|
|
497
512
|
// Store in the map.
|
|
498
513
|
this._mapMidTransceiver.set(localId, transceiver);
|
|
499
514
|
results.push({
|
|
@@ -509,8 +524,9 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
509
524
|
for (const localId of localIds) {
|
|
510
525
|
logger.debug('stopReceiving() [localId:%s]', localId);
|
|
511
526
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
512
|
-
if (!transceiver)
|
|
527
|
+
if (!transceiver) {
|
|
513
528
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
529
|
+
}
|
|
514
530
|
this._remoteSdp.closeMediaSection(transceiver.mid);
|
|
515
531
|
}
|
|
516
532
|
const offer = { type: 'offer', sdp: this._remoteSdp.getSdp() };
|
|
@@ -528,8 +544,9 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
528
544
|
for (const localId of localIds) {
|
|
529
545
|
logger.debug('pauseReceiving() [localId:%s]', localId);
|
|
530
546
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
531
|
-
if (!transceiver)
|
|
547
|
+
if (!transceiver) {
|
|
532
548
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
549
|
+
}
|
|
533
550
|
transceiver.direction = 'inactive';
|
|
534
551
|
this._remoteSdp.pauseMediaSection(localId);
|
|
535
552
|
}
|
|
@@ -545,8 +562,9 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
545
562
|
for (const localId of localIds) {
|
|
546
563
|
logger.debug('resumeReceiving() [localId:%s]', localId);
|
|
547
564
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
548
|
-
if (!transceiver)
|
|
565
|
+
if (!transceiver) {
|
|
549
566
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
567
|
+
}
|
|
550
568
|
transceiver.direction = 'recvonly';
|
|
551
569
|
this._remoteSdp.resumeReceivingMediaSection(localId);
|
|
552
570
|
}
|
|
@@ -560,8 +578,9 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
560
578
|
async getReceiverStats(localId) {
|
|
561
579
|
this.assertRecvDirection();
|
|
562
580
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
563
|
-
if (!transceiver)
|
|
581
|
+
if (!transceiver) {
|
|
564
582
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
583
|
+
}
|
|
565
584
|
return transceiver.receiver.getStats();
|
|
566
585
|
}
|
|
567
586
|
async receiveDataChannel({ sctpStreamParameters, label, protocol }) {
|
|
@@ -600,8 +619,9 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
600
619
|
return { dataChannel };
|
|
601
620
|
}
|
|
602
621
|
async setupTransport({ localDtlsRole, localSdpObject }) {
|
|
603
|
-
if (!localSdpObject)
|
|
622
|
+
if (!localSdpObject) {
|
|
604
623
|
localSdpObject = sdpTransform.parse(this._pc.localDescription.sdp);
|
|
624
|
+
}
|
|
605
625
|
// Get our local DTLS parameters.
|
|
606
626
|
const dtlsParameters = sdpCommonUtils.extractDtlsParameters({ sdpObject: localSdpObject });
|
|
607
627
|
// Set our DTLS role.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edgeUtils.d.ts","sourceRoot":"","sources":["../../../src/handlers/ortc/edgeUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAErE;;;GAGG;AACH,wBAAgB,eAAe,IAAI,eAAe,
|
|
1
|
+
{"version":3,"file":"edgeUtils.d.ts","sourceRoot":"","sources":["../../../src/handlers/ortc/edgeUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAErE;;;GAGG;AACH,wBAAgB,eAAe,IAAI,eAAe,CAyCjD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,aAAa,GAAG,aAAa,CA+B/E"}
|
|
@@ -41,15 +41,18 @@ function getCapabilities() {
|
|
|
41
41
|
// NOTE: Edge sets some numeric parameters as string rather than number. Fix them.
|
|
42
42
|
if (codec.parameters) {
|
|
43
43
|
const parameters = codec.parameters;
|
|
44
|
-
if (parameters.apt)
|
|
44
|
+
if (parameters.apt) {
|
|
45
45
|
parameters.apt = Number(parameters.apt);
|
|
46
|
-
|
|
46
|
+
}
|
|
47
|
+
if (parameters['packetization-mode']) {
|
|
47
48
|
parameters['packetization-mode'] = Number(parameters['packetization-mode']);
|
|
49
|
+
}
|
|
48
50
|
}
|
|
49
51
|
// Delete emty parameter String in rtcpFeedback.
|
|
50
52
|
for (const feedback of codec.rtcpFeedback || []) {
|
|
51
|
-
if (!feedback.parameter)
|
|
53
|
+
if (!feedback.parameter) {
|
|
52
54
|
feedback.parameter = '';
|
|
55
|
+
}
|
|
53
56
|
}
|
|
54
57
|
}
|
|
55
58
|
return caps;
|
|
@@ -72,8 +75,9 @@ function mangleRtpParameters(rtpParameters) {
|
|
|
72
75
|
delete codec.channels;
|
|
73
76
|
}
|
|
74
77
|
// Add codec.name (requried by Edge).
|
|
75
|
-
if (codec.mimeType && !codec.name)
|
|
78
|
+
if (codec.mimeType && !codec.name) {
|
|
76
79
|
codec.name = codec.mimeType.split('/')[1];
|
|
80
|
+
}
|
|
77
81
|
// Remove mimeType.
|
|
78
82
|
delete codec.mimeType;
|
|
79
83
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { RtpCapabilities } from '../../RtpParameters';
|
|
2
|
+
/**
|
|
3
|
+
* This function adds RTCP NACK support for OPUS codec in given capabilities.
|
|
4
|
+
*/
|
|
5
|
+
export declare function addNackSuppportForOpus(rtpCapabilities: RtpCapabilities): void;
|
|
6
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/handlers/ortc/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI,CAoB7E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addNackSuppportForOpus = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* This function adds RTCP NACK support for OPUS codec in given capabilities.
|
|
6
|
+
*/
|
|
7
|
+
function addNackSuppportForOpus(rtpCapabilities) {
|
|
8
|
+
var _a;
|
|
9
|
+
for (const codec of (rtpCapabilities.codecs || [])) {
|
|
10
|
+
if ((codec.mimeType.toLowerCase() === 'audio/opus' ||
|
|
11
|
+
codec.mimeType.toLowerCase() === 'audio/multiopus') &&
|
|
12
|
+
!((_a = codec.rtcpFeedback) === null || _a === void 0 ? void 0 : _a.some((fb) => fb.type === 'nack' && !fb.parameter))) {
|
|
13
|
+
if (!codec.rtcpFeedback) {
|
|
14
|
+
codec.rtcpFeedback = [];
|
|
15
|
+
}
|
|
16
|
+
codec.rtcpFeedback.push({ type: 'nack' });
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.addNackSuppportForOpus = addNackSuppportForOpus;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaSection.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdp/MediaSection.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,aAAa,EACb,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,kBAAkB,EAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EACN,SAAS,EACT,aAAa,
|
|
1
|
+
{"version":3,"file":"MediaSection.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdp/MediaSection.ts"],"names":[],"mappings":"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"}
|