mediasoup-client 3.14.2 → 3.15.1

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 (44) hide show
  1. package/lib/Device.d.ts +1 -1
  2. package/lib/Device.d.ts.map +1 -1
  3. package/lib/Device.js +22 -25
  4. package/lib/RtpParameters.d.ts +32 -0
  5. package/lib/RtpParameters.d.ts.map +1 -1
  6. package/lib/Transport.d.ts +6 -5
  7. package/lib/Transport.d.ts.map +1 -1
  8. package/lib/Transport.js +10 -6
  9. package/lib/handlers/Chrome111.d.ts +2 -2
  10. package/lib/handlers/Chrome111.d.ts.map +1 -1
  11. package/lib/handlers/Chrome111.js +23 -26
  12. package/lib/handlers/Chrome74.d.ts +2 -2
  13. package/lib/handlers/Chrome74.d.ts.map +1 -1
  14. package/lib/handlers/Chrome74.js +24 -27
  15. package/lib/handlers/FakeHandler.d.ts +2 -1
  16. package/lib/handlers/FakeHandler.d.ts.map +1 -1
  17. package/lib/handlers/FakeHandler.js +20 -16
  18. package/lib/handlers/Firefox120.d.ts +2 -2
  19. package/lib/handlers/Firefox120.d.ts.map +1 -1
  20. package/lib/handlers/Firefox120.js +21 -24
  21. package/lib/handlers/HandlerInterface.d.ts +2 -3
  22. package/lib/handlers/HandlerInterface.d.ts.map +1 -1
  23. package/lib/handlers/ReactNative106.d.ts +2 -2
  24. package/lib/handlers/ReactNative106.d.ts.map +1 -1
  25. package/lib/handlers/ReactNative106.js +24 -27
  26. package/lib/handlers/Safari12.d.ts +3 -3
  27. package/lib/handlers/Safari12.d.ts.map +1 -1
  28. package/lib/handlers/Safari12.js +23 -26
  29. package/lib/handlers/sdp/commonUtils.d.ts +4 -2
  30. package/lib/handlers/sdp/commonUtils.d.ts.map +1 -1
  31. package/lib/handlers/sdp/commonUtils.js +13 -21
  32. package/lib/index.d.ts +1 -1
  33. package/lib/index.js +1 -1
  34. package/lib/ortc.d.ts +5 -7
  35. package/lib/ortc.d.ts.map +1 -1
  36. package/lib/ortc.js +11 -13
  37. package/lib/test/fakeParameters.d.ts.map +1 -1
  38. package/lib/test/fakeParameters.js +37 -0
  39. package/lib/test/test.js +3 -26
  40. package/npm-scripts.mjs +6 -6
  41. package/package.json +2 -2
  42. package/lib/privateTypes.d.ts +0 -27
  43. package/lib/privateTypes.d.ts.map +0 -1
  44. package/lib/privateTypes.js +0 -2
