mediasoup-client 3.13.0 → 3.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/DataConsumer.d.ts.map +1 -1
- package/lib/DataConsumer.js +5 -8
- package/lib/DataProducer.d.ts.map +1 -1
- package/lib/DataProducer.js +5 -7
- package/lib/Device.d.ts +2 -2
- package/lib/Device.d.ts.map +1 -1
- package/lib/Device.js +53 -70
- package/lib/RtpParameters.d.ts +8 -8
- package/lib/RtpParameters.d.ts.map +1 -1
- package/lib/Transport.d.ts +4 -4
- package/lib/Transport.d.ts.map +1 -1
- package/lib/Transport.js +6 -7
- package/lib/enhancedEvents.d.ts.map +1 -1
- package/lib/enhancedEvents.js +1 -0
- package/lib/handlers/Chrome111.d.ts +7 -12
- package/lib/handlers/Chrome111.d.ts.map +1 -1
- package/lib/handlers/Chrome111.js +130 -89
- package/lib/handlers/Chrome74.d.ts +7 -12
- package/lib/handlers/Chrome74.d.ts.map +1 -1
- package/lib/handlers/Chrome74.js +130 -85
- package/lib/handlers/FakeHandler.d.ts +6 -9
- package/lib/handlers/FakeHandler.d.ts.map +1 -1
- package/lib/handlers/FakeHandler.js +201 -60
- package/lib/handlers/Firefox120.d.ts +7 -12
- package/lib/handlers/Firefox120.d.ts.map +1 -1
- package/lib/handlers/Firefox120.js +154 -111
- package/lib/handlers/HandlerInterface.d.ts +11 -9
- package/lib/handlers/HandlerInterface.d.ts.map +1 -1
- package/lib/handlers/ReactNative106.d.ts +7 -12
- package/lib/handlers/ReactNative106.d.ts.map +1 -1
- package/lib/handlers/ReactNative106.js +136 -92
- package/lib/handlers/Safari12.d.ts +7 -12
- package/lib/handlers/Safari12.d.ts.map +1 -1
- package/lib/handlers/Safari12.js +132 -86
- 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 +43 -45
- package/lib/handlers/sdp/RemoteSdp.d.ts +5 -6
- package/lib/handlers/sdp/RemoteSdp.d.ts.map +1 -1
- package/lib/handlers/sdp/RemoteSdp.js +5 -8
- package/lib/handlers/sdp/commonUtils.d.ts +5 -4
- package/lib/handlers/sdp/commonUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/commonUtils.js +2 -2
- package/lib/handlers/sdp/plainRtpUtils.d.ts +4 -3
- package/lib/handlers/sdp/plainRtpUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/plainRtpUtils.js +2 -2
- package/lib/handlers/sdp/unifiedPlanUtils.d.ts +3 -2
- package/lib/handlers/sdp/unifiedPlanUtils.d.ts.map +1 -1
- package/lib/handlers/sdp/unifiedPlanUtils.js +10 -8
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/ortc.d.ts +7 -6
- package/lib/ortc.d.ts.map +1 -1
- package/lib/ortc.js +13 -14
- package/lib/privateTypes.d.ts +27 -0
- package/lib/privateTypes.d.ts.map +1 -0
- package/lib/privateTypes.js +2 -0
- package/lib/test/test.js +18 -1
- package/lib/utils.d.ts +1 -1
- package/lib/utils.d.ts.map +1 -1
- package/lib/utils.js +5 -4
- package/package.json +1 -2
|
@@ -6,11 +6,11 @@ const Logger_1 = require("../Logger");
|
|
|
6
6
|
const errors_1 = require("../errors");
|
|
7
7
|
const utils = require("../utils");
|
|
8
8
|
const ortc = require("../ortc");
|
|
9
|
+
const scalabilityModes_1 = require("../scalabilityModes");
|
|
9
10
|
const sdpCommonUtils = require("./sdp/commonUtils");
|
|
10
11
|
const sdpUnifiedPlanUtils = require("./sdp/unifiedPlanUtils");
|
|
11
12
|
const HandlerInterface_1 = require("./HandlerInterface");
|
|
12
13
|
const RemoteSdp_1 = require("./sdp/RemoteSdp");
|
|
13
|
-
const scalabilityModes_1 = require("../scalabilityModes");
|
|
14
14
|
const logger = new Logger_1.Logger('Firefox120');
|
|
15
15
|
const NAME = 'Firefox120';
|
|
16
16
|
const SCTP_NUM_STREAMS = { OS: 16, MIS: 2048 };
|
|
@@ -42,97 +42,79 @@ class Firefox120 extends HandlerInterface_1.HandlerInterface {
|
|
|
42
42
|
* Creates a factory function.
|
|
43
43
|
*/
|
|
44
44
|
static createFactory() {
|
|
45
|
-
return () => new Firefox120();
|
|
46
|
-
}
|
|
47
|
-
constructor() {
|
|
48
|
-
super();
|
|
49
|
-
}
|
|
50
|
-
get name() {
|
|
51
|
-
return NAME;
|
|
52
|
-
}
|
|
53
|
-
close() {
|
|
54
|
-
logger.debug('close()');
|
|
55
|
-
if (this._closed) {
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
this._closed = true;
|
|
59
|
-
// Close RTCPeerConnection.
|
|
60
|
-
if (this._pc) {
|
|
61
|
-
try {
|
|
62
|
-
this._pc.close();
|
|
63
|
-
}
|
|
64
|
-
catch (error) { }
|
|
65
|
-
}
|
|
66
|
-
this.emit('@close');
|
|
67
|
-
}
|
|
68
|
-
async getNativeRtpCapabilities() {
|
|
69
|
-
logger.debug('getNativeRtpCapabilities()');
|
|
70
|
-
const pc = new RTCPeerConnection({
|
|
71
|
-
iceServers: [],
|
|
72
|
-
iceTransportPolicy: 'all',
|
|
73
|
-
bundlePolicy: 'max-bundle',
|
|
74
|
-
rtcpMuxPolicy: 'require',
|
|
75
|
-
});
|
|
76
|
-
// NOTE: We need to add a real video track to get the RID extension mapping,
|
|
77
|
-
// otherwiser Firefox doesn't include it in the SDP.
|
|
78
|
-
const canvas = document.createElement('canvas');
|
|
79
|
-
// NOTE: Otherwise Firefox fails in next line.
|
|
80
|
-
canvas.getContext('2d');
|
|
81
|
-
const fakeStream = canvas.captureStream();
|
|
82
|
-
const fakeVideoTrack = fakeStream.getVideoTracks()[0];
|
|
83
|
-
try {
|
|
84
|
-
pc.addTransceiver('audio', { direction: 'sendrecv' });
|
|
85
|
-
pc.addTransceiver(fakeVideoTrack, {
|
|
86
|
-
direction: 'sendrecv',
|
|
87
|
-
sendEncodings: [
|
|
88
|
-
{ rid: 'r0', maxBitrate: 100000 },
|
|
89
|
-
{ rid: 'r1', maxBitrate: 500000 },
|
|
90
|
-
],
|
|
91
|
-
});
|
|
92
|
-
const offer = await pc.createOffer();
|
|
93
|
-
try {
|
|
94
|
-
canvas.remove();
|
|
95
|
-
}
|
|
96
|
-
catch (error) { }
|
|
97
|
-
try {
|
|
98
|
-
fakeVideoTrack.stop();
|
|
99
|
-
}
|
|
100
|
-
catch (error) { }
|
|
101
|
-
try {
|
|
102
|
-
pc.close();
|
|
103
|
-
}
|
|
104
|
-
catch (error) { }
|
|
105
|
-
const sdpObject = sdpTransform.parse(offer.sdp);
|
|
106
|
-
const nativeRtpCapabilities = sdpCommonUtils.extractRtpCapabilities({
|
|
107
|
-
sdpObject,
|
|
108
|
-
});
|
|
109
|
-
return nativeRtpCapabilities;
|
|
110
|
-
}
|
|
111
|
-
catch (error) {
|
|
112
|
-
try {
|
|
113
|
-
canvas.remove();
|
|
114
|
-
}
|
|
115
|
-
catch (error2) { }
|
|
116
|
-
try {
|
|
117
|
-
fakeVideoTrack.stop();
|
|
118
|
-
}
|
|
119
|
-
catch (error2) { }
|
|
120
|
-
try {
|
|
121
|
-
pc.close();
|
|
122
|
-
}
|
|
123
|
-
catch (error2) { }
|
|
124
|
-
throw error;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
async getNativeSctpCapabilities() {
|
|
128
|
-
logger.debug('getNativeSctpCapabilities()');
|
|
129
45
|
return {
|
|
130
|
-
|
|
46
|
+
name: NAME,
|
|
47
|
+
factory: (options) => new Firefox120(options),
|
|
48
|
+
getNativeRtpCapabilities: async () => {
|
|
49
|
+
logger.debug('getNativeRtpCapabilities()');
|
|
50
|
+
const pc = new RTCPeerConnection({
|
|
51
|
+
iceServers: [],
|
|
52
|
+
iceTransportPolicy: 'all',
|
|
53
|
+
bundlePolicy: 'max-bundle',
|
|
54
|
+
rtcpMuxPolicy: 'require',
|
|
55
|
+
});
|
|
56
|
+
// NOTE: We need to add a real video track to get the RID extension mapping,
|
|
57
|
+
// otherwiser Firefox doesn't include it in the SDP.
|
|
58
|
+
const canvas = document.createElement('canvas');
|
|
59
|
+
// NOTE: Otherwise Firefox fails in next line.
|
|
60
|
+
canvas.getContext('2d');
|
|
61
|
+
const fakeStream = canvas.captureStream();
|
|
62
|
+
const fakeVideoTrack = fakeStream.getVideoTracks()[0];
|
|
63
|
+
try {
|
|
64
|
+
pc.addTransceiver('audio', { direction: 'sendrecv' });
|
|
65
|
+
pc.addTransceiver(fakeVideoTrack, {
|
|
66
|
+
direction: 'sendrecv',
|
|
67
|
+
sendEncodings: [
|
|
68
|
+
{ rid: 'r0', maxBitrate: 100000 },
|
|
69
|
+
{ rid: 'r1', maxBitrate: 500000 },
|
|
70
|
+
],
|
|
71
|
+
});
|
|
72
|
+
const offer = await pc.createOffer();
|
|
73
|
+
try {
|
|
74
|
+
canvas.remove();
|
|
75
|
+
}
|
|
76
|
+
catch (error) { }
|
|
77
|
+
try {
|
|
78
|
+
fakeVideoTrack.stop();
|
|
79
|
+
}
|
|
80
|
+
catch (error) { }
|
|
81
|
+
try {
|
|
82
|
+
pc.close();
|
|
83
|
+
}
|
|
84
|
+
catch (error) { }
|
|
85
|
+
const sdpObject = sdpTransform.parse(offer.sdp);
|
|
86
|
+
const nativeRtpCapabilities = sdpCommonUtils.extractRtpCapabilities({
|
|
87
|
+
sdpObject,
|
|
88
|
+
});
|
|
89
|
+
return nativeRtpCapabilities;
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
try {
|
|
93
|
+
canvas.remove();
|
|
94
|
+
}
|
|
95
|
+
catch (error2) { }
|
|
96
|
+
try {
|
|
97
|
+
fakeVideoTrack.stop();
|
|
98
|
+
}
|
|
99
|
+
catch (error2) { }
|
|
100
|
+
try {
|
|
101
|
+
pc.close();
|
|
102
|
+
}
|
|
103
|
+
catch (error2) { }
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
getNativeSctpCapabilities: async () => {
|
|
108
|
+
logger.debug('getNativeSctpCapabilities()');
|
|
109
|
+
return {
|
|
110
|
+
numStreams: SCTP_NUM_STREAMS,
|
|
111
|
+
};
|
|
112
|
+
},
|
|
131
113
|
};
|
|
132
114
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
logger.debug('
|
|
115
|
+
constructor({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, extendedRtpCapabilities, }) {
|
|
116
|
+
super();
|
|
117
|
+
logger.debug('constructor()');
|
|
136
118
|
this._direction = direction;
|
|
137
119
|
this._remoteSdp = new RemoteSdp_1.RemoteSdp({
|
|
138
120
|
iceParameters,
|
|
@@ -154,7 +136,7 @@ class Firefox120 extends HandlerInterface_1.HandlerInterface {
|
|
|
154
136
|
bundlePolicy: 'max-bundle',
|
|
155
137
|
rtcpMuxPolicy: 'require',
|
|
156
138
|
...additionalSettings,
|
|
157
|
-
}
|
|
139
|
+
});
|
|
158
140
|
this._pc.addEventListener('icegatheringstatechange', () => {
|
|
159
141
|
this.emit('@icegatheringstatechange', this._pc.iceGatheringState);
|
|
160
142
|
});
|
|
@@ -195,6 +177,24 @@ class Firefox120 extends HandlerInterface_1.HandlerInterface {
|
|
|
195
177
|
});
|
|
196
178
|
}
|
|
197
179
|
}
|
|
180
|
+
get name() {
|
|
181
|
+
return NAME;
|
|
182
|
+
}
|
|
183
|
+
close() {
|
|
184
|
+
logger.debug('close()');
|
|
185
|
+
if (this._closed) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
this._closed = true;
|
|
189
|
+
// Close RTCPeerConnection.
|
|
190
|
+
if (this._pc) {
|
|
191
|
+
try {
|
|
192
|
+
this._pc.close();
|
|
193
|
+
}
|
|
194
|
+
catch (error) { }
|
|
195
|
+
}
|
|
196
|
+
this.emit('@close');
|
|
197
|
+
}
|
|
198
198
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
199
199
|
async updateIceServers(iceServers) {
|
|
200
200
|
this.assertNotClosed();
|
|
@@ -213,12 +213,18 @@ class Firefox120 extends HandlerInterface_1.HandlerInterface {
|
|
|
213
213
|
const offer = await this._pc.createOffer({ iceRestart: true });
|
|
214
214
|
logger.debug('restartIce() | calling pc.setLocalDescription() [offer:%o]', offer);
|
|
215
215
|
await this._pc.setLocalDescription(offer);
|
|
216
|
-
const answer = {
|
|
216
|
+
const answer = {
|
|
217
|
+
type: 'answer',
|
|
218
|
+
sdp: this._remoteSdp.getSdp(),
|
|
219
|
+
};
|
|
217
220
|
logger.debug('restartIce() | calling pc.setRemoteDescription() [answer:%o]', answer);
|
|
218
221
|
await this._pc.setRemoteDescription(answer);
|
|
219
222
|
}
|
|
220
223
|
else {
|
|
221
|
-
const offer = {
|
|
224
|
+
const offer = {
|
|
225
|
+
type: 'offer',
|
|
226
|
+
sdp: this._remoteSdp.getSdp(),
|
|
227
|
+
};
|
|
222
228
|
logger.debug('restartIce() | calling pc.setRemoteDescription() [offer:%o]', offer);
|
|
223
229
|
await this._pc.setRemoteDescription(offer);
|
|
224
230
|
const answer = await this._pc.createAnswer();
|
|
@@ -249,7 +255,7 @@ class Firefox120 extends HandlerInterface_1.HandlerInterface {
|
|
|
249
255
|
// section that it should use, so don't reuse closed media sections.
|
|
250
256
|
// https://github.com/versatica/mediasoup-client/issues/104
|
|
251
257
|
//
|
|
252
|
-
// const mediaSectionIdx = this._remoteSdp
|
|
258
|
+
// const mediaSectionIdx = this._remoteSdp.getNextMediaSectionIdx();
|
|
253
259
|
const transceiver = this._pc.addTransceiver(track, {
|
|
254
260
|
direction: 'sendonly',
|
|
255
261
|
streams: [this._sendStream],
|
|
@@ -260,8 +266,6 @@ class Firefox120 extends HandlerInterface_1.HandlerInterface {
|
|
|
260
266
|
}
|
|
261
267
|
const offer = await this._pc.createOffer();
|
|
262
268
|
let localSdpObject = sdpTransform.parse(offer.sdp);
|
|
263
|
-
// @ts-expect-error --- sdpTransform.SessionDescription type doesn't
|
|
264
|
-
// define extmapAllowMixed field.
|
|
265
269
|
if (localSdpObject.extmapAllowMixed) {
|
|
266
270
|
this._remoteSdp.setSessionExtmapAllowMixed();
|
|
267
271
|
}
|
|
@@ -322,7 +326,10 @@ class Firefox120 extends HandlerInterface_1.HandlerInterface {
|
|
|
322
326
|
answerRtpParameters: sendingRemoteRtpParameters,
|
|
323
327
|
codecOptions,
|
|
324
328
|
});
|
|
325
|
-
const answer = {
|
|
329
|
+
const answer = {
|
|
330
|
+
type: 'answer',
|
|
331
|
+
sdp: this._remoteSdp.getSdp(),
|
|
332
|
+
};
|
|
326
333
|
logger.debug('send() | calling pc.setRemoteDescription() [answer:%o]', answer);
|
|
327
334
|
await this._pc.setRemoteDescription(answer);
|
|
328
335
|
// Store in the map.
|
|
@@ -355,12 +362,15 @@ class Firefox120 extends HandlerInterface_1.HandlerInterface {
|
|
|
355
362
|
this._pc.removeTrack(transceiver.sender);
|
|
356
363
|
// NOTE: Cannot use closeMediaSection() due to the the note above in send()
|
|
357
364
|
// method.
|
|
358
|
-
// this._remoteSdp
|
|
365
|
+
// this._remoteSdp.closeMediaSection(transceiver.mid);
|
|
359
366
|
this._remoteSdp.disableMediaSection(transceiver.mid);
|
|
360
367
|
const offer = await this._pc.createOffer();
|
|
361
368
|
logger.debug('stopSending() | calling pc.setLocalDescription() [offer:%o]', offer);
|
|
362
369
|
await this._pc.setLocalDescription(offer);
|
|
363
|
-
const answer = {
|
|
370
|
+
const answer = {
|
|
371
|
+
type: 'answer',
|
|
372
|
+
sdp: this._remoteSdp.getSdp(),
|
|
373
|
+
};
|
|
364
374
|
logger.debug('stopSending() | calling pc.setRemoteDescription() [answer:%o]', answer);
|
|
365
375
|
await this._pc.setRemoteDescription(answer);
|
|
366
376
|
this._mapMidTransceiver.delete(localId);
|
|
@@ -378,7 +388,10 @@ class Firefox120 extends HandlerInterface_1.HandlerInterface {
|
|
|
378
388
|
const offer = await this._pc.createOffer();
|
|
379
389
|
logger.debug('pauseSending() | calling pc.setLocalDescription() [offer:%o]', offer);
|
|
380
390
|
await this._pc.setLocalDescription(offer);
|
|
381
|
-
const answer = {
|
|
391
|
+
const answer = {
|
|
392
|
+
type: 'answer',
|
|
393
|
+
sdp: this._remoteSdp.getSdp(),
|
|
394
|
+
};
|
|
382
395
|
logger.debug('pauseSending() | calling pc.setRemoteDescription() [answer:%o]', answer);
|
|
383
396
|
await this._pc.setRemoteDescription(answer);
|
|
384
397
|
}
|
|
@@ -395,7 +408,10 @@ class Firefox120 extends HandlerInterface_1.HandlerInterface {
|
|
|
395
408
|
const offer = await this._pc.createOffer();
|
|
396
409
|
logger.debug('resumeSending() | calling pc.setLocalDescription() [offer:%o]', offer);
|
|
397
410
|
await this._pc.setLocalDescription(offer);
|
|
398
|
-
const answer = {
|
|
411
|
+
const answer = {
|
|
412
|
+
type: 'answer',
|
|
413
|
+
sdp: this._remoteSdp.getSdp(),
|
|
414
|
+
};
|
|
399
415
|
logger.debug('resumeSending() | calling pc.setRemoteDescription() [answer:%o]', answer);
|
|
400
416
|
await this._pc.setRemoteDescription(answer);
|
|
401
417
|
}
|
|
@@ -436,7 +452,10 @@ class Firefox120 extends HandlerInterface_1.HandlerInterface {
|
|
|
436
452
|
const offer = await this._pc.createOffer();
|
|
437
453
|
logger.debug('setMaxSpatialLayer() | calling pc.setLocalDescription() [offer:%o]', offer);
|
|
438
454
|
await this._pc.setLocalDescription(offer);
|
|
439
|
-
const answer = {
|
|
455
|
+
const answer = {
|
|
456
|
+
type: 'answer',
|
|
457
|
+
sdp: this._remoteSdp.getSdp(),
|
|
458
|
+
};
|
|
440
459
|
logger.debug('setMaxSpatialLayer() | calling pc.setRemoteDescription() [answer:%o]', answer);
|
|
441
460
|
await this._pc.setRemoteDescription(answer);
|
|
442
461
|
}
|
|
@@ -457,7 +476,10 @@ class Firefox120 extends HandlerInterface_1.HandlerInterface {
|
|
|
457
476
|
const offer = await this._pc.createOffer();
|
|
458
477
|
logger.debug('setRtpEncodingParameters() | calling pc.setLocalDescription() [offer:%o]', offer);
|
|
459
478
|
await this._pc.setLocalDescription(offer);
|
|
460
|
-
const answer = {
|
|
479
|
+
const answer = {
|
|
480
|
+
type: 'answer',
|
|
481
|
+
sdp: this._remoteSdp.getSdp(),
|
|
482
|
+
};
|
|
461
483
|
logger.debug('setRtpEncodingParameters() | calling pc.setRemoteDescription() [answer:%o]', answer);
|
|
462
484
|
await this._pc.setRemoteDescription(answer);
|
|
463
485
|
}
|
|
@@ -491,14 +513,17 @@ class Firefox120 extends HandlerInterface_1.HandlerInterface {
|
|
|
491
513
|
if (!this._hasDataChannelMediaSection) {
|
|
492
514
|
const offer = await this._pc.createOffer();
|
|
493
515
|
const localSdpObject = sdpTransform.parse(offer.sdp);
|
|
494
|
-
const offerMediaObject = localSdpObject.media.find(
|
|
516
|
+
const offerMediaObject = localSdpObject.media.find(m => m.type === 'application');
|
|
495
517
|
if (!this._transportReady) {
|
|
496
518
|
await this.setupTransport({ localDtlsRole: 'client', localSdpObject });
|
|
497
519
|
}
|
|
498
520
|
logger.debug('sendDataChannel() | calling pc.setLocalDescription() [offer:%o]', offer);
|
|
499
521
|
await this._pc.setLocalDescription(offer);
|
|
500
522
|
this._remoteSdp.sendSctpAssociation({ offerMediaObject });
|
|
501
|
-
const answer = {
|
|
523
|
+
const answer = {
|
|
524
|
+
type: 'answer',
|
|
525
|
+
sdp: this._remoteSdp.getSdp(),
|
|
526
|
+
};
|
|
502
527
|
logger.debug('sendDataChannel() | calling pc.setRemoteDescription() [answer:%o]', answer);
|
|
503
528
|
await this._pc.setRemoteDescription(answer);
|
|
504
529
|
this._hasDataChannelMediaSection = true;
|
|
@@ -529,7 +554,10 @@ class Firefox120 extends HandlerInterface_1.HandlerInterface {
|
|
|
529
554
|
trackId,
|
|
530
555
|
});
|
|
531
556
|
}
|
|
532
|
-
const offer = {
|
|
557
|
+
const offer = {
|
|
558
|
+
type: 'offer',
|
|
559
|
+
sdp: this._remoteSdp.getSdp(),
|
|
560
|
+
};
|
|
533
561
|
logger.debug('receive() | calling pc.setRemoteDescription() [offer:%o]', offer);
|
|
534
562
|
await this._pc.setRemoteDescription(offer);
|
|
535
563
|
for (const options of optionsList) {
|
|
@@ -550,14 +578,17 @@ class Firefox120 extends HandlerInterface_1.HandlerInterface {
|
|
|
550
578
|
for (const options of optionsList) {
|
|
551
579
|
const { trackId, rtpParameters } = options;
|
|
552
580
|
const localId = mapLocalId.get(trackId);
|
|
553
|
-
const answerMediaObject = localSdpObject.media.find(
|
|
581
|
+
const answerMediaObject = localSdpObject.media.find(m => String(m.mid) === localId);
|
|
554
582
|
// May need to modify codec parameters in the answer based on codec
|
|
555
583
|
// parameters in the offer.
|
|
556
584
|
sdpCommonUtils.applyCodecParameters({
|
|
557
585
|
offerRtpParameters: rtpParameters,
|
|
558
586
|
answerMediaObject,
|
|
559
587
|
});
|
|
560
|
-
answer = {
|
|
588
|
+
answer = {
|
|
589
|
+
type: 'answer',
|
|
590
|
+
sdp: sdpTransform.write(localSdpObject),
|
|
591
|
+
};
|
|
561
592
|
}
|
|
562
593
|
if (!this._transportReady) {
|
|
563
594
|
await this.setupTransport({ localDtlsRole: 'client', localSdpObject });
|
|
@@ -596,7 +627,10 @@ class Firefox120 extends HandlerInterface_1.HandlerInterface {
|
|
|
596
627
|
}
|
|
597
628
|
this._remoteSdp.closeMediaSection(transceiver.mid);
|
|
598
629
|
}
|
|
599
|
-
const offer = {
|
|
630
|
+
const offer = {
|
|
631
|
+
type: 'offer',
|
|
632
|
+
sdp: this._remoteSdp.getSdp(),
|
|
633
|
+
};
|
|
600
634
|
logger.debug('stopReceiving() | calling pc.setRemoteDescription() [offer:%o]', offer);
|
|
601
635
|
await this._pc.setRemoteDescription(offer);
|
|
602
636
|
const answer = await this._pc.createAnswer();
|
|
@@ -618,7 +652,10 @@ class Firefox120 extends HandlerInterface_1.HandlerInterface {
|
|
|
618
652
|
transceiver.direction = 'inactive';
|
|
619
653
|
this._remoteSdp.pauseMediaSection(localId);
|
|
620
654
|
}
|
|
621
|
-
const offer = {
|
|
655
|
+
const offer = {
|
|
656
|
+
type: 'offer',
|
|
657
|
+
sdp: this._remoteSdp.getSdp(),
|
|
658
|
+
};
|
|
622
659
|
logger.debug('pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]', offer);
|
|
623
660
|
await this._pc.setRemoteDescription(offer);
|
|
624
661
|
const answer = await this._pc.createAnswer();
|
|
@@ -637,7 +674,10 @@ class Firefox120 extends HandlerInterface_1.HandlerInterface {
|
|
|
637
674
|
transceiver.direction = 'recvonly';
|
|
638
675
|
this._remoteSdp.resumeReceivingMediaSection(localId);
|
|
639
676
|
}
|
|
640
|
-
const offer = {
|
|
677
|
+
const offer = {
|
|
678
|
+
type: 'offer',
|
|
679
|
+
sdp: this._remoteSdp.getSdp(),
|
|
680
|
+
};
|
|
641
681
|
logger.debug('resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]', offer);
|
|
642
682
|
await this._pc.setRemoteDescription(offer);
|
|
643
683
|
const answer = await this._pc.createAnswer();
|
|
@@ -670,7 +710,10 @@ class Firefox120 extends HandlerInterface_1.HandlerInterface {
|
|
|
670
710
|
// m=application section.
|
|
671
711
|
if (!this._hasDataChannelMediaSection) {
|
|
672
712
|
this._remoteSdp.receiveSctpAssociation();
|
|
673
|
-
const offer = {
|
|
713
|
+
const offer = {
|
|
714
|
+
type: 'offer',
|
|
715
|
+
sdp: this._remoteSdp.getSdp(),
|
|
716
|
+
};
|
|
674
717
|
logger.debug('receiveDataChannel() | calling pc.setRemoteDescription() [offer:%o]', offer);
|
|
675
718
|
await this._pc.setRemoteDescription(offer);
|
|
676
719
|
const answer = await this._pc.createAnswer();
|
|
@@ -4,8 +4,8 @@ import type { ProducerCodecOptions, OnRtpSenderCallback } from '../Producer';
|
|
|
4
4
|
import type { OnRtpReceiverCallback } from '../Consumer';
|
|
5
5
|
import type { RtpCapabilities, RtpCodecCapability, RtpParameters, RtpEncodingParameters } from '../RtpParameters';
|
|
6
6
|
import type { SctpCapabilities, SctpParameters, SctpStreamParameters } from '../SctpParameters';
|
|
7
|
-
|
|
8
|
-
export type
|
|
7
|
+
import type { ExtendedRtpCapabilities } from '../privateTypes';
|
|
8
|
+
export type HandlerOptions = {
|
|
9
9
|
direction: 'send' | 'recv';
|
|
10
10
|
iceParameters: IceParameters;
|
|
11
11
|
iceCandidates: IceCandidate[];
|
|
@@ -13,9 +13,14 @@ export type HandlerRunOptions = {
|
|
|
13
13
|
sctpParameters?: SctpParameters;
|
|
14
14
|
iceServers?: RTCIceServer[];
|
|
15
15
|
iceTransportPolicy?: RTCIceTransportPolicy;
|
|
16
|
-
additionalSettings?:
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
additionalSettings?: Partial<RTCConfiguration>;
|
|
17
|
+
extendedRtpCapabilities: ExtendedRtpCapabilities;
|
|
18
|
+
};
|
|
19
|
+
export type HandlerFactory = {
|
|
20
|
+
name: string;
|
|
21
|
+
factory: (options: HandlerOptions) => HandlerInterface;
|
|
22
|
+
getNativeRtpCapabilities(): Promise<RtpCapabilities>;
|
|
23
|
+
getNativeSctpCapabilities(): Promise<SctpCapabilities>;
|
|
19
24
|
};
|
|
20
25
|
export type HandlerSendOptions = {
|
|
21
26
|
track: MediaStreamTrack;
|
|
@@ -77,9 +82,6 @@ export declare abstract class HandlerInterface extends EnhancedEventEmitter<Hand
|
|
|
77
82
|
constructor();
|
|
78
83
|
abstract get name(): string;
|
|
79
84
|
abstract close(): void;
|
|
80
|
-
abstract getNativeRtpCapabilities(): Promise<RtpCapabilities>;
|
|
81
|
-
abstract getNativeSctpCapabilities(): Promise<SctpCapabilities>;
|
|
82
|
-
abstract run(options: HandlerRunOptions): void;
|
|
83
85
|
abstract updateIceServers(iceServers: RTCIceServer[]): Promise<void>;
|
|
84
86
|
abstract restartIce(iceParameters: IceParameters): Promise<void>;
|
|
85
87
|
abstract getTransportStats(): Promise<RTCStatsReport>;
|
|
@@ -89,7 +91,7 @@ export declare abstract class HandlerInterface extends EnhancedEventEmitter<Hand
|
|
|
89
91
|
abstract resumeSending(localId: string): Promise<void>;
|
|
90
92
|
abstract replaceTrack(localId: string, track: MediaStreamTrack | null): Promise<void>;
|
|
91
93
|
abstract setMaxSpatialLayer(localId: string, spatialLayer: number): Promise<void>;
|
|
92
|
-
abstract setRtpEncodingParameters(localId: string, params:
|
|
94
|
+
abstract setRtpEncodingParameters(localId: string, params: Partial<RTCRtpEncodingParameters>): Promise<void>;
|
|
93
95
|
abstract getSenderStats(localId: string): Promise<RTCStatsReport>;
|
|
94
96
|
abstract sendDataChannel(options: HandlerSendDataChannelOptions): Promise<HandlerSendDataChannelResult>;
|
|
95
97
|
abstract receive(optionsList: HandlerReceiveOptions[]): Promise<HandlerReceiveResult[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HandlerInterface.d.ts","sourceRoot":"","sources":["../../src/handlers/HandlerInterface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EACX,aAAa,EACb,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EACX,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACX,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"HandlerInterface.d.ts","sourceRoot":"","sources":["../../src/handlers/HandlerInterface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
import { type HandlerFactory, HandlerInterface, type HandlerRunOptions, type HandlerSendOptions, type HandlerSendResult, type HandlerReceiveOptions, type HandlerReceiveResult, type HandlerSendDataChannelOptions, type HandlerSendDataChannelResult, type HandlerReceiveDataChannelOptions, type HandlerReceiveDataChannelResult } from './HandlerInterface';
|
|
2
1
|
import type { IceParameters } from '../Transport';
|
|
3
|
-
import type
|
|
4
|
-
import type { SctpCapabilities } from '../SctpParameters';
|
|
2
|
+
import { type HandlerFactory, HandlerInterface, type HandlerSendOptions, type HandlerSendResult, type HandlerReceiveOptions, type HandlerReceiveResult, type HandlerSendDataChannelOptions, type HandlerSendDataChannelResult, type HandlerReceiveDataChannelOptions, type HandlerReceiveDataChannelResult } from './HandlerInterface';
|
|
5
3
|
export declare class ReactNative106 extends HandlerInterface {
|
|
6
4
|
private _closed;
|
|
7
|
-
private _direction
|
|
8
|
-
private _remoteSdp
|
|
9
|
-
private _sendingRtpParametersByKind
|
|
10
|
-
private _sendingRemoteRtpParametersByKind
|
|
5
|
+
private _direction;
|
|
6
|
+
private _remoteSdp;
|
|
7
|
+
private _sendingRtpParametersByKind;
|
|
8
|
+
private _sendingRemoteRtpParametersByKind;
|
|
11
9
|
private _forcedLocalDtlsRole?;
|
|
12
10
|
private _pc;
|
|
13
11
|
private readonly _mapMidTransceiver;
|
|
@@ -19,12 +17,9 @@ export declare class ReactNative106 extends HandlerInterface {
|
|
|
19
17
|
* Creates a factory function.
|
|
20
18
|
*/
|
|
21
19
|
static createFactory(): HandlerFactory;
|
|
22
|
-
constructor();
|
|
20
|
+
private constructor();
|
|
23
21
|
get name(): string;
|
|
24
22
|
close(): void;
|
|
25
|
-
getNativeRtpCapabilities(): Promise<RtpCapabilities>;
|
|
26
|
-
getNativeSctpCapabilities(): Promise<SctpCapabilities>;
|
|
27
|
-
run({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, proprietaryConstraints, extendedRtpCapabilities, }: HandlerRunOptions): void;
|
|
28
23
|
updateIceServers(iceServers: RTCIceServer[]): Promise<void>;
|
|
29
24
|
restartIce(iceParameters: IceParameters): Promise<void>;
|
|
30
25
|
getTransportStats(): Promise<RTCStatsReport>;
|
|
@@ -34,7 +29,7 @@ export declare class ReactNative106 extends HandlerInterface {
|
|
|
34
29
|
resumeSending(localId: string): Promise<void>;
|
|
35
30
|
replaceTrack(localId: string, track: MediaStreamTrack | null): Promise<void>;
|
|
36
31
|
setMaxSpatialLayer(localId: string, spatialLayer: number): Promise<void>;
|
|
37
|
-
setRtpEncodingParameters(localId: string, params:
|
|
32
|
+
setRtpEncodingParameters(localId: string, params: Partial<RTCRtpEncodingParameters>): Promise<void>;
|
|
38
33
|
getSenderStats(localId: string): Promise<RTCStatsReport>;
|
|
39
34
|
sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol, }: HandlerSendDataChannelOptions): Promise<HandlerSendDataChannelResult>;
|
|
40
35
|
receive(optionsList: HandlerReceiveOptions[]): Promise<HandlerReceiveResult[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactNative106.d.ts","sourceRoot":"","sources":["../../src/handlers/ReactNative106.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ReactNative106.d.ts","sourceRoot":"","sources":["../../src/handlers/ReactNative106.ts"],"names":[],"mappings":"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"}
|