mediasoup-client 3.6.44 → 3.6.48

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 (65) hide show
  1. package/lib/DataConsumer.d.ts +2 -2
  2. package/lib/DataConsumer.d.ts.map +1 -1
  3. package/lib/Device.d.ts.map +1 -1
  4. package/lib/Device.js +7 -3
  5. package/lib/Logger.js +6 -6
  6. package/lib/Transport.d.ts +3 -0
  7. package/lib/Transport.d.ts.map +1 -1
  8. package/lib/Transport.js +111 -40
  9. package/lib/handlers/Chrome55.d.ts +1 -1
  10. package/lib/handlers/Chrome55.d.ts.map +1 -1
  11. package/lib/handlers/Chrome55.js +53 -32
  12. package/lib/handlers/Chrome67.d.ts +1 -1
  13. package/lib/handlers/Chrome67.d.ts.map +1 -1
  14. package/lib/handlers/Chrome67.js +57 -35
  15. package/lib/handlers/Chrome70.d.ts +1 -1
  16. package/lib/handlers/Chrome70.d.ts.map +1 -1
  17. package/lib/handlers/Chrome70.js +55 -35
  18. package/lib/handlers/Chrome74.d.ts +1 -1
  19. package/lib/handlers/Chrome74.d.ts.map +1 -1
  20. package/lib/handlers/Chrome74.js +58 -35
  21. package/lib/handlers/Edge11.d.ts +1 -1
  22. package/lib/handlers/Edge11.d.ts.map +1 -1
  23. package/lib/handlers/Edge11.js +31 -22
  24. package/lib/handlers/FakeHandler.d.ts +1 -1
  25. package/lib/handlers/FakeHandler.d.ts.map +1 -1
  26. package/lib/handlers/FakeHandler.js +14 -11
  27. package/lib/handlers/Firefox60.d.ts +1 -1
  28. package/lib/handlers/Firefox60.d.ts.map +1 -1
  29. package/lib/handlers/Firefox60.js +54 -33
  30. package/lib/handlers/HandlerInterface.d.ts +1 -1
  31. package/lib/handlers/HandlerInterface.d.ts.map +1 -1
  32. package/lib/handlers/ReactNative.d.ts +1 -1
  33. package/lib/handlers/ReactNative.d.ts.map +1 -1
  34. package/lib/handlers/ReactNative.js +59 -38
  35. package/lib/handlers/Safari11.d.ts +1 -1
  36. package/lib/handlers/Safari11.d.ts.map +1 -1
  37. package/lib/handlers/Safari11.js +54 -35
  38. package/lib/handlers/Safari12.d.ts +1 -1
  39. package/lib/handlers/Safari12.d.ts.map +1 -1
  40. package/lib/handlers/Safari12.js +53 -34
  41. package/lib/handlers/ortc/edgeUtils.js +1 -1
  42. package/lib/handlers/sdp/MediaSection.js +1 -1
  43. package/lib/handlers/sdp/RemoteSdp.js +1 -1
  44. package/lib/handlers/sdp/commonUtils.js +1 -1
  45. package/lib/index.d.ts +1 -1
  46. package/lib/index.js +3 -3
  47. package/lib/ortc.js +5 -7
  48. package/lib/types.js +1 -1
  49. package/package.json +11 -11
  50. package/src/DataConsumer.ts +2 -2
  51. package/src/Device.ts +7 -2
  52. package/src/Transport.ts +162 -58
  53. package/src/handlers/Chrome55.ts +55 -34
  54. package/src/handlers/Chrome67.ts +57 -36
  55. package/src/handlers/Chrome70.ts +54 -34
  56. package/src/handlers/Chrome74.ts +58 -34
  57. package/src/handlers/Edge11.ts +42 -26
  58. package/src/handlers/FakeHandler.ts +18 -10
  59. package/src/handlers/Firefox60.ts +54 -33
  60. package/src/handlers/HandlerInterface.ts +2 -2
  61. package/src/handlers/ReactNative.ts +62 -41
  62. package/src/handlers/Safari11.ts +57 -36
  63. package/src/handlers/Safari12.ts +54 -34
  64. package/src/ortc.ts +6 -8
  65. package/tsconfig.json +1 -1
@@ -14,7 +14,7 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
14
14
  var __importStar = (this && this.__importStar) || function (mod) {
15
15
  if (mod && mod.__esModule) return mod;
16
16
  var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
18
  __setModuleDefault(result, mod);
19
19
  return result;
20
20
  };