@@ -14,8 +14,8 @@ class FakeHandler extends enhancedEvents_1.EnhancedEventEmitter {
14
14
  _closed = false;
15
15
  // Fake parameters source of RTP and SCTP parameters and capabilities.
16
16
  _fakeParameters;
17
- // Generic sending RTP parameters for audio and video.
18
- _rtpParametersByKind;
17
+ // Callback to request sending extended RTP capabilities on demand.
18
+ _getSendExtendedRtpCapabilities;
19
19
  // Local RTCP CNAME.
20
20
  _cname = `CNAME-${utils.generateRandomNumber()}`;
21
21
  // Got transport local and remote parameters.
@@ -35,7 +35,7 @@ class FakeHandler extends enhancedEvents_1.EnhancedEventEmitter {
35
35
  factory: (options) => new FakeHandler(options, fakeParameters),
36
36
  getNativeRtpCapabilities: async () => {
37
37
  logger.debug('getNativeRtpCapabilities()');
38
- return fakeParameters.generateNativeRtpCapabilities();
38
+ return FakeHandler.getLocalRtpCapabilities(fakeParameters);
39
39
  },
40
40
  getNativeSctpCapabilities: async () => {
41
41
  logger.debug('getNativeSctpCapabilities()');
@@ -43,6 +43,10 @@ class FakeHandler extends enhancedEvents_1.EnhancedEventEmitter {
43
43
  },
44
44
  };
45
45
  }
46
+ static getLocalRtpCapabilities(fakeParameters) {
47
+ const nativeRtpCapabilities = fakeParameters.generateNativeRtpCapabilities();
48
+ return nativeRtpCapabilities;
49
+ }
46
50
  constructor({
47
51
  // direction,
48
52
  // iceParameters,
@@ -52,15 +56,10 @@ class FakeHandler extends enhancedEvents_1.EnhancedEventEmitter {
52
56
  // iceServers,
53
57
  // iceTransportPolicy,
54
58
  // additionalSettings,
55
- extendedRtpCapabilities, }, fakeParameters) {
59
+ getSendExtendedRtpCapabilities, }, fakeParameters) {
56
60
  super();
57
61
  logger.debug('constructor()');
58
- // Generic sending RTP parameters for audio and video.
59
- // @type {Object}
60
- this._rtpParametersByKind = {
61
- audio: ortc.getSendingRtpParameters('audio', extendedRtpCapabilities),
62
- video: ortc.getSendingRtpParameters('video', extendedRtpCapabilities),
63
- };
62
+ this._getSendExtendedRtpCapabilities = getSendExtendedRtpCapabilities;
64
63
  this._fakeParameters = fakeParameters;
65
64
  }
66
65
  get name() {
@@ -105,9 +104,14 @@ class FakeHandler extends enhancedEvents_1.EnhancedEventEmitter {
105
104
  if (!this._transportReady) {
106
105
  await this.setupTransport({ localDtlsRole: 'server' });
107
106
  }
108
- const rtpParameters = utils.clone(this._rtpParametersByKind[track.kind]);
109
- const useRtx = rtpParameters.codecs.some(_codec => /.+\/rtx$/i.test(_codec.mimeType));
110
- rtpParameters.mid = `mid-${utils.generateRandomNumber()}`;
107
+ const nativeRtpCapabilities = FakeHandler.getLocalRtpCapabilities(this._fakeParameters);
108
+ const sendExtendedRtpCapabilities = this._getSendExtendedRtpCapabilities(nativeRtpCapabilities);
109
+ // Generic sending RTP parameters.
110
+ const sendingRtpParameters = ortc.getSendingRtpParameters(track.kind, sendExtendedRtpCapabilities);
111
+ // This may throw.
112
+ sendingRtpParameters.codecs = ortc.reduceCodecs(sendingRtpParameters.codecs, codec);
113
+ const useRtx = sendingRtpParameters.codecs.some(_codec => /.+\/rtx$/i.test(_codec.mimeType));
114
+ sendingRtpParameters.mid = `mid-${utils.generateRandomNumber()}`;
111
115
  if (!encodings) {
112
116
  encodings = [{}];
113
117
  }
@@ -117,16 +121,16 @@ class FakeHandler extends enhancedEvents_1.EnhancedEventEmitter {
117
121
  encoding.rtx = { ssrc: utils.generateRandomNumber() };
118
122
  }
119
123
  }
120
- rtpParameters.encodings = encodings;
124
+ sendingRtpParameters.encodings = encodings;
121
125
  // Fill RTCRtpParameters.rtcp.
122
- rtpParameters.rtcp = {
126
+ sendingRtpParameters.rtcp = {
123
127
  cname: this._cname,
124
128
  reducedSize: true,
125
129
  mux: true,
126
130
  };
127
131
  const localId = this._nextLocalId++;
128
132
  this._tracks.set(localId, track);
129
- return { localId: String(localId), rtpParameters };
133
+ return { localId: String(localId), rtpParameters: sendingRtpParameters };
130
134
  }
131
135
  async stopSending(localId) {
132
136
  logger.debug('stopSending() [localId:%s]', localId);
@@ -5,8 +5,7 @@ export declare class Firefox120 extends EnhancedEventEmitter<HandlerEvents> impl
5
5
  private _closed;
6
6
  private _direction;
7
7
  private _remoteSdp;
8
- private _sendingRtpParametersByKind;
9
- private _sendingRemoteRtpParametersByKind;
8
+ private _getSendExtendedRtpCapabilities;
10
9
  private _pc;
11
10
  private readonly _mapMidTransceiver;
12
11
  private readonly _sendStream;
@@ -17,6 +16,7 @@ export declare class Firefox120 extends EnhancedEventEmitter<HandlerEvents> impl
17
16
  * Creates a factory function.
18
17
  */
19
18
  static createFactory(): HandlerFactory;
19
+ private static getLocalRtpCapabilities;
20
20
  private constructor();
21
21
  get name(): string;
22
22
  close(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"Firefox120.d.ts","sourceRoot":"","sources":["../../src/handlers/Firefox120.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Firefox120.d.ts","sourceRoot":"","sources":["../../src/handlers/Firefox120.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,6 @@ const sdpTransform = require("sdp-transform");
5
5
  const enhancedEvents_1 = require("../enhancedEvents");
6
6
  const Logger_1 = require("../Logger");
7
7
  const errors_1 = require("../errors");
8
- const utils = require("../utils");
9
8
  const ortc = require("../ortc");
10
9
  const scalabilityModes_1 = require("../scalabilityModes");
11
10
  const sdpCommonUtils = require("./sdp/commonUtils");
@@ -21,11 +20,8 @@ class Firefox120 extends enhancedEvents_1.EnhancedEventEmitter {
21
20
  _direction;
22
21
  // Remote SDP handler.
23
22
  _remoteSdp;
24
- // Generic sending RTP parameters for audio and video.
25
- _sendingRtpParametersByKind;
26
- // Generic sending RTP parameters for audio and video suitable for the SDP
27
- // remote answer.
28
- _sendingRemoteRtpParametersByKind;
23
+ // Callback to request sending extended RTP capabilities on demand.
24
+ _getSendExtendedRtpCapabilities;
29
25
  // RTCPeerConnection instance.
30
26
  _pc;
31
27
  // Map of RTCTransceivers indexed by MID.
@@ -84,9 +80,7 @@ class Firefox120 extends enhancedEvents_1.EnhancedEventEmitter {
84
80
  catch (error) { }
85
81
  pc = undefined;
86
82
  const sdpObject = sdpTransform.parse(offer.sdp);
87
- const nativeRtpCapabilities = sdpCommonUtils.extractRtpCapabilities({
88
- sdpObject,
89
- });
83
+ const nativeRtpCapabilities = Firefox120.getLocalRtpCapabilities(sdpObject);
90
84
  return nativeRtpCapabilities;
91
85
  }
92
86
  catch (error) {
@@ -114,7 +108,13 @@ class Firefox120 extends enhancedEvents_1.EnhancedEventEmitter {
114
108
  },
115
109
  };
116
110
  }
117
- constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, extendedRtpCapabilities, }) {
111
+ static getLocalRtpCapabilities(localSdpObject) {
112
+ const nativeRtpCapabilities = sdpCommonUtils.extractRtpCapabilities({
113
+ sdpObject: localSdpObject,
114
+ });
115
+ return nativeRtpCapabilities;
116
+ }
117
+ constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, getSendExtendedRtpCapabilities, }) {
118
118
  super();
119
119
  logger.debug('constructor()');
120
120
  this._direction = direction;
@@ -124,14 +124,7 @@ class Firefox120 extends enhancedEvents_1.EnhancedEventEmitter {
124
124
  dtlsParameters,
125
125
  sctpParameters,
126
126
  });
127
- this._sendingRtpParametersByKind = {
128
- audio: ortc.getSendingRtpParameters('audio', extendedRtpCapabilities),
129
- video: ortc.getSendingRtpParameters('video', extendedRtpCapabilities),
130
- };
131
- this._sendingRemoteRtpParametersByKind = {
132
- audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities),
133
- video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities),
134
- };
127
+ this._getSendExtendedRtpCapabilities = getSendExtendedRtpCapabilities;
135
128
  this._pc = new RTCPeerConnection({
136
129
  iceServers: iceServers ?? [],
137
130
  iceTransportPolicy: iceTransportPolicy ?? 'all',
@@ -221,12 +214,6 @@ class Firefox120 extends enhancedEvents_1.EnhancedEventEmitter {
221
214
  encoding.rid = `r${idx}`;
222
215
  });
223
216
  }
224
- const sendingRtpParameters = utils.clone(this._sendingRtpParametersByKind[track.kind]);
225
- // This may throw.
226
- sendingRtpParameters.codecs = ortc.reduceCodecs(sendingRtpParameters.codecs, codec);
227
- const sendingRemoteRtpParameters = utils.clone(this._sendingRemoteRtpParametersByKind[track.kind]);
228
- // This may throw.
229
- sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs, codec);
230
217
  // NOTE: Firefox fails sometimes to properly anticipate the closed media
