mediasoup-client 3.6.92 → 3.6.94
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/Device.js +5 -6
- package/lib/Transport.js +7 -7
- package/lib/handlers/Chrome111.d.ts +2 -0
- package/lib/handlers/Chrome111.d.ts.map +1 -1
- package/lib/handlers/Chrome111.js +39 -8
- package/lib/handlers/Chrome55.js +4 -8
- package/lib/handlers/Chrome67.js +4 -8
- package/lib/handlers/Chrome70.js +4 -8
- package/lib/handlers/Chrome74.d.ts +2 -0
- package/lib/handlers/Chrome74.d.ts.map +1 -1
- package/lib/handlers/Chrome74.js +38 -8
- package/lib/handlers/FakeHandler.d.ts +2 -0
- package/lib/handlers/FakeHandler.d.ts.map +1 -1
- package/lib/handlers/FakeHandler.js +35 -2
- package/lib/handlers/Firefox60.d.ts +2 -0
- package/lib/handlers/Firefox60.d.ts.map +1 -1
- package/lib/handlers/Firefox60.js +34 -0
- package/lib/handlers/ReactNative.js +4 -8
- package/lib/handlers/ReactNativeUnifiedPlan.d.ts +2 -0
- package/lib/handlers/ReactNativeUnifiedPlan.d.ts.map +1 -1
- package/lib/handlers/ReactNativeUnifiedPlan.js +40 -9
- package/lib/handlers/Safari11.js +4 -8
- package/lib/handlers/Safari12.d.ts +2 -0
- package/lib/handlers/Safari12.d.ts.map +1 -1
- package/lib/handlers/Safari12.js +39 -8
- package/lib/handlers/ortc/utils.js +1 -2
- package/lib/handlers/sdp/MediaSection.js +1 -2
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/tests/test.js +34 -44
- package/lib/types.d.ts +9 -9
- package/lib/types.d.ts.map +1 -1
- package/lib/types.js +1 -9
- package/npm-scripts.mjs +1 -2
- package/package.json +9 -9
package/lib/Device.js
CHANGED
|
@@ -44,7 +44,6 @@ const ReactNativeUnifiedPlan_1 = require("./handlers/ReactNativeUnifiedPlan");
|
|
|
44
44
|
const ReactNative_1 = require("./handlers/ReactNative");
|
|
45
45
|
const logger = new Logger_1.Logger('Device');
|
|
46
46
|
function detectDevice() {
|
|
47
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
48
47
|
// React-Native.
|
|
49
48
|
// NOTE: react-native-webrtc >= 1.75.0 is required.
|
|
50
49
|
// NOTE: react-native-webrtc with Unified Plan requires version >= 106.0.0.
|
|
@@ -69,13 +68,13 @@ function detectDevice() {
|
|
|
69
68
|
const uaParser = new ua_parser_js_1.UAParser(ua);
|
|
70
69
|
logger.debug('detectDevice() | browser detected [ua:%s, parsed:%o]', ua, uaParser.getResult());
|
|
71
70
|
const browser = uaParser.getBrowser();
|
|
72
|
-
const browserName =
|
|
73
|
-
const browserVersion = parseInt(
|
|
71
|
+
const browserName = browser.name?.toLowerCase() ?? '';
|
|
72
|
+
const browserVersion = parseInt(browser.major ?? '0');
|
|
74
73
|
const engine = uaParser.getEngine();
|
|
75
|
-
const engineName =
|
|
74
|
+
const engineName = engine.name?.toLowerCase() ?? '';
|
|
76
75
|
const os = uaParser.getOS();
|
|
77
|
-
const osName =
|
|
78
|
-
const osVersion = parseFloat(
|
|
76
|
+
const osName = os.name?.toLowerCase() ?? '';
|
|
77
|
+
const osVersion = parseFloat(os.version ?? '0');
|
|
79
78
|
const isIOS = osName === 'ios';
|
|
80
79
|
const isChrome = [
|
|
81
80
|
'chrome',
|
package/lib/Transport.js
CHANGED
|
@@ -219,7 +219,7 @@ class Transport extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
219
219
|
throw new TypeError('missing iceParameters');
|
|
220
220
|
}
|
|
221
221
|
// Enqueue command.
|
|
222
|
-
return this._awaitQueue.push(async () => this._handler.restartIce(iceParameters), 'transport.restartIce()');
|
|
222
|
+
return this._awaitQueue.push(async () => await this._handler.restartIce(iceParameters), 'transport.restartIce()');
|
|
223
223
|
}
|
|
224
224
|
/**
|
|
225
225
|
* Update ICE servers.
|
|
@@ -715,31 +715,31 @@ class Transport extends EnhancedEventEmitter_1.EnhancedEventEmitter {
|
|
|
715
715
|
if (this._closed) {
|
|
716
716
|
return;
|
|
717
717
|
}
|
|
718
|
-
this._awaitQueue.push(async () => this._handler.stopSending(producer.localId), 'producer @close event')
|
|
718
|
+
this._awaitQueue.push(async () => await this._handler.stopSending(producer.localId), 'producer @close event')
|
|
719
719
|
.catch((error) => logger.warn('producer.close() failed:%o', error));
|
|
720
720
|
});
|
|
721
721
|
producer.on('@pause', (callback, errback) => {
|
|
722
|
-
this._awaitQueue.push(async () => this._handler.pauseSending(producer.localId), 'producer @pause event')
|
|
722
|
+
this._awaitQueue.push(async () => await this._handler.pauseSending(producer.localId), 'producer @pause event')
|
|
723
723
|
.then(callback)
|
|
724
724
|
.catch(errback);
|
|
725
725
|
});
|
|
726
726
|
producer.on('@resume', (callback, errback) => {
|
|
727
|
-
this._awaitQueue.push(async () => this._handler.resumeSending(producer.localId), 'producer @resume event')
|
|
727
|
+
this._awaitQueue.push(async () => await this._handler.resumeSending(producer.localId), 'producer @resume event')
|
|
728
728
|
.then(callback)
|
|
729
729
|
.catch(errback);
|
|
730
730
|
});
|
|
731
731
|
producer.on('@replacetrack', (track, callback, errback) => {
|
|
732
|
-
this._awaitQueue.push(async () => this._handler.replaceTrack(producer.localId, track), 'producer @replacetrack event')
|
|
732
|
+
this._awaitQueue.push(async () => await this._handler.replaceTrack(producer.localId, track), 'producer @replacetrack event')
|
|
733
733
|
.then(callback)
|
|
734
734
|
.catch(errback);
|
|
735
735
|
});
|
|
736
736
|
producer.on('@setmaxspatiallayer', (spatialLayer, callback, errback) => {
|
|
737
|
-
this._awaitQueue.push(async () => (this._handler.setMaxSpatialLayer(producer.localId, spatialLayer)), 'producer @setmaxspatiallayer event')
|
|
737
|
+
this._awaitQueue.push(async () => (await this._handler.setMaxSpatialLayer(producer.localId, spatialLayer)), 'producer @setmaxspatiallayer event')
|
|
738
738
|
.then(callback)
|
|
739
739
|
.catch(errback);
|
|
740
740
|
});
|
|
741
741
|
producer.on('@setrtpencodingparameters', (params, callback, errback) => {
|
|
742
|
-
this._awaitQueue.push(async () => (this._handler.setRtpEncodingParameters(producer.localId, params)), 'producer @setrtpencodingparameters event')
|
|
742
|
+
this._awaitQueue.push(async () => (await this._handler.setRtpEncodingParameters(producer.localId, params)), 'producer @setrtpencodingparameters event')
|
|
743
743
|
.then(callback)
|
|
744
744
|
.catch(errback);
|
|
745
745
|
});
|
|
@@ -3,6 +3,7 @@ import { IceParameters } from '../Transport';
|
|
|
3
3
|
import { RtpCapabilities } from '../RtpParameters';
|
|
4
4
|
import { SctpCapabilities } from '../SctpParameters';
|
|
5
5
|
export declare class Chrome111 extends HandlerInterface {
|
|
6
|
+
private _closed;
|
|
6
7
|
private _direction?;
|
|
7
8
|
private _remoteSdp?;
|
|
8
9
|
private _sendingRtpParametersByKind?;
|
|
@@ -43,6 +44,7 @@ export declare class Chrome111 extends HandlerInterface {
|
|
|
43
44
|
getReceiverStats(localId: string): Promise<RTCStatsReport>;
|
|
44
45
|
receiveDataChannel({ sctpStreamParameters, label, protocol }: HandlerReceiveDataChannelOptions): Promise<HandlerReceiveDataChannelResult>;
|
|
45
46
|
private setupTransport;
|
|
47
|
+
private assertNotClosed;
|
|
46
48
|
private assertSendDirection;
|
|
47
49
|
private assertRecvDirection;
|
|
48
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chrome111.d.ts","sourceRoot":"","sources":["../../src/handlers/Chrome111.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Chrome111.d.ts","sourceRoot":"","sources":["../../src/handlers/Chrome111.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,7 @@ const ortc = __importStar(require("../ortc"));
|
|
|
31
31
|
const sdpCommonUtils = __importStar(require("./sdp/commonUtils"));
|
|
32
32
|
const sdpUnifiedPlanUtils = __importStar(require("./sdp/unifiedPlanUtils"));
|
|
33
33
|
const ortcUtils = __importStar(require("./ortc/utils"));
|
|
34
|
+
const errors_1 = require("../errors");
|
|
34
35
|
const HandlerInterface_1 = require("./HandlerInterface");
|
|
35
36
|
const RemoteSdp_1 = require("./sdp/RemoteSdp");
|
|
36
37
|
const scalabilityModes_1 = require("../scalabilityModes");
|
|
@@ -45,6 +46,8 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
45
46
|
}
|
|
46
47
|
constructor() {
|
|
47
48
|
super();
|
|
49
|
+
// Closed flag.
|
|
50
|
+
this._closed = false;
|
|
48
51
|
// Map of RTCTransceivers indexed by MID.
|
|
49
52
|
this._mapMidTransceiver = new Map();
|
|
50
53
|
// Local stream for sending.
|
|
@@ -61,6 +64,10 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
61
64
|
}
|
|
62
65
|
close() {
|
|
63
66
|
logger.debug('close()');
|
|
67
|
+
if (this._closed) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
this._closed = true;
|
|
64
71
|
// Close RTCPeerConnection.
|
|
65
72
|
if (this._pc) {
|
|
66
73
|
try {
|
|
@@ -108,6 +115,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
108
115
|
};
|
|
109
116
|
}
|
|
110
117
|
run({ direction, iceParameters, iceCandidates, dtlsParameters, sctpParameters, iceServers, iceTransportPolicy, additionalSettings, proprietaryConstraints, extendedRtpCapabilities }) {
|
|
118
|
+
this.assertNotClosed();
|
|
111
119
|
logger.debug('run()');
|
|
112
120
|
this._direction = direction;
|
|
113
121
|
this._remoteSdp = new RemoteSdp_1.RemoteSdp({
|
|
@@ -169,12 +177,14 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
169
177
|
}
|
|
170
178
|
}
|
|
171
179
|
async updateIceServers(iceServers) {
|
|
180
|
+
this.assertNotClosed();
|
|
172
181
|
logger.debug('updateIceServers()');
|
|
173
182
|
const configuration = this._pc.getConfiguration();
|
|
174
183
|
configuration.iceServers = iceServers;
|
|
175
184
|
this._pc.setConfiguration(configuration);
|
|
176
185
|
}
|
|
177
186
|
async restartIce(iceParameters) {
|
|
187
|
+
this.assertNotClosed();
|
|
178
188
|
logger.debug('restartIce()');
|
|
179
189
|
// Provide the remote SDP handler with new remote ICE parameters.
|
|
180
190
|
this._remoteSdp.updateIceParameters(iceParameters);
|
|
@@ -199,10 +209,11 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
199
209
|
}
|
|
200
210
|
}
|
|
201
211
|
async getTransportStats() {
|
|
212
|
+
this.assertNotClosed();
|
|
202
213
|
return this._pc.getStats();
|
|
203
214
|
}
|
|
204
215
|
async send({ track, encodings, codecOptions, codec }) {
|
|
205
|
-
|
|
216
|
+
this.assertNotClosed();
|
|
206
217
|
this.assertSendDirection();
|
|
207
218
|
logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id);
|
|
208
219
|
if (encodings && encodings.length > 1) {
|
|
@@ -247,7 +258,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
247
258
|
let localSdpObject = sdpTransform.parse(offer.sdp);
|
|
248
259
|
if (!this._transportReady) {
|
|
249
260
|
await this.setupTransport({
|
|
250
|
-
localDtlsRole:
|
|
261
|
+
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
251
262
|
localSdpObject
|
|
252
263
|
});
|
|
253
264
|
}
|
|
@@ -300,6 +311,9 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
300
311
|
async stopSending(localId) {
|
|
301
312
|
this.assertSendDirection();
|
|
302
313
|
logger.debug('stopSending() [localId:%s]', localId);
|
|
314
|
+
if (this._closed) {
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
303
317
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
304
318
|
if (!transceiver) {
|
|
305
319
|
throw new Error('associated RTCRtpTransceiver not found');
|
|
@@ -322,6 +336,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
322
336
|
this._mapMidTransceiver.delete(localId);
|
|
323
337
|
}
|
|
324
338
|
async pauseSending(localId) {
|
|
339
|
+
this.assertNotClosed();
|
|
325
340
|
this.assertSendDirection();
|
|
326
341
|
logger.debug('pauseSending() [localId:%s]', localId);
|
|
327
342
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
@@ -338,6 +353,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
338
353
|
await this._pc.setRemoteDescription(answer);
|
|
339
354
|
}
|
|
340
355
|
async resumeSending(localId) {
|
|
356
|
+
this.assertNotClosed();
|
|
341
357
|
this.assertSendDirection();
|
|
342
358
|
logger.debug('resumeSending() [localId:%s]', localId);
|
|
343
359
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
@@ -354,6 +370,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
354
370
|
await this._pc.setRemoteDescription(answer);
|
|
355
371
|
}
|
|
356
372
|
async replaceTrack(localId, track) {
|
|
373
|
+
this.assertNotClosed();
|
|
357
374
|
this.assertSendDirection();
|
|
358
375
|
if (track) {
|
|
359
376
|
logger.debug('replaceTrack() [localId:%s, track.id:%s]', localId, track.id);
|
|
@@ -368,6 +385,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
368
385
|
await transceiver.sender.replaceTrack(track);
|
|
369
386
|
}
|
|
370
387
|
async setMaxSpatialLayer(localId, spatialLayer) {
|
|
388
|
+
this.assertNotClosed();
|
|
371
389
|
this.assertSendDirection();
|
|
372
390
|
logger.debug('setMaxSpatialLayer() [localId:%s, spatialLayer:%s]', localId, spatialLayer);
|
|
373
391
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
@@ -393,6 +411,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
393
411
|
await this._pc.setRemoteDescription(answer);
|
|
394
412
|
}
|
|
395
413
|
async setRtpEncodingParameters(localId, params) {
|
|
414
|
+
this.assertNotClosed();
|
|
396
415
|
this.assertSendDirection();
|
|
397
416
|
logger.debug('setRtpEncodingParameters() [localId:%s, params:%o]', localId, params);
|
|
398
417
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
@@ -413,6 +432,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
413
432
|
await this._pc.setRemoteDescription(answer);
|
|
414
433
|
}
|
|
415
434
|
async getSenderStats(localId) {
|
|
435
|
+
this.assertNotClosed();
|
|
416
436
|
this.assertSendDirection();
|
|
417
437
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
418
438
|
if (!transceiver) {
|
|
@@ -421,7 +441,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
421
441
|
return transceiver.sender.getStats();
|
|
422
442
|
}
|
|
423
443
|
async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) {
|
|
424
|
-
|
|
444
|
+
this.assertNotClosed();
|
|
425
445
|
this.assertSendDirection();
|
|
426
446
|
const options = {
|
|
427
447
|
negotiated: true,
|
|
@@ -445,7 +465,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
445
465
|
.find((m) => m.type === 'application');
|
|
446
466
|
if (!this._transportReady) {
|
|
447
467
|
await this.setupTransport({
|
|
448
|
-
localDtlsRole:
|
|
468
|
+
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
449
469
|
localSdpObject
|
|
450
470
|
});
|
|
451
471
|
}
|
|
@@ -466,7 +486,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
466
486
|
return { dataChannel, sctpStreamParameters };
|
|
467
487
|
}
|
|
468
488
|
async receive(optionsList) {
|
|
469
|
-
|
|
489
|
+
this.assertNotClosed();
|
|
470
490
|
this.assertRecvDirection();
|
|
471
491
|
const results = [];
|
|
472
492
|
const mapLocalId = new Map();
|
|
@@ -503,7 +523,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
503
523
|
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
|
|
504
524
|
if (!this._transportReady) {
|
|
505
525
|
await this.setupTransport({
|
|
506
|
-
localDtlsRole:
|
|
526
|
+
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
507
527
|
localSdpObject
|
|
508
528
|
});
|
|
509
529
|
}
|
|
@@ -531,6 +551,9 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
531
551
|
}
|
|
532
552
|
async stopReceiving(localIds) {
|
|
533
553
|
this.assertRecvDirection();
|
|
554
|
+
if (this._closed) {
|
|
555
|
+
return;
|
|
556
|
+
}
|
|
534
557
|
for (const localId of localIds) {
|
|
535
558
|
logger.debug('stopReceiving() [localId:%s]', localId);
|
|
536
559
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
@@ -550,6 +573,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
550
573
|
}
|
|
551
574
|
}
|
|
552
575
|
async pauseReceiving(localIds) {
|
|
576
|
+
this.assertNotClosed();
|
|
553
577
|
this.assertRecvDirection();
|
|
554
578
|
for (const localId of localIds) {
|
|
555
579
|
logger.debug('pauseReceiving() [localId:%s]', localId);
|
|
@@ -568,6 +592,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
568
592
|
await this._pc.setLocalDescription(answer);
|
|
569
593
|
}
|
|
570
594
|
async resumeReceiving(localIds) {
|
|
595
|
+
this.assertNotClosed();
|
|
571
596
|
this.assertRecvDirection();
|
|
572
597
|
for (const localId of localIds) {
|
|
573
598
|
logger.debug('resumeReceiving() [localId:%s]', localId);
|
|
@@ -586,6 +611,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
586
611
|
await this._pc.setLocalDescription(answer);
|
|
587
612
|
}
|
|
588
613
|
async getReceiverStats(localId) {
|
|
614
|
+
this.assertNotClosed();
|
|
589
615
|
this.assertRecvDirection();
|
|
590
616
|
const transceiver = this._mapMidTransceiver.get(localId);
|
|
591
617
|
if (!transceiver) {
|
|
@@ -594,7 +620,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
594
620
|
return transceiver.receiver.getStats();
|
|
595
621
|
}
|
|
596
622
|
async receiveDataChannel({ sctpStreamParameters, label, protocol }) {
|
|
597
|
-
|
|
623
|
+
this.assertNotClosed();
|
|
598
624
|
this.assertRecvDirection();
|
|
599
625
|
const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters;
|
|
600
626
|
const options = {
|
|
@@ -618,7 +644,7 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
618
644
|
if (!this._transportReady) {
|
|
619
645
|
const localSdpObject = sdpTransform.parse(answer.sdp);
|
|
620
646
|
await this.setupTransport({
|
|
621
|
-
localDtlsRole:
|
|
647
|
+
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
622
648
|
localSdpObject
|
|
623
649
|
});
|
|
624
650
|
}
|
|
@@ -644,6 +670,11 @@ class Chrome111 extends HandlerInterface_1.HandlerInterface {
|
|
|
644
670
|
});
|
|
645
671
|
this._transportReady = true;
|
|
646
672
|
}
|
|
673
|
+
assertNotClosed() {
|
|
674
|
+
if (this._closed) {
|
|
675
|
+
throw new errors_1.InvalidStateError('method called in a closed handler');
|
|
676
|
+
}
|
|
677
|
+
}
|
|
647
678
|
assertSendDirection() {
|
|
648
679
|
if (this._direction !== 'send') {
|
|
649
680
|
throw new Error('method can just be called for handlers with "send" direction');
|
package/lib/handlers/Chrome55.js
CHANGED
|
@@ -206,7 +206,6 @@ class Chrome55 extends HandlerInterface_1.HandlerInterface {
|
|
|
206
206
|
return this._pc.getStats();
|
|
207
207
|
}
|
|
208
208
|
async send({ track, encodings, codecOptions, codec }) {
|
|
209
|
-
var _a;
|
|
210
209
|
this.assertSendDirection();
|
|
211
210
|
logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id);
|
|
212
211
|
if (codec) {
|
|
@@ -225,7 +224,7 @@ class Chrome55 extends HandlerInterface_1.HandlerInterface {
|
|
|
225
224
|
ortc.reduceCodecs(sendingRemoteRtpParameters.codecs);
|
|
226
225
|
if (!this._transportReady) {
|
|
227
226
|
await this.setupTransport({
|
|
228
|
-
localDtlsRole:
|
|
227
|
+
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
229
228
|
localSdpObject
|
|
230
229
|
});
|
|
231
230
|
}
|
|
@@ -342,7 +341,6 @@ class Chrome55 extends HandlerInterface_1.HandlerInterface {
|
|
|
342
341
|
throw new errors_1.UnsupportedError('not implemented');
|
|
343
342
|
}
|
|
344
343
|
async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) {
|
|
345
|
-
var _a;
|
|
346
344
|
this.assertSendDirection();
|
|
347
345
|
const options = {
|
|
348
346
|
negotiated: true,
|
|
@@ -367,7 +365,7 @@ class Chrome55 extends HandlerInterface_1.HandlerInterface {
|
|
|
367
365
|
.find((m) => m.type === 'application');
|
|
368
366
|
if (!this._transportReady) {
|
|
369
367
|
await this.setupTransport({
|
|
370
|
-
localDtlsRole:
|
|
368
|
+
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
371
369
|
localSdpObject
|
|
372
370
|
});
|
|
373
371
|
}
|
|
@@ -388,7 +386,6 @@ class Chrome55 extends HandlerInterface_1.HandlerInterface {
|
|
|
388
386
|
return { dataChannel, sctpStreamParameters };
|
|
389
387
|
}
|
|
390
388
|
async receive(optionsList) {
|
|
391
|
-
var _a;
|
|
392
389
|
this.assertRecvDirection();
|
|
393
390
|
const results = [];
|
|
394
391
|
for (const options of optionsList) {
|
|
@@ -423,7 +420,7 @@ class Chrome55 extends HandlerInterface_1.HandlerInterface {
|
|
|
423
420
|
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
|
|
424
421
|
if (!this._transportReady) {
|
|
425
422
|
await this.setupTransport({
|
|
426
|
-
localDtlsRole:
|
|
423
|
+
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
427
424
|
localSdpObject
|
|
428
425
|
});
|
|
429
426
|
}
|
|
@@ -477,7 +474,6 @@ class Chrome55 extends HandlerInterface_1.HandlerInterface {
|
|
|
477
474
|
throw new errors_1.UnsupportedError('not implemented');
|
|
478
475
|
}
|
|
479
476
|
async receiveDataChannel({ sctpStreamParameters, label, protocol }) {
|
|
480
|
-
var _a;
|
|
481
477
|
this.assertRecvDirection();
|
|
482
478
|
const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters;
|
|
483
479
|
const options = {
|
|
@@ -502,7 +498,7 @@ class Chrome55 extends HandlerInterface_1.HandlerInterface {
|
|
|
502
498
|
if (!this._transportReady) {
|
|
503
499
|
const localSdpObject = sdpTransform.parse(answer.sdp);
|
|
504
500
|
await this.setupTransport({
|
|
505
|
-
localDtlsRole:
|
|
501
|
+
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
506
502
|
localSdpObject
|
|
507
503
|
});
|
|
508
504
|
}
|
package/lib/handlers/Chrome67.js
CHANGED
|
@@ -205,7 +205,6 @@ class Chrome67 extends HandlerInterface_1.HandlerInterface {
|
|
|
205
205
|
return this._pc.getStats();
|
|
206
206
|
}
|
|
207
207
|
async send({ track, encodings, codecOptions, codec }) {
|
|
208
|
-
var _a;
|
|
209
208
|
this.assertSendDirection();
|
|
210
209
|
logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id);
|
|
211
210
|
if (codec) {
|
|
@@ -224,7 +223,7 @@ class Chrome67 extends HandlerInterface_1.HandlerInterface {
|
|
|
224
223
|
ortc.reduceCodecs(sendingRemoteRtpParameters.codecs);
|
|
225
224
|
if (!this._transportReady) {
|
|
226
225
|
await this.setupTransport({
|
|
227
|
-
localDtlsRole:
|
|
226
|
+
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
228
227
|
localSdpObject
|
|
229
228
|
});
|
|
230
229
|
}
|
|
@@ -392,7 +391,6 @@ class Chrome67 extends HandlerInterface_1.HandlerInterface {
|
|
|
392
391
|
return rtpSender.getStats();
|
|
393
392
|
}
|
|
394
393
|
async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) {
|
|
395
|
-
var _a;
|
|
396
394
|
this.assertSendDirection();
|
|
397
395
|
const options = {
|
|
398
396
|
negotiated: true,
|
|
@@ -417,7 +415,7 @@ class Chrome67 extends HandlerInterface_1.HandlerInterface {
|
|
|
417
415
|
.find((m) => m.type === 'application');
|
|
418
416
|
if (!this._transportReady) {
|
|
419
417
|
await this.setupTransport({
|
|
420
|
-
localDtlsRole:
|
|
418
|
+
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
421
419
|
localSdpObject
|
|
422
420
|
});
|
|
423
421
|
}
|
|
@@ -438,7 +436,6 @@ class Chrome67 extends HandlerInterface_1.HandlerInterface {
|
|
|
438
436
|
return { dataChannel, sctpStreamParameters };
|
|
439
437
|
}
|
|
440
438
|
async receive(optionsList) {
|
|
441
|
-
var _a;
|
|
442
439
|
this.assertRecvDirection();
|
|
443
440
|
const results = [];
|
|
444
441
|
for (const options of optionsList) {
|
|
@@ -473,7 +470,7 @@ class Chrome67 extends HandlerInterface_1.HandlerInterface {
|
|
|
473
470
|
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
|
|
474
471
|
if (!this._transportReady) {
|
|
475
472
|
await this.setupTransport({
|
|
476
|
-
localDtlsRole:
|
|
473
|
+
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
477
474
|
localSdpObject
|
|
478
475
|
});
|
|
479
476
|
}
|
|
@@ -533,7 +530,6 @@ class Chrome67 extends HandlerInterface_1.HandlerInterface {
|
|
|
533
530
|
return rtpReceiver.getStats();
|
|
534
531
|
}
|
|
535
532
|
async receiveDataChannel({ sctpStreamParameters, label, protocol }) {
|
|
536
|
-
var _a;
|
|
537
533
|
this.assertRecvDirection();
|
|
538
534
|
const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters;
|
|
539
535
|
const options = {
|
|
@@ -558,7 +554,7 @@ class Chrome67 extends HandlerInterface_1.HandlerInterface {
|
|
|
558
554
|
if (!this._transportReady) {
|
|
559
555
|
const localSdpObject = sdpTransform.parse(answer.sdp);
|
|
560
556
|
await this.setupTransport({
|
|
561
|
-
localDtlsRole:
|
|
557
|
+
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
562
558
|
localSdpObject
|
|
563
559
|
});
|
|
564
560
|
}
|
package/lib/handlers/Chrome70.js
CHANGED
|
@@ -199,7 +199,6 @@ class Chrome70 extends HandlerInterface_1.HandlerInterface {
|
|
|
199
199
|
return this._pc.getStats();
|
|
200
200
|
}
|
|
201
201
|
async send({ track, encodings, codecOptions, codec }) {
|
|
202
|
-
var _a;
|
|
203
202
|
this.assertSendDirection();
|
|
204
203
|
logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id);
|
|
205
204
|
const sendingRtpParameters = utils.clone(this._sendingRtpParametersByKind[track.kind], {});
|
|
@@ -217,7 +216,7 @@ class Chrome70 extends HandlerInterface_1.HandlerInterface {
|
|
|
217
216
|
let offerMediaObject;
|
|
218
217
|
if (!this._transportReady) {
|
|
219
218
|
await this.setupTransport({
|
|
220
|
-
localDtlsRole:
|
|
219
|
+
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
221
220
|
localSdpObject
|
|
222
221
|
});
|
|
223
222
|
}
|
|
@@ -416,7 +415,6 @@ class Chrome70 extends HandlerInterface_1.HandlerInterface {
|
|
|
416
415
|
return transceiver.sender.getStats();
|
|
417
416
|
}
|
|
418
417
|
async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) {
|
|
419
|
-
var _a;
|
|
420
418
|
this.assertSendDirection();
|
|
421
419
|
const options = {
|
|
422
420
|
negotiated: true,
|
|
@@ -441,7 +439,7 @@ class Chrome70 extends HandlerInterface_1.HandlerInterface {
|
|
|
441
439
|
.find((m) => m.type === 'application');
|
|
442
440
|
if (!this._transportReady) {
|
|
443
441
|
await this.setupTransport({
|
|
444
|
-
localDtlsRole:
|
|
442
|
+
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
445
443
|
localSdpObject
|
|
446
444
|
});
|
|
447
445
|
}
|
|
@@ -462,7 +460,6 @@ class Chrome70 extends HandlerInterface_1.HandlerInterface {
|
|
|
462
460
|
return { dataChannel, sctpStreamParameters };
|
|
463
461
|
}
|
|
464
462
|
async receive(optionsList) {
|
|
465
|
-
var _a;
|
|
466
463
|
this.assertRecvDirection();
|
|
467
464
|
const results = [];
|
|
468
465
|
const mapLocalId = new Map();
|
|
@@ -499,7 +496,7 @@ class Chrome70 extends HandlerInterface_1.HandlerInterface {
|
|
|
499
496
|
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
|
|
500
497
|
if (!this._transportReady) {
|
|
501
498
|
await this.setupTransport({
|
|
502
|
-
localDtlsRole:
|
|
499
|
+
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
503
500
|
localSdpObject
|
|
504
501
|
});
|
|
505
502
|
}
|
|
@@ -562,7 +559,6 @@ class Chrome70 extends HandlerInterface_1.HandlerInterface {
|
|
|
562
559
|
return transceiver.receiver.getStats();
|
|
563
560
|
}
|
|
564
561
|
async receiveDataChannel({ sctpStreamParameters, label, protocol }) {
|
|
565
|
-
var _a;
|
|
566
562
|
this.assertRecvDirection();
|
|
567
563
|
const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters;
|
|
568
564
|
const options = {
|
|
@@ -587,7 +583,7 @@ class Chrome70 extends HandlerInterface_1.HandlerInterface {
|
|
|
587
583
|
if (!this._transportReady) {
|
|
588
584
|
const localSdpObject = sdpTransform.parse(answer.sdp);
|
|
589
585
|
await this.setupTransport({
|
|
590
|
-
localDtlsRole:
|
|
586
|
+
localDtlsRole: this._forcedLocalDtlsRole ?? 'client',
|
|
591
587
|
localSdpObject
|
|
592
588
|
});
|
|
593
589
|
}
|
|
@@ -3,6 +3,7 @@ import { IceParameters } from '../Transport';
|
|
|
3
3
|
import { RtpCapabilities } from '../RtpParameters';
|
|
4
4
|
import { SctpCapabilities } from '../SctpParameters';
|
|
5
5
|
export declare class Chrome74 extends HandlerInterface {
|
|
6
|
+
private _closed;
|
|
6
7
|
private _direction?;
|
|
7
8
|
private _remoteSdp?;
|
|
8
9
|
private _sendingRtpParametersByKind?;
|
|
@@ -43,6 +44,7 @@ export declare class Chrome74 extends HandlerInterface {
|
|
|
43
44
|
getReceiverStats(localId: string): Promise<RTCStatsReport>;
|
|
44
45
|
receiveDataChannel({ sctpStreamParameters, label, protocol }: HandlerReceiveDataChannelOptions): Promise<HandlerReceiveDataChannelResult>;
|
|
45
46
|
private setupTransport;
|
|
47
|
+
private assertNotClosed;
|
|
46
48
|
private assertSendDirection;
|
|
47
49
|
private assertRecvDirection;
|
|
48
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chrome74.d.ts","sourceRoot":"","sources":["../../src/handlers/Chrome74.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Chrome74.d.ts","sourceRoot":"","sources":["../../src/handlers/Chrome74.ts"],"names":[],"mappings":"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"}
|