mediasoup-client 3.14.2 → 3.15.0

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 (40) 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/Transport.d.ts +6 -4
  5. package/lib/Transport.d.ts.map +1 -1
  6. package/lib/Transport.js +10 -6
  7. package/lib/handlers/Chrome111.d.ts +2 -2
  8. package/lib/handlers/Chrome111.d.ts.map +1 -1
  9. package/lib/handlers/Chrome111.js +23 -26
  10. package/lib/handlers/Chrome74.d.ts +2 -2
  11. package/lib/handlers/Chrome74.d.ts.map +1 -1
  12. package/lib/handlers/Chrome74.js +24 -27
  13. package/lib/handlers/FakeHandler.d.ts +2 -1
  14. package/lib/handlers/FakeHandler.d.ts.map +1 -1
  15. package/lib/handlers/FakeHandler.js +20 -16
  16. package/lib/handlers/Firefox120.d.ts +2 -2
  17. package/lib/handlers/Firefox120.d.ts.map +1 -1
  18. package/lib/handlers/Firefox120.js +21 -24
  19. package/lib/handlers/HandlerInterface.d.ts +1 -1
  20. package/lib/handlers/HandlerInterface.d.ts.map +1 -1
  21. package/lib/handlers/ReactNative106.d.ts +2 -2
  22. package/lib/handlers/ReactNative106.d.ts.map +1 -1
  23. package/lib/handlers/ReactNative106.js +24 -27
  24. package/lib/handlers/Safari12.d.ts +3 -3
  25. package/lib/handlers/Safari12.d.ts.map +1 -1
  26. package/lib/handlers/Safari12.js +23 -26
  27. package/lib/handlers/sdp/commonUtils.d.ts +4 -2
  28. package/lib/handlers/sdp/commonUtils.d.ts.map +1 -1
  29. package/lib/handlers/sdp/commonUtils.js +13 -21
  30. package/lib/index.d.ts +1 -1
  31. package/lib/index.js +1 -1
  32. package/lib/ortc.d.ts +4 -5
  33. package/lib/ortc.d.ts.map +1 -1
  34. package/lib/ortc.js +11 -13
  35. package/lib/privateTypes.d.ts +10 -1
  36. package/lib/privateTypes.d.ts.map +1 -1
  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/package.json +1 -1
package/lib/ortc.js CHANGED
@@ -148,8 +148,7 @@ function validateSctpStreamParameters(params) {
148
148
  }
149
149
  }
150
150
  /**
151
- * Validates SctpCapabilities. It may modify given data by adding missing
152
- * fields with default values.
151
+ * Validates SctpCapabilities.
153
152
  * It throws if invalid.
154
153
  */
