mediasoup-client 3.6.89 → 3.6.90
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.d.ts +1435 -14
- package/lib/index.js +11884 -43
- package/lib/index.js.map +1 -0
- package/lib/index.mjs +11860 -0
- package/lib/index.mjs.map +1 -0
- package/npm-scripts.mjs +17 -11
- package/package.json +12 -8
- package/lib/Consumer.d.ts +0 -115
- package/lib/Consumer.d.ts.map +0 -1
- package/lib/Consumer.js +0 -190
- package/lib/DataConsumer.d.ts +0 -93
- package/lib/DataConsumer.d.ts.map +0 -1
- package/lib/DataConsumer.js +0 -162
- package/lib/DataProducer.d.ts +0 -97
- package/lib/DataProducer.d.ts.map +0 -1
- package/lib/DataProducer.js +0 -180
- package/lib/Device.d.ts +0 -92
- package/lib/Device.d.ts.map +0 -1
- package/lib/Device.js +0 -464
- package/lib/EnhancedEventEmitter.d.ts +0 -24
- package/lib/EnhancedEventEmitter.d.ts.map +0 -1
- package/lib/EnhancedEventEmitter.js +0 -70
- package/lib/Logger.d.ts +0 -11
- package/lib/Logger.d.ts.map +0 -1
- package/lib/Logger.js +0 -37
- package/lib/Producer.d.ts +0 -169
- package/lib/Producer.d.ts.map +0 -1
- package/lib/Producer.js +0 -287
- package/lib/RtpParameters.d.ts +0 -306
- package/lib/RtpParameters.d.ts.map +0 -1
- package/lib/RtpParameters.js +0 -6
- package/lib/SctpParameters.d.ts +0 -68
- package/lib/SctpParameters.d.ts.map +0 -1
- package/lib/SctpParameters.js +0 -2
- package/lib/Transport.d.ts +0 -243
- package/lib/Transport.d.ts.map +0 -1
- package/lib/Transport.js +0 -824
- package/lib/errors.d.ts +0 -13
- package/lib/errors.d.ts.map +0 -1
- package/lib/errors.js +0 -39
- package/lib/handlers/Chrome111.d.ts +0 -49
- package/lib/handlers/Chrome111.d.ts.map +0 -1
- package/lib/handlers/Chrome111.js +0 -658
- package/lib/handlers/Chrome55.d.ts +0 -51
- package/lib/handlers/Chrome55.d.ts.map +0 -1
- package/lib/handlers/Chrome55.js +0 -542
- package/lib/handlers/Chrome67.d.ts +0 -51
- package/lib/handlers/Chrome67.d.ts.map +0 -1
- package/lib/handlers/Chrome67.js +0 -598
- package/lib/handlers/Chrome70.d.ts +0 -49
- package/lib/handlers/Chrome70.d.ts.map +0 -1
- package/lib/handlers/Chrome70.js +0 -627
- package/lib/handlers/Chrome74.d.ts +0 -49
- package/lib/handlers/Chrome74.d.ts.map +0 -1
- package/lib/handlers/Chrome74.js +0 -675
- package/lib/handlers/Edge11.d.ts +0 -55
- package/lib/handlers/Edge11.d.ts.map +0 -1
- package/lib/handlers/Edge11.js +0 -447
- package/lib/handlers/FakeHandler.d.ts +0 -49
- package/lib/handlers/FakeHandler.d.ts.map +0 -1
- package/lib/handlers/FakeHandler.js +0 -276
- package/lib/handlers/Firefox60.d.ts +0 -48
- package/lib/handlers/Firefox60.d.ts.map +0 -1
- package/lib/handlers/Firefox60.js +0 -681
- package/lib/handlers/HandlerInterface.d.ts +0 -97
- package/lib/handlers/HandlerInterface.d.ts.map +0 -1
- package/lib/handlers/HandlerInterface.js +0 -10
- package/lib/handlers/ReactNative.d.ts +0 -51
- package/lib/handlers/ReactNative.d.ts.map +0 -1
- package/lib/handlers/ReactNative.js +0 -558
- package/lib/handlers/ReactNativeUnifiedPlan.d.ts +0 -49
- package/lib/handlers/ReactNativeUnifiedPlan.d.ts.map +0 -1
- package/lib/handlers/ReactNativeUnifiedPlan.js +0 -694
- package/lib/handlers/Safari11.d.ts +0 -51
- package/lib/handlers/Safari11.d.ts.map +0 -1
- package/lib/handlers/Safari11.js +0 -592
- package/lib/handlers/Safari12.d.ts +0 -49
- package/lib/handlers/Safari12.d.ts.map +0 -1
- package/lib/handlers/Safari12.js +0 -648
- package/lib/handlers/ortc/edgeUtils.d.ts +0 -11
- package/lib/handlers/ortc/edgeUtils.d.ts.map +0 -1
- package/lib/handlers/ortc/edgeUtils.js +0 -86
- package/lib/handlers/ortc/utils.d.ts +0 -6
- package/lib/handlers/ortc/utils.d.ts.map +0 -1
- package/lib/handlers/ortc/utils.js +0 -20
- package/lib/handlers/sdp/MediaSection.d.ts +0 -68
- package/lib/handlers/sdp/MediaSection.d.ts.map +0 -1
- package/lib/handlers/sdp/MediaSection.js +0 -589
- package/lib/handlers/sdp/RemoteSdp.d.ts +0 -75
- package/lib/handlers/sdp/RemoteSdp.d.ts.map +0 -1
- package/lib/handlers/sdp/RemoteSdp.js +0 -303
- package/lib/handlers/sdp/commonUtils.d.ts +0 -24
- package/lib/handlers/sdp/commonUtils.d.ts.map +0 -1
- package/lib/handlers/sdp/commonUtils.js +0 -224
- package/lib/handlers/sdp/plainRtpUtils.d.ts +0 -14
- package/lib/handlers/sdp/plainRtpUtils.d.ts.map +0 -1
- package/lib/handlers/sdp/plainRtpUtils.js +0 -33
- package/lib/handlers/sdp/planBUtils.d.ts +0 -14
- package/lib/handlers/sdp/planBUtils.d.ts.map +0 -1
- package/lib/handlers/sdp/planBUtils.js +0 -155
- package/lib/handlers/sdp/unifiedPlanUtils.d.ts +0 -12
- package/lib/handlers/sdp/unifiedPlanUtils.d.ts.map +0 -1
- package/lib/handlers/sdp/unifiedPlanUtils.js +0 -131
- package/lib/index.d.ts.map +0 -1
- package/lib/ortc.d.ts +0 -123
- package/lib/ortc.d.ts.map +0 -1
- package/lib/ortc.js +0 -943
- package/lib/scalabilityModes.d.ts +0 -6
- package/lib/scalabilityModes.d.ts.map +0 -1
- package/lib/scalabilityModes.js +0 -20
- package/lib/tests/fakeParameters.d.ts +0 -20
- package/lib/tests/fakeParameters.d.ts.map +0 -1
- package/lib/tests/fakeParameters.js +0 -659
- package/lib/tests/test.d.ts +0 -6
- package/lib/tests/test.d.ts.map +0 -1
- package/lib/tests/test.js +0 -1297
- package/lib/tests/uaTestCases.d.ts +0 -9
- package/lib/tests/uaTestCases.d.ts.map +0 -1
- package/lib/tests/uaTestCases.js +0 -85
- package/lib/types.d.ts +0 -15
- package/lib/types.d.ts.map +0 -1
- package/lib/types.js +0 -26
- package/lib/utils.d.ts +0 -9
- package/lib/utils.d.ts.map +0 -1
- package/lib/utils.js +0 -20
|
@@ -1,303 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.RemoteSdp = void 0;
|
|
27
|
-
const sdpTransform = __importStar(require("sdp-transform"));
|
|
28
|
-
const Logger_1 = require("../../Logger");
|
|
29
|
-
const MediaSection_1 = require("./MediaSection");
|
|
30
|
-
const logger = new Logger_1.Logger('RemoteSdp');
|
|
31
|
-
class RemoteSdp {
|
|
32
|
-
constructor({ iceParameters, iceCandidates, dtlsParameters, sctpParameters, plainRtpParameters, planB = false }) {
|
|
33
|
-
// MediaSection instances with same order as in the SDP.
|
|
34
|
-
this._mediaSections = [];
|
|
35
|
-
// MediaSection indices indexed by MID.
|
|
36
|
-
this._midToIndex = new Map();
|
|
37
|
-
this._iceParameters = iceParameters;
|
|
38
|
-
this._iceCandidates = iceCandidates;
|
|
39
|
-
this._dtlsParameters = dtlsParameters;
|
|
40
|
-
this._sctpParameters = sctpParameters;
|
|
41
|
-
this._plainRtpParameters = plainRtpParameters;
|
|
42
|
-
this._planB = planB;
|
|
43
|
-
this._sdpObject =
|
|
44
|
-
{
|
|
45
|
-
version: 0,
|
|
46
|
-
origin: {
|
|
47
|
-
address: '0.0.0.0',
|
|
48
|
-
ipVer: 4,
|
|
49
|
-
netType: 'IN',
|
|
50
|
-
sessionId: 10000,
|
|
51
|
-
sessionVersion: 0,
|
|
52
|
-
username: 'mediasoup-client'
|
|
53
|
-
},
|
|
54
|
-
name: '-',
|
|
55
|
-
timing: { start: 0, stop: 0 },
|
|
56
|
-
media: []
|
|
57
|
-
};
|
|
58
|
-
// If ICE parameters are given, add ICE-Lite indicator.
|
|
59
|
-
if (iceParameters && iceParameters.iceLite) {
|
|
60
|
-
this._sdpObject.icelite = 'ice-lite';
|
|
61
|
-
}
|
|
62
|
-
// If DTLS parameters are given, assume WebRTC and BUNDLE.
|
|
63
|
-
if (dtlsParameters) {
|
|
64
|
-
this._sdpObject.msidSemantic = { semantic: 'WMS', token: '*' };
|
|
65
|
-
// NOTE: We take the latest fingerprint.
|
|
66
|
-
const numFingerprints = this._dtlsParameters.fingerprints.length;
|
|
67
|
-
this._sdpObject.fingerprint =
|
|
68
|
-
{
|
|
69
|
-
type: dtlsParameters.fingerprints[numFingerprints - 1].algorithm,
|
|
70
|
-
hash: dtlsParameters.fingerprints[numFingerprints - 1].value
|
|
71
|
-
};
|
|
72
|
-
this._sdpObject.groups = [{ type: 'BUNDLE', mids: '' }];
|
|
73
|
-
}
|
|
74
|
-
// If there are plain RPT parameters, override SDP origin.
|
|
75
|
-
if (plainRtpParameters) {
|
|
76
|
-
this._sdpObject.origin.address = plainRtpParameters.ip;
|
|
77
|
-
this._sdpObject.origin.ipVer = plainRtpParameters.ipVersion;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
updateIceParameters(iceParameters) {
|
|
81
|
-
logger.debug('updateIceParameters() [iceParameters:%o]', iceParameters);
|
|
82
|
-
this._iceParameters = iceParameters;
|
|
83
|
-
this._sdpObject.icelite = iceParameters.iceLite ? 'ice-lite' : undefined;
|
|
84
|
-
for (const mediaSection of this._mediaSections) {
|
|
85
|
-
mediaSection.setIceParameters(iceParameters);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
updateDtlsRole(role) {
|
|
89
|
-
logger.debug('updateDtlsRole() [role:%s]', role);
|
|
90
|
-
this._dtlsParameters.role = role;
|
|
91
|
-
for (const mediaSection of this._mediaSections) {
|
|
92
|
-
mediaSection.setDtlsRole(role);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
getNextMediaSectionIdx() {
|
|
96
|
-
// If a closed media section is found, return its index.
|
|
97
|
-
for (let idx = 0; idx < this._mediaSections.length; ++idx) {
|
|
98
|
-
const mediaSection = this._mediaSections[idx];
|
|
99
|
-
if (mediaSection.closed) {
|
|
100
|
-
return { idx, reuseMid: mediaSection.mid };
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
// If no closed media section is found, return next one.
|
|
104
|
-
return { idx: this._mediaSections.length };
|
|
105
|
-
}
|
|
106
|
-
send({ offerMediaObject, reuseMid, offerRtpParameters, answerRtpParameters, codecOptions, extmapAllowMixed = false }) {
|
|
107
|
-
const mediaSection = new MediaSection_1.AnswerMediaSection({
|
|
108
|
-
iceParameters: this._iceParameters,
|
|
109
|
-
iceCandidates: this._iceCandidates,
|
|
110
|
-
dtlsParameters: this._dtlsParameters,
|
|
111
|
-
plainRtpParameters: this._plainRtpParameters,
|
|
112
|
-
planB: this._planB,
|
|
113
|
-
offerMediaObject,
|
|
114
|
-
offerRtpParameters,
|
|
115
|
-
answerRtpParameters,
|
|
116
|
-
codecOptions,
|
|
117
|
-
extmapAllowMixed
|
|
118
|
-
});
|
|
119
|
-
// Unified-Plan with closed media section replacement.
|
|
120
|
-
if (reuseMid) {
|
|
121
|
-
this._replaceMediaSection(mediaSection, reuseMid);
|
|
122
|
-
}
|
|
123
|
-
// Unified-Plan or Plan-B with different media kind.
|
|
124
|
-
else if (!this._midToIndex.has(mediaSection.mid)) {
|
|
125
|
-
this._addMediaSection(mediaSection);
|
|
126
|
-
}
|
|
127
|
-
// Plan-B with same media kind.
|
|
128
|
-
else {
|
|
129
|
-
this._replaceMediaSection(mediaSection);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
receive({ mid, kind, offerRtpParameters, streamId, trackId }) {
|
|
133
|
-
const idx = this._midToIndex.get(mid);
|
|
134
|
-
let mediaSection;
|
|
135
|
-
if (idx !== undefined) {
|
|
136
|
-
mediaSection = this._mediaSections[idx];
|
|
137
|
-
}
|
|
138
|
-
// Unified-Plan or different media kind.
|
|
139
|
-
if (!mediaSection) {
|
|
140
|
-
mediaSection = new MediaSection_1.OfferMediaSection({
|
|
141
|
-
iceParameters: this._iceParameters,
|
|
142
|
-
iceCandidates: this._iceCandidates,
|
|
143
|
-
dtlsParameters: this._dtlsParameters,
|
|
144
|
-
plainRtpParameters: this._plainRtpParameters,
|
|
145
|
-
planB: this._planB,
|
|
146
|
-
mid,
|
|
147
|
-
kind,
|
|
148
|
-
offerRtpParameters,
|
|
149
|
-
streamId,
|
|
150
|
-
trackId
|
|
151
|
-
});
|
|
152
|
-
// Let's try to recycle a closed media section (if any).
|
|
153
|
-
// NOTE: Yes, we can recycle a closed m=audio section with a new m=video.
|
|
154
|
-
const oldMediaSection = this._mediaSections.find((m) => (m.closed));
|
|
155
|
-
if (oldMediaSection) {
|
|
156
|
-
this._replaceMediaSection(mediaSection, oldMediaSection.mid);
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
this._addMediaSection(mediaSection);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
// Plan-B.
|
|
163
|
-
else {
|
|
164
|
-
mediaSection.planBReceive({ offerRtpParameters, streamId, trackId });
|
|
165
|
-
this._replaceMediaSection(mediaSection);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
pauseMediaSection(mid) {
|
|
169
|
-
const mediaSection = this._findMediaSection(mid);
|
|
170
|
-
mediaSection.pause();
|
|
171
|
-
}
|
|
172
|
-
resumeSendingMediaSection(mid) {
|
|
173
|
-
const mediaSection = this._findMediaSection(mid);
|
|
174
|
-
mediaSection.resume();
|
|
175
|
-
}
|
|
176
|
-
resumeReceivingMediaSection(mid) {
|
|
177
|
-
const mediaSection = this._findMediaSection(mid);
|
|
178
|
-
mediaSection.resume();
|
|
179
|
-
}
|
|
180
|
-
disableMediaSection(mid) {
|
|
181
|
-
const mediaSection = this._findMediaSection(mid);
|
|
182
|
-
mediaSection.disable();
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Closes media section. Returns true if the given MID corresponds to a m
|
|
186
|
-
* section that has been indeed closed. False otherwise.
|
|
187
|
-
*
|
|
188
|
-
* NOTE: Closing the first m section is a pain since it invalidates the bundled
|
|
189
|
-
* transport, so instead closing it we just disable it.
|
|
190
|
-
*/
|
|
191
|
-
closeMediaSection(mid) {
|
|
192
|
-
const mediaSection = this._findMediaSection(mid);
|
|
193
|
-
// NOTE: Closing the first m section is a pain since it invalidates the
|
|
194
|
-
// bundled transport, so let's avoid it.
|
|
195
|
-
if (mid === this._firstMid) {
|
|
196
|
-
logger.debug('closeMediaSection() | cannot close first media section, disabling it instead [mid:%s]', mid);
|
|
197
|
-
this.disableMediaSection(mid);
|
|
198
|
-
return false;
|
|
199
|
-
}
|
|
200
|
-
mediaSection.close();
|
|
201
|
-
// Regenerate BUNDLE mids.
|
|
202
|
-
this._regenerateBundleMids();
|
|
203
|
-
return true;
|
|
204
|
-
}
|
|
205
|
-
muxMediaSectionSimulcast(mid, encodings) {
|
|
206
|
-
const mediaSection = this._findMediaSection(mid);
|
|
207
|
-
mediaSection.muxSimulcastStreams(encodings);
|
|
208
|
-
this._replaceMediaSection(mediaSection);
|
|
209
|
-
}
|
|
210
|
-
planBStopReceiving({ mid, offerRtpParameters }) {
|
|
211
|
-
const mediaSection = this._findMediaSection(mid);
|
|
212
|
-
mediaSection.planBStopReceiving({ offerRtpParameters });
|
|
213
|
-
this._replaceMediaSection(mediaSection);
|
|
214
|
-
}
|
|
215
|
-
sendSctpAssociation({ offerMediaObject }) {
|
|
216
|
-
const mediaSection = new MediaSection_1.AnswerMediaSection({
|
|
217
|
-
iceParameters: this._iceParameters,
|
|
218
|
-
iceCandidates: this._iceCandidates,
|
|
219
|
-
dtlsParameters: this._dtlsParameters,
|
|
220
|
-
sctpParameters: this._sctpParameters,
|
|
221
|
-
plainRtpParameters: this._plainRtpParameters,
|
|
222
|
-
offerMediaObject
|
|
223
|
-
});
|
|
224
|
-
this._addMediaSection(mediaSection);
|
|
225
|
-
}
|
|
226
|
-
receiveSctpAssociation({ oldDataChannelSpec = false } = {}) {
|
|
227
|
-
const mediaSection = new MediaSection_1.OfferMediaSection({
|
|
228
|
-
iceParameters: this._iceParameters,
|
|
229
|
-
iceCandidates: this._iceCandidates,
|
|
230
|
-
dtlsParameters: this._dtlsParameters,
|
|
231
|
-
sctpParameters: this._sctpParameters,
|
|
232
|
-
plainRtpParameters: this._plainRtpParameters,
|
|
233
|
-
mid: 'datachannel',
|
|
234
|
-
kind: 'application',
|
|
235
|
-
oldDataChannelSpec
|
|
236
|
-
});
|
|
237
|
-
this._addMediaSection(mediaSection);
|
|
238
|
-
}
|
|
239
|
-
getSdp() {
|
|
240
|
-
// Increase SDP version.
|
|
241
|
-
this._sdpObject.origin.sessionVersion++;
|
|
242
|
-
return sdpTransform.write(this._sdpObject);
|
|
243
|
-
}
|
|
244
|
-
_addMediaSection(newMediaSection) {
|
|
245
|
-
if (!this._firstMid) {
|
|
246
|
-
this._firstMid = newMediaSection.mid;
|
|
247
|
-
}
|
|
248
|
-
// Add to the vector.
|
|
249
|
-
this._mediaSections.push(newMediaSection);
|
|
250
|
-
// Add to the map.
|
|
251
|
-
this._midToIndex.set(newMediaSection.mid, this._mediaSections.length - 1);
|
|
252
|
-
// Add to the SDP object.
|
|
253
|
-
this._sdpObject.media.push(newMediaSection.getObject());
|
|
254
|
-
// Regenerate BUNDLE mids.
|
|
255
|
-
this._regenerateBundleMids();
|
|
256
|
-
}
|
|
257
|
-
_replaceMediaSection(newMediaSection, reuseMid) {
|
|
258
|
-
// Store it in the map.
|
|
259
|
-
if (typeof reuseMid === 'string') {
|
|
260
|
-
const idx = this._midToIndex.get(reuseMid);
|
|
261
|
-
if (idx === undefined) {
|
|
262
|
-
throw new Error(`no media section found for reuseMid '${reuseMid}'`);
|
|
263
|
-
}
|
|
264
|
-
const oldMediaSection = this._mediaSections[idx];
|
|
265
|
-
// Replace the index in the vector with the new media section.
|
|
266
|
-
this._mediaSections[idx] = newMediaSection;
|
|
267
|
-
// Update the map.
|
|
268
|
-
this._midToIndex.delete(oldMediaSection.mid);
|
|
269
|
-
this._midToIndex.set(newMediaSection.mid, idx);
|
|
270
|
-
// Update the SDP object.
|
|
271
|
-
this._sdpObject.media[idx] = newMediaSection.getObject();
|
|
272
|
-
// Regenerate BUNDLE mids.
|
|
273
|
-
this._regenerateBundleMids();
|
|
274
|
-
}
|
|
275
|
-
else {
|
|
276
|
-
const idx = this._midToIndex.get(newMediaSection.mid);
|
|
277
|
-
if (idx === undefined) {
|
|
278
|
-
throw new Error(`no media section found with mid '${newMediaSection.mid}'`);
|
|
279
|
-
}
|
|
280
|
-
// Replace the index in the vector with the new media section.
|
|
281
|
-
this._mediaSections[idx] = newMediaSection;
|
|
282
|
-
// Update the SDP object.
|
|
283
|
-
this._sdpObject.media[idx] = newMediaSection.getObject();
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
_findMediaSection(mid) {
|
|
287
|
-
const idx = this._midToIndex.get(mid);
|
|
288
|
-
if (idx === undefined) {
|
|
289
|
-
throw new Error(`no media section found with mid '${mid}'`);
|
|
290
|
-
}
|
|
291
|
-
return this._mediaSections[idx];
|
|
292
|
-
}
|
|
293
|
-
_regenerateBundleMids() {
|
|
294
|
-
if (!this._dtlsParameters) {
|
|
295
|
-
return;
|
|
296
|
-
}
|
|
297
|
-
this._sdpObject.groups[0].mids = this._mediaSections
|
|
298
|
-
.filter((mediaSection) => !mediaSection.closed)
|
|
299
|
-
.map((mediaSection) => mediaSection.mid)
|
|
300
|
-
.join(' ');
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
exports.RemoteSdp = RemoteSdp;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { DtlsParameters } from '../../Transport';
|
|
2
|
-
import { RtpCapabilities, RtpParameters } from '../../RtpParameters';
|
|
3
|
-
/**
|
|
4
|
-
* This function must be called with an SDP with 1 m=audio and 1 m=video
|
|
5
|
-
* sections.
|
|
6
|
-
*/
|
|
7
|
-
export declare function extractRtpCapabilities({ sdpObject }: {
|
|
8
|
-
sdpObject: any;
|
|
9
|
-
}): RtpCapabilities;
|
|
10
|
-
export declare function extractDtlsParameters({ sdpObject }: {
|
|
11
|
-
sdpObject: any;
|
|
12
|
-
}): DtlsParameters;
|
|
13
|
-
export declare function getCname({ offerMediaObject }: {
|
|
14
|
-
offerMediaObject: any;
|
|
15
|
-
}): string;
|
|
16
|
-
/**
|
|
17
|
-
* Apply codec parameters in the given SDP m= section answer based on the
|
|
18
|
-
* given RTP parameters of an offer.
|
|
19
|
-
*/
|
|
20
|
-
export declare function applyCodecParameters({ offerRtpParameters, answerMediaObject }: {
|
|
21
|
-
offerRtpParameters: RtpParameters;
|
|
22
|
-
answerMediaObject: any;
|
|
23
|
-
}): void;
|
|
24
|
-
//# sourceMappingURL=commonUtils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commonUtils.d.ts","sourceRoot":"","sources":["../../../src/handlers/sdp/commonUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAY,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EACN,eAAe,EAGf,aAAa,EAEb,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AACH,wBAAgB,sBAAsB,CACrC,EAAE,SAAS,EAAE,EACb;IAAE,SAAS,EAAE,GAAG,CAAA;CAAE,GAChB,eAAe,CAqJjB;AAED,wBAAgB,qBAAqB,CACpC,EAAE,SAAS,EAAE,EACb;IAAE,SAAS,EAAE,GAAG,CAAA;CAAE,GAChB,cAAc,CAyChB;AAED,wBAAgB,QAAQ,CACvB,EAAE,gBAAgB,EAAE,EACpB;IAAE,gBAAgB,EAAE,GAAG,CAAA;CAAE,GACvB,MAAM,CAWR;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CACnC,EACC,kBAAkB,EAClB,iBAAiB,EACjB,EACD;IACC,kBAAkB,EAAE,aAAa,CAAC;IAClC,iBAAiB,EAAE,GAAG,CAAC;CACvB,GACC,IAAI,CA8DN"}
|
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.applyCodecParameters = exports.getCname = exports.extractDtlsParameters = exports.extractRtpCapabilities = void 0;
|
|
27
|
-
const sdpTransform = __importStar(require("sdp-transform"));
|
|
28
|
-
/**
|
|
29
|
-
* This function must be called with an SDP with 1 m=audio and 1 m=video
|
|
30
|
-
* sections.
|
|
31
|
-
*/
|
|
32
|
-
function extractRtpCapabilities({ sdpObject }) {
|
|
33
|
-
// Map of RtpCodecParameters indexed by payload type.
|
|
34
|
-
const codecsMap = new Map();
|
|
35
|
-
// Array of RtpHeaderExtensions.
|
|
36
|
-
const headerExtensions = [];
|
|
37
|
-
// Whether a m=audio/video section has been already found.
|
|
38
|
-
let gotAudio = false;
|
|
39
|
-
let gotVideo = false;
|
|
40
|
-
for (const m of sdpObject.media) {
|
|
41
|
-
const kind = m.type;
|
|
42
|
-
switch (kind) {
|
|
43
|
-
case 'audio':
|
|
44
|
-
{
|
|
45
|
-
if (gotAudio) {
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
gotAudio = true;
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
51
|
-
case 'video':
|
|
52
|
-
{
|
|
53
|
-
if (gotVideo) {
|
|
54
|
-
continue;
|
|
55
|
-
}
|
|
56
|
-
gotVideo = true;
|
|
57
|
-
break;
|
|
58
|
-
}
|
|
59
|
-
default:
|
|
60
|
-
{
|
|
61
|
-
continue;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
// Get codecs.
|
|
65
|
-
for (const rtp of m.rtp) {
|
|
66
|
-
const codec = {
|
|
67
|
-
kind: kind,
|
|
68
|
-
mimeType: `${kind}/${rtp.codec}`,
|
|
69
|
-
preferredPayloadType: rtp.payload,
|
|
70
|
-
clockRate: rtp.rate,
|
|
71
|
-
channels: rtp.encoding,
|
|
72
|
-
parameters: {},
|
|
73
|
-
rtcpFeedback: []
|
|
74
|
-
};
|
|
75
|
-
codecsMap.set(codec.preferredPayloadType, codec);
|
|
76
|
-
}
|
|
77
|
-
// Get codec parameters.
|
|
78
|
-
for (const fmtp of m.fmtp || []) {
|
|
79
|
-
const parameters = sdpTransform.parseParams(fmtp.config);
|
|
80
|
-
const codec = codecsMap.get(fmtp.payload);
|
|
81
|
-
if (!codec) {
|
|
82
|
-
continue;
|
|
83
|
-
}
|
|
84
|
-
// Specials case to convert parameter value to string.
|
|
85
|
-
if (parameters && parameters.hasOwnProperty('profile-level-id')) {
|
|
86
|
-
parameters['profile-level-id'] = String(parameters['profile-level-id']);
|
|
87
|
-
}
|
|
88
|
-
codec.parameters = parameters;
|
|
89
|
-
}
|
|
90
|
-
// Get RTCP feedback for each codec.
|
|
91
|
-
for (const fb of m.rtcpFb || []) {
|
|
92
|
-
const feedback = {
|
|
93
|
-
type: fb.type,
|
|
94
|
-
parameter: fb.subtype
|
|
95
|
-
};
|
|
96
|
-
if (!feedback.parameter) {
|
|
97
|
-
delete feedback.parameter;
|
|
98
|
-
}
|
|
99
|
-
// rtcp-fb payload is not '*', so just apply it to its corresponding
|
|
100
|
-
// codec.
|
|
101
|
-
if (fb.payload !== '*') {
|
|
102
|
-
const codec = codecsMap.get(fb.payload);
|
|
103
|
-
if (!codec) {
|
|
104
|
-
continue;
|
|
105
|
-
}
|
|
106
|
-
codec.rtcpFeedback.push(feedback);
|
|
107
|
-
}
|
|
108
|
-
// If rtcp-fb payload is '*' it must be applied to all codecs with same
|
|
109
|
-
// kind (with some exceptions such as RTX codec).
|
|
110
|
-
else {
|
|
111
|
-
for (const codec of codecsMap.values()) {
|
|
112
|
-
if (codec.kind === kind && !/.+\/rtx$/i.test(codec.mimeType)) {
|
|
113
|
-
codec.rtcpFeedback.push(feedback);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
// Get RTP header extensions.
|
|
119
|
-
for (const ext of m.ext || []) {
|
|
120
|
-
// Ignore encrypted extensions (not yet supported in mediasoup).
|
|
121
|
-
if (ext['encrypt-uri']) {
|
|
122
|
-
continue;
|
|
123
|
-
}
|
|
124
|
-
const headerExtension = {
|
|
125
|
-
kind: kind,
|
|
126
|
-
uri: ext.uri,
|
|
127
|
-
preferredId: ext.value
|
|
128
|
-
};
|
|
129
|
-
headerExtensions.push(headerExtension);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
const rtpCapabilities = {
|
|
133
|
-
codecs: Array.from(codecsMap.values()),
|
|
134
|
-
headerExtensions: headerExtensions
|
|
135
|
-
};
|
|
136
|
-
return rtpCapabilities;
|
|
137
|
-
}
|
|
138
|
-
exports.extractRtpCapabilities = extractRtpCapabilities;
|
|
139
|
-
function extractDtlsParameters({ sdpObject }) {
|
|
140
|
-
const mediaObject = (sdpObject.media || [])
|
|
141
|
-
.find((m) => (m.iceUfrag && m.port !== 0));
|
|
142
|
-
if (!mediaObject) {
|
|
143
|
-
throw new Error('no active media section found');
|
|
144
|
-
}
|
|
145
|
-
const fingerprint = mediaObject.fingerprint || sdpObject.fingerprint;
|
|
146
|
-
let role;
|
|
147
|
-
switch (mediaObject.setup) {
|
|
148
|
-
case 'active':
|
|
149
|
-
role = 'client';
|
|
150
|
-
break;
|
|
151
|
-
case 'passive':
|
|
152
|
-
role = 'server';
|
|
153
|
-
break;
|
|
154
|
-
case 'actpass':
|
|
155
|
-
role = 'auto';
|
|
156
|
-
break;
|
|
157
|
-
}
|
|
158
|
-
const dtlsParameters = {
|
|
159
|
-
role,
|
|
160
|
-
fingerprints: [
|
|
161
|
-
{
|
|
162
|
-
algorithm: fingerprint.type,
|
|
163
|
-
value: fingerprint.hash
|
|
164
|
-
}
|
|
165
|
-
]
|
|
166
|
-
};
|
|
167
|
-
return dtlsParameters;
|
|
168
|
-
}
|
|
169
|
-
exports.extractDtlsParameters = extractDtlsParameters;
|
|
170
|
-
function getCname({ offerMediaObject }) {
|
|
171
|
-
const ssrcCnameLine = (offerMediaObject.ssrcs || [])
|
|
172
|
-
.find((line) => line.attribute === 'cname');
|
|
173
|
-
if (!ssrcCnameLine) {
|
|
174
|
-
return '';
|
|
175
|
-
}
|
|
176
|
-
return ssrcCnameLine.value;
|
|
177
|
-
}
|
|
178
|
-
exports.getCname = getCname;
|
|
179
|
-
/**
|
|
180
|
-
* Apply codec parameters in the given SDP m= section answer based on the
|
|
181
|
-
* given RTP parameters of an offer.
|
|
182
|
-
*/
|
|
183
|
-
function applyCodecParameters({ offerRtpParameters, answerMediaObject }) {
|
|
184
|
-
for (const codec of offerRtpParameters.codecs) {
|
|
185
|
-
const mimeType = codec.mimeType.toLowerCase();
|
|
186
|
-
// Avoid parsing codec parameters for unhandled codecs.
|
|
187
|
-
if (mimeType !== 'audio/opus') {
|
|
188
|
-
continue;
|
|
189
|
-
}
|
|
190
|
-
const rtp = (answerMediaObject.rtp || [])
|
|
191
|
-
.find((r) => r.payload === codec.payloadType);
|
|
192
|
-
if (!rtp) {
|
|
193
|
-
continue;
|
|
194
|
-
}
|
|
195
|
-
// Just in case.
|
|
196
|
-
answerMediaObject.fmtp = answerMediaObject.fmtp || [];
|
|
197
|
-
let fmtp = answerMediaObject.fmtp
|
|
198
|
-
.find((f) => f.payload === codec.payloadType);
|
|
199
|
-
if (!fmtp) {
|
|
200
|
-
fmtp = { payload: codec.payloadType, config: '' };
|
|
201
|
-
answerMediaObject.fmtp.push(fmtp);
|
|
202
|
-
}
|
|
203
|
-
const parameters = sdpTransform.parseParams(fmtp.config);
|
|
204
|
-
switch (mimeType) {
|
|
205
|
-
case 'audio/opus':
|
|
206
|
-
{
|
|
207
|
-
const spropStereo = codec.parameters['sprop-stereo'];
|
|
208
|
-
if (spropStereo !== undefined) {
|
|
209
|
-
parameters.stereo = spropStereo ? 1 : 0;
|
|
210
|
-
}
|
|
211
|
-
break;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
// Write the codec fmtp.config back.
|
|
215
|
-
fmtp.config = '';
|
|
216
|
-
for (const key of Object.keys(parameters)) {
|
|
217
|
-
if (fmtp.config) {
|
|
218
|
-
fmtp.config += ';';
|
|
219
|
-
}
|
|
220
|
-
fmtp.config += `${key}=${parameters[key]}`;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
exports.applyCodecParameters = applyCodecParameters;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { MediaKind, RtpEncodingParameters } from '../../RtpParameters';
|
|
2
|
-
export declare function extractPlainRtpParameters({ sdpObject, kind }: {
|
|
3
|
-
sdpObject: any;
|
|
4
|
-
kind: MediaKind;
|
|
5
|
-
}): {
|
|
6
|
-
ip: string;
|
|
7
|
-
ipVersion: 4 | 6;
|
|
8
|
-
port: number;
|
|
9
|
-
};
|
|
10
|
-
export declare function getRtpEncodings({ sdpObject, kind }: {
|
|
11
|
-
sdpObject: any;
|
|
12
|
-
kind: MediaKind;
|
|
13
|
-
}): RtpEncodingParameters[];
|
|
14
|
-
//# sourceMappingURL=plainRtpUtils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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,CACxC,EACC,SAAS,EACT,IAAI,EACJ,EACD;IACC,SAAS,EAAE,GAAG,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;CAChB,GAEF;IACC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACb,CAiBA;AAED,wBAAgB,eAAe,CAC9B,EACC,SAAS,EACT,IAAI,EACJ,EACD;IACC,SAAS,EAAE,GAAG,CAAC;IACf,IAAI,EAAE,SAAS,CAAC;CAChB,GACC,qBAAqB,EAAE,CAqBzB"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getRtpEncodings = exports.extractPlainRtpParameters = void 0;
|
|
4
|
-
function extractPlainRtpParameters({ sdpObject, kind }) {
|
|
5
|
-
const mediaObject = (sdpObject.media || [])
|
|
6
|
-
.find((m) => m.type === kind);
|
|
7
|
-
if (!mediaObject) {
|
|
8
|
-
throw new Error(`m=${kind} section not found`);
|
|
9
|
-
}
|
|
10
|
-
const connectionObject = mediaObject.connection || sdpObject.connection;
|
|
11
|
-
return {
|
|
12
|
-
ip: connectionObject.ip,
|
|
13
|
-
ipVersion: connectionObject.version,
|
|
14
|
-
port: mediaObject.port
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
exports.extractPlainRtpParameters = extractPlainRtpParameters;
|
|
18
|
-
function getRtpEncodings({ sdpObject, kind }) {
|
|
19
|
-
const mediaObject = (sdpObject.media || [])
|
|
20
|
-
.find((m) => m.type === kind);
|
|
21
|
-
if (!mediaObject) {
|
|
22
|
-
throw new Error(`m=${kind} section not found`);
|
|
23
|
-
}
|
|
24
|
-
const ssrcCnameLine = (mediaObject.ssrcs || [])[0];
|
|
25
|
-
const ssrc = ssrcCnameLine ? ssrcCnameLine.id : null;
|
|
26
|
-
if (ssrc) {
|
|
27
|
-
return [{ ssrc }];
|
|
28
|
-
}
|
|
29
|
-
else {
|
|
30
|
-
return [];
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
exports.getRtpEncodings = getRtpEncodings;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { RtpEncodingParameters } from '../../RtpParameters';
|
|
2
|
-
export declare function getRtpEncodings({ offerMediaObject, track }: {
|
|
3
|
-
offerMediaObject: any;
|
|
4
|
-
track: MediaStreamTrack;
|
|
5
|
-
}): RtpEncodingParameters[];
|
|
6
|
-
/**
|
|
7
|
-
* Adds multi-ssrc based simulcast into the given SDP media section offer.
|
|
8
|
-
*/
|
|
9
|
-
export declare function addLegacySimulcast({ offerMediaObject, track, numStreams }: {
|
|
10
|
-
offerMediaObject: any;
|
|
11
|
-
track: MediaStreamTrack;
|
|
12
|
-
numStreams: number;
|
|
13
|
-
}): void;
|
|
14
|
-
//# sourceMappingURL=planBUtils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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,CAC9B,EACC,gBAAgB,EAChB,KAAK,EACL,EACD;IACC,gBAAgB,EAAE,GAAG,CAAC;IACtB,KAAK,EAAE,gBAAgB,CAAC;CACxB,GACC,qBAAqB,EAAE,CAmFzB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CACjC,EACC,gBAAgB,EAChB,KAAK,EACL,UAAU,EACV,EACD;IACC,gBAAgB,EAAE,GAAG,CAAC;IACtB,KAAK,EAAE,gBAAgB,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACnB,GACC,IAAI,CA0IN"}
|