231
218
  // section that it should use, so don't reuse closed media sections.
232
219
  // https://github.com/versatica/mediasoup-client/issues/104
@@ -245,6 +232,16 @@ class Firefox120 extends enhancedEvents_1.EnhancedEventEmitter {
245
232
  if (localSdpObject.extmapAllowMixed) {
246
233
  this._remoteSdp.setSessionExtmapAllowMixed();
247
234
  }
235
+ const nativeRtpCapabilities = Firefox120.getLocalRtpCapabilities(localSdpObject);
236
+ const sendExtendedRtpCapabilities = this._getSendExtendedRtpCapabilities(nativeRtpCapabilities);
237
+ // Generic sending RTP parameters.
238
+ const sendingRtpParameters = ortc.getSendingRtpParameters(track.kind, sendExtendedRtpCapabilities);
239
+ // This may throw.
240
+ sendingRtpParameters.codecs = ortc.reduceCodecs(sendingRtpParameters.codecs, codec);
241
+ // Generic sending RTP parameters suitable for the SDP remote answer.
242
+ const sendingRemoteRtpParameters = ortc.getSendingRemoteRtpParameters(track.kind, sendExtendedRtpCapabilities);
243
+ // This may throw.
244
+ sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs, codec);
248
245
  // In Firefox use DTLS role client even if we are the "offerer" since
249
246
  // Firefox does not respect ICE-Lite.
