mediasoup-client 3.7.0 → 3.7.2
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/README.md +85 -112
- package/lib/Consumer.d.ts +1 -1
- package/lib/Consumer.d.ts.map +1 -1
- package/lib/Consumer.js +1 -1
- package/lib/DataConsumer.d.ts +1 -1
- package/lib/DataConsumer.d.ts.map +1 -1
- package/lib/DataConsumer.js +1 -1
- package/lib/DataProducer.d.ts +1 -1
- package/lib/DataProducer.d.ts.map +1 -1
- package/lib/DataProducer.js +1 -1
- package/lib/Device.d.ts +3 -3
- package/lib/Device.d.ts.map +1 -1
- package/lib/Device.js +43 -42
- package/lib/EnhancedEventEmitter.d.ts.map +1 -1
- package/lib/Logger.d.ts.map +1 -1
- package/lib/Producer.d.ts +5 -15
- package/lib/Producer.d.ts.map +1 -1
- package/lib/Producer.js +2 -2
- package/lib/RtpParameters.d.ts.map +1 -1
- package/lib/SctpParameters.d.ts.map +1 -1
- package/lib/Transport.d.ts +14 -10
- package/lib/Transport.d.ts.map +1 -1
- package/lib/Transport.js +71 -53
- package/lib/errors.d.ts.map +1 -1
- package/lib/errors.js +6 -6
- package/lib/handlers/Chrome111.d.ts +4 -4
- package/lib/handlers/Chrome111.d.ts.map +1 -1
- package/lib/handlers/Chrome111.js +64 -57
- package/lib/handlers/Chrome55.d.ts +4 -4
- package/lib/handlers/Chrome55.d.ts.map +1 -1
- package/lib/handlers/Chrome55.js +75 -62
- package/lib/handlers/Chrome67.d.ts +4 -4
- package/lib/handlers/Chrome67.d.ts.map +1 -1
- package/lib/handlers/Chrome67.js +77 -65
- package/lib/handlers/Chrome70.d.ts +4 -4
- package/lib/handlers/Chrome70.d.ts.map +1 -1
- package/lib/handlers/Chrome70.js +68 -60
- package/lib/handlers/Chrome74.d.ts +4 -4
- package/lib/handlers/Chrome74.d.ts.map +1 -1
- package/lib/handlers/Chrome74.js +65 -58
- package/lib/handlers/Edge11.d.ts +1 -1
- package/lib/handlers/Edge11.d.ts.map +1 -1
- package/lib/handlers/Edge11.js +43 -37
- package/lib/handlers/FakeHandler.d.ts +3 -3
- package/lib/handlers/FakeHandler.d.ts.map +1 -1
- package/lib/handlers/FakeHandler.js +19 -22
- package/lib/handlers/Firefox60.d.ts +4 -4
- package/lib/handlers/Firefox60.d.ts.map +1 -1
- package/lib/handlers/Firefox60.js +65 -52
- package/lib/handlers/HandlerInterface.d.ts.map +1 -1
- package/lib/handlers/ReactNative.d.ts +4 -4
- package/lib/handlers/ReactNative.d.ts.map +1 -1
- package/lib/handlers/ReactNative.js +76 -64
- package/lib/handlers/ReactNativeUnifiedPlan.d.ts +4 -4
- package/lib/handlers/ReactNativeUnifiedPlan.d.ts.map +1 -1
- package/lib/handlers/ReactNativeUnifiedPlan.js +65 -58
- package/lib/handlers/Safari11.d.ts +4 -4
- package/lib/handlers/Safari11.d.ts.map +1 -1
- package/lib/handlers/Safari11.js +74 -61
- package/lib/handlers/Safari12.d.ts +4 -4
- package/lib/handlers/Safari12.d.ts.map +1 -1
- package/lib/handlers/Safari12.js +65 -57
- package/lib/handlers/ortc/edgeUtils.d.ts.map +1 -1
- package/lib/handlers/ortc/utils.d.ts.map +1 -1
- package/lib/handlers/ortc/utils.js +2 -2
- package/lib/handlers/sdp/MediaSection.d.ts +5 -5
- package/lib/handlers/sdp/MediaSection.d.ts.map +1 -1
- package/lib/handlers/sdp/MediaSection.js +287 -305
- package/lib/handlers/sdp/RemoteSdp.d.ts +5 -5
- package/lib/handlers/sdp/RemoteSdp.d.ts.map +1 -1
- package/lib/handlers/sdp/RemoteSdp.js +28 -30
- package/lib/handlers/sdp/commonUtils.d.ts +4 -4
- package/lib/handlers/sdp/commonUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/commonUtils.js +41 -46
- package/lib/handlers/sdp/plainRtpUtils.d.ts +2 -2
- package/lib/handlers/sdp/plainRtpUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/plainRtpUtils.js +5 -7
- package/lib/handlers/sdp/planBUtils.d.ts +2 -2
- package/lib/handlers/sdp/planBUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/planBUtils.js +11 -14
- package/lib/handlers/sdp/unifiedPlanUtils.d.ts +2 -2
- package/lib/handlers/sdp/unifiedPlanUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/unifiedPlanUtils.js +11 -14
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/ortc.d.ts.map +1 -1
- package/lib/ortc.js +90 -92
- package/lib/scalabilityModes.d.ts.map +1 -1
- package/lib/scalabilityModes.js +2 -2
- package/lib/{tests → test}/fakeParameters.d.ts +2 -2
- package/lib/test/fakeParameters.d.ts.map +1 -0
- package/lib/test/fakeParameters.js +645 -0
- package/lib/{tests → test}/test.d.ts.map +1 -1
- package/lib/{tests → test}/test.js +466 -495
- package/lib/test/uaTestCases.d.ts.map +1 -0
- package/lib/{tests → test}/uaTestCases.js +17 -17
- package/lib/types.d.ts.map +1 -1
- package/lib/utils.d.ts.map +1 -1
- package/npm-scripts.mjs +72 -98
- package/package.json +93 -90
- package/lib/tests/fakeParameters.d.ts.map +0 -1
- package/lib/tests/fakeParameters.js +0 -662
- package/lib/tests/uaTestCases.d.ts.map +0 -1
- /package/lib/{tests → test}/test.d.ts +0 -0
- /package/lib/{tests → test}/uaTestCases.d.ts +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.addLegacySimulcast = exports.getRtpEncodings = void 0;
|
|
4
|
-
function getRtpEncodings({ offerMediaObject }) {
|
|
4
|
+
function getRtpEncodings({ offerMediaObject, }) {
|
|
5
5
|
const ssrcs = new Set();
|
|
6
6
|
for (const line of offerMediaObject.ssrcs || []) {
|
|
7
7
|
const ssrc = line.id;
|
|
@@ -48,13 +48,12 @@ exports.getRtpEncodings = getRtpEncodings;
|
|
|
48
48
|
/**
|
|
49
49
|
* Adds multi-ssrc based simulcast into the given SDP media section offer.
|
|
50
50
|
*/
|
|
51
|
-
function addLegacySimulcast({ offerMediaObject, numStreams }) {
|
|
51
|
+
function addLegacySimulcast({ offerMediaObject, numStreams, }) {
|
|
52
52
|
if (numStreams <= 1) {
|
|
53
53
|
throw new TypeError('numStreams must be greater than 1');
|
|
54
54
|
}
|
|
55
55
|
// Get the SSRC.
|
|
56
|
-
const ssrcMsidLine = (offerMediaObject.ssrcs || [])
|
|
57
|
-
.find((line) => line.attribute === 'msid');
|
|
56
|
+
const ssrcMsidLine = (offerMediaObject.ssrcs || []).find((line) => line.attribute === 'msid');
|
|
58
57
|
if (!ssrcMsidLine) {
|
|
59
58
|
throw new Error('a=ssrc line with msid information not found');
|
|
60
59
|
}
|
|
@@ -62,8 +61,7 @@ function addLegacySimulcast({ offerMediaObject, numStreams }) {
|
|
|
62
61
|
const firstSsrc = ssrcMsidLine.id;
|
|
63
62
|
let firstRtxSsrc;
|
|
64
63
|
// Get the SSRC for RTX.
|
|
65
|
-
(offerMediaObject.ssrcGroups || [])
|
|
66
|
-
.some((line) => {
|
|
64
|
+
(offerMediaObject.ssrcGroups || []).some((line) => {
|
|
67
65
|
if (line.semantics !== 'FID') {
|
|
68
66
|
return false;
|
|
69
67
|
}
|
|
@@ -76,8 +74,7 @@ function addLegacySimulcast({ offerMediaObject, numStreams }) {
|
|
|
76
74
|
return false;
|
|
77
75
|
}
|
|
78
76
|
});
|
|
79
|
-
const ssrcCnameLine = offerMediaObject.ssrcs
|
|
80
|
-
.find((line) => line.attribute === 'cname');
|
|
77
|
+
const ssrcCnameLine = offerMediaObject.ssrcs.find((line) => line.attribute === 'cname');
|
|
81
78
|
if (!ssrcCnameLine) {
|
|
82
79
|
throw new Error('a=ssrc line with cname information not found');
|
|
83
80
|
}
|
|
@@ -94,19 +91,19 @@ function addLegacySimulcast({ offerMediaObject, numStreams }) {
|
|
|
94
91
|
offerMediaObject.ssrcs = [];
|
|
95
92
|
offerMediaObject.ssrcGroups.push({
|
|
96
93
|
semantics: 'SIM',
|
|
97
|
-
ssrcs: ssrcs.join(' ')
|
|
94
|
+
ssrcs: ssrcs.join(' '),
|
|
98
95
|
});
|
|
99
96
|
for (let i = 0; i < ssrcs.length; ++i) {
|
|
100
97
|
const ssrc = ssrcs[i];
|
|
101
98
|
offerMediaObject.ssrcs.push({
|
|
102
99
|
id: ssrc,
|
|
103
100
|
attribute: 'cname',
|
|
104
|
-
value: cname
|
|
101
|
+
value: cname,
|
|
105
102
|
});
|
|
106
103
|
offerMediaObject.ssrcs.push({
|
|
107
104
|
id: ssrc,
|
|
108
105
|
attribute: 'msid',
|
|
109
|
-
value: `${streamId} ${trackId}
|
|
106
|
+
value: `${streamId} ${trackId}`,
|
|
110
107
|
});
|
|
111
108
|
}
|
|
112
109
|
for (let i = 0; i < rtxSsrcs.length; ++i) {
|
|
@@ -115,16 +112,16 @@ function addLegacySimulcast({ offerMediaObject, numStreams }) {
|
|
|
115
112
|
offerMediaObject.ssrcs.push({
|
|
116
113
|
id: rtxSsrc,
|
|
117
114
|
attribute: 'cname',
|
|
118
|
-
value: cname
|
|
115
|
+
value: cname,
|
|
119
116
|
});
|
|
120
117
|
offerMediaObject.ssrcs.push({
|
|
121
118
|
id: rtxSsrc,
|
|
122
119
|
attribute: 'msid',
|
|
123
|
-
value: `${streamId} ${trackId}
|
|
120
|
+
value: `${streamId} ${trackId}`,
|
|
124
121
|
});
|
|
125
122
|
offerMediaObject.ssrcGroups.push({
|
|
126
123
|
semantics: 'FID',
|
|
127
|
-
ssrcs: `${ssrc} ${rtxSsrc}
|
|
124
|
+
ssrcs: `${ssrc} ${rtxSsrc}`,
|
|
128
125
|
});
|
|
129
126
|
}
|
|
130
127
|
}
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
package/lib/ortc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ortc.d.ts","sourceRoot":"","sources":["../src/ortc.ts"],"names":[],"mappings":"AACA,OAAO,EACN,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,qBAAqB,EACrB,4BAA4B,EAC5B,cAAc,EACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,MAAM,kBAAkB,CAAC;AAO1B;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"ortc.d.ts","sourceRoot":"","sources":["../src/ortc.ts"],"names":[],"mappings":"AACA,OAAO,EACN,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,qBAAqB,EACrB,4BAA4B,EAC5B,cAAc,EACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,MAAM,kBAAkB,CAAC;AAO1B;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CA0BnE;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CA8E1E;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAc3D;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI,CAiCxE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAiDjE;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CA0E1E;AAED;;;;GAIG;AACH,wBAAgB,oCAAoC,CACnD,GAAG,EAAE,4BAA4B,GAC/B,IAAI,CAuCN;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC5C,QAAQ,EAAE,qBAAqB,GAC7B,IAAI,CAqCN;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAcjE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAWrE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,CAcvE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAwBnE;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC3C,MAAM,EAAE,oBAAoB,GAC1B,IAAI,CA8DN;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACzC,SAAS,EAAE,eAAe,EAC1B,UAAU,EAAE,eAAe,GACzB,GAAG,CA8GL;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACrC,uBAAuB,EAAE,GAAG,GAC1B,eAAe,CA6DjB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACtC,IAAI,EAAE,SAAS,EACf,uBAAuB,EAAE,GAAG,GAC1B,aAAa,CA8Df;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC5C,IAAI,EAAE,SAAS,EACf,uBAAuB,EAAE,GAAG,GAC1B,aAAa,CAgGf;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC3B,MAAM,EAAE,kBAAkB,EAAE,EAC5B,QAAQ,CAAC,EAAE,kBAAkB,GAC3B,kBAAkB,EAAE,CA+BtB;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC5C,kBAAkB,EAAE,aAAa,GAC/B,aAAa,CAoBf;AAED;;GAEG;AACH,wBAAgB,OAAO,CACtB,IAAI,EAAE,SAAS,EACf,uBAAuB,EAAE,GAAG,GAC1B,OAAO,CAIT;AAED;;;GAGG;AACH,wBAAgB,UAAU,CACzB,aAAa,EAAE,aAAa,EAC5B,uBAAuB,EAAE,GAAG,GAC1B,OAAO,CAaT"}
|
package/lib/ortc.js
CHANGED
|
@@ -81,7 +81,8 @@ function validateRtpCodecCapability(codec) {
|
|
|
81
81
|
// Just override kind with media component of mimeType.
|
|
82
82
|
codec.kind = mimeTypeMatch[1].toLowerCase();
|
|
83
83
|
// preferredPayloadType is optional.
|
|
84
|
-
if (codec.preferredPayloadType &&
|
|
84
|
+
if (codec.preferredPayloadType &&
|
|
85
|
+
typeof codec.preferredPayloadType !== 'number') {
|
|
85
86
|
throw new TypeError('invalid codec.preferredPayloadType');
|
|
86
87
|
}
|
|
87
88
|
// clockRate is mandatory.
|
|
@@ -369,7 +370,8 @@ function validateRtpEncodingParameters(encoding) {
|
|
|
369
370
|
encoding.dtx = false;
|
|
370
371
|
}
|
|
371
372
|
// scalabilityMode is optional.
|
|
372
|
-
if (encoding.scalabilityMode &&
|
|
373
|
+
if (encoding.scalabilityMode &&
|
|
374
|
+
typeof encoding.scalabilityMode !== 'string') {
|
|
373
375
|
throw new TypeError('invalid encoding.scalabilityMode');
|
|
374
376
|
}
|
|
375
377
|
}
|
|
@@ -477,7 +479,8 @@ function validateSctpStreamParameters(params) {
|
|
|
477
479
|
params.ordered = true;
|
|
478
480
|
}
|
|
479
481
|
// maxPacketLifeTime is optional.
|
|
480
|
-
if (params.maxPacketLifeTime &&
|
|
482
|
+
if (params.maxPacketLifeTime &&
|
|
483
|
+
typeof params.maxPacketLifeTime !== 'number') {
|
|
481
484
|
throw new TypeError('invalid params.maxPacketLifeTime');
|
|
482
485
|
}
|
|
483
486
|
// maxRetransmits is optional.
|
|
@@ -492,7 +495,8 @@ function validateSctpStreamParameters(params) {
|
|
|
492
495
|
(params.maxPacketLifeTime || params.maxRetransmits)) {
|
|
493
496
|
throw new TypeError('cannot be ordered with maxPacketLifeTime or maxRetransmits');
|
|
494
497
|
}
|
|
495
|
-
else if (!orderedGiven &&
|
|
498
|
+
else if (!orderedGiven &&
|
|
499
|
+
(params.maxPacketLifeTime || params.maxRetransmits)) {
|
|
496
500
|
params.ordered = false;
|
|
497
501
|
}
|
|
498
502
|
// label is optional.
|
|
@@ -511,15 +515,14 @@ exports.validateSctpStreamParameters = validateSctpStreamParameters;
|
|
|
511
515
|
function getExtendedRtpCapabilities(localCaps, remoteCaps) {
|
|
512
516
|
const extendedRtpCapabilities = {
|
|
513
517
|
codecs: [],
|
|
514
|
-
headerExtensions: []
|
|
518
|
+
headerExtensions: [],
|
|
515
519
|
};
|
|
516
520
|
// Match media codecs and keep the order preferred by remoteCaps.
|
|
517
521
|
for (const remoteCodec of remoteCaps.codecs || []) {
|
|
518
522
|
if (isRtxCodec(remoteCodec)) {
|
|
519
523
|
continue;
|
|
520
524
|
}
|
|
521
|
-
const matchingLocalCodec = (localCaps.codecs || [])
|
|
522
|
-
.find((localCodec) => (matchCodecs(localCodec, remoteCodec, { strict: true, modify: true })));
|
|
525
|
+
const matchingLocalCodec = (localCaps.codecs || []).find((localCodec) => matchCodecs(localCodec, remoteCodec, { strict: true, modify: true }));
|
|
523
526
|
if (!matchingLocalCodec) {
|
|
524
527
|
continue;
|
|
525
528
|
}
|
|
@@ -534,27 +537,26 @@ function getExtendedRtpCapabilities(localCaps, remoteCaps) {
|
|
|
534
537
|
remoteRtxPayloadType: undefined,
|
|
535
538
|
localParameters: matchingLocalCodec.parameters,
|
|
536
539
|
remoteParameters: remoteCodec.parameters,
|
|
537
|
-
rtcpFeedback: reduceRtcpFeedback(matchingLocalCodec, remoteCodec)
|
|
540
|
+
rtcpFeedback: reduceRtcpFeedback(matchingLocalCodec, remoteCodec),
|
|
538
541
|
};
|
|
539
542
|
extendedRtpCapabilities.codecs.push(extendedCodec);
|
|
540
543
|
}
|
|
541
544
|
// Match RTX codecs.
|
|
542
545
|
for (const extendedCodec of extendedRtpCapabilities.codecs) {
|
|
543
|
-
const matchingLocalRtxCodec = localCaps.codecs
|
|
544
|
-
.
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
.find((remoteCodec) => (isRtxCodec(remoteCodec) &&
|
|
548
|
-
remoteCodec.parameters.apt === extendedCodec.remotePayloadType));
|
|
546
|
+
const matchingLocalRtxCodec = localCaps.codecs.find((localCodec) => isRtxCodec(localCodec) &&
|
|
547
|
+
localCodec.parameters.apt === extendedCodec.localPayloadType);
|
|
548
|
+
const matchingRemoteRtxCodec = remoteCaps.codecs.find((remoteCodec) => isRtxCodec(remoteCodec) &&
|
|
549
|
+
remoteCodec.parameters.apt === extendedCodec.remotePayloadType);
|
|
549
550
|
if (matchingLocalRtxCodec && matchingRemoteRtxCodec) {
|
|
550
|
-
extendedCodec.localRtxPayloadType =
|
|
551
|
-
|
|
551
|
+
extendedCodec.localRtxPayloadType =
|
|
552
|
+
matchingLocalRtxCodec.preferredPayloadType;
|
|
553
|
+
extendedCodec.remoteRtxPayloadType =
|
|
554
|
+
matchingRemoteRtxCodec.preferredPayloadType;
|
|
552
555
|
}
|
|
553
556
|
}
|
|
554
557
|
// Match header extensions.
|
|
555
558
|
for (const remoteExt of remoteCaps.headerExtensions) {
|
|
556
|
-
const matchingLocalExt = localCaps.headerExtensions
|
|
557
|
-
.find((localExt) => (matchHeaderExtensions(localExt, remoteExt)));
|
|
559
|
+
const matchingLocalExt = localCaps.headerExtensions.find((localExt) => matchHeaderExtensions(localExt, remoteExt));
|
|
558
560
|
if (!matchingLocalExt) {
|
|
559
561
|
continue;
|
|
560
562
|
}
|
|
@@ -564,21 +566,25 @@ function getExtendedRtpCapabilities(localCaps, remoteCaps) {
|
|
|
564
566
|
sendId: matchingLocalExt.preferredId,
|
|
565
567
|
recvId: remoteExt.preferredId,
|
|
566
568
|
encrypt: matchingLocalExt.preferredEncrypt,
|
|
567
|
-
direction: 'sendrecv'
|
|
569
|
+
direction: 'sendrecv',
|
|
568
570
|
};
|
|
569
571
|
switch (remoteExt.direction) {
|
|
570
|
-
case 'sendrecv':
|
|
572
|
+
case 'sendrecv': {
|
|
571
573
|
extendedExt.direction = 'sendrecv';
|
|
572
574
|
break;
|
|
573
|
-
|
|
575
|
+
}
|
|
576
|
+
case 'recvonly': {
|
|
574
577
|
extendedExt.direction = 'sendonly';
|
|
575
578
|
break;
|
|
576
|
-
|
|
579
|
+
}
|
|
580
|
+
case 'sendonly': {
|
|
577
581
|
extendedExt.direction = 'recvonly';
|
|
578
582
|
break;
|
|
579
|
-
|
|
583
|
+
}
|
|
584
|
+
case 'inactive': {
|
|
580
585
|
extendedExt.direction = 'inactive';
|
|
581
586
|
break;
|
|
587
|
+
}
|
|
582
588
|
}
|
|
583
589
|
extendedRtpCapabilities.headerExtensions.push(extendedExt);
|
|
584
590
|
}
|
|
@@ -592,7 +598,7 @@ exports.getExtendedRtpCapabilities = getExtendedRtpCapabilities;
|
|
|
592
598
|
function getRecvRtpCapabilities(extendedRtpCapabilities) {
|
|
593
599
|
const rtpCapabilities = {
|
|
594
600
|
codecs: [],
|
|
595
|
-
headerExtensions: []
|
|
601
|
+
headerExtensions: [],
|
|
596
602
|
};
|
|
597
603
|
for (const extendedCodec of extendedRtpCapabilities.codecs) {
|
|
598
604
|
const codec = {
|
|
@@ -602,7 +608,7 @@ function getRecvRtpCapabilities(extendedRtpCapabilities) {
|
|
|
602
608
|
clockRate: extendedCodec.clockRate,
|
|
603
609
|
channels: extendedCodec.channels,
|
|
604
610
|
parameters: extendedCodec.localParameters,
|
|
605
|
-
rtcpFeedback: extendedCodec.rtcpFeedback
|
|
611
|
+
rtcpFeedback: extendedCodec.rtcpFeedback,
|
|
606
612
|
};
|
|
607
613
|
rtpCapabilities.codecs.push(codec);
|
|
608
614
|
// Add RTX codec.
|
|
@@ -615,9 +621,9 @@ function getRecvRtpCapabilities(extendedRtpCapabilities) {
|
|
|
615
621
|
preferredPayloadType: extendedCodec.remoteRtxPayloadType,
|
|
616
622
|
clockRate: extendedCodec.clockRate,
|
|
617
623
|
parameters: {
|
|
618
|
-
apt: extendedCodec.remotePayloadType
|
|
624
|
+
apt: extendedCodec.remotePayloadType,
|
|
619
625
|
},
|
|
620
|
-
rtcpFeedback: []
|
|
626
|
+
rtcpFeedback: [],
|
|
621
627
|
};
|
|
622
628
|
rtpCapabilities.codecs.push(rtxCodec);
|
|
623
629
|
// TODO: In the future, we need to add FEC, CN, etc, codecs.
|
|
@@ -633,7 +639,7 @@ function getRecvRtpCapabilities(extendedRtpCapabilities) {
|
|
|
633
639
|
uri: extendedExtension.uri,
|
|
634
640
|
preferredId: extendedExtension.recvId,
|
|
635
641
|
preferredEncrypt: extendedExtension.encrypt,
|
|
636
|
-
direction: extendedExtension.direction
|
|
642
|
+
direction: extendedExtension.direction,
|
|
637
643
|
};
|
|
638
644
|
rtpCapabilities.headerExtensions.push(ext);
|
|
639
645
|
}
|
|
@@ -650,7 +656,7 @@ function getSendingRtpParameters(kind, extendedRtpCapabilities) {
|
|
|
650
656
|
codecs: [],
|
|
651
657
|
headerExtensions: [],
|
|
652
658
|
encodings: [],
|
|
653
|
-
rtcp: {}
|
|
659
|
+
rtcp: {},
|
|
654
660
|
};
|
|
655
661
|
for (const extendedCodec of extendedRtpCapabilities.codecs) {
|
|
656
662
|
if (extendedCodec.kind !== kind) {
|
|
@@ -662,7 +668,7 @@ function getSendingRtpParameters(kind, extendedRtpCapabilities) {
|
|
|
662
668
|
clockRate: extendedCodec.clockRate,
|
|
663
669
|
channels: extendedCodec.channels,
|
|
664
670
|
parameters: extendedCodec.localParameters,
|
|
665
|
-
rtcpFeedback: extendedCodec.rtcpFeedback
|
|
671
|
+
rtcpFeedback: extendedCodec.rtcpFeedback,
|
|
666
672
|
};
|
|
667
673
|
rtpParameters.codecs.push(codec);
|
|
668
674
|
// Add RTX codec.
|
|
@@ -672,9 +678,9 @@ function getSendingRtpParameters(kind, extendedRtpCapabilities) {
|
|
|
672
678
|
payloadType: extendedCodec.localRtxPayloadType,
|
|
673
679
|
clockRate: extendedCodec.clockRate,
|
|
674
680
|
parameters: {
|
|
675
|
-
apt: extendedCodec.localPayloadType
|
|
681
|
+
apt: extendedCodec.localPayloadType,
|
|
676
682
|
},
|
|
677
|
-
rtcpFeedback: []
|
|
683
|
+
rtcpFeedback: [],
|
|
678
684
|
};
|
|
679
685
|
rtpParameters.codecs.push(rtxCodec);
|
|
680
686
|
}
|
|
@@ -690,7 +696,7 @@ function getSendingRtpParameters(kind, extendedRtpCapabilities) {
|
|
|
690
696
|
uri: extendedExtension.uri,
|
|
691
697
|
id: extendedExtension.sendId,
|
|
692
698
|
encrypt: extendedExtension.encrypt,
|
|
693
|
-
parameters: {}
|
|
699
|
+
parameters: {},
|
|
694
700
|
};
|
|
695
701
|
rtpParameters.headerExtensions.push(ext);
|
|
696
702
|
}
|
|
@@ -706,7 +712,7 @@ function getSendingRemoteRtpParameters(kind, extendedRtpCapabilities) {
|
|
|
706
712
|
codecs: [],
|
|
707
713
|
headerExtensions: [],
|
|
708
714
|
encodings: [],
|
|
709
|
-
rtcp: {}
|
|
715
|
+
rtcp: {},
|
|
710
716
|
};
|
|
711
717
|
for (const extendedCodec of extendedRtpCapabilities.codecs) {
|
|
712
718
|
if (extendedCodec.kind !== kind) {
|
|
@@ -718,7 +724,7 @@ function getSendingRemoteRtpParameters(kind, extendedRtpCapabilities) {
|
|
|
718
724
|
clockRate: extendedCodec.clockRate,
|
|
719
725
|
channels: extendedCodec.channels,
|
|
720
726
|
parameters: extendedCodec.remoteParameters,
|
|
721
|
-
rtcpFeedback: extendedCodec.rtcpFeedback
|
|
727
|
+
rtcpFeedback: extendedCodec.rtcpFeedback,
|
|
722
728
|
};
|
|
723
729
|
rtpParameters.codecs.push(codec);
|
|
724
730
|
// Add RTX codec.
|
|
@@ -728,9 +734,9 @@ function getSendingRemoteRtpParameters(kind, extendedRtpCapabilities) {
|
|
|
728
734
|
payloadType: extendedCodec.localRtxPayloadType,
|
|
729
735
|
clockRate: extendedCodec.clockRate,
|
|
730
736
|
parameters: {
|
|
731
|
-
apt: extendedCodec.localPayloadType
|
|
737
|
+
apt: extendedCodec.localPayloadType,
|
|
732
738
|
},
|
|
733
|
-
rtcpFeedback: []
|
|
739
|
+
rtcpFeedback: [],
|
|
734
740
|
};
|
|
735
741
|
rtpParameters.codecs.push(rtxCodec);
|
|
736
742
|
}
|
|
@@ -746,28 +752,26 @@ function getSendingRemoteRtpParameters(kind, extendedRtpCapabilities) {
|
|
|
746
752
|
uri: extendedExtension.uri,
|
|
747
753
|
id: extendedExtension.sendId,
|
|
748
754
|
encrypt: extendedExtension.encrypt,
|
|
749
|
-
parameters: {}
|
|
755
|
+
parameters: {},
|
|
750
756
|
};
|
|
751
757
|
rtpParameters.headerExtensions.push(ext);
|
|
752
758
|
}
|
|
753
759
|
// Reduce codecs' RTCP feedback. Use Transport-CC if available, REMB otherwise.
|
|
754
|
-
if (rtpParameters.headerExtensions.some(
|
|
760
|
+
if (rtpParameters.headerExtensions.some(ext => ext.uri ===
|
|
761
|
+
'http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01')) {
|
|
755
762
|
for (const codec of rtpParameters.codecs) {
|
|
756
|
-
codec.rtcpFeedback = (codec.rtcpFeedback || [])
|
|
757
|
-
.filter((fb) => fb.type !== 'goog-remb');
|
|
763
|
+
codec.rtcpFeedback = (codec.rtcpFeedback || []).filter((fb) => fb.type !== 'goog-remb');
|
|
758
764
|
}
|
|
759
765
|
}
|
|
760
|
-
else if (rtpParameters.headerExtensions.some(
|
|
766
|
+
else if (rtpParameters.headerExtensions.some(ext => ext.uri ===
|
|
767
|
+
'http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time')) {
|
|
761
768
|
for (const codec of rtpParameters.codecs) {
|
|
762
|
-
codec.rtcpFeedback = (codec.rtcpFeedback || [])
|
|
763
|
-
.filter((fb) => fb.type !== 'transport-cc');
|
|
769
|
+
codec.rtcpFeedback = (codec.rtcpFeedback || []).filter(fb => fb.type !== 'transport-cc');
|
|
764
770
|
}
|
|
765
771
|
}
|
|
766
772
|
else {
|
|
767
773
|
for (const codec of rtpParameters.codecs) {
|
|
768
|
-
codec.rtcpFeedback = (codec.rtcpFeedback || [])
|
|
769
|
-
.filter((fb) => (fb.type !== 'transport-cc' &&
|
|
770
|
-
fb.type !== 'goog-remb'));
|
|
774
|
+
codec.rtcpFeedback = (codec.rtcpFeedback || []).filter((fb) => fb.type !== 'transport-cc' && fb.type !== 'goog-remb');
|
|
771
775
|
}
|
|
772
776
|
}
|
|
773
777
|
return rtpParameters;
|
|
@@ -823,7 +827,7 @@ function generateProbatorRtpParameters(videoRtpParameters) {
|
|
|
823
827
|
codecs: [],
|
|
824
828
|
headerExtensions: [],
|
|
825
829
|
encodings: [{ ssrc: RTP_PROBATOR_SSRC }],
|
|
826
|
-
rtcp: { cname: 'probator' }
|
|
830
|
+
rtcp: { cname: 'probator' },
|
|
827
831
|
};
|
|
828
832
|
rtpParameters.codecs.push(videoRtpParameters.codecs[0]);
|
|
829
833
|
rtpParameters.codecs[0].payloadType = RTP_PROBATOR_CODEC_PAYLOAD_TYPE;
|
|
@@ -835,8 +839,7 @@ exports.generateProbatorRtpParameters = generateProbatorRtpParameters;
|
|
|
835
839
|
* Whether media can be sent based on the given RTP capabilities.
|
|
836
840
|
*/
|
|
837
841
|
function canSend(kind, extendedRtpCapabilities) {
|
|
838
|
-
return extendedRtpCapabilities.codecs.
|
|
839
|
-
some((codec) => codec.kind === kind);
|
|
842
|
+
return extendedRtpCapabilities.codecs.some((codec) => codec.kind === kind);
|
|
840
843
|
}
|
|
841
844
|
exports.canSend = canSend;
|
|
842
845
|
/**
|
|
@@ -850,8 +853,7 @@ function canReceive(rtpParameters, extendedRtpCapabilities) {
|
|
|
850
853
|
return false;
|
|
851
854
|
}
|
|
852
855
|
const firstMediaCodec = rtpParameters.codecs[0];
|
|
853
|
-
return extendedRtpCapabilities.codecs
|
|
854
|
-
.some((codec) => codec.remotePayloadType === firstMediaCodec.payloadType);
|
|
856
|
+
return extendedRtpCapabilities.codecs.some((codec) => codec.remotePayloadType === firstMediaCodec.payloadType);
|
|
855
857
|
}
|
|
856
858
|
exports.canReceive = canReceive;
|
|
857
859
|
function isRtxCodec(codec) {
|
|
@@ -874,49 +876,46 @@ function matchCodecs(aCodec, bCodec, { strict = false, modify = false } = {}) {
|
|
|
874
876
|
}
|
|
875
877
|
// Per codec special checks.
|
|
876
878
|
switch (aMimeType) {
|
|
877
|
-
case 'video/h264':
|
|
878
|
-
{
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
879
|
+
case 'video/h264': {
|
|
880
|
+
if (strict) {
|
|
881
|
+
const aPacketizationMode = aCodec.parameters['packetization-mode'] || 0;
|
|
882
|
+
const bPacketizationMode = bCodec.parameters['packetization-mode'] || 0;
|
|
883
|
+
if (aPacketizationMode !== bPacketizationMode) {
|
|
884
|
+
return false;
|
|
885
|
+
}
|
|
886
|
+
if (!h264.isSameProfile(aCodec.parameters, bCodec.parameters)) {
|
|
887
|
+
return false;
|
|
888
|
+
}
|
|
889
|
+
let selectedProfileLevelId;
|
|
890
|
+
try {
|
|
891
|
+
selectedProfileLevelId = h264.generateProfileLevelIdStringForAnswer(aCodec.parameters, bCodec.parameters);
|
|
892
|
+
}
|
|
893
|
+
catch (error) {
|
|
894
|
+
return false;
|
|
895
|
+
}
|
|
896
|
+
if (modify) {
|
|
897
|
+
if (selectedProfileLevelId) {
|
|
898
|
+
aCodec.parameters['profile-level-id'] = selectedProfileLevelId;
|
|
899
|
+
bCodec.parameters['profile-level-id'] = selectedProfileLevelId;
|
|
895
900
|
}
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
bCodec.parameters['profile-level-id'] = selectedProfileLevelId;
|
|
900
|
-
}
|
|
901
|
-
else {
|
|
902
|
-
delete aCodec.parameters['profile-level-id'];
|
|
903
|
-
delete bCodec.parameters['profile-level-id'];
|
|
904
|
-
}
|
|
901
|
+
else {
|
|
902
|
+
delete aCodec.parameters['profile-level-id'];
|
|
903
|
+
delete bCodec.parameters['profile-level-id'];
|
|
905
904
|
}
|
|
906
905
|
}
|
|
907
|
-
break;
|
|
908
906
|
}
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
907
|
+
break;
|
|
908
|
+
}
|
|
909
|
+
case 'video/vp9': {
|
|
910
|
+
if (strict) {
|
|
911
|
+
const aProfileId = aCodec.parameters['profile-id'] || 0;
|
|
912
|
+
const bProfileId = bCodec.parameters['profile-id'] || 0;
|
|
913
|
+
if (aProfileId !== bProfileId) {
|
|
914
|
+
return false;
|
|
917
915
|
}
|
|
918
|
-
break;
|
|
919
916
|
}
|
|
917
|
+
break;
|
|
918
|
+
}
|
|
920
919
|
}
|
|
921
920
|
return true;
|
|
922
921
|
}
|
|
@@ -932,9 +931,8 @@ function matchHeaderExtensions(aExt, bExt) {
|
|
|
932
931
|
function reduceRtcpFeedback(codecA, codecB) {
|
|
933
932
|
const reducedRtcpFeedback = [];
|
|
934
933
|
for (const aFb of codecA.rtcpFeedback || []) {
|
|
935
|
-
const matchingBFb = (codecB.rtcpFeedback || [])
|
|
936
|
-
|
|
937
|
-
(bFb.parameter === aFb.parameter || (!bFb.parameter && !aFb.parameter))));
|
|
934
|
+
const matchingBFb = (codecB.rtcpFeedback || []).find((bFb) => bFb.type === aFb.type &&
|
|
935
|
+
(bFb.parameter === aFb.parameter || (!bFb.parameter && !aFb.parameter)));
|
|
938
936
|
if (matchingBFb) {
|
|
939
937
|
reducedRtcpFeedback.push(matchingBFb);
|
|
940
938
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scalabilityModes.d.ts","sourceRoot":"","sources":["../src/scalabilityModes.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"scalabilityModes.d.ts","sourceRoot":"","sources":["../src/scalabilityModes.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GAAG;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAgB,KAAK,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,eAAe,CAc/D"}
|
package/lib/scalabilityModes.js
CHANGED
|
@@ -7,13 +7,13 @@ function parse(scalabilityMode) {
|
|
|
7
7
|
if (match) {
|
|
8
8
|
return {
|
|
9
9
|
spatialLayers: Number(match[1]),
|
|
10
|
-
temporalLayers: Number(match[2])
|
|
10
|
+
temporalLayers: Number(match[2]),
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
13
|
else {
|
|
14
14
|
return {
|
|
15
15
|
spatialLayers: 1,
|
|
16
|
-
temporalLayers: 1
|
|
16
|
+
temporalLayers: 1,
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
19
|
}
|
|
@@ -7,14 +7,14 @@ export declare function generateTransportRemoteParameters(): mediasoupClient.typ
|
|
|
7
7
|
export declare function generateProducerRemoteParameters(): {
|
|
8
8
|
id: string;
|
|
9
9
|
};
|
|
10
|
-
export declare function generateConsumerRemoteParameters({ id, codecMimeType }?: {
|
|
10
|
+
export declare function generateConsumerRemoteParameters({ id, codecMimeType, }?: {
|
|
11
11
|
id?: string;
|
|
12
12
|
codecMimeType?: string;
|
|
13
13
|
}): mediasoupClient.types.ConsumerOptions;
|
|
14
14
|
export declare function generateDataProducerRemoteParameters(): {
|
|
15
15
|
id: string;
|
|
16
16
|
};
|
|
17
|
-
export declare function generateDataConsumerRemoteParameters({ id }?: {
|
|
17
|
+
export declare function generateDataConsumerRemoteParameters({ id, }?: {
|
|
18
18
|
id?: string;
|
|
19
19
|
}): mediasoupClient.types.DataConsumerOptions;
|
|
20
20
|
//# sourceMappingURL=fakeParameters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fakeParameters.d.ts","sourceRoot":"","sources":["../../src/test/fakeParameters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,eAAe,MAAM,KAAK,CAAC;AAOvC,wBAAgB,6BAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,eAAe,CAoKrF;AAED,wBAAgB,6BAA6B,IAAI,eAAe,CAAC,KAAK,CAAC,eAAe,CAoHrF;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,CAuD1F;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,CAUlE"}
|