mediasoup-client 3.7.1 → 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 +66 -89
- 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 +74 -77
- package/lib/handlers/Chrome55.d.ts +4 -4
- package/lib/handlers/Chrome55.d.ts.map +1 -1
- package/lib/handlers/Chrome55.js +83 -80
- package/lib/handlers/Chrome67.d.ts +4 -4
- package/lib/handlers/Chrome67.d.ts.map +1 -1
- package/lib/handlers/Chrome67.js +85 -83
- package/lib/handlers/Chrome70.d.ts +4 -4
- package/lib/handlers/Chrome70.d.ts.map +1 -1
- package/lib/handlers/Chrome70.js +76 -78
- package/lib/handlers/Chrome74.d.ts +4 -4
- package/lib/handlers/Chrome74.d.ts.map +1 -1
- package/lib/handlers/Chrome74.js +75 -78
- package/lib/handlers/Edge11.d.ts +1 -1
- package/lib/handlers/Edge11.d.ts.map +1 -1
- package/lib/handlers/Edge11.js +63 -77
- 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 +75 -72
- 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 +84 -82
- package/lib/handlers/ReactNativeUnifiedPlan.d.ts +4 -4
- package/lib/handlers/ReactNativeUnifiedPlan.d.ts.map +1 -1
- package/lib/handlers/ReactNativeUnifiedPlan.js +75 -78
- package/lib/handlers/Safari11.d.ts +4 -4
- package/lib/handlers/Safari11.d.ts.map +1 -1
- package/lib/handlers/Safari11.js +84 -81
- package/lib/handlers/Safari12.d.ts +4 -4
- package/lib/handlers/Safari12.d.ts.map +1 -1
- package/lib/handlers/Safari12.js +75 -77
- 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 +293 -317
- 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 +47 -58
- 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 +98 -108
- 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,29 +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':
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
{
|
|
587
|
-
extendedExt.direction = 'inactive';
|
|
588
|
-
break;
|
|
589
|
-
}
|
|
572
|
+
case 'sendrecv': {
|
|
573
|
+
extendedExt.direction = 'sendrecv';
|
|
574
|
+
break;
|
|
575
|
+
}
|
|
576
|
+
case 'recvonly': {
|
|
577
|
+
extendedExt.direction = 'sendonly';
|
|
578
|
+
break;
|
|
579
|
+
}
|
|
580
|
+
case 'sendonly': {
|
|
581
|
+
extendedExt.direction = 'recvonly';
|
|
582
|
+
break;
|
|
583
|
+
}
|
|
584
|
+
case 'inactive': {
|
|
585
|
+
extendedExt.direction = 'inactive';
|
|
586
|
+
break;
|
|
587
|
+
}
|
|
590
588
|
}
|
|
591
589
|
extendedRtpCapabilities.headerExtensions.push(extendedExt);
|
|
592
590
|
}
|
|
@@ -600,7 +598,7 @@ exports.getExtendedRtpCapabilities = getExtendedRtpCapabilities;
|
|
|
600
598
|
function getRecvRtpCapabilities(extendedRtpCapabilities) {
|
|
601
599
|
const rtpCapabilities = {
|
|
602
600
|
codecs: [],
|
|
603
|
-
headerExtensions: []
|
|
601
|
+
headerExtensions: [],
|
|
604
602
|
};
|
|
605
603
|
for (const extendedCodec of extendedRtpCapabilities.codecs) {
|
|
606
604
|
const codec = {
|
|
@@ -610,7 +608,7 @@ function getRecvRtpCapabilities(extendedRtpCapabilities) {
|
|
|
610
608
|
clockRate: extendedCodec.clockRate,
|
|
611
609
|
channels: extendedCodec.channels,
|
|
612
610
|
parameters: extendedCodec.localParameters,
|
|
613
|
-
rtcpFeedback: extendedCodec.rtcpFeedback
|
|
611
|
+
rtcpFeedback: extendedCodec.rtcpFeedback,
|
|
614
612
|
};
|
|
615
613
|
rtpCapabilities.codecs.push(codec);
|
|
616
614
|
// Add RTX codec.
|
|
@@ -623,9 +621,9 @@ function getRecvRtpCapabilities(extendedRtpCapabilities) {
|
|
|
623
621
|
preferredPayloadType: extendedCodec.remoteRtxPayloadType,
|
|
624
622
|
clockRate: extendedCodec.clockRate,
|
|
625
623
|
parameters: {
|
|
626
|
-
apt: extendedCodec.remotePayloadType
|
|
624
|
+
apt: extendedCodec.remotePayloadType,
|
|
627
625
|
},
|
|
628
|
-
rtcpFeedback: []
|
|
626
|
+
rtcpFeedback: [],
|
|
629
627
|
};
|
|
630
628
|
rtpCapabilities.codecs.push(rtxCodec);
|
|
631
629
|
// TODO: In the future, we need to add FEC, CN, etc, codecs.
|
|
@@ -641,7 +639,7 @@ function getRecvRtpCapabilities(extendedRtpCapabilities) {
|
|
|
641
639
|
uri: extendedExtension.uri,
|
|
642
640
|
preferredId: extendedExtension.recvId,
|
|
643
641
|
preferredEncrypt: extendedExtension.encrypt,
|
|
644
|
-
direction: extendedExtension.direction
|
|
642
|
+
direction: extendedExtension.direction,
|
|
645
643
|
};
|
|
646
644
|
rtpCapabilities.headerExtensions.push(ext);
|
|
647
645
|
}
|
|
@@ -658,7 +656,7 @@ function getSendingRtpParameters(kind, extendedRtpCapabilities) {
|
|
|
658
656
|
codecs: [],
|
|
659
657
|
headerExtensions: [],
|
|
660
658
|
encodings: [],
|
|
661
|
-
rtcp: {}
|
|
659
|
+
rtcp: {},
|
|
662
660
|
};
|
|
663
661
|
for (const extendedCodec of extendedRtpCapabilities.codecs) {
|
|
664
662
|
if (extendedCodec.kind !== kind) {
|
|
@@ -670,7 +668,7 @@ function getSendingRtpParameters(kind, extendedRtpCapabilities) {
|
|
|
670
668
|
clockRate: extendedCodec.clockRate,
|
|
671
669
|
channels: extendedCodec.channels,
|
|
672
670
|
parameters: extendedCodec.localParameters,
|
|
673
|
-
rtcpFeedback: extendedCodec.rtcpFeedback
|
|
671
|
+
rtcpFeedback: extendedCodec.rtcpFeedback,
|
|
674
672
|
};
|
|
675
673
|
rtpParameters.codecs.push(codec);
|
|
676
674
|
// Add RTX codec.
|
|
@@ -680,9 +678,9 @@ function getSendingRtpParameters(kind, extendedRtpCapabilities) {
|
|
|
680
678
|
payloadType: extendedCodec.localRtxPayloadType,
|
|
681
679
|
clockRate: extendedCodec.clockRate,
|
|
682
680
|
parameters: {
|
|
683
|
-
apt: extendedCodec.localPayloadType
|
|
681
|
+
apt: extendedCodec.localPayloadType,
|
|
684
682
|
},
|
|
685
|
-
rtcpFeedback: []
|
|
683
|
+
rtcpFeedback: [],
|
|
686
684
|
};
|
|
687
685
|
rtpParameters.codecs.push(rtxCodec);
|
|
688
686
|
}
|
|
@@ -698,7 +696,7 @@ function getSendingRtpParameters(kind, extendedRtpCapabilities) {
|
|
|
698
696
|
uri: extendedExtension.uri,
|
|
699
697
|
id: extendedExtension.sendId,
|
|
700
698
|
encrypt: extendedExtension.encrypt,
|
|
701
|
-
parameters: {}
|
|
699
|
+
parameters: {},
|
|
702
700
|
};
|
|
703
701
|
rtpParameters.headerExtensions.push(ext);
|
|
704
702
|
}
|
|
@@ -714,7 +712,7 @@ function getSendingRemoteRtpParameters(kind, extendedRtpCapabilities) {
|
|
|
714
712
|
codecs: [],
|
|
715
713
|
headerExtensions: [],
|
|
716
714
|
encodings: [],
|
|
717
|
-
rtcp: {}
|
|
715
|
+
rtcp: {},
|
|
718
716
|
};
|
|
719
717
|
for (const extendedCodec of extendedRtpCapabilities.codecs) {
|
|
720
718
|
if (extendedCodec.kind !== kind) {
|
|
@@ -726,7 +724,7 @@ function getSendingRemoteRtpParameters(kind, extendedRtpCapabilities) {
|
|
|
726
724
|
clockRate: extendedCodec.clockRate,
|
|
727
725
|
channels: extendedCodec.channels,
|
|
728
726
|
parameters: extendedCodec.remoteParameters,
|
|
729
|
-
rtcpFeedback: extendedCodec.rtcpFeedback
|
|
727
|
+
rtcpFeedback: extendedCodec.rtcpFeedback,
|
|
730
728
|
};
|
|
731
729
|
rtpParameters.codecs.push(codec);
|
|
732
730
|
// Add RTX codec.
|
|
@@ -736,9 +734,9 @@ function getSendingRemoteRtpParameters(kind, extendedRtpCapabilities) {
|
|
|
736
734
|
payloadType: extendedCodec.localRtxPayloadType,
|
|
737
735
|
clockRate: extendedCodec.clockRate,
|
|
738
736
|
parameters: {
|
|
739
|
-
apt: extendedCodec.localPayloadType
|
|
737
|
+
apt: extendedCodec.localPayloadType,
|
|
740
738
|
},
|
|
741
|
-
rtcpFeedback: []
|
|
739
|
+
rtcpFeedback: [],
|
|
742
740
|
};
|
|
743
741
|
rtpParameters.codecs.push(rtxCodec);
|
|
744
742
|
}
|
|
@@ -754,28 +752,26 @@ function getSendingRemoteRtpParameters(kind, extendedRtpCapabilities) {
|
|
|
754
752
|
uri: extendedExtension.uri,
|
|
755
753
|
id: extendedExtension.sendId,
|
|
756
754
|
encrypt: extendedExtension.encrypt,
|
|
757
|
-
parameters: {}
|
|
755
|
+
parameters: {},
|
|
758
756
|
};
|
|
759
757
|
rtpParameters.headerExtensions.push(ext);
|
|
760
758
|
}
|
|
761
759
|
// Reduce codecs' RTCP feedback. Use Transport-CC if available, REMB otherwise.
|
|
762
|
-
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')) {
|
|
763
762
|
for (const codec of rtpParameters.codecs) {
|
|
764
|
-
codec.rtcpFeedback = (codec.rtcpFeedback || [])
|
|
765
|
-
.filter((fb) => fb.type !== 'goog-remb');
|
|
763
|
+
codec.rtcpFeedback = (codec.rtcpFeedback || []).filter((fb) => fb.type !== 'goog-remb');
|
|
766
764
|
}
|
|
767
765
|
}
|
|
768
|
-
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')) {
|
|
769
768
|
for (const codec of rtpParameters.codecs) {
|
|
770
|
-
codec.rtcpFeedback = (codec.rtcpFeedback || [])
|
|
771
|
-
.filter((fb) => fb.type !== 'transport-cc');
|
|
769
|
+
codec.rtcpFeedback = (codec.rtcpFeedback || []).filter(fb => fb.type !== 'transport-cc');
|
|
772
770
|
}
|
|
773
771
|
}
|
|
774
772
|
else {
|
|
775
773
|
for (const codec of rtpParameters.codecs) {
|
|
776
|
-
codec.rtcpFeedback = (codec.rtcpFeedback || [])
|
|
777
|
-
.filter((fb) => (fb.type !== 'transport-cc' &&
|
|
778
|
-
fb.type !== 'goog-remb'));
|
|
774
|
+
codec.rtcpFeedback = (codec.rtcpFeedback || []).filter((fb) => fb.type !== 'transport-cc' && fb.type !== 'goog-remb');
|
|
779
775
|
}
|
|
780
776
|
}
|
|
781
777
|
return rtpParameters;
|
|
@@ -831,7 +827,7 @@ function generateProbatorRtpParameters(videoRtpParameters) {
|
|
|
831
827
|
codecs: [],
|
|
832
828
|
headerExtensions: [],
|
|
833
829
|
encodings: [{ ssrc: RTP_PROBATOR_SSRC }],
|
|
834
|
-
rtcp: { cname: 'probator' }
|
|
830
|
+
rtcp: { cname: 'probator' },
|
|
835
831
|
};
|
|
836
832
|
rtpParameters.codecs.push(videoRtpParameters.codecs[0]);
|
|
837
833
|
rtpParameters.codecs[0].payloadType = RTP_PROBATOR_CODEC_PAYLOAD_TYPE;
|
|
@@ -843,8 +839,7 @@ exports.generateProbatorRtpParameters = generateProbatorRtpParameters;
|
|
|
843
839
|
* Whether media can be sent based on the given RTP capabilities.
|
|
844
840
|
*/
|
|
845
841
|
function canSend(kind, extendedRtpCapabilities) {
|
|
846
|
-
return extendedRtpCapabilities.codecs.
|
|
847
|
-
some((codec) => codec.kind === kind);
|
|
842
|
+
return extendedRtpCapabilities.codecs.some((codec) => codec.kind === kind);
|
|
848
843
|
}
|
|
849
844
|
exports.canSend = canSend;
|
|
850
845
|
/**
|
|
@@ -858,8 +853,7 @@ function canReceive(rtpParameters, extendedRtpCapabilities) {
|
|
|
858
853
|
return false;
|
|
859
854
|
}
|
|
860
855
|
const firstMediaCodec = rtpParameters.codecs[0];
|
|
861
|
-
return extendedRtpCapabilities.codecs
|
|
862
|
-
.some((codec) => codec.remotePayloadType === firstMediaCodec.payloadType);
|
|
856
|
+
return extendedRtpCapabilities.codecs.some((codec) => codec.remotePayloadType === firstMediaCodec.payloadType);
|
|
863
857
|
}
|
|
864
858
|
exports.canReceive = canReceive;
|
|
865
859
|
function isRtxCodec(codec) {
|
|
@@ -882,49 +876,46 @@ function matchCodecs(aCodec, bCodec, { strict = false, modify = false } = {}) {
|
|
|
882
876
|
}
|
|
883
877
|
// Per codec special checks.
|
|
884
878
|
switch (aMimeType) {
|
|
885
|
-
case 'video/h264':
|
|
886
|
-
{
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
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;
|
|
903
900
|
}
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
bCodec.parameters['profile-level-id'] = selectedProfileLevelId;
|
|
908
|
-
}
|
|
909
|
-
else {
|
|
910
|
-
delete aCodec.parameters['profile-level-id'];
|
|
911
|
-
delete bCodec.parameters['profile-level-id'];
|
|
912
|
-
}
|
|
901
|
+
else {
|
|
902
|
+
delete aCodec.parameters['profile-level-id'];
|
|
903
|
+
delete bCodec.parameters['profile-level-id'];
|
|
913
904
|
}
|
|
914
905
|
}
|
|
915
|
-
break;
|
|
916
906
|
}
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
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;
|
|
925
915
|
}
|
|
926
|
-
break;
|
|
927
916
|
}
|
|
917
|
+
break;
|
|
918
|
+
}
|
|
928
919
|
}
|
|
929
920
|
return true;
|
|
930
921
|
}
|
|
@@ -940,9 +931,8 @@ function matchHeaderExtensions(aExt, bExt) {
|
|
|
940
931
|
function reduceRtcpFeedback(codecA, codecB) {
|
|
941
932
|
const reducedRtcpFeedback = [];
|
|
942
933
|
for (const aFb of codecA.rtcpFeedback || []) {
|
|
943
|
-
const matchingBFb = (codecB.rtcpFeedback || [])
|
|
944
|
-
|
|
945
|
-
(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)));
|
|
946
936
|
if (matchingBFb) {
|
|
947
937
|
reducedRtcpFeedback.push(matchingBFb);
|
|
948
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"}
|