250
247
  if (!this._transportReady) {
@@ -2,9 +2,8 @@ import { EnhancedEventEmitter } from '../enhancedEvents';
2
2
  import type { IceParameters, IceCandidate, DtlsParameters, IceGatheringState, ConnectionState } from '../Transport';
3
3
  import type { ProducerCodecOptions, OnRtpSenderCallback } from '../Producer';
4
4
  import type { OnRtpReceiverCallback } from '../Consumer';
5
- import type { RtpCapabilities, RtpCodecCapability, RtpParameters, RtpEncodingParameters } from '../RtpParameters';
5
+ import type { RtpCapabilities, RtpCodecCapability, RtpParameters, RtpEncodingParameters, ExtendedRtpCapabilities } from '../RtpParameters';
6
6
  import type { SctpCapabilities, SctpParameters, SctpStreamParameters } from '../SctpParameters';
7
- import type { ExtendedRtpCapabilities } from '../privateTypes';
8
7
  export type HandlerOptions = {
9
8
  direction: 'send' | 'recv';
10
9
  iceParameters: IceParameters;
@@ -14,7 +13,7 @@ export type HandlerOptions = {
14
13
  iceServers?: RTCIceServer[];
15
14
  iceTransportPolicy?: RTCIceTransportPolicy;
16
15
  additionalSettings?: Partial<RTCConfiguration>;
17
- extendedRtpCapabilities: ExtendedRtpCapabilities;
16
+ getSendExtendedRtpCapabilities: (nativeRtpCapabilities: RtpCapabilities) => ExtendedRtpCapabilities;
18
17
  };
19
18
  export type HandlerFactory = {
20
19
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"HandlerInterface.d.ts","sourceRoot":"","sources":["../../src/handlers/HandlerInterface.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HandlerInterface.d.ts","sourceRoot":"","sources":["../../src/handlers/HandlerInterface.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,7 @@ export declare class ReactNative106 extends EnhancedEventEmitter<HandlerEvents>
5
5
  private _closed;
6
6
  private _direction;
7
7
  private _remoteSdp;
8
- private _sendingRtpParametersByKind;
9
- private _sendingRemoteRtpParametersByKind;
8
+ private _getSendExtendedRtpCapabilities;
10
9
  private _forcedLocalDtlsRole?;
11
10
  private _pc;
12
11
  private readonly _mapMidTransceiver;
@@ -18,6 +17,7 @@ export declare class ReactNative106 extends EnhancedEventEmitter<HandlerEvents>
18
17
  * Creates a factory function.
19
18
  */
20
19
  static createFactory(): HandlerFactory;
20
+ private static getLocalRtpCapabilities;
21
21
  private constructor();
22
22
  get name(): string;
23
23
  close(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ReactNative106.d.ts","sourceRoot":"","sources":["../../src/handlers/ReactNative106.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReactNative106.d.ts","sourceRoot":"","sources":["../../src/handlers/ReactNative106.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,6 @@ exports.ReactNative106 = void 0;
4
4
  const sdpTransform = require("sdp-transform");
5
5
  const enhancedEvents_1 = require("../enhancedEvents");
6
6
  const Logger_1 = require("../Logger");
7
- const utils = require("../utils");
8
7
  const ortc = require("../ortc");
9
8
  const errors_1 = require("../errors");
10
9
  const scalabilityModes_1 = require("../scalabilityModes");
@@ -22,11 +21,8 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
22
21
  _direction;
23
22
  // Remote SDP handler.
24
23
  _remoteSdp;
25
- // Generic sending RTP parameters for audio and video.
26
- _sendingRtpParametersByKind;
27
- // Generic sending RTP parameters for audio and video suitable for the SDP
28
- // remote answer.
29
- _sendingRemoteRtpParametersByKind;
24
+ // Callback to request sending extended RTP capabilities on demand.
25
+ _getSendExtendedRtpCapabilities;
30
26
  // Initial server side DTLS role. If not 'auto', it will force the opposite
31
27
  // value in client side.
32
28
  _forcedLocalDtlsRole;
@@ -67,11 +63,7 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
67
63
  catch (error) { }
68
64
  pc = undefined;
69
65
  const sdpObject = sdpTransform.parse(offer.sdp);
70
- const nativeRtpCapabilities = sdpCommonUtils.extractRtpCapabilities({
71
- sdpObject,
72
- });
73
- // libwebrtc supports NACK for OPUS but doesn't announce it.
74
- ortcUtils.addNackSupportForOpus(nativeRtpCapabilities);
66
+ const nativeRtpCapabilities = ReactNative106.getLocalRtpCapabilities(sdpObject);
75
67
  return nativeRtpCapabilities;
76
68
  }
77
69
  catch (error) {
@@ -91,7 +83,15 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
91
83
  },
92
84
  };
93
85
  }
94
- constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, extendedRtpCapabilities, }) {
86
+ static getLocalRtpCapabilities(localSdpObject) {
87
+ const nativeRtpCapabilities = sdpCommonUtils.extractRtpCapabilities({
88
+ sdpObject: localSdpObject,
89
+ });
90
+ // libwebrtc supports NACK for OPUS but doesn't announce it.
91
+ ortcUtils.addNackSupportForOpus(nativeRtpCapabilities);
92
+ return nativeRtpCapabilities;
93
+ }
94
+ constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, getSendExtendedRtpCapabilities, }) {
95
95
  super();
96
96
  logger.debug('constructor()');
97
97
  this._direction = direction;
@@ -101,14 +101,7 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
101
101
  dtlsParameters,
102
102
  sctpParameters,
103
103
  });