155
154
  function validateSctpCapabilities(caps) {
@@ -165,7 +164,7 @@ function validateSctpCapabilities(caps) {
165
164
  /**
166
165
  * Generate extended RTP capabilities for sending and receiving.
167
166
  *
168
- * Resulting codecs keep order preferrred by local or remote capabilities
167
+ * Resulting codecs keep order preferred by local or remote capabilities
169
168
  * depending on `preferLocalCodecsOrder`.
170
169
  */
171
170
  function getExtendedRtpCapabilities(localCaps, remoteCaps, preferLocalCodecsOrder) {
@@ -184,8 +183,8 @@ function getExtendedRtpCapabilities(localCaps, remoteCaps, preferLocalCodecsOrde
184
183
  continue;
185
184
  }
186
185
  const extendedCodec = {
187
- mimeType: localCodec.mimeType,
188
186
  kind: localCodec.kind,
187
+ mimeType: localCodec.mimeType,
189
188
  clockRate: localCodec.clockRate,
190
189
  channels: localCodec.channels,
191
190
  localPayloadType: localCodec.preferredPayloadType,
@@ -210,8 +209,8 @@ function getExtendedRtpCapabilities(localCaps, remoteCaps, preferLocalCodecsOrde
210
209
  continue;
211
210
  }
212
211
  const extendedCodec = {
213
- mimeType: matchingLocalCodec.mimeType,
214
212
  kind: matchingLocalCodec.kind,
213
+ mimeType: matchingLocalCodec.mimeType,
215
214
  clockRate: matchingLocalCodec.clockRate,
216
215
  channels: matchingLocalCodec.channels,
217
216
  localPayloadType: matchingLocalCodec.preferredPayloadType,
@@ -285,8 +284,8 @@ function getRecvRtpCapabilities(extendedRtpCapabilities) {
285
284
  };
286
285
  for (const extendedCodec of extendedRtpCapabilities.codecs) {
287
286
  const codec = {
288
- mimeType: extendedCodec.mimeType,
289
287
  kind: extendedCodec.kind,
288
+ mimeType: extendedCodec.mimeType,
290
289
  preferredPayloadType: extendedCodec.remotePayloadType,
291
290
  clockRate: extendedCodec.clockRate,
292
291
  channels: extendedCodec.channels,
@@ -299,8 +298,8 @@ function getRecvRtpCapabilities(extendedRtpCapabilities) {
299
298
  continue;
300
299
  }
301
300
  const rtxCodec = {
302
- mimeType: `${extendedCodec.kind}/rtx`,
303
301
  kind: extendedCodec.kind,
302
+ mimeType: `${extendedCodec.kind}/rtx`,
304
303
  preferredPayloadType: extendedCodec.remoteRtxPayloadType,
305
304
  clockRate: extendedCodec.clockRate,
306
305
  parameters: {
@@ -515,21 +514,21 @@ function generateProbatorRtpParameters(videoRtpParameters) {
515
514
  /**
516
515
  * Whether media can be sent based on the given RTP capabilities.
517
516
  */
518
- function canSend(kind, extendedRtpCapabilities) {
519
- return extendedRtpCapabilities.codecs.some(codec => codec.kind === kind);
517
+ function canSend(kind, rtpCapabilities) {
518
+ return (rtpCapabilities.codecs ?? []).some(codec => codec.kind === kind);
520
519
  }
521
520
  /**
522
521
  * Whether the given RTP parameters can be received with the given RTP
523
522
  * capabilities.
524
523
  */
525
- function canReceive(rtpParameters, extendedRtpCapabilities) {
524
+ function canReceive(rtpParameters, rtpCapabilities) {
526
525
  // This may throw.
527
526
  validateRtpParameters(rtpParameters);
528
527
  if (rtpParameters.codecs.length === 0) {
529
528
  return false;
530
529
  }
531
530
  const firstMediaCodec = rtpParameters.codecs[0];
532
- return extendedRtpCapabilities.codecs.some(codec => codec.remotePayloadType === firstMediaCodec.payloadType);
531
+ return (rtpCapabilities.codecs ?? []).some(codec => codec.preferredPayloadType === firstMediaCodec.payloadType);
533
532
  }
534
533
  /**
535
534
  * Validates RtpCodecCapability. It may modify given data by adding missing
@@ -809,8 +808,7 @@ function validateRtcpParameters(rtcp) {
809
808
  }
810
809
  }
811
810
  /**
812
- * Validates NumSctpStreams. It may modify given data by adding missing
813
- * fields with default values.
811
+ * Validates NumSctpStreams.
814
812
  * It throws if invalid.
815
813
  */
816
814
  function validateNumSctpStreams(numStreams) {
@@ -1,11 +1,20 @@
1
1
  import type { MediaKind, RtcpFeedback, RtpHeaderExtensionUri, RtpHeaderExtensionDirection } from './RtpParameters';
2
+ /**
3
+ * Extended RTP capabilities are a superset of RTP capabilities that include
4
+ * information about sending and receiving ids.
5
+ *
6
+ * @remarks
7
+ * - Only intended for internal purposes.
8
+ *
9
+ * @private
10
+ */
2
11
  export type ExtendedRtpCapabilities = {
3
12
  codecs: ExtendedRtpCodecCapability[];
4
13
  headerExtensions: ExtendedRtpHeaderExtension[];
5
14
  };
6
15
  export type ExtendedRtpCodecCapability = {
7
- mimeType: string;
8
16
  kind: MediaKind;
17
+ mimeType: string;
9
18
  localPayloadType: number;
10
19
  localRtxPayloadType?: number;
11
20
  remotePayloadType: number;
@@ -1 +1 @@
1
- {"version":3,"file":"privateTypes.d.ts","sourceRoot":"","sources":["../src/privateTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EACT,YAAY,EACZ,qBAAqB,EACrB,2BAA2B,EAC3B,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,uBAAuB,GAAG;IACrC,MAAM,EAAE,0BAA0B,EAAE,CAAC;IACrC,gBAAgB,EAAE,0BAA0B,EAAE,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,SAAS,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,YAAY,CAAC,EAAE,YAAY,EAAE,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACxC,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,qBAAqB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,2BAA2B,CAAC;CACvC,CAAC"}
1
+ {"version":3,"file":"privateTypes.d.ts","sourceRoot":"","sources":["../src/privateTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EACT,YAAY,EACZ,qBAAqB,EACrB,2BAA2B,EAC3B,MAAM,iBAAiB,CAAC;AAEzB;;;;;;;;GAQG;AACH,MAAM,MAAM,uBAAuB,GAAG;IACrC,MAAM,EAAE,0BAA0B,EAAE,CAAC;IACrC,gBAAgB,EAAE,0BAA0B,EAAE,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACxC,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,YAAY,CAAC,EAAE,YAAY,EAAE,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG;IACxC,IAAI,EAAE,SAAS,CAAC;IAChB,GAAG,EAAE,qBAAqB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,2BAA2B,CAAC;CACvC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fakeParameters.d.ts","sourceRoot":"","sources":["../../src/test/fakeParameters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,eAAe,MAAM,UAAU,CAAC;AAO5C,wBAAgB,6BAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,eAAe,CAiLrF;AAED,wBAAgB,6BAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,eAAe,CA6IrF;AAED,wBAAgB,8BAA8B,IAAI,eAAe,CAAC,KAAK,CAAC,gBAAgB,CAIvF;AAED,wBAAgB,2BAA2B,IAAI,eAAe,CAAC,KAAK,CAAC,cAAc,CAWlF;AAED,wBAAgB,iCAAiC,IAAI,eAAe,CAAC,KAAK,CAAC,gBAAgB,CAyD1F;AAED,wBAAgB,gCAAgC,IAAI;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAIjE;AAED,wBAAgB,gCAAgC,CAAC,EAChD,EAAE,EACF,aAAa,GACb,GAAE;IACF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,eAAe,CAAC,KAAK,CAAC,eAAe,CA6O7C;AAED,wBAAgB,oCAAoC,IAAI;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAIrE;AAED,wBAAgB,oCAAoC,CAAC,EACpD,EAAE,GACF,GAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,eAAe,CAAC,KAAK,CAAC,mBAAmB,CAWlE"}
1
+ {"version":3,"file":"fakeParameters.d.ts","sourceRoot":"","sources":["../../src/test/fakeParameters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,eAAe,MAAM,UAAU,CAAC;AAO5C,wBAAgB,6BAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,eAAe,CAiLrF;AAED,wBAAgB,6BAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,eAAe,CAkLrF;AAED,wBAAgB,8BAA8B,IAAI,eAAe,CAAC,KAAK,CAAC,gBAAgB,CAIvF;AAED,wBAAgB,2BAA2B,IAAI,eAAe,CAAC,KAAK,CAAC,cAAc,CAWlF;AAED,wBAAgB,iCAAiC,IAAI,eAAe,CAAC,KAAK,CAAC,gBAAgB,CAyD1F;AAED,wBAAgB,gCAAgC,IAAI;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAIjE;AAED,wBAAgB,gCAAgC,CAAC,EAChD,EAAE,EACF,aAAa,GACb,GAAE;IACF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,eAAe,CAAC,KAAK,CAAC,eAAe,CA6O7C;AAED,wBAAgB,oCAAoC,IAAI;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAIrE;AAED,wBAAgB,oCAAoC,CAAC,EACpD,EAAE,GACF,GAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,eAAe,CAAC,KAAK,CAAC,mBAAmB,CAWlE"}
@@ -224,6 +224,43 @@ function generateNativeRtpCapabilities() {
224
224
  rtcpFeedback: [{ type: 'transport-cc' }],
225
225
  parameters: {},
226
226
  },
227
+ {
228
+ mimeType: 'audio/foo',
229
+ kind: 'audio',
230
+ preferredPayloadType: 107,
231
+ clockRate: 90000,
232
+ channels: 4,
233
+ rtcpFeedback: [{ type: 'foo-qwe-qwe' }],
234
+ parameters: {
235
+ foo: 'lalala',
236
+ },
237
+ },
238
+ {
239
+ mimeType: 'video/BAZCODEC',
240
+ kind: 'video',
241
+ preferredPayloadType: 100,
242
+ clockRate: 90000,
243
+ rtcpFeedback: [
244
+ { type: 'foo' },
245
+ { type: 'transport-cc' },
246
+ { type: 'ccm', parameter: 'fir' },
247
+ { type: 'nack' },
248
+ { type: 'nack', parameter: 'pli' },
249
+ ],
250
+ parameters: {
251
+ baz: '1234abcd',
252
+ },
253
+ },
254
+ {
255
+ mimeType: 'video/rtx',
256
+ kind: 'video',
257
+ preferredPayloadType: 101,
258
+ clockRate: 90000,
259
+ rtcpFeedback: [],
260
+ parameters: {
261
+ apt: 100,
262
+ },
263
+ },
227
264
  {
228
265
  mimeType: 'video/VP8',
229
266
  kind: 'video',
package/lib/test/test.js CHANGED
@@ -340,6 +340,7 @@ test('transport.produce() succeeds', async () => {
340
340
  // Use disableTrackOnPause: false and zeroRtpOnPause: true
341
341
  const videoProducer = await ctx.connectedSendTransport.produce({
342
342
  track: videoTrack,
343
+ codec: ctx.loadedDevice.rtpCapabilities.codecs.find(codec => codec.mimeType.toLowerCase() === 'video/vp9'),
343
344
  encodings: videoEncodings,
344
345
  disableTrackOnPause: false,
345
346
  zeroRtpOnPause: true,
@@ -353,33 +354,9 @@ test('transport.produce() succeeds', async () => {
353
354
  expect(videoProducer.track).toBe(videoTrack);
354
355
  expect(typeof videoProducer.rtpParameters).toBe('object');
355
356
  expect(typeof videoProducer.rtpParameters.mid).toBe('string');
356
- expect(videoProducer.rtpParameters.codecs.length).toBe(4);
357
+ expect(videoProducer.rtpParameters.codecs.length).toBe(2);
357
358
  codecs = videoProducer.rtpParameters.codecs;
358
359
  expect(codecs[0]).toEqual({
359
- mimeType: 'video/VP8',
360
- payloadType: 96,
361
- clockRate: 90000,
362
- rtcpFeedback: [
363
- { type: 'goog-remb', parameter: '' },
364
- { type: 'transport-cc', parameter: '' },
365
- { type: 'ccm', parameter: 'fir' },
366
- { type: 'nack', parameter: '' },
367
- { type: 'nack', parameter: 'pli' },
368
- ],
369
- parameters: {
370
- baz: '1234abcd',
371
- },
372
- });
373
- expect(codecs[1]).toEqual({
374
- mimeType: 'video/rtx',
375
- payloadType: 97,
376
- clockRate: 90000,
377
- rtcpFeedback: [],
378
- parameters: {
379
- apt: 96,
380
- },
381
- });
382
- expect(codecs[2]).toEqual({
383
360
  mimeType: 'video/VP9',
384
361
  payloadType: 98,
385
362
  clockRate: 90000,
@@ -394,7 +371,7 @@ test('transport.produce() succeeds', async () => {
394
371
  'profile-id': 0,
395
372
  },
396
373
  });
397
- expect(codecs[3]).toEqual({
374
+ expect(codecs[1]).toEqual({
398
375
  mimeType: 'video/rtx',
399
376
  payloadType: 99,
400
377
  clockRate: 90000,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mediasoup-client",
3
- "version": "3.14.2",
3
+ "version": "3.15.0",
4
4
  "description": "mediasoup client side TypeScript library",
5
5
  "contributors": [
6
6
  "Iñaki Baz Castillo <ibc@aliax.net> (https://inakibaz.me)",