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.
Files changed (59) hide show
  1. package/lib/Consumer.d.ts.map +1 -1
  2. package/lib/Consumer.js +6 -3
  3. package/lib/DataConsumer.d.ts.map +1 -1
  4. package/lib/DataConsumer.js +14 -7
  5. package/lib/DataProducer.d.ts.map +1 -1
  6. package/lib/DataProducer.js +18 -9
  7. package/lib/Device.d.ts.map +1 -1
  8. package/lib/Device.js +24 -12
  9. package/lib/Producer.d.ts +1 -0
  10. package/lib/Producer.d.ts.map +1 -1
  11. package/lib/Producer.js +28 -14
  12. package/lib/handlers/Chrome111.d.ts.map +1 -1
  13. package/lib/handlers/Chrome111.js +33 -15
  14. package/lib/handlers/Chrome55.d.ts.map +1 -1
  15. package/lib/handlers/Chrome55.js +12 -6
  16. package/lib/handlers/Chrome67.d.ts.map +1 -1
  17. package/lib/handlers/Chrome67.js +32 -16
  18. package/lib/handlers/Chrome70.d.ts.map +1 -1
  19. package/lib/handlers/Chrome70.js +28 -14
  20. package/lib/handlers/Chrome74.d.ts.map +1 -1
  21. package/lib/handlers/Chrome74.js +35 -16
  22. package/lib/handlers/Edge11.d.ts.map +1 -1
  23. package/lib/handlers/Edge11.js +30 -15
  24. package/lib/handlers/FakeHandler.d.ts.map +1 -1
  25. package/lib/handlers/FakeHandler.js +16 -8
  26. package/lib/handlers/Firefox60.d.ts.map +1 -1
  27. package/lib/handlers/Firefox60.js +38 -19
  28. package/lib/handlers/ReactNative.d.ts.map +1 -1
  29. package/lib/handlers/ReactNative.js +12 -6
  30. package/lib/handlers/ReactNativeUnifiedPlan.d.ts.map +1 -1
  31. package/lib/handlers/ReactNativeUnifiedPlan.js +35 -16
  32. package/lib/handlers/Safari11.d.ts.map +1 -1
  33. package/lib/handlers/Safari11.js +32 -16
  34. package/lib/handlers/Safari12.d.ts.map +1 -1
  35. package/lib/handlers/Safari12.js +37 -17
  36. package/lib/handlers/ortc/edgeUtils.d.ts.map +1 -1
  37. package/lib/handlers/ortc/edgeUtils.js +8 -4
  38. package/lib/handlers/ortc/utils.d.ts +6 -0
  39. package/lib/handlers/ortc/utils.d.ts.map +1 -0
  40. package/lib/handlers/ortc/utils.js +20 -0
  41. package/lib/handlers/sdp/MediaSection.d.ts.map +1 -1
  42. package/lib/handlers/sdp/MediaSection.js +56 -23
  43. package/lib/handlers/sdp/RemoteSdp.d.ts.map +1 -1
  44. package/lib/handlers/sdp/RemoteSdp.js +8 -4
  45. package/lib/handlers/sdp/commonUtils.d.ts.map +1 -1
  46. package/lib/handlers/sdp/commonUtils.js +26 -13
  47. package/lib/handlers/sdp/plainRtpUtils.d.ts.map +1 -1
  48. package/lib/handlers/sdp/plainRtpUtils.js +8 -4
  49. package/lib/handlers/sdp/planBUtils.d.ts.map +1 -1
  50. package/lib/handlers/sdp/planBUtils.js +22 -11
  51. package/lib/handlers/sdp/unifiedPlanUtils.d.ts.map +1 -1
  52. package/lib/handlers/sdp/unifiedPlanUtils.js +16 -8
  53. package/lib/index.d.ts +1 -1
  54. package/lib/index.js +1 -1
  55. package/lib/ortc.d.ts.map +1 -1
  56. package/lib/ortc.js +196 -98
  57. package/lib/utils.d.ts.map +1 -1
  58. package/lib/utils.js +2 -1
  59. 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
- else
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;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;IAoIvB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqD3C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7C,YAAY,CACjB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,GAC7C,OAAO,CAAC,IAAI,CAAC;IAgCV,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BxE,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBrE,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAYxD,eAAe,CACpB,EACC,OAAO,EACP,iBAAiB,EACjB,cAAc,EACd,KAAK,EACL,QAAQ,EACR,EAAE,6BAA6B,GAC9B,OAAO,CAAC,4BAA4B,CAAC;IAsElC,OAAO,CACZ,WAAW,EAAE,qBAAqB,EAAE,GACjC,OAAO,CAAC,oBAAoB,EAAE,CAAC;IA6F7B,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkChD,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAY1D,cAAc,CAEnB,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7B,eAAe,CAEpB,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7B,kBAAkB,CACvB,EAAE,oBAAoB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,gCAAgC,GACzE,OAAO,CAAC,+BAA+B,CAAC;YAgE7B,cAAc;IAuC5B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,mBAAmB;CAQ3B"}
1
+ {"version":3,"file":"Safari11.d.ts","sourceRoot":"","sources":["../../src/handlers/Safari11.ts"],"names":[],"mappings":"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"}
@@ -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
- if (rtpSender.track)
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
- else
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":"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"}
1
+ {"version":3,"file":"Safari12.d.ts","sourceRoot":"","sources":["../../src/handlers/Safari12.ts"],"names":[],"mappings":"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"}
@@ -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
- else
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,CAmCjD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,aAAa,GAAG,aAAa,CA6B/E"}
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
- if (parameters['packetization-mode'])
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":"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"}
1
+ {"version":3,"file":"MediaSection.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdp/MediaSection.ts"],"names":[],"mappings":"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"}