104
- this._sendingRtpParametersByKind = {
105
- audio: ortc.getSendingRtpParameters('audio', extendedRtpCapabilities),
106
- video: ortc.getSendingRtpParameters('video', extendedRtpCapabilities),
107
- };
108
- this._sendingRemoteRtpParametersByKind = {
109
- audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities),
110
- video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities),
111
- };
104
+ this._getSendExtendedRtpCapabilities = getSendExtendedRtpCapabilities;
112
105
  if (dtlsParameters.role && dtlsParameters.role !== 'auto') {
113
106
  this._forcedLocalDtlsRole =
114
107
  dtlsParameters.role === 'server' ? 'client' : 'server';
@@ -207,12 +200,6 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
207
200
  encoding.rid = `r${idx}`;
208
201
  });
209
202
  }
210
- const sendingRtpParameters = utils.clone(this._sendingRtpParametersByKind[track.kind]);
211
- // This may throw.
212
- sendingRtpParameters.codecs = ortc.reduceCodecs(sendingRtpParameters.codecs, codec);
213
- const sendingRemoteRtpParameters = utils.clone(this._sendingRemoteRtpParametersByKind[track.kind]);
214
- // This may throw.
215
- sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs, codec);
216
203
  const mediaSectionIdx = this._remoteSdp.getNextMediaSectionIdx();
