mediasoup-client 3.7.1 → 3.7.3
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 +21 -11
- package/lib/Transport.d.ts.map +1 -1
- package/lib/Transport.js +73 -55
- 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 +79 -78
- package/lib/handlers/Chrome55.d.ts +4 -4
- package/lib/handlers/Chrome55.d.ts.map +1 -1
- package/lib/handlers/Chrome55.js +88 -81
- package/lib/handlers/Chrome67.d.ts +4 -4
- package/lib/handlers/Chrome67.d.ts.map +1 -1
- package/lib/handlers/Chrome67.js +90 -84
- package/lib/handlers/Chrome70.d.ts +4 -4
- package/lib/handlers/Chrome70.d.ts.map +1 -1
- package/lib/handlers/Chrome70.js +81 -79
- package/lib/handlers/Chrome74.d.ts +4 -4
- package/lib/handlers/Chrome74.d.ts.map +1 -1
- package/lib/handlers/Chrome74.js +80 -79
- package/lib/handlers/Edge11.d.ts +1 -1
- package/lib/handlers/Edge11.d.ts.map +1 -1
- package/lib/handlers/Edge11.js +66 -78
- package/lib/handlers/FakeHandler.d.ts +3 -3
- package/lib/handlers/FakeHandler.d.ts.map +1 -1
- package/lib/handlers/FakeHandler.js +20 -22
- package/lib/handlers/Firefox60.d.ts +4 -4
- package/lib/handlers/Firefox60.d.ts.map +1 -1
- package/lib/handlers/Firefox60.js +80 -73
- package/lib/handlers/HandlerInterface.d.ts +1 -0
- 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 +89 -83
- package/lib/handlers/ReactNativeUnifiedPlan.d.ts +4 -4
- package/lib/handlers/ReactNativeUnifiedPlan.d.ts.map +1 -1
- package/lib/handlers/ReactNativeUnifiedPlan.js +80 -79
- package/lib/handlers/Safari11.d.ts +4 -4
- package/lib/handlers/Safari11.d.ts.map +1 -1
- package/lib/handlers/Safari11.js +89 -82
- package/lib/handlers/Safari12.d.ts +4 -4
- package/lib/handlers/Safari12.d.ts.map +1 -1
- package/lib/handlers/Safari12.js +80 -78
- 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 +296 -318
- 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 +8 -5
- package/lib/handlers/sdp/commonUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/commonUtils.js +71 -59
- 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 +4 -58
- package/lib/ortc.d.ts.map +1 -1
- package/lib/ortc.js +432 -478
- package/lib/scalabilityModes.d.ts.map +1 -1
- package/lib/scalabilityModes.js +2 -2
- package/lib/{tests → test}/fakeParameters.d.ts +3 -2
- package/lib/test/fakeParameters.d.ts.map +1 -0
- package/lib/test/fakeParameters.js +654 -0
- package/lib/{tests → test}/test.d.ts.map +1 -1
- package/lib/{tests → test}/test.js +469 -496
- 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 +75 -103
- 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
|
@@ -14,7 +14,7 @@ export declare class RemoteSdp {
|
|
|
14
14
|
private readonly _midToIndex;
|
|
15
15
|
private _firstMid?;
|
|
16
16
|
private readonly _sdpObject;
|
|
17
|
-
constructor({ iceParameters, iceCandidates, dtlsParameters, sctpParameters, plainRtpParameters, planB }: {
|
|
17
|
+
constructor({ iceParameters, iceCandidates, dtlsParameters, sctpParameters, plainRtpParameters, planB, }: {
|
|
18
18
|
iceParameters?: IceParameters;
|
|
19
19
|
iceCandidates?: IceCandidate[];
|
|
20
20
|
dtlsParameters?: DtlsParameters;
|
|
@@ -28,7 +28,7 @@ export declare class RemoteSdp {
|
|
|
28
28
|
idx: number;
|
|
29
29
|
reuseMid?: string;
|
|
30
30
|
};
|
|
31
|
-
send({ offerMediaObject, reuseMid, offerRtpParameters, answerRtpParameters, codecOptions, extmapAllowMixed }: {
|
|
31
|
+
send({ offerMediaObject, reuseMid, offerRtpParameters, answerRtpParameters, codecOptions, extmapAllowMixed, }: {
|
|
32
32
|
offerMediaObject: any;
|
|
33
33
|
reuseMid?: string;
|
|
34
34
|
offerRtpParameters: RtpParameters;
|
|
@@ -36,7 +36,7 @@ export declare class RemoteSdp {
|
|
|
36
36
|
codecOptions?: ProducerCodecOptions;
|
|
37
37
|
extmapAllowMixed?: boolean;
|
|
38
38
|
}): void;
|
|
39
|
-
receive({ mid, kind, offerRtpParameters, streamId, trackId }: {
|
|
39
|
+
receive({ mid, kind, offerRtpParameters, streamId, trackId, }: {
|
|
40
40
|
mid: string;
|
|
41
41
|
kind: MediaKind;
|
|
42
42
|
offerRtpParameters: RtpParameters;
|
|
@@ -56,14 +56,14 @@ export declare class RemoteSdp {
|
|
|
56
56
|
*/
|
|
57
57
|
closeMediaSection(mid: string): boolean;
|
|
58
58
|
muxMediaSectionSimulcast(mid: string, encodings: RTCRtpEncodingParameters[]): void;
|
|
59
|
-
planBStopReceiving({ mid, offerRtpParameters }: {
|
|
59
|
+
planBStopReceiving({ mid, offerRtpParameters, }: {
|
|
60
60
|
mid: string;
|
|
61
61
|
offerRtpParameters: RtpParameters;
|
|
62
62
|
}): void;
|
|
63
63
|
sendSctpAssociation({ offerMediaObject }: {
|
|
64
64
|
offerMediaObject: any;
|
|
65
65
|
}): void;
|
|
66
|
-
receiveSctpAssociation({ oldDataChannelSpec }?: {
|
|
66
|
+
receiveSctpAssociation({ oldDataChannelSpec, }?: {
|
|
67
67
|
oldDataChannelSpec?: boolean;
|
|
68
68
|
}): void;
|
|
69
69
|
getSdp(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoteSdp.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdp/RemoteSdp.ts"],"names":[],"mappings":"AAEA,OAAO,EACN,YAAY,EAGZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACN,aAAa,EACb,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,kBAAkB,EAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAItD,qBAAa,SAAS;
|
|
1
|
+
{"version":3,"file":"RemoteSdp.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdp/RemoteSdp.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,7 +29,7 @@ const Logger_1 = require("../../Logger");
|
|
|
29
29
|
const MediaSection_1 = require("./MediaSection");
|
|
30
30
|
const logger = new Logger_1.Logger('RemoteSdp');
|
|
31
31
|
class RemoteSdp {
|
|
32
|
-
constructor({ iceParameters, iceCandidates, dtlsParameters, sctpParameters, plainRtpParameters, planB = false }) {
|
|
32
|
+
constructor({ iceParameters, iceCandidates, dtlsParameters, sctpParameters, plainRtpParameters, planB = false, }) {
|
|
33
33
|
// MediaSection instances with same order as in the SDP.
|
|
34
34
|
this._mediaSections = [];
|
|
35
35
|
// MediaSection indices indexed by MID.
|
|
@@ -40,21 +40,20 @@ class RemoteSdp {
|
|
|
40
40
|
this._sctpParameters = sctpParameters;
|
|
41
41
|
this._plainRtpParameters = plainRtpParameters;
|
|
42
42
|
this._planB = planB;
|
|
43
|
-
this._sdpObject =
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
};
|
|
43
|
+
this._sdpObject = {
|
|
44
|
+
version: 0,
|
|
45
|
+
origin: {
|
|
46
|
+
address: '0.0.0.0',
|
|
47
|
+
ipVer: 4,
|
|
48
|
+
netType: 'IN',
|
|
49
|
+
sessionId: 10000,
|
|
50
|
+
sessionVersion: 0,
|
|
51
|
+
username: 'mediasoup-client',
|
|
52
|
+
},
|
|
53
|
+
name: '-',
|
|
54
|
+
timing: { start: 0, stop: 0 },
|
|
55
|
+
media: [],
|
|
56
|
+
};
|
|
58
57
|
// If ICE parameters are given, add ICE-Lite indicator.
|
|
59
58
|
if (iceParameters && iceParameters.iceLite) {
|
|
60
59
|
this._sdpObject.icelite = 'ice-lite';
|
|
@@ -64,11 +63,10 @@ class RemoteSdp {
|
|
|
64
63
|
this._sdpObject.msidSemantic = { semantic: 'WMS', token: '*' };
|
|
65
64
|
// NOTE: We take the latest fingerprint.
|
|
66
65
|
const numFingerprints = this._dtlsParameters.fingerprints.length;
|
|
67
|
-
this._sdpObject.fingerprint =
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
};
|
|
66
|
+
this._sdpObject.fingerprint = {
|
|
67
|
+
type: dtlsParameters.fingerprints[numFingerprints - 1].algorithm,
|
|
68
|
+
hash: dtlsParameters.fingerprints[numFingerprints - 1].value,
|
|
69
|
+
};
|
|
72
70
|
this._sdpObject.groups = [{ type: 'BUNDLE', mids: '' }];
|
|
73
71
|
}
|
|
74
72
|
// If there are plain RPT parameters, override SDP origin.
|
|
@@ -103,7 +101,7 @@ class RemoteSdp {
|
|
|
103
101
|
// If no closed media section is found, return next one.
|
|
104
102
|
return { idx: this._mediaSections.length };
|
|
105
103
|
}
|
|
106
|
-
send({ offerMediaObject, reuseMid, offerRtpParameters, answerRtpParameters, codecOptions, extmapAllowMixed = false }) {
|
|
104
|
+
send({ offerMediaObject, reuseMid, offerRtpParameters, answerRtpParameters, codecOptions, extmapAllowMixed = false, }) {
|
|
107
105
|
const mediaSection = new MediaSection_1.AnswerMediaSection({
|
|
108
106
|
iceParameters: this._iceParameters,
|
|
109
107
|
iceCandidates: this._iceCandidates,
|
|
@@ -114,7 +112,7 @@ class RemoteSdp {
|
|
|
114
112
|
offerRtpParameters,
|
|
115
113
|
answerRtpParameters,
|
|
116
114
|
codecOptions,
|
|
117
|
-
extmapAllowMixed
|
|
115
|
+
extmapAllowMixed,
|
|
118
116
|
});
|
|
119
117
|
// Unified-Plan with closed media section replacement.
|
|
120
118
|
if (reuseMid) {
|
|
@@ -129,7 +127,7 @@ class RemoteSdp {
|
|
|
129
127
|
this._replaceMediaSection(mediaSection);
|
|
130
128
|
}
|
|
131
129
|
}
|
|
132
|
-
receive({ mid, kind, offerRtpParameters, streamId, trackId }) {
|
|
130
|
+
receive({ mid, kind, offerRtpParameters, streamId, trackId, }) {
|
|
133
131
|
const idx = this._midToIndex.get(mid);
|
|
134
132
|
let mediaSection;
|
|
135
133
|
if (idx !== undefined) {
|
|
@@ -147,11 +145,11 @@ class RemoteSdp {
|
|
|
147
145
|
kind,
|
|
148
146
|
offerRtpParameters,
|
|
149
147
|
streamId,
|
|
150
|
-
trackId
|
|
148
|
+
trackId,
|
|
151
149
|
});
|
|
152
150
|
// Let's try to recycle a closed media section (if any).
|
|
153
151
|
// NOTE: Yes, we can recycle a closed m=audio section with a new m=video.
|
|
154
|
-
const oldMediaSection = this._mediaSections.find(
|
|
152
|
+
const oldMediaSection = this._mediaSections.find(m => m.closed);
|
|
155
153
|
if (oldMediaSection) {
|
|
156
154
|
this._replaceMediaSection(mediaSection, oldMediaSection.mid);
|
|
157
155
|
}
|
|
@@ -207,7 +205,7 @@ class RemoteSdp {
|
|
|
207
205
|
mediaSection.muxSimulcastStreams(encodings);
|
|
208
206
|
this._replaceMediaSection(mediaSection);
|
|
209
207
|
}
|
|
210
|
-
planBStopReceiving({ mid, offerRtpParameters }) {
|
|
208
|
+
planBStopReceiving({ mid, offerRtpParameters, }) {
|
|
211
209
|
const mediaSection = this._findMediaSection(mid);
|
|
212
210
|
mediaSection.planBStopReceiving({ offerRtpParameters });
|
|
213
211
|
this._replaceMediaSection(mediaSection);
|
|
@@ -219,11 +217,11 @@ class RemoteSdp {
|
|
|
219
217
|
dtlsParameters: this._dtlsParameters,
|
|
220
218
|
sctpParameters: this._sctpParameters,
|
|
221
219
|
plainRtpParameters: this._plainRtpParameters,
|
|
222
|
-
offerMediaObject
|
|
220
|
+
offerMediaObject,
|
|
223
221
|
});
|
|
224
222
|
this._addMediaSection(mediaSection);
|
|
225
223
|
}
|
|
226
|
-
receiveSctpAssociation({ oldDataChannelSpec = false } = {}) {
|
|
224
|
+
receiveSctpAssociation({ oldDataChannelSpec = false, } = {}) {
|
|
227
225
|
const mediaSection = new MediaSection_1.OfferMediaSection({
|
|
228
226
|
iceParameters: this._iceParameters,
|
|
229
227
|
iceCandidates: this._iceCandidates,
|
|
@@ -232,7 +230,7 @@ class RemoteSdp {
|
|
|
232
230
|
plainRtpParameters: this._plainRtpParameters,
|
|
233
231
|
mid: 'datachannel',
|
|
234
232
|
kind: 'application',
|
|
235
|
-
oldDataChannelSpec
|
|
233
|
+
oldDataChannelSpec,
|
|
236
234
|
});
|
|
237
235
|
this._addMediaSection(mediaSection);
|
|
238
236
|
}
|
|
@@ -1,23 +1,26 @@
|
|
|
1
|
-
import { DtlsParameters } from '../../Transport';
|
|
1
|
+
import { IceParameters, DtlsParameters } from '../../Transport';
|
|
2
2
|
import { RtpCapabilities, RtpParameters } from '../../RtpParameters';
|
|
3
3
|
/**
|
|
4
4
|
* This function must be called with an SDP with 1 m=audio and 1 m=video
|
|
5
5
|
* sections.
|
|
6
6
|
*/
|
|
7
|
-
export declare function extractRtpCapabilities({ sdpObject }: {
|
|
7
|
+
export declare function extractRtpCapabilities({ sdpObject, }: {
|
|
8
8
|
sdpObject: any;
|
|
9
9
|
}): RtpCapabilities;
|
|
10
|
-
export declare function
|
|
10
|
+
export declare function extractIceParameters({ sdpObject, }: {
|
|
11
|
+
sdpObject: any;
|
|
12
|
+
}): IceParameters;
|
|
13
|
+
export declare function extractDtlsParameters({ sdpObject, }: {
|
|
11
14
|
sdpObject: any;
|
|
12
15
|
}): DtlsParameters;
|
|
13
|
-
export declare function getCname({ offerMediaObject }: {
|
|
16
|
+
export declare function getCname({ offerMediaObject, }: {
|
|
14
17
|
offerMediaObject: any;
|
|
15
18
|
}): string;
|
|
16
19
|
/**
|
|
17
20
|
* Apply codec parameters in the given SDP m= section answer based on the
|
|
18
21
|
* given RTP parameters of an offer.
|
|
19
22
|
*/
|
|
20
|
-
export declare function applyCodecParameters({ offerRtpParameters, answerMediaObject }: {
|
|
23
|
+
export declare function applyCodecParameters({ offerRtpParameters, answerMediaObject, }: {
|
|
21
24
|
offerRtpParameters: RtpParameters;
|
|
22
25
|
answerMediaObject: any;
|
|
23
26
|
}): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commonUtils.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdp/commonUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAY,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"commonUtils.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdp/commonUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAY,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EACN,eAAe,EAGf,aAAa,EAEb,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,EACtC,SAAS,GACT,EAAE;IACF,SAAS,EAAE,GAAG,CAAC;CACf,GAAG,eAAe,CA8HlB;AAED,wBAAgB,oBAAoB,CAAC,EACpC,SAAS,GACT,EAAE;IACF,SAAS,EAAE,GAAG,CAAC;CACf,GAAG,aAAa,CA2BhB;AAED,wBAAgB,qBAAqB,CAAC,EACrC,SAAS,GACT,EAAE;IACF,SAAS,EAAE,GAAG,CAAC;CACf,GAAG,cAAc,CAsDjB;AAED,wBAAgB,QAAQ,CAAC,EACxB,gBAAgB,GAChB,EAAE;IACF,gBAAgB,EAAE,GAAG,CAAC;CACtB,GAAG,MAAM,CAUT;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EACpC,kBAAkB,EAClB,iBAAiB,GACjB,EAAE;IACF,kBAAkB,EAAE,aAAa,CAAC;IAClC,iBAAiB,EAAE,GAAG,CAAC;CACvB,GAAG,IAAI,CAsDP"}
|
|
@@ -23,13 +23,13 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.applyCodecParameters = exports.getCname = exports.extractDtlsParameters = exports.extractRtpCapabilities = void 0;
|
|
26
|
+
exports.applyCodecParameters = exports.getCname = exports.extractDtlsParameters = exports.extractIceParameters = exports.extractRtpCapabilities = void 0;
|
|
27
27
|
const sdpTransform = __importStar(require("sdp-transform"));
|
|
28
28
|
/**
|
|
29
29
|
* This function must be called with an SDP with 1 m=audio and 1 m=video
|
|
30
30
|
* sections.
|
|
31
31
|
*/
|
|
32
|
-
function extractRtpCapabilities({ sdpObject }) {
|
|
32
|
+
function extractRtpCapabilities({ sdpObject, }) {
|
|
33
33
|
// Map of RtpCodecParameters indexed by payload type.
|
|
34
34
|
const codecsMap = new Map();
|
|
35
35
|
// Array of RtpHeaderExtensions.
|
|
@@ -40,26 +40,23 @@ function extractRtpCapabilities({ sdpObject }) {
|
|
|
40
40
|
for (const m of sdpObject.media) {
|
|
41
41
|
const kind = m.type;
|
|
42
42
|
switch (kind) {
|
|
43
|
-
case 'audio':
|
|
44
|
-
{
|
|
45
|
-
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
gotAudio = true;
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
51
|
-
case 'video':
|
|
52
|
-
{
|
|
53
|
-
if (gotVideo) {
|
|
54
|
-
continue;
|
|
55
|
-
}
|
|
56
|
-
gotVideo = true;
|
|
57
|
-
break;
|
|
43
|
+
case 'audio': {
|
|
44
|
+
if (gotAudio) {
|
|
45
|
+
continue;
|
|
58
46
|
}
|
|
59
|
-
|
|
60
|
-
|
|
47
|
+
gotAudio = true;
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
case 'video': {
|
|
51
|
+
if (gotVideo) {
|
|
61
52
|
continue;
|
|
62
53
|
}
|
|
54
|
+
gotVideo = true;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
default: {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
63
60
|
}
|
|
64
61
|
// Get codecs.
|
|
65
62
|
for (const rtp of m.rtp) {
|
|
@@ -70,7 +67,7 @@ function extractRtpCapabilities({ sdpObject }) {
|
|
|
70
67
|
clockRate: rtp.rate,
|
|
71
68
|
channels: rtp.encoding,
|
|
72
69
|
parameters: {},
|
|
73
|
-
rtcpFeedback: []
|
|
70
|
+
rtcpFeedback: [],
|
|
74
71
|
};
|
|
75
72
|
codecsMap.set(codec.preferredPayloadType, codec);
|
|
76
73
|
}
|
|
@@ -91,7 +88,7 @@ function extractRtpCapabilities({ sdpObject }) {
|
|
|
91
88
|
for (const fb of m.rtcpFb || []) {
|
|
92
89
|
const feedback = {
|
|
93
90
|
type: fb.type,
|
|
94
|
-
parameter: fb.subtype
|
|
91
|
+
parameter: fb.subtype,
|
|
95
92
|
};
|
|
96
93
|
if (!feedback.parameter) {
|
|
97
94
|
delete feedback.parameter;
|
|
@@ -124,24 +121,46 @@ function extractRtpCapabilities({ sdpObject }) {
|
|
|
124
121
|
const headerExtension = {
|
|
125
122
|
kind: kind,
|
|
126
123
|
uri: ext.uri,
|
|
127
|
-
preferredId: ext.value
|
|
124
|
+
preferredId: ext.value,
|
|
128
125
|
};
|
|
129
126
|
headerExtensions.push(headerExtension);
|
|
130
127
|
}
|
|
131
128
|
}
|
|
132
129
|
const rtpCapabilities = {
|
|
133
130
|
codecs: Array.from(codecsMap.values()),
|
|
134
|
-
headerExtensions: headerExtensions
|
|
131
|
+
headerExtensions: headerExtensions,
|
|
135
132
|
};
|
|
136
133
|
return rtpCapabilities;
|
|
137
134
|
}
|
|
138
135
|
exports.extractRtpCapabilities = extractRtpCapabilities;
|
|
139
|
-
function
|
|
136
|
+
function extractIceParameters({ sdpObject, }) {
|
|
137
|
+
let usernameFragment = sdpObject.iceUfrag;
|
|
138
|
+
let password = sdpObject.icePwd;
|
|
139
|
+
if (!usernameFragment || !password) {
|
|
140
|
+
const mediaObject = (sdpObject.media || []).find((m) => m.port !== 0);
|
|
141
|
+
if (mediaObject) {
|
|
142
|
+
usernameFragment ?? (usernameFragment = mediaObject.iceUfrag);
|
|
143
|
+
password ?? (password = mediaObject.icePwd);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (!usernameFragment) {
|
|
147
|
+
throw new Error('no a=iceUfrag found at SDP session or media level');
|
|
148
|
+
}
|
|
149
|
+
else if (!password) {
|
|
150
|
+
throw new Error('no a=icePwd found at SDP session or media level');
|
|
151
|
+
}
|
|
152
|
+
const iceParameters = {
|
|
153
|
+
usernameFragment,
|
|
154
|
+
password,
|
|
155
|
+
};
|
|
156
|
+
return iceParameters;
|
|
157
|
+
}
|
|
158
|
+
exports.extractIceParameters = extractIceParameters;
|
|
159
|
+
function extractDtlsParameters({ sdpObject, }) {
|
|
140
160
|
let setup = sdpObject.setup;
|
|
141
161
|
let fingerprint = sdpObject.fingerprint;
|
|
142
162
|
if (!setup || !fingerprint) {
|
|
143
|
-
const mediaObject = (sdpObject.media || [])
|
|
144
|
-
.find((m) => (m.port !== 0));
|
|
163
|
+
const mediaObject = (sdpObject.media || []).find((m) => m.port !== 0);
|
|
145
164
|
if (mediaObject) {
|
|
146
165
|
setup ?? (setup = mediaObject.setup);
|
|
147
166
|
fingerprint ?? (fingerprint = mediaObject.fingerprint);
|
|
@@ -155,37 +174,33 @@ function extractDtlsParameters({ sdpObject }) {
|
|
|
155
174
|
}
|
|
156
175
|
let role;
|
|
157
176
|
switch (setup) {
|
|
158
|
-
case 'active':
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
role = 'auto';
|
|
171
|
-
break;
|
|
172
|
-
}
|
|
177
|
+
case 'active': {
|
|
178
|
+
role = 'client';
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
case 'passive': {
|
|
182
|
+
role = 'server';
|
|
183
|
+
break;
|
|
184
|
+
}
|
|
185
|
+
case 'actpass': {
|
|
186
|
+
role = 'auto';
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
173
189
|
}
|
|
174
190
|
const dtlsParameters = {
|
|
175
191
|
role,
|
|
176
192
|
fingerprints: [
|
|
177
193
|
{
|
|
178
194
|
algorithm: fingerprint.type,
|
|
179
|
-
value: fingerprint.hash
|
|
180
|
-
}
|
|
181
|
-
]
|
|
195
|
+
value: fingerprint.hash,
|
|
196
|
+
},
|
|
197
|
+
],
|
|
182
198
|
};
|
|
183
199
|
return dtlsParameters;
|
|
184
200
|
}
|
|
185
201
|
exports.extractDtlsParameters = extractDtlsParameters;
|
|
186
|
-
function getCname({ offerMediaObject }) {
|
|
187
|
-
const ssrcCnameLine = (offerMediaObject.ssrcs || [])
|
|
188
|
-
.find((line) => line.attribute === 'cname');
|
|
202
|
+
function getCname({ offerMediaObject, }) {
|
|
203
|
+
const ssrcCnameLine = (offerMediaObject.ssrcs || []).find((line) => line.attribute === 'cname');
|
|
189
204
|
if (!ssrcCnameLine) {
|
|
190
205
|
return '';
|
|
191
206
|
}
|
|
@@ -196,36 +211,33 @@ exports.getCname = getCname;
|
|
|
196
211
|
* Apply codec parameters in the given SDP m= section answer based on the
|
|
197
212
|
* given RTP parameters of an offer.
|
|
198
213
|
*/
|
|
199
|
-
function applyCodecParameters({ offerRtpParameters, answerMediaObject }) {
|
|
214
|
+
function applyCodecParameters({ offerRtpParameters, answerMediaObject, }) {
|
|
200
215
|
for (const codec of offerRtpParameters.codecs) {
|
|
201
216
|
const mimeType = codec.mimeType.toLowerCase();
|
|
202
217
|
// Avoid parsing codec parameters for unhandled codecs.
|
|
203
218
|
if (mimeType !== 'audio/opus') {
|
|
204
219
|
continue;
|
|
205
220
|
}
|
|
206
|
-
const rtp = (answerMediaObject.rtp || [])
|
|
207
|
-
.find((r) => r.payload === codec.payloadType);
|
|
221
|
+
const rtp = (answerMediaObject.rtp || []).find((r) => r.payload === codec.payloadType);
|
|
208
222
|
if (!rtp) {
|
|
209
223
|
continue;
|
|
210
224
|
}
|
|
211
225
|
// Just in case.
|
|
212
226
|
answerMediaObject.fmtp = answerMediaObject.fmtp || [];
|
|
213
|
-
let fmtp = answerMediaObject.fmtp
|
|
214
|
-
.find((f) => f.payload === codec.payloadType);
|
|
227
|
+
let fmtp = answerMediaObject.fmtp.find((f) => f.payload === codec.payloadType);
|
|
215
228
|
if (!fmtp) {
|
|
216
229
|
fmtp = { payload: codec.payloadType, config: '' };
|
|
217
230
|
answerMediaObject.fmtp.push(fmtp);
|
|
218
231
|
}
|
|
219
232
|
const parameters = sdpTransform.parseParams(fmtp.config);
|
|
220
233
|
switch (mimeType) {
|
|
221
|
-
case 'audio/opus':
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
parameters.stereo = spropStereo ? 1 : 0;
|
|
226
|
-
}
|
|
227
|
-
break;
|
|
234
|
+
case 'audio/opus': {
|
|
235
|
+
const spropStereo = codec.parameters['sprop-stereo'];
|
|
236
|
+
if (spropStereo !== undefined) {
|
|
237
|
+
parameters.stereo = spropStereo ? 1 : 0;
|
|
228
238
|
}
|
|
239
|
+
break;
|
|
240
|
+
}
|
|
229
241
|
}
|
|
230
242
|
// Write the codec fmtp.config back.
|
|
231
243
|
fmtp.config = '';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MediaKind, RtpEncodingParameters } from '../../RtpParameters';
|
|
2
|
-
export declare function extractPlainRtpParameters({ sdpObject, kind }: {
|
|
2
|
+
export declare function extractPlainRtpParameters({ sdpObject, kind, }: {
|
|
3
3
|
sdpObject: any;
|
|
4
4
|
kind: MediaKind;
|
|
5
5
|
}): {
|
|
@@ -7,7 +7,7 @@ export declare function extractPlainRtpParameters({ sdpObject, kind }: {
|
|
|
7
7
|
ipVersion: 4 | 6;
|
|
8
8
|
port: number;
|
|
9
9
|
};
|
|
10
|
-
export declare function getRtpEncodings({ sdpObject, kind }: {
|
|
10
|
+
export declare function getRtpEncodings({ sdpObject, kind, }: {
|
|
11
11
|
sdpObject: any;
|
|
12
12
|
kind: MediaKind;
|
|
13
13
|
}): RtpEncodingParameters[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plainRtpUtils.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdp/plainRtpUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEvE,wBAAgB,yBAAyB,
|
|
1
|
+
{"version":3,"file":"plainRtpUtils.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdp/plainRtpUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEvE,wBAAgB,yBAAyB,CAAC,EACzC,SAAS,EACT,IAAI,GACJ,EAAE;IACF,SAAS,EAAE,GAAG,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;CAChB,GAAG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACb,CAcA;AAED,wBAAgB,eAAe,CAAC,EAC/B,SAAS,EACT,IAAI,GACJ,EAAE;IACF,SAAS,EAAE,GAAG,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;CAChB,GAAG,qBAAqB,EAAE,CAe1B"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getRtpEncodings = exports.extractPlainRtpParameters = void 0;
|
|
4
|
-
function extractPlainRtpParameters({ sdpObject, kind }) {
|
|
5
|
-
const mediaObject = (sdpObject.media || [])
|
|
6
|
-
.find((m) => m.type === kind);
|
|
4
|
+
function extractPlainRtpParameters({ sdpObject, kind, }) {
|
|
5
|
+
const mediaObject = (sdpObject.media || []).find((m) => m.type === kind);
|
|
7
6
|
if (!mediaObject) {
|
|
8
7
|
throw new Error(`m=${kind} section not found`);
|
|
9
8
|
}
|
|
@@ -11,13 +10,12 @@ function extractPlainRtpParameters({ sdpObject, kind }) {
|
|
|
11
10
|
return {
|
|
12
11
|
ip: connectionObject.ip,
|
|
13
12
|
ipVersion: connectionObject.version,
|
|
14
|
-
port: mediaObject.port
|
|
13
|
+
port: mediaObject.port,
|
|
15
14
|
};
|
|
16
15
|
}
|
|
17
16
|
exports.extractPlainRtpParameters = extractPlainRtpParameters;
|
|
18
|
-
function getRtpEncodings({ sdpObject, kind }) {
|
|
19
|
-
const mediaObject = (sdpObject.media || [])
|
|
20
|
-
.find((m) => m.type === kind);
|
|
17
|
+
function getRtpEncodings({ sdpObject, kind, }) {
|
|
18
|
+
const mediaObject = (sdpObject.media || []).find((m) => m.type === kind);
|
|
21
19
|
if (!mediaObject) {
|
|
22
20
|
throw new Error(`m=${kind} section not found`);
|
|
23
21
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { RtpEncodingParameters } from '../../RtpParameters';
|
|
2
|
-
export declare function getRtpEncodings({ offerMediaObject, track }: {
|
|
2
|
+
export declare function getRtpEncodings({ offerMediaObject, track, }: {
|
|
3
3
|
offerMediaObject: any;
|
|
4
4
|
track: MediaStreamTrack;
|
|
5
5
|
}): RtpEncodingParameters[];
|
|
6
6
|
/**
|
|
7
7
|
* Adds multi-ssrc based simulcast into the given SDP media section offer.
|
|
8
8
|
*/
|
|
9
|
-
export declare function addLegacySimulcast({ offerMediaObject, track, numStreams }: {
|
|
9
|
+
export declare function addLegacySimulcast({ offerMediaObject, track, numStreams, }: {
|
|
10
10
|
offerMediaObject: any;
|
|
11
11
|
track: MediaStreamTrack;
|
|
12
12
|
numStreams: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planBUtils.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdp/planBUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,wBAAgB,eAAe,
|
|
1
|
+
{"version":3,"file":"planBUtils.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdp/planBUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,wBAAgB,eAAe,CAAC,EAC/B,gBAAgB,EAChB,KAAK,GACL,EAAE;IACF,gBAAgB,EAAE,GAAG,CAAC;IACtB,KAAK,EAAE,gBAAgB,CAAC;CACxB,GAAG,qBAAqB,EAAE,CAyE1B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAClC,gBAAgB,EAChB,KAAK,EACL,UAAU,GACV,EAAE;IACF,gBAAgB,EAAE,GAAG,CAAC;IACtB,KAAK,EAAE,gBAAgB,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAqHP"}
|
|
@@ -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, track }) {
|
|
4
|
+
function getRtpEncodings({ offerMediaObject, track, }) {
|
|
5
5
|
// First media SSRC (or the only one).
|
|
6
6
|
let firstSsrc;
|
|
7
7
|
const ssrcs = new Set();
|
|
@@ -59,7 +59,7 @@ exports.getRtpEncodings = getRtpEncodings;
|
|
|
59
59
|
/**
|
|
60
60
|
* Adds multi-ssrc based simulcast into the given SDP media section offer.
|
|
61
61
|
*/
|
|
62
|
-
function addLegacySimulcast({ offerMediaObject, track, numStreams }) {
|
|
62
|
+
function addLegacySimulcast({ offerMediaObject, track, numStreams, }) {
|
|
63
63
|
if (numStreams <= 1) {
|
|
64
64
|
throw new TypeError('numStreams must be greater than 1');
|
|
65
65
|
}
|
|
@@ -67,8 +67,7 @@ function addLegacySimulcast({ offerMediaObject, track, numStreams }) {
|
|
|
67
67
|
let firstRtxSsrc;
|
|
68
68
|
let streamId;
|
|
69
69
|
// Get the SSRC.
|
|
70
|
-
const ssrcMsidLine = (offerMediaObject.ssrcs || [])
|
|
71
|
-
.find((line) => {
|
|
70
|
+
const ssrcMsidLine = (offerMediaObject.ssrcs || []).find((line) => {
|
|
72
71
|
if (line.attribute !== 'msid') {
|
|
73
72
|
return false;
|
|
74
73
|
}
|
|
@@ -86,8 +85,7 @@ function addLegacySimulcast({ offerMediaObject, track, numStreams }) {
|
|
|
86
85
|
throw new Error(`a=ssrc line with msid information not found [track.id:${track.id}]`);
|
|
87
86
|
}
|
|
88
87
|
// Get the SSRC for RTX.
|
|
89
|
-
(offerMediaObject.ssrcGroups || [])
|
|
90
|
-
.some((line) => {
|
|
88
|
+
(offerMediaObject.ssrcGroups || []).some((line) => {
|
|
91
89
|
if (line.semantics !== 'FID') {
|
|
92
90
|
return false;
|
|
93
91
|
}
|
|
@@ -100,8 +98,7 @@ function addLegacySimulcast({ offerMediaObject, track, numStreams }) {
|
|
|
100
98
|
return false;
|
|
101
99
|
}
|
|
102
100
|
});
|
|
103
|
-
const ssrcCnameLine = offerMediaObject.ssrcs
|
|
104
|
-
.find((line) => (line.attribute === 'cname' && line.id === firstSsrc));
|
|
101
|
+
const ssrcCnameLine = offerMediaObject.ssrcs.find((line) => line.attribute === 'cname' && line.id === firstSsrc);
|
|
105
102
|
if (!ssrcCnameLine) {
|
|
106
103
|
throw new Error(`a=ssrc line with cname information not found [track.id:${track.id}]`);
|
|
107
104
|
}
|
|
@@ -118,19 +115,19 @@ function addLegacySimulcast({ offerMediaObject, track, numStreams }) {
|
|
|
118
115
|
offerMediaObject.ssrcs = offerMediaObject.ssrcs || [];
|
|
119
116
|
offerMediaObject.ssrcGroups.push({
|
|
120
117
|
semantics: 'SIM',
|
|
121
|
-
ssrcs: ssrcs.join(' ')
|
|
118
|
+
ssrcs: ssrcs.join(' '),
|
|
122
119
|
});
|
|
123
120
|
for (let i = 0; i < ssrcs.length; ++i) {
|
|
124
121
|
const ssrc = ssrcs[i];
|
|
125
122
|
offerMediaObject.ssrcs.push({
|
|
126
123
|
id: ssrc,
|
|
127
124
|
attribute: 'cname',
|
|
128
|
-
value: cname
|
|
125
|
+
value: cname,
|
|
129
126
|
});
|
|
130
127
|
offerMediaObject.ssrcs.push({
|
|
131
128
|
id: ssrc,
|
|
132
129
|
attribute: 'msid',
|
|
133
|
-
value: `${streamId} ${track.id}
|
|
130
|
+
value: `${streamId} ${track.id}`,
|
|
134
131
|
});
|
|
135
132
|
}
|
|
136
133
|
for (let i = 0; i < rtxSsrcs.length; ++i) {
|
|
@@ -139,16 +136,16 @@ function addLegacySimulcast({ offerMediaObject, track, numStreams }) {
|
|
|
139
136
|
offerMediaObject.ssrcs.push({
|
|
140
137
|
id: rtxSsrc,
|
|
141
138
|
attribute: 'cname',
|
|
142
|
-
value: cname
|
|
139
|
+
value: cname,
|
|
143
140
|
});
|
|
144
141
|
offerMediaObject.ssrcs.push({
|
|
145
142
|
id: rtxSsrc,
|
|
146
143
|
attribute: 'msid',
|
|
147
|
-
value: `${streamId} ${track.id}
|
|
144
|
+
value: `${streamId} ${track.id}`,
|
|
148
145
|
});
|
|
149
146
|
offerMediaObject.ssrcGroups.push({
|
|
150
147
|
semantics: 'FID',
|
|
151
|
-
ssrcs: `${ssrc} ${rtxSsrc}
|
|
148
|
+
ssrcs: `${ssrc} ${rtxSsrc}`,
|
|
152
149
|
});
|
|
153
150
|
}
|
|
154
151
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { RtpEncodingParameters } from '../../RtpParameters';
|
|
2
|
-
export declare function getRtpEncodings({ offerMediaObject }: {
|
|
2
|
+
export declare function getRtpEncodings({ offerMediaObject, }: {
|
|
3
3
|
offerMediaObject: any;
|
|
4
4
|
}): RtpEncodingParameters[];
|
|
5
5
|
/**
|
|
6
6
|
* Adds multi-ssrc based simulcast into the given SDP media section offer.
|
|
7
7
|
*/
|
|
8
|
-
export declare function addLegacySimulcast({ offerMediaObject, numStreams }: {
|
|
8
|
+
export declare function addLegacySimulcast({ offerMediaObject, numStreams, }: {
|
|
9
9
|
offerMediaObject: any;
|
|
10
10
|
numStreams: number;
|
|
11
11
|
}): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unifiedPlanUtils.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdp/unifiedPlanUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,wBAAgB,eAAe,
|
|
1
|
+
{"version":3,"file":"unifiedPlanUtils.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdp/unifiedPlanUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,wBAAgB,eAAe,CAAC,EAC/B,gBAAgB,GAChB,EAAE;IACF,gBAAgB,EAAE,GAAG,CAAC;CACtB,GAAG,qBAAqB,EAAE,CAyD1B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAClC,gBAAgB,EAChB,UAAU,GACV,EAAE;IACF,gBAAgB,EAAE,GAAG,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACnB,GAAG,IAAI,CAoGP"}
|