@@ -129,7 +129,14 @@ class Chrome67 extends HandlerInterface_1.HandlerInterface {
129
129
  ? 'client'
130
130
  : 'server';
131
131
  }
132
- this._pc = new RTCPeerConnection(Object.assign({ iceServers: iceServers || [], iceTransportPolicy: iceTransportPolicy || 'all', bundlePolicy: 'max-bundle', rtcpMuxPolicy: 'require', sdpSemantics: 'plan-b' }, additionalSettings), proprietaryConstraints);
132
+ this._pc = new RTCPeerConnection({
133
+ iceServers: iceServers || [],
134
+ iceTransportPolicy: iceTransportPolicy || 'all',
135
+ bundlePolicy: 'max-bundle',
136
+ rtcpMuxPolicy: 'require',
137
+ sdpSemantics: 'plan-b',
138
+ ...additionalSettings
139
+ }, proprietaryConstraints);
133
140
  // Handle RTCPeerConnection connection status.
134
141
  this._pc.addEventListener('iceconnectionstatechange', () => {
135
142
  switch (this._pc.iceConnectionState) {
@@ -204,7 +211,7 @@ class Chrome67 extends HandlerInterface_1.HandlerInterface {
204
211
  ortc.reduceCodecs(sendingRemoteRtpParameters.codecs);
205
212
  if (!this._transportReady) {
206
213
  await this._setupTransport({
207
- localDtlsRole: (_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'server',
214
+ localDtlsRole: (_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
208
215
  localSdpObject
209
216
  });
210
217
  }
@@ -340,7 +347,7 @@ class Chrome67 extends HandlerInterface_1.HandlerInterface {
340
347
  throw new Error('associated RTCRtpSender not found');
341
348
  const parameters = rtpSender.getParameters();
342
349
  parameters.encodings.forEach((encoding, idx) => {
343
- parameters.encodings[idx] = Object.assign(Object.assign({}, encoding), params);
350
+ parameters.encodings[idx] = { ...encoding, ...params };
344
351
  });
345
352
  await rtpSender.setParameters(parameters);
346
353
  }
@@ -377,7 +384,7 @@ class Chrome67 extends HandlerInterface_1.HandlerInterface {
377
384
  .find((m) => m.type === 'application');
378
385
  if (!this._transportReady) {
379
386
  await this._setupTransport({
380
- localDtlsRole: (_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'server',
387
+ localDtlsRole: (_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
381
388
  localSdpObject
382
389
  });
383
390
  }
@@ -397,32 +404,41 @@ class Chrome67 extends HandlerInterface_1.HandlerInterface {
397
404
  };
398
405
  return { dataChannel, sctpStreamParameters };
399
406
  }
400
- async receive({ trackId, kind, rtpParameters }) {
407
+ async receive(
408
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
409
+ optionsList) {
401
410
  var _a;
402
411
  this._assertRecvDirection();
403
- logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
404
- const localId = trackId;
405
- const mid = kind;
406
- this._remoteSdp.receive({
407
- mid,
408
- kind,
409
- offerRtpParameters: rtpParameters,
410
- streamId: rtpParameters.rtcp.cname,
411
- trackId
412
- });
412
+ const results = [];
413
+ for (const options of optionsList) {
414
+ const { trackId, kind, rtpParameters } = options;
415
+ logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
416
+ const mid = kind;
417
+ this._remoteSdp.receive({
418
+ mid,
419
+ kind,
420
+ offerRtpParameters: rtpParameters,
421
+ streamId: rtpParameters.rtcp.cname,
422
+ trackId
423
+ });
424
+ }
413
425
  const offer = { type: 'offer', sdp: this._remoteSdp.getSdp() };
414
426
  logger.debug('receive() | calling pc.setRemoteDescription() [offer:%o]', offer);
415
427
  await this._pc.setRemoteDescription(offer);
416
428
  let answer = await this._pc.createAnswer();
417
429
  const localSdpObject = sdpTransform.parse(answer.sdp);
418
- const answerMediaObject = localSdpObject.media
419
- .find((m) => String(m.mid) === mid);
420
- // May need to modify codec parameters in the answer based on codec
421
- // parameters in the offer.
422
- sdpCommonUtils.applyCodecParameters({
423
- offerRtpParameters: rtpParameters,
424
- answerMediaObject
425
- });
430
+ for (const options of optionsList) {
431
+ const { kind, rtpParameters } = options;
432
+ const mid = kind;
433
+ const answerMediaObject = localSdpObject.media
434
+ .find((m) => String(m.mid) === mid);
435
+ // May need to modify codec parameters in the answer based on codec
436
+ // parameters in the offer.
437
+ sdpCommonUtils.applyCodecParameters({
438
+ offerRtpParameters: rtpParameters,
439
+ answerMediaObject
440
+ });
441
+ }
426
442
  answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
427
443
  if (!this._transportReady) {
428
444
  await this._setupTransport({
@@ -432,17 +448,23 @@ class Chrome67 extends HandlerInterface_1.HandlerInterface {
432
448
  }
433
449
  logger.debug('receive() | calling pc.setLocalDescription() [answer:%o]', answer);
434
450
  await this._pc.setLocalDescription(answer);
435
- const rtpReceiver = this._pc.getReceivers()
436
- .find((r) => r.track && r.track.id === localId);
437
- if (!rtpReceiver)
438
- throw new Error('new RTCRtpReceiver not');
439
- // Insert into the map.
440
- this._mapRecvLocalIdInfo.set(localId, { mid, rtpParameters, rtpReceiver });
441
- return {
442
- localId,
443
- track: rtpReceiver.track,
444
- rtpReceiver
445
- };
451
+ for (const options of optionsList) {
452
+ const { kind, trackId, rtpParameters } = options;
453
+ const localId = trackId;
454
+ const mid = kind;
455
+ const rtpReceiver = this._pc.getReceivers()
456
+ .find((r) => r.track && r.track.id === localId);
457
+ if (!rtpReceiver)
458
+ throw new Error('new RTCRtpReceiver not');
459
+ // Insert into the map.
460
+ this._mapRecvLocalIdInfo.set(localId, { mid, rtpParameters, rtpReceiver });
461
+ results.push({
462
+ localId,
463
+ track: rtpReceiver.track,
464
+ rtpReceiver
465
+ });
466
+ }
467
+ return results;
446
468
  }
447
469
  async stopReceiving(localId) {
448
470
  this._assertRecvDirection();
@@ -34,7 +34,7 @@ export declare class Chrome70 extends HandlerInterface {
34
34
  setRtpEncodingParameters(localId: string, params: any): Promise<void>;
35
35
  getSenderStats(localId: string): Promise<RTCStatsReport>;
36
36
  sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }: HandlerSendDataChannelOptions): Promise<HandlerSendDataChannelResult>;
37
- receive({ trackId, kind, rtpParameters }: HandlerReceiveOptions): Promise<HandlerReceiveResult>;
37
+ receive(optionsList: HandlerReceiveOptions[]): Promise<HandlerReceiveResult[]>;
38
38
  stopReceiving(localId: string): Promise<void>;
39
39
  pauseReceiving(localId: string): Promise<void>;
40
40
  resumeReceiving(localId: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"Chrome70.d.ts","sourceRoot":"","sources":["../../src/handlers/Chrome70.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Chrome70.d.ts","sourceRoot":"","sources":["../../src/handlers/Chrome70.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
14
14
  var __importStar = (this && this.__importStar) || function (mod) {
15
15
  if (mod && mod.__esModule) return mod;
16
16
  var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
18
  __setModuleDefault(result, mod);
19
19
  return result;
20
20
  };
@@ -123,7 +123,14 @@ class Chrome70 extends HandlerInterface_1.HandlerInterface {
123
123
  ? 'client'
124
124
  : 'server';
125
125
  }
126
- this._pc = new RTCPeerConnection(Object.assign({ iceServers: iceServers || [], iceTransportPolicy: iceTransportPolicy || 'all', bundlePolicy: 'max-bundle', rtcpMuxPolicy: 'require', sdpSemantics: 'unified-plan' }, additionalSettings), proprietaryConstraints);
126
+ this._pc = new RTCPeerConnection({
127
+ iceServers: iceServers || [],
128
+ iceTransportPolicy: iceTransportPolicy || 'all',
129
+ bundlePolicy: 'max-bundle',
130
+ rtcpMuxPolicy: 'require',
131
+ sdpSemantics: 'unified-plan',
132
+ ...additionalSettings
133
+ }, proprietaryConstraints);
127
134
  // Handle RTCPeerConnection connection status.
128
135
  this._pc.addEventListener('iceconnectionstatechange', () => {
129
136
  switch (this._pc.iceConnectionState) {
@@ -197,7 +204,7 @@ class Chrome70 extends HandlerInterface_1.HandlerInterface {
197
204
  let offerMediaObject;
198
205
  if (!this._transportReady) {
199
206
  await this._setupTransport({
200
- localDtlsRole: (_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'server',
207
+ localDtlsRole: (_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
201
208
  localSdpObject
202
209
  });
203
210
  }
@@ -213,7 +220,7 @@ class Chrome70 extends HandlerInterface_1.HandlerInterface {
213
220
  }
214
221
  // Special case for VP9 with SVC.
215
222
  let hackVp9Svc = false;
216
- const layers = scalabilityModes_1.parse((encodings || [{}])[0].scalabilityMode);
223
+ const layers = (0, scalabilityModes_1.parse)((encodings || [{}])[0].scalabilityMode);
217
224
  if (encodings &&
218
225
  encodings.length === 1 &&
219
226
  layers.spatialLayers > 1 &&
@@ -347,7 +354,7 @@ class Chrome70 extends HandlerInterface_1.HandlerInterface {
347
354
  throw new Error('associated RTCRtpTransceiver not found');
348
355
  const parameters = transceiver.sender.getParameters();
349
356
  parameters.encodings.forEach((encoding, idx) => {
350
- parameters.encodings[idx] = Object.assign(Object.assign({}, encoding), params);
357
+ parameters.encodings[idx] = { ...encoding, ...params };
351
358
  });
352
359
  await transceiver.sender.setParameters(parameters);
353
360
  }
@@ -384,7 +391,7 @@ class Chrome70 extends HandlerInterface_1.HandlerInterface {
384
391
  .find((m) => m.type === 'application');
385
392
  if (!this._transportReady) {
386
393
  await this._setupTransport({
387
- localDtlsRole: (_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'server',
394
+ localDtlsRole: (_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
388
395
  localSdpObject
389
396
  });
390
397
  }
@@ -404,31 +411,39 @@ class Chrome70 extends HandlerInterface_1.HandlerInterface {
404
411
  };
405
412
  return { dataChannel, sctpStreamParameters };
406
413
  }
407
- async receive({ trackId, kind, rtpParameters }) {
414
+ async receive(optionsList) {
408
415
  var _a;
409
416
  this._assertRecvDirection();
410
- logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
411
- const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
412
- this._remoteSdp.receive({
413
- mid: localId,
414
- kind,
415
- offerRtpParameters: rtpParameters,
416
- streamId: rtpParameters.rtcp.cname,
417
- trackId
418
- });
417
+ const results = [];
418
+ for (const options of optionsList) {
419
+ const { trackId, kind, rtpParameters } = options;
420
+ logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
421
+ const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
422
+ this._remoteSdp.receive({
423
+ mid: localId,
424
+ kind,
425
+ offerRtpParameters: rtpParameters,
426
+ streamId: rtpParameters.rtcp.cname,
427
+ trackId
428
+ });
429
+ }
419
430
  const offer = { type: 'offer', sdp: this._remoteSdp.getSdp() };
420
431
  logger.debug('receive() | calling pc.setRemoteDescription() [offer:%o]', offer);
421
432
  await this._pc.setRemoteDescription(offer);
422
433
  let answer = await this._pc.createAnswer();
423
434
  const localSdpObject = sdpTransform.parse(answer.sdp);
424
- const answerMediaObject = localSdpObject.media
425
- .find((m) => String(m.mid) === localId);
426
- // May need to modify codec parameters in the answer based on codec
427
- // parameters in the offer.
428
- sdpCommonUtils.applyCodecParameters({
429
- offerRtpParameters: rtpParameters,
430
- answerMediaObject
431
- });
435
+ for (const options of optionsList) {
436
+ const { rtpParameters } = options;
437
+ const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
438
+ const answerMediaObject = localSdpObject.media
439
+ .find((m) => String(m.mid) === localId);
440
+ // May need to modify codec parameters in the answer based on codec
441
+ // parameters in the offer.
442
+ sdpCommonUtils.applyCodecParameters({
443
+ offerRtpParameters: rtpParameters,
444
+ answerMediaObject
445
+ });
446
+ }
432
447
  answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
433
448
  if (!this._transportReady) {
434
449
  await this._setupTransport({
@@ -438,17 +453,22 @@ class Chrome70 extends HandlerInterface_1.HandlerInterface {
438
453
  }
439
454
  logger.debug('receive() | calling pc.setLocalDescription() [answer:%o]', answer);
440
455
  await this._pc.setLocalDescription(answer);
441
- const transceiver = this._pc.getTransceivers()
442
- .find((t) => t.mid === localId);
443
- if (!transceiver)
444
- throw new Error('new RTCRtpTransceiver not found');
445
- // Store in the map.
446
- this._mapMidTransceiver.set(localId, transceiver);
447
- return {
448
- localId,
449
- track: transceiver.receiver.track,
450
- rtpReceiver: transceiver.receiver
451
- };
456
+ for (const options of optionsList) {
457
+ const { rtpParameters } = options;
458
+ const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
459
+ const transceiver = this._pc.getTransceivers()
460
+ .find((t) => t.mid === localId);
461
+ if (!transceiver)
462
+ throw new Error('new RTCRtpTransceiver not found');
463
+ // Store in the map.
464
+ this._mapMidTransceiver.set(localId, transceiver);
465
+ results.push({
466
+ localId,
467
+ track: transceiver.receiver.track,
468
+ rtpReceiver: transceiver.receiver
469
+ });
470
+ }
471
+ return results;
452
472
  }
453
473
  async stopReceiving(localId) {
454
474
  this._assertRecvDirection();
@@ -34,7 +34,7 @@ export declare class Chrome74 extends HandlerInterface {
34
34
  setRtpEncodingParameters(localId: string, params: any): Promise<void>;
35
35
  getSenderStats(localId: string): Promise<RTCStatsReport>;
36
36
  sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }: HandlerSendDataChannelOptions): Promise<HandlerSendDataChannelResult>;
37
- receive({ trackId, kind, rtpParameters }: HandlerReceiveOptions): Promise<HandlerReceiveResult>;
37
+ receive(optionsList: HandlerReceiveOptions[]): Promise<HandlerReceiveResult[]>;
38
38
  stopReceiving(localId: string): Promise<void>;
39
39
  pauseReceiving(localId: string): Promise<void>;
40
40
  resumeReceiving(localId: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"Chrome74.d.ts","sourceRoot":"","sources":["../../src/handlers/Chrome74.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Chrome74.d.ts","sourceRoot":"","sources":["../../src/handlers/Chrome74.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
14
14
  var __importStar = (this && this.__importStar) || function (mod) {
15
15
  if (mod && mod.__esModule) return mod;
16
16
  var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
18
  __setModuleDefault(result, mod);
19
19
  return result;
20
20
  };
@@ -123,7 +123,14 @@ class Chrome74 extends HandlerInterface_1.HandlerInterface {
123
123
  ? 'client'
124
124
  : 'server';
125
125
  }
126
- this._pc = new RTCPeerConnection(Object.assign({ iceServers: iceServers || [], iceTransportPolicy: iceTransportPolicy || 'all', bundlePolicy: 'max-bundle', rtcpMuxPolicy: 'require', sdpSemantics: 'unified-plan' }, additionalSettings), proprietaryConstraints);
126
+ this._pc = new RTCPeerConnection({
127
+ iceServers: iceServers || [],
128
+ iceTransportPolicy: iceTransportPolicy || 'all',
129
+ bundlePolicy: 'max-bundle',
130
+ rtcpMuxPolicy: 'require',
131
+ sdpSemantics: 'unified-plan',
132
+ ...additionalSettings
133
+ }, proprietaryConstraints);
127
134
  // Handle RTCPeerConnection connection status.
128
135
  this._pc.addEventListener('iceconnectionstatechange', () => {
129
136
  switch (this._pc.iceConnectionState) {
@@ -206,13 +213,13 @@ class Chrome74 extends HandlerInterface_1.HandlerInterface {
206
213
  let offerMediaObject;
207
214
  if (!this._transportReady) {
208
215
  await this._setupTransport({
209
- localDtlsRole: (_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'server',
216
+ localDtlsRole: (_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
210
217
  localSdpObject
211
218
  });
212
219
  }
213
220
  // Special case for VP9 with SVC.
214
221
  let hackVp9Svc = false;
215
- const layers = scalabilityModes_1.parse((encodings || [{}])[0].scalabilityMode);
222
+ const layers = (0, scalabilityModes_1.parse)((encodings || [{}])[0].scalabilityMode);
216
223
  if (encodings &&
217
224
  encodings.length === 1 &&
218
225
  layers.spatialLayers > 1 &&
@@ -338,7 +345,7 @@ class Chrome74 extends HandlerInterface_1.HandlerInterface {
338
345
  throw new Error('associated RTCRtpTransceiver not found');
339
346
  const parameters = transceiver.sender.getParameters();
340
347
  parameters.encodings.forEach((encoding, idx) => {
341
- parameters.encodings[idx] = Object.assign(Object.assign({}, encoding), params);
348
+ parameters.encodings[idx] = { ...encoding, ...params };
342
349
  });
343
350
  await transceiver.sender.setParameters(parameters);
344
351
  }
@@ -374,7 +381,7 @@ class Chrome74 extends HandlerInterface_1.HandlerInterface {
374
381
  .find((m) => m.type === 'application');
375
382
  if (!this._transportReady) {
376
383
  await this._setupTransport({
377
- localDtlsRole: (_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'server',
384
+ localDtlsRole: (_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
378
385
  localSdpObject
379
386
  });
380
387
  }
@@ -394,31 +401,39 @@ class Chrome74 extends HandlerInterface_1.HandlerInterface {
394
401
  };
395
402
  return { dataChannel, sctpStreamParameters };
396
403
  }
397
- async receive({ trackId, kind, rtpParameters }) {
404
+ async receive(optionsList) {
398
405
  var _a;
399
406
  this._assertRecvDirection();
400
- logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
401
- const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
402
- this._remoteSdp.receive({
403
- mid: localId,
404
- kind,
405
- offerRtpParameters: rtpParameters,
406
- streamId: rtpParameters.rtcp.cname,
407
- trackId
408
- });
407
+ const results = [];
408
+ for (const options of optionsList) {
409
+ const { trackId, kind, rtpParameters } = options;
410
+ logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
411
+ const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
412
+ this._remoteSdp.receive({
413
+ mid: localId,
414
+ kind,
415
+ offerRtpParameters: rtpParameters,
416
+ streamId: rtpParameters.rtcp.cname,
417
+ trackId
418
+ });
419
+ }
409
420
  const offer = { type: 'offer', sdp: this._remoteSdp.getSdp() };
410
421
  logger.debug('receive() | calling pc.setRemoteDescription() [offer:%o]', offer);
411
422
  await this._pc.setRemoteDescription(offer);
412
423
  let answer = await this._pc.createAnswer();
413
424
  const localSdpObject = sdpTransform.parse(answer.sdp);
414
- const answerMediaObject = localSdpObject.media
415
- .find((m) => String(m.mid) === localId);
416
- // May need to modify codec parameters in the answer based on codec
417
- // parameters in the offer.
418
- sdpCommonUtils.applyCodecParameters({
419
- offerRtpParameters: rtpParameters,
420
- answerMediaObject
421
- });
425
+ for (const options of optionsList) {
426
+ const { rtpParameters } = options;
427
+ const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
428
+ const answerMediaObject = localSdpObject.media
429
+ .find((m) => String(m.mid) === localId);
430
+ // May need to modify codec parameters in the answer based on codec
431
+ // parameters in the offer.
432
+ sdpCommonUtils.applyCodecParameters({
433
+ offerRtpParameters: rtpParameters,
434
+ answerMediaObject
435
+ });
436
+ }
422
437
  answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
423
438
  if (!this._transportReady) {
424
439
  await this._setupTransport({
@@ -428,17 +443,25 @@ class Chrome74 extends HandlerInterface_1.HandlerInterface {
428
443
  }
429
444
  logger.debug('receive() | calling pc.setLocalDescription() [answer:%o]', answer);
430
445
  await this._pc.setLocalDescription(answer);
431
- const transceiver = this._pc.getTransceivers()
432
- .find((t) => t.mid === localId);
433
- if (!transceiver)
434
- throw new Error('new RTCRtpTransceiver not found');
435
- // Store in the map.
436
- this._mapMidTransceiver.set(localId, transceiver);
437
- return {
438
- localId,
439
- track: transceiver.receiver.track,
440
- rtpReceiver: transceiver.receiver
441
- };
446
+ for (const options of optionsList) {
447
+ const { rtpParameters } = options;
448
+ const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
449
+ const transceiver = this._pc.getTransceivers()
450
+ .find((t) => t.mid === localId);
451
+ if (!transceiver) {
452
+ throw new Error('new RTCRtpTransceiver not found');
453
+ }
454
+ else {
455
+ // Store in the map.
456
+ this._mapMidTransceiver.set(localId, transceiver);
457
+ results.push({
458
+ localId,
459
+ track: transceiver.receiver.track,
460
+ rtpReceiver: transceiver.receiver
461
+ });
462
+ }
463
+ }
464
+ return results;
442
465
  }
443
466
  async stopReceiving(localId) {
444
467
  this._assertRecvDirection();
@@ -39,7 +39,7 @@ export declare class Edge11 extends HandlerInterface {
39
39
  setRtpEncodingParameters(localId: string, params: any): Promise<void>;
40
40
  getSenderStats(localId: string): Promise<RTCStatsReport>;
41
41
  sendDataChannel(options: HandlerSendDataChannelOptions): Promise<HandlerSendDataChannelResult>;
42
- receive({ trackId, kind, rtpParameters }: HandlerReceiveOptions): Promise<HandlerReceiveResult>;
42
+ receive(optionsList: HandlerReceiveOptions[]): Promise<HandlerReceiveResult[]>;
43
43
  stopReceiving(localId: string): Promise<void>;
44
44
  pauseReceiving(localId: string): Promise<void>;
45
45
  resumeReceiving(localId: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"Edge11.d.ts","sourceRoot":"","sources":["../../src/handlers/Edge11.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Edge11.d.ts","sourceRoot":"","sources":["../../src/handlers/Edge11.ts"],"names":[],"mappings":"AAKA,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;AAC5B,OAAO,EACN,aAAa,EAIb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,eAAe,EAAiB,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIrD,qBAAa,MAAO,SAAQ,gBAAgB;IAG3C,OAAO,CAAC,2BAA2B,CAAC,CAAmC;IAEvE,OAAO,CAAC,oBAAoB,CAAC,CAAgB;IAE7C,OAAO,CAAC,oBAAoB,CAAC,CAAiB;IAE9C,OAAO,CAAC,qBAAqB,CAAC,CAAiB;IAE/C,OAAO,CAAC,YAAY,CAAC,CAAM;IAE3B,OAAO,CAAC,aAAa,CAAC,CAAM;IAE5B,OAAO,CAAC,cAAc,CAAC,CAAM;IAE7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwC;IAEpE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA0C;IAExE,OAAO,CAAC,gBAAgB,CAAK;IAE7B,OAAO,CAAC,MAAM,CAAC,CAAS;IAExB,OAAO,CAAC,eAAe,CAAS;IAEhC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,cAAc;;IAUtC,IAAI,IAAI,IAAI,MAAM,CAGjB;IAED,KAAK,IAAI,IAAI;IAgCP,wBAAwB,IAAI,OAAO,CAAC,eAAe,CAAC;IAOpD,yBAAyB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAS5D,GAAG,CACF,EACC,SAAS,EAAE,wDAAwD;IACnE,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EAAE,wDAAwD;IACxE,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAAE,wDAAwD;IAC5E,sBAAsB,EAAE,wDAAwD;IAChF,uBAAuB,EACvB,EAAE,iBAAiB,GAClB,IAAI;IAqBD,gBAAgB,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D,UAAU,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBvD,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC;IAK5C,IAAI,CAET,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,kBAAkB,GAC3D,OAAO,CAAC,iBAAiB,CAAC;IA2DvB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB3C,YAAY,CACjB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,GAC7C,OAAO,CAAC,IAAI,CAAC;IAoBV,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBxE,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBrE,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAUxD,eAAe,CAEpB,OAAO,EAAE,6BAA6B,GACpC,OAAO,CAAC,4BAA4B,CAAC;IAKlC,OAAO,CACZ,WAAW,EAAE,qBAAqB,EAAE,GACjC,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAqD7B,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB7C,cAAc,CAEnB,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1B,eAAe,CAEpB,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1B,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAU1D,kBAAkB,CAEvB,OAAO,EAAE,gCAAgC,GACvC,OAAO,CAAC,+BAA+B,CAAC;IAK3C,OAAO,CAAC,eAAe;IAgCvB,OAAO,CAAC,gBAAgB;IA6DxB,OAAO,CAAC,iBAAiB;YA6BX,eAAe;CA+C7B"}
@@ -14,7 +14,7 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
14
14
  var __importStar = (this && this.__importStar) || function (mod) {
15
15
  if (mod && mod.__esModule) return mod;
16
16
  var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
18
  __setModuleDefault(result, mod);
19
19
  return result;
20
20
  };
@@ -217,7 +217,7 @@ class Edge11 extends HandlerInterface_1.HandlerInterface {
217
217
  throw new Error('RTCRtpSender not found');
218
218
  const parameters = rtpSender.getParameters();
219
219
  parameters.encodings.forEach((encoding, idx) => {
220
- parameters.encodings[idx] = Object.assign(Object.assign({}, encoding), params);
220
+ parameters.encodings[idx] = { ...encoding, ...params };
221
221
  });
222
222
  await rtpSender.setParameters(parameters);
223
223
  }
@@ -232,28 +232,36 @@ class Edge11 extends HandlerInterface_1.HandlerInterface {
232
232
  options) {
233
233
  throw new errors_1.UnsupportedError('not implemented');
234
234
  }
235
- async receive({ trackId, kind, rtpParameters }) {
236
- logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
235
+ async receive(optionsList) {
236
+ const results = [];
237
+ for (const options of optionsList) {
238
+ const { trackId, kind } = options;
239
+ logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
240
+ }
237
241
  if (!this._transportReady)
238
242
  await this._setupTransport({ localDtlsRole: 'server' });
239
- logger.debug('receive() | calling new RTCRtpReceiver()');
240
- const rtpReceiver = new RTCRtpReceiver(this._dtlsTransport, kind);
241
- rtpReceiver.addEventListener('error', (event) => {
242
- logger.error('rtpReceiver "error" event [event:%o]', event);
243
- });
244
- // NOTE: Convert our standard RTCRtpParameters into those that Edge
245
- // expects.
246
- const edgeRtpParameters = edgeUtils.mangleRtpParameters(rtpParameters);
247
- logger.debug('receive() | calling rtpReceiver.receive() [params:%o]', edgeRtpParameters);
248
- await rtpReceiver.receive(edgeRtpParameters);
249
- const localId = trackId;
250
- // Store it.
251
- this._rtpReceivers.set(localId, rtpReceiver);
252
- return {
253
- localId,
254
- track: rtpReceiver.track,
255
- rtpReceiver
256
- };
243
+ for (const options of optionsList) {
244
+ const { trackId, kind, rtpParameters } = options;
245
+ logger.debug('receive() | calling new RTCRtpReceiver()');
246
+ const rtpReceiver = new RTCRtpReceiver(this._dtlsTransport, kind);
247
+ rtpReceiver.addEventListener('error', (event) => {
248
+ logger.error('rtpReceiver "error" event [event:%o]', event);
249
+ });
250
+ // NOTE: Convert our standard RTCRtpParameters into those that Edge
251
+ // expects.
252
+ const edgeRtpParameters = edgeUtils.mangleRtpParameters(rtpParameters);
253
+ logger.debug('receive() | calling rtpReceiver.receive() [params:%o]', edgeRtpParameters);
254
+ await rtpReceiver.receive(edgeRtpParameters);
255
+ const localId = trackId;
256
+ // Store it.
257
+ this._rtpReceivers.set(localId, rtpReceiver);
258
+ results.push({
259
+ localId,
260
+ track: rtpReceiver.track,
261
+ rtpReceiver
262
+ });
263
+ }
264
+ return results;
257
265
  }
258
266
  async stopReceiving(localId) {
259
267
  logger.debug('stopReceiving() [localId:%s]', localId);
@@ -291,6 +299,7 @@ class Edge11 extends HandlerInterface_1.HandlerInterface {
291
299
  throw new errors_1.UnsupportedError('not implemented');
292
300
  }
293
301
  _setIceGatherer({ iceServers, iceTransportPolicy }) {
302
+ // @ts-ignore
294
303
  const iceGatherer = new RTCIceGatherer({
295
304
  iceServers: iceServers || [],
296
305
  gatherPolicy: iceTransportPolicy || 'all'
@@ -36,7 +36,7 @@ export declare class FakeHandler extends HandlerInterface {
36
36
  setRtpEncodingParameters(localId: string, params: any): Promise<void>;
37
37
  getSenderStats(localId: string): Promise<RTCStatsReport>;
38
38
  sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }: HandlerSendDataChannelOptions): Promise<HandlerSendDataChannelResult>;
39
- receive({ trackId, kind, rtpParameters }: HandlerReceiveOptions): Promise<HandlerReceiveResult>;
39
+ receive(optionsList: HandlerReceiveOptions[]): Promise<HandlerReceiveResult[]>;
40
40
  stopReceiving(localId: string): Promise<void>;
41
41
  pauseReceiving(localId: string): Promise<void>;
42
42
  resumeReceiving(localId: string): Promise<void>;