217
204
  const transceiver = this._pc.addTransceiver(track, {
218
205
  direction: 'sendonly',
@@ -227,7 +214,16 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
227
214
  if (localSdpObject.extmapAllowMixed) {
228
215
  this._remoteSdp.setSessionExtmapAllowMixed();
229
216
  }
230
- let offerMediaObject;
217
+ const nativeRtpCapabilities = ReactNative106.getLocalRtpCapabilities(localSdpObject);
218
+ const sendExtendedRtpCapabilities = this._getSendExtendedRtpCapabilities(nativeRtpCapabilities);
219
+ // Generic sending RTP parameters.
220
+ const sendingRtpParameters = ortc.getSendingRtpParameters(track.kind, sendExtendedRtpCapabilities);
221
+ // This may throw.
222
+ sendingRtpParameters.codecs = ortc.reduceCodecs(sendingRtpParameters.codecs, codec);
223
+ // Generic sending RTP parameters suitable for the SDP remote answer.
224
+ const sendingRemoteRtpParameters = ortc.getSendingRemoteRtpParameters(track.kind, sendExtendedRtpCapabilities);
225
+ // This may throw.
226
+ sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs, codec);
231
227
  if (!this._transportReady) {
232
228
  await this.setupTransport({
233
229
  localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
@@ -237,6 +233,7 @@ class ReactNative106 extends enhancedEvents_1.EnhancedEventEmitter {
237
233
  // Special case for VP9 with SVC.
238
234
  let hackVp9Svc = false;
239
235
  const layers = (0, scalabilityModes_1.parse)((encodings ?? [{}])[0].scalabilityMode);
236
+ let offerMediaObject;
240
237
  if (encodings &&
241
238
  encodings.length === 1 &&
242
239
  layers.spatialLayers > 1 &&
@@ -5,8 +5,7 @@ export declare class Safari12 extends EnhancedEventEmitter<HandlerEvents> implem
5
5
  private _closed;
6
6
  private _direction;
7
7
  private _remoteSdp;
8
- private _sendingRtpParametersByKind;
9
- private _sendingRemoteRtpParametersByKind;
8
+ private _getSendExtendedRtpCapabilities;
10
9
  private _forcedLocalDtlsRole?;
11
10
  private _pc;
12
11
  private readonly _mapMidTransceiver;
@@ -18,7 +17,8 @@ export declare class Safari12 extends EnhancedEventEmitter<HandlerEvents> implem
18
17
  * Creates a factory function.
19
18
  */
20
19
  static createFactory(): HandlerFactory;
21
- constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, extendedRtpCapabilities, }: HandlerOptions);
20
+ private static getLocalRtpCapabilities;
21
+ constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, getSendExtendedRtpCapabilities, }: HandlerOptions);
22
22
  get name(): string;
23
23
  close(): void;
24
24
  updateIceServers(iceServers: RTCIceServer[]): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"Safari12.d.ts","sourceRoot":"","sources":["../../src/handlers/Safari12.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAMzD,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,cAAc,CAAC;AAO5D,OAAO,KAAK,EACX,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,EAC/B,MAAM,oBAAoB,CAAC;AAW5B,qBAAa,QACZ,SAAQ,oBAAoB,CAAC,aAAa,CAC1C,YAAW,gBAAgB;IAG3B,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,UAAU,CAAkB;IAEpC,OAAO,CAAC,UAAU,CAAY;IAE9B,OAAO,CAAC,2BAA2B,CAAsC;IAGzE,OAAO,CAAC,iCAAiC,CAEvC;IAGF,OAAO,CAAC,oBAAoB,CAAC,CAAW;IAExC,OAAO,CAAC,GAAG,CAAoB;IAE/B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CACxB;IAEX,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IAEjD,OAAO,CAAC,2BAA2B,CAAS;IAE5C,OAAO,CAAC,qBAAqB,CAAK;IAElC,OAAO,CAAC,eAAe,CAAS;IAEhC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,cAAc;gBAuD1B,EACX,SAAS,EACT,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,GACvB,EAAE,cAAc;IA8EjB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEQ,KAAK,IAAI,IAAI;IAqChB,gBAAgB,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAY3D,UAAU,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAyDvD,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC;IAM5C,IAAI,CAAC,EACV,KAAK,EACL,SAAS,EACT,YAAY,EACZ,KAAK,EACL,WAAW,GACX,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAuJ5C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqD3C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC5C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC7C,YAAY,CACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,gBAAgB,GAAG,IAAI,GAC5B,OAAO,CAAC,IAAI,CAAC;IAuBV,kBAAkB,CACvB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IAsDV,wBAAwB,CAC7B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,OAAO,CAAC,wBAAwB,CAAC,GACvC,OAAO,CAAC,IAAI,CAAC;IAkDV,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAaxD,eAAe,CAAC,EACrB,OAAO,EACP,iBAAiB,EACjB,cAAc,EACd,KAAK,EACL,QAAQ,GACR,EAAE,6BAA6B,GAAG,OAAO,CAAC,4BAA4B,CAAC;IAuElE,OAAO,CACZ,WAAW,EAAE,qBAAqB,EAAE,GAClC,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAmH5B,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6ChD,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAuCjD,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAuClD,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAa1D,kBAAkB,CAAC,EACxB,oBAAoB,EACpB,KAAK,EACL,QAAQ,GACR,EAAE,gCAAgC,GAAG,OAAO,CAAC,+BAA+B,CAAC;YAiEhE,cAAc;IAgC5B,OAAO,CAAC,yBAAyB,CAE/B;IAEF,OAAO,CAAC,mBAAmB,CAIzB;IAEF,OAAO,CAAC,uBAAuB,CAE7B;IAEF,OAAO,CAAC,0BAA0B,CAiChC;IAEF,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,mBAAmB;CAO3B"}
1
+ {"version":3,"file":"Safari12.d.ts","sourceRoot":"","sources":["../../src/handlers/Safari12.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,6 @@ exports.Safari12 = void 0;
4
4
  const sdpTransform = require("sdp-transform");
5
5
  const enhancedEvents_1 = require("../enhancedEvents");
6
6
  const Logger_1 = require("../Logger");
7
- const utils = require("../utils");
8
7
  const ortc = require("../ortc");
9
8
  const errors_1 = require("../errors");
10
9
  const scalabilityModes_1 = require("../scalabilityModes");
@@ -22,11 +21,8 @@ class Safari12 extends enhancedEvents_1.EnhancedEventEmitter {
22
21
  _direction;
23
22
  // Remote SDP handler.
24
23
  _remoteSdp;
25
- // Generic sending RTP parameters for audio and video.
26
- _sendingRtpParametersByKind;
27
- // Generic sending RTP parameters for audio and video suitable for the SDP
28
- // remote answer.
29
- _sendingRemoteRtpParametersByKind;
24
+ // Callback to request sending extended RTP capabilities on demand.
25
+ _getSendExtendedRtpCapabilities;
30
26
  // Initial server side DTLS role. If not 'auto', it will force the opposite
31
27
  // value in client side.
32
28
  _forcedLocalDtlsRole;
@@ -67,11 +63,7 @@ class Safari12 extends enhancedEvents_1.EnhancedEventEmitter {
67
63
  catch (error) { }
68
64
  pc = undefined;
69
65
  const sdpObject = sdpTransform.parse(offer.sdp);
70
- const nativeRtpCapabilities = sdpCommonUtils.extractRtpCapabilities({
71
- sdpObject,
72
- });
73
- // libwebrtc supports NACK for OPUS but doesn't announce it.
74
- ortcUtils.addNackSupportForOpus(nativeRtpCapabilities);
66
+ const nativeRtpCapabilities = Safari12.getLocalRtpCapabilities(sdpObject);
75
67
  return nativeRtpCapabilities;
76
68
  }
77
69
  catch (error) {
@@ -91,7 +83,15 @@ class Safari12 extends enhancedEvents_1.EnhancedEventEmitter {
91
83
  },
92
84
  };
93
85
  }
94
- constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, extendedRtpCapabilities, }) {
86
+ static getLocalRtpCapabilities(localSdpObject) {
87
+ const nativeRtpCapabilities = sdpCommonUtils.extractRtpCapabilities({
88
+ sdpObject: localSdpObject,
89
+ });
90
+ // libwebrtc supports NACK for OPUS but doesn't announce it.
91
+ ortcUtils.addNackSupportForOpus(nativeRtpCapabilities);
92
+ return nativeRtpCapabilities;
93
+ }
94
+ constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, getSendExtendedRtpCapabilities, }) {
95
95
  super();
96
96
  logger.debug('constructor()');
97
97
  this._direction = direction;
@@ -101,14 +101,7 @@ class Safari12 extends enhancedEvents_1.EnhancedEventEmitter {
101
101
  dtlsParameters,
102
102
  sctpParameters,
103
103
  });
104
- this._sendingRtpParametersByKind = {
105
- audio: ortc.getSendingRtpParameters('audio', extendedRtpCapabilities),
106
- video: ortc.getSendingRtpParameters('video', extendedRtpCapabilities),
107
- };
108
- this._sendingRemoteRtpParametersByKind = {
109
- audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities),
110
- video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities),
111
- };
104
+ this._getSendExtendedRtpCapabilities = getSendExtendedRtpCapabilities;
112
105
  if (dtlsParameters.role && dtlsParameters.role !== 'auto') {
113
106
  this._forcedLocalDtlsRole =
114
107
  dtlsParameters.role === 'server' ? 'client' : 'server';
@@ -204,12 +197,6 @@ class Safari12 extends enhancedEvents_1.EnhancedEventEmitter {
204
197
  this.assertNotClosed();
205
198
  this.assertSendDirection();
206
199
  logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id);
207
- const sendingRtpParameters = utils.clone(this._sendingRtpParametersByKind[track.kind]);
208
- // This may throw.
209
- sendingRtpParameters.codecs = ortc.reduceCodecs(sendingRtpParameters.codecs, codec);
210
- const sendingRemoteRtpParameters = utils.clone(this._sendingRemoteRtpParametersByKind[track.kind]);
211
- // This may throw.
212
- sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs, codec);
213
200
  const mediaSectionIdx = this._remoteSdp.getNextMediaSectionIdx();
