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.
- package/lib/Device.d.ts +1 -1
- package/lib/Device.d.ts.map +1 -1
- package/lib/Device.js +22 -25
- package/lib/Transport.d.ts +6 -4
- package/lib/Transport.d.ts.map +1 -1
- package/lib/Transport.js +10 -6
- package/lib/handlers/Chrome111.d.ts +2 -2
- package/lib/handlers/Chrome111.d.ts.map +1 -1
- package/lib/handlers/Chrome111.js +23 -26
- package/lib/handlers/Chrome74.d.ts +2 -2
- package/lib/handlers/Chrome74.d.ts.map +1 -1
- package/lib/handlers/Chrome74.js +24 -27
- package/lib/handlers/FakeHandler.d.ts +2 -1
- package/lib/handlers/FakeHandler.d.ts.map +1 -1
- package/lib/handlers/FakeHandler.js +20 -16
- package/lib/handlers/Firefox120.d.ts +2 -2
- package/lib/handlers/Firefox120.d.ts.map +1 -1
- package/lib/handlers/Firefox120.js +21 -24
- package/lib/handlers/HandlerInterface.d.ts +1 -1
- package/lib/handlers/HandlerInterface.d.ts.map +1 -1
- package/lib/handlers/ReactNative106.d.ts +2 -2
- package/lib/handlers/ReactNative106.d.ts.map +1 -1
- package/lib/handlers/ReactNative106.js +24 -27
- package/lib/handlers/Safari12.d.ts +3 -3
- package/lib/handlers/Safari12.d.ts.map +1 -1
- package/lib/handlers/Safari12.js +23 -26
- package/lib/handlers/sdp/commonUtils.d.ts +4 -2
- package/lib/handlers/sdp/commonUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/commonUtils.js +13 -21
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/ortc.d.ts +4 -5
- package/lib/ortc.d.ts.map +1 -1
- package/lib/ortc.js +11 -13
- package/lib/privateTypes.d.ts +10 -1
- package/lib/privateTypes.d.ts.map +1 -1
- package/lib/test/fakeParameters.d.ts.map +1 -1
- package/lib/test/fakeParameters.js +37 -0
- package/lib/test/test.js +3 -26
- 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.
|
|
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
|
|
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,
|
|
519
|
-
return
|
|
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,
|
|
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
|
|
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.
|
|
813
|
-
* fields with default values.
|
|
811
|
+
* Validates NumSctpStreams.
|
|
814
812
|
* It throws if invalid.
|
|
815
813
|
*/
|
|
816
814
|
function validateNumSctpStreams(numStreams) {
|
package/lib/privateTypes.d.ts
CHANGED
|
@@ -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,
|
|
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,
|
|
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(
|
|
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[
|
|
374
|
+
expect(codecs[1]).toEqual({
|
|
398
375
|
mimeType: 'video/rtx',
|
|
399
376
|
payloadType: 99,
|
|
400
377
|
clockRate: 90000,
|