214
201
  const transceiver = this._pc.addTransceiver(track, {
215
202
  direction: 'sendonly',
@@ -223,6 +210,16 @@ class Safari12 extends enhancedEvents_1.EnhancedEventEmitter {
223
210
  if (localSdpObject.extmapAllowMixed) {
224
211
  this._remoteSdp.setSessionExtmapAllowMixed();
225
212
  }
213
+ const nativeRtpCapabilities = Safari12.getLocalRtpCapabilities(localSdpObject);
214
+ const sendExtendedRtpCapabilities = this._getSendExtendedRtpCapabilities(nativeRtpCapabilities);
215
+ // Generic sending RTP parameters.
216
+ const sendingRtpParameters = ortc.getSendingRtpParameters(track.kind, sendExtendedRtpCapabilities);
217
+ // This may throw.
218
+ sendingRtpParameters.codecs = ortc.reduceCodecs(sendingRtpParameters.codecs, codec);
219
+ // Generic sending RTP parameters suitable for the SDP remote answer.
220
+ const sendingRemoteRtpParameters = ortc.getSendingRemoteRtpParameters(track.kind, sendExtendedRtpCapabilities);
221
+ // This may throw.
222
+ sendingRemoteRtpParameters.codecs = ortc.reduceCodecs(sendingRemoteRtpParameters.codecs, codec);
226
223
  let offerMediaObject;
227
224
  if (!this._transportReady) {
228
225
  await this.setupTransport({
@@ -2,8 +2,10 @@ import type * as SdpTransform from 'sdp-transform';
2
2
  import type { DtlsParameters } from '../../Transport';
3
3
  import type { RtpCapabilities, RtpParameters } from '../../RtpParameters';
4
4
  /**
5
- * This function must be called with an SDP with 1 m=audio and 1 m=video
6
- * sections.
5
+ * This function extracs RTP capabilities from the given SDP.
6
+ *
7
+ * BUNDLE is assumed so, as per spec, all media sections in the SDP must share
8
+ * same ids for codecs and RTP extensions.
7
9
  */
8
10
  export declare function extractRtpCapabilities({ sdpObject, }: {
9
11
  sdpObject: SdpTransform.SessionDescription;
@@ -1 +1 @@
1
- {"version":3,"file":"commonUtils.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdp/commonUtils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,YAAY,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EACX,cAAc,EAGd,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EACX,eAAe,EAIf,aAAa,EAEb,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,EACtC,SAAS,GACT,EAAE;IACF,SAAS,EAAE,YAAY,CAAC,kBAAkB,CAAC;CAC3C,GAAG,eAAe,CA8HlB;AAED,wBAAgB,qBAAqB,CAAC,EACrC,SAAS,GACT,EAAE;IACF,SAAS,EAAE,YAAY,CAAC,kBAAkB,CAAC;CAC3C,GAAG,cAAc,CAsDjB;AAED,wBAAgB,QAAQ,CAAC,EACxB,gBAAgB,GAChB,EAAE;IACF,gBAAgB,EAAE,YAAY,CAAC,gBAAgB,CAAC;CAChD,GAAG,MAAM,CAUT;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EACpC,kBAAkB,EAClB,iBAAiB,GACjB,EAAE;IACF,kBAAkB,EAAE,aAAa,CAAC;IAClC,iBAAiB,EAAE,YAAY,CAAC,gBAAgB,CAAC;CACjD,GAAG,IAAI,CAsDP"}
1
+ {"version":3,"file":"commonUtils.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdp/commonUtils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,YAAY,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EACX,cAAc,EAGd,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EACX,eAAe,EAIf,aAAa,EAEb,MAAM,qBAAqB,CAAC;AAE7B;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,EACtC,SAAS,GACT,EAAE;IACF,SAAS,EAAE,YAAY,CAAC,kBAAkB,CAAC;CAC3C,GAAG,eAAe,CAgHlB;AAED,wBAAgB,qBAAqB,CAAC,EACrC,SAAS,GACT,EAAE;IACF,SAAS,EAAE,YAAY,CAAC,kBAAkB,CAAC;CAC3C,GAAG,cAAc,CAsDjB;AAED,wBAAgB,QAAQ,CAAC,EACxB,gBAAgB,GAChB,EAAE;IACF,gBAAgB,EAAE,YAAY,CAAC,gBAAgB,CAAC;CAChD,GAAG,MAAM,CAUT;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EACpC,kBAAkB,EAClB,iBAAiB,GACjB,EAAE;IACF,kBAAkB,EAAE,aAAa,CAAC;IAClC,iBAAiB,EAAE,YAAY,CAAC,gBAAgB,CAAC;CACjD,GAAG,IAAI,CAsDP"}
@@ -6,32 +6,21 @@ exports.getCname = getCname;
6
6
  exports.applyCodecParameters = applyCodecParameters;
7
7
  const sdpTransform = require("sdp-transform");
8
8
  /**
9
- * This function must be called with an SDP with 1 m=audio and 1 m=video
10
- * sections.
9
+ * This function extracs RTP capabilities from the given SDP.
10
+ *
11
+ * BUNDLE is assumed so, as per spec, all media sections in the SDP must share
12
+ * same ids for codecs and RTP extensions.
11
13
  */
12
14
  function extractRtpCapabilities({ sdpObject, }) {
13
15
  // Map of RtpCodecParameters indexed by payload type.
14
16
  const codecsMap = new Map();
15
- // Array of RtpHeaderExtensions.
16
- const headerExtensions = [];
17
- // Whether a m=audio/video section has been already found.
18
- let gotAudio = false;
19
- let gotVideo = false;
17
+ // Map of RtpHeaderExtensions indexed by preferred id.
18
+ const headerExtensionMap = new Map();
20
19
  for (const m of sdpObject.media) {
21
20
  const kind = m.type;
22
21
  switch (kind) {
23
- case 'audio': {
24
- if (gotAudio) {
25
- continue;
26
- }
27
- gotAudio = true;
28
- break;
29
- }
22
+ case 'audio':
30
23
  case 'video': {
31
- if (gotVideo) {
32
- continue;
33
- }
34
- gotVideo = true;
35
24
  break;
36
25
  }
37
26
  default: {
@@ -58,10 +47,13 @@ function extractRtpCapabilities({ sdpObject, }) {
58
47
  if (!codec) {
59
48
  continue;
60
49
  }
61
- // Specials case to convert parameter value to string.
50
+ // Specials cases to convert parameter value to string.
62
51
  if (parameters?.hasOwnProperty('profile-level-id')) {
63
52
  parameters['profile-level-id'] = String(parameters['profile-level-id']);
64
53
  }
54
+ if (parameters?.hasOwnProperty('profile-id')) {
55
+ parameters['profile-id'] = String(parameters['profile-id']);
56
+ }
65
57
  codec.parameters = parameters;
66
58
  }
67
59
  // Get RTCP feedback for each codec.
@@ -103,12 +95,12 @@ function extractRtpCapabilities({ sdpObject, }) {
103
95
  uri: ext.uri,
104
96
  preferredId: ext.value,
105
97
  };
106
- headerExtensions.push(headerExtension);
98
+ headerExtensionMap.set(headerExtension.preferredId, headerExtension);
107
99
  }
108
100
  }
109
101
  const rtpCapabilities = {
110
102
  codecs: Array.from(codecsMap.values()),
111
- headerExtensions: headerExtensions,
103
+ headerExtensions: Array.from(headerExtensionMap.values()),
112
104
  };
113
105
  return rtpCapabilities;
114
106
  }
package/lib/index.d.ts CHANGED
@@ -6,7 +6,7 @@ export * as types from './types';
6
6
  /**
7
7
  * Expose mediasoup-client version.
8
8
  */
9
- export declare const version = "3.14.2";
9
+ export declare const version = "3.15.1";
10
10
  /**
11
11
  * Expose Device class and device detector helpers.
12
12
  */
package/lib/index.js CHANGED
@@ -10,7 +10,7 @@ exports.types = require("./types");
10
10
  /**
11
11
  * Expose mediasoup-client version.
12
12
  */
13
- exports.version = '3.14.2';
13
+ exports.version = '3.15.1';
14
14
  /**
15
15
  * Expose Device class and device detector helpers.
16
16
  */