mediasoup-client 3.6.40 → 3.6.44
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/Consumer.d.ts +2 -0
- package/lib/Consumer.d.ts.map +1 -1
- package/lib/Consumer.js +4 -0
- package/lib/Transport.d.ts +3 -3
- package/lib/Transport.d.ts.map +1 -1
- package/lib/Transport.js +8 -0
- package/lib/handlers/Chrome55.d.ts +3 -0
- package/lib/handlers/Chrome55.d.ts.map +1 -1
- package/lib/handlers/Chrome55.js +41 -7
- package/lib/handlers/Chrome67.d.ts +3 -0
- package/lib/handlers/Chrome67.d.ts.map +1 -1
- package/lib/handlers/Chrome67.js +41 -7
- package/lib/handlers/Chrome70.d.ts +3 -0
- package/lib/handlers/Chrome70.d.ts.map +1 -1
- package/lib/handlers/Chrome70.js +43 -7
- package/lib/handlers/Chrome74.d.ts +3 -0
- package/lib/handlers/Chrome74.d.ts.map +1 -1
- package/lib/handlers/Chrome74.js +61 -7
- package/lib/handlers/Edge11.d.ts +2 -0
- package/lib/handlers/Edge11.d.ts.map +1 -1
- package/lib/handlers/Edge11.js +10 -0
- package/lib/handlers/FakeHandler.d.ts +2 -0
- package/lib/handlers/FakeHandler.d.ts.map +1 -1
- package/lib/handlers/FakeHandler.js +10 -0
- package/lib/handlers/Firefox60.d.ts +2 -0
- package/lib/handlers/Firefox60.d.ts.map +1 -1
- package/lib/handlers/Firefox60.js +31 -1
- package/lib/handlers/HandlerInterface.d.ts +2 -0
- package/lib/handlers/HandlerInterface.d.ts.map +1 -1
- package/lib/handlers/ReactNative.d.ts +3 -0
- package/lib/handlers/ReactNative.d.ts.map +1 -1
- package/lib/handlers/ReactNative.js +45 -7
- package/lib/handlers/Safari11.d.ts +3 -0
- package/lib/handlers/Safari11.d.ts.map +1 -1
- package/lib/handlers/Safari11.js +41 -7
- package/lib/handlers/Safari12.d.ts +3 -0
- package/lib/handlers/Safari12.d.ts.map +1 -1
- package/lib/handlers/Safari12.js +61 -7
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/package.json +5 -5
- package/src/Consumer.ts +6 -0
- package/src/Transport.ts +19 -3
- package/src/handlers/Chrome55.ts +50 -4
- package/src/handlers/Chrome67.ts +50 -4
- package/src/handlers/Chrome70.ts +54 -4
- package/src/handlers/Chrome74.ts +100 -4
- package/src/handlers/Edge11.ts +14 -0
- package/src/handlers/FakeHandler.ts +14 -0
- package/src/handlers/Firefox60.ts +65 -1
- package/src/handlers/HandlerInterface.ts +4 -0
- package/src/handlers/ReactNative.ts +55 -4
- package/src/handlers/Safari11.ts +50 -4
- package/src/handlers/Safari12.ts +100 -4
|
@@ -7,6 +7,7 @@ export declare class Safari12 extends HandlerInterface {
|
|
|
7
7
|
private _remoteSdp?;
|
|
8
8
|
private _sendingRtpParametersByKind?;
|
|
9
9
|
private _sendingRemoteRtpParametersByKind?;
|
|
10
|
+
private _forcedLocalDtlsRole?;
|
|
10
11
|
private _pc;
|
|
11
12
|
private readonly _mapMidTransceiver;
|
|
12
13
|
private readonly _sendStream;
|
|
@@ -35,6 +36,8 @@ export declare class Safari12 extends HandlerInterface {
|
|
|
35
36
|
sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }: HandlerSendDataChannelOptions): Promise<HandlerSendDataChannelResult>;
|
|
36
37
|
receive({ trackId, kind, rtpParameters }: HandlerReceiveOptions): Promise<HandlerReceiveResult>;
|
|
37
38
|
stopReceiving(localId: string): Promise<void>;
|
|
39
|
+
pauseReceiving(localId: string): Promise<void>;
|
|
40
|
+
resumeReceiving(localId: string): Promise<void>;
|
|
38
41
|
getReceiverStats(localId: string): Promise<RTCStatsReport>;
|
|
39
42
|
receiveDataChannel({ sctpStreamParameters, label, protocol }: HandlerReceiveDataChannelOptions): Promise<HandlerReceiveDataChannelResult>;
|
|
40
43
|
private _setupTransport;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Safari12.d.ts","sourceRoot":"","sources":["../../src/handlers/Safari12.ts"],"names":[],"mappings":"AAMA,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,EAC/B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAY,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,eAAe,EAAiB,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAwB,MAAM,mBAAmB,CAAC;AAM3E,qBAAa,QAAS,SAAQ,gBAAgB;IAG7C,OAAO,CAAC,UAAU,CAAC,CAAkB;IAErC,OAAO,CAAC,UAAU,CAAC,CAAY;IAE/B,OAAO,CAAC,2BAA2B,CAAC,CAAmC;IAGvE,OAAO,CAAC,iCAAiC,CAAC,CAAmC;
|
|
1
|
+
{"version":3,"file":"Safari12.d.ts","sourceRoot":"","sources":["../../src/handlers/Safari12.ts"],"names":[],"mappings":"AAMA,OAAO,EACN,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,6BAA6B,EAC7B,4BAA4B,EAC5B,gCAAgC,EAChC,+BAA+B,EAC/B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAY,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,eAAe,EAAiB,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAwB,MAAM,mBAAmB,CAAC;AAM3E,qBAAa,QAAS,SAAQ,gBAAgB;IAG7C,OAAO,CAAC,UAAU,CAAC,CAAkB;IAErC,OAAO,CAAC,UAAU,CAAC,CAAY;IAE/B,OAAO,CAAC,2BAA2B,CAAC,CAAmC;IAGvE,OAAO,CAAC,iCAAiC,CAAC,CAAmC;IAG7E,OAAO,CAAC,oBAAoB,CAAC,CAAW;IAExC,OAAO,CAAC,GAAG,CAAM;IAEjB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CACxB;IAEX,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqB;IAEjD,OAAO,CAAC,2BAA2B,CAAS;IAE5C,OAAO,CAAC,qBAAqB,CAAK;IAElC,OAAO,CAAC,eAAe,CAAS;IAEhC;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,cAAc;;IAUtC,IAAI,IAAI,IAAI,MAAM,CAGjB;IAED,KAAK,IAAI,IAAI;IAYP,wBAAwB,IAAI,OAAO,CAAC,eAAe,CAAC;IAqCpD,yBAAyB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAS5D,GAAG,CACF,EACC,SAAS,EACT,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,EAAE,iBAAiB,GAClB,IAAI;IAoED,gBAAgB,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3D,UAAU,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAgDvD,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC;IAK5C,IAAI,CACT,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,kBAAkB,GAC3D,OAAO,CAAC,iBAAiB,CAAC;IAgIvB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC3C,YAAY,CACjB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,GAC7C,OAAO,CAAC,IAAI,CAAC;IAsBV,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BxE,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBrE,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAYxD,eAAe,CACpB,EACC,OAAO,EACP,iBAAiB,EACjB,cAAc,EACd,KAAK,EACL,QAAQ,EACR,EAAE,6BAA6B,GAC9B,OAAO,CAAC,4BAA4B,CAAC;IAsElC,OAAO,CACZ,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,qBAAqB,GACrD,OAAO,CAAC,oBAAoB,CAAC;IAuE1B,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC7C,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B9C,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B/C,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAY1D,kBAAkB,CACvB,EAAE,oBAAoB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,gCAAgC,GACzE,OAAO,CAAC,+BAA+B,CAAC;YAgE7B,eAAe;IA+B7B,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,oBAAoB;CAQ5B"}
|
package/lib/handlers/Safari12.js
CHANGED
|
@@ -116,6 +116,11 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
116
116
|
audio: ortc.getSendingRemoteRtpParameters('audio', extendedRtpCapabilities),
|
|
117
117
|
video: ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities)
|
|
118
118
|
};
|
|
119
|
+
if (dtlsParameters.role && dtlsParameters.role !== 'auto') {
|
|
120
|
+
this._forcedLocalDtlsRole = dtlsParameters.role === 'server'
|
|
121
|
+
? 'client'
|
|
122
|
+
: 'server';
|
|
123
|
+
}
|
|
119
124
|
this._pc = new RTCPeerConnection(Object.assign({ iceServers: iceServers || [], iceTransportPolicy: iceTransportPolicy || 'all', bundlePolicy: 'max-bundle', rtcpMuxPolicy: 'require' }, additionalSettings), proprietaryConstraints);
|
|
120
125
|
// Handle RTCPeerConnection connection status.
|
|
121
126
|
this._pc.addEventListener('iceconnectionstatechange', () => {
|
|
@@ -172,6 +177,7 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
172
177
|
return this._pc.getStats();
|
|
173
178
|
}
|
|
174
179
|
async send({ track, encodings, codecOptions, codec }) {
|
|
180
|
+
var _a;
|
|
175
181
|
this._assertSendDirection();
|
|
176
182
|
logger.debug('send() [kind:%s, track.id:%s]', track.kind, track.id);
|
|
177
183
|
const sendingRtpParameters = utils.clone(this._sendingRtpParametersByKind[track.kind], {});
|
|
@@ -187,8 +193,12 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
187
193
|
let offer = await this._pc.createOffer();
|
|
188
194
|
let localSdpObject = sdpTransform.parse(offer.sdp);
|
|
189
195
|
let offerMediaObject;
|
|
190
|
-
if (!this._transportReady)
|
|
191
|
-
await this._setupTransport({
|
|
196
|
+
if (!this._transportReady) {
|
|
197
|
+
await this._setupTransport({
|
|
198
|
+
localDtlsRole: (_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'server',
|
|
199
|
+
localSdpObject
|
|
200
|
+
});
|
|
201
|
+
}
|
|
192
202
|
if (encodings && encodings.length > 1) {
|
|
193
203
|
logger.debug('send() | enabling legacy simulcast');
|
|
194
204
|
localSdpObject = sdpTransform.parse(offer.sdp);
|
|
@@ -262,6 +272,7 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
262
272
|
const answer = { type: 'answer', sdp: this._remoteSdp.getSdp() };
|
|
263
273
|
logger.debug('stopSending() | calling pc.setRemoteDescription() [answer:%o]', answer);
|
|
264
274
|
await this._pc.setRemoteDescription(answer);
|
|
275
|
+
this._mapMidTransceiver.delete(localId);
|
|
265
276
|
}
|
|
266
277
|
async replaceTrack(localId, track) {
|
|
267
278
|
this._assertSendDirection();
|
|
@@ -311,6 +322,7 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
311
322
|
return transceiver.sender.getStats();
|
|
312
323
|
}
|
|
313
324
|
async sendDataChannel({ ordered, maxPacketLifeTime, maxRetransmits, label, protocol }) {
|
|
325
|
+
var _a;
|
|
314
326
|
this._assertSendDirection();
|
|
315
327
|
const options = {
|
|
316
328
|
negotiated: true,
|
|
@@ -332,8 +344,12 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
332
344
|
const localSdpObject = sdpTransform.parse(offer.sdp);
|
|
333
345
|
const offerMediaObject = localSdpObject.media
|
|
334
346
|
.find((m) => m.type === 'application');
|
|
335
|
-
if (!this._transportReady)
|
|
336
|
-
await this._setupTransport({
|
|
347
|
+
if (!this._transportReady) {
|
|
348
|
+
await this._setupTransport({
|
|
349
|
+
localDtlsRole: (_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'server',
|
|
350
|
+
localSdpObject
|
|
351
|
+
});
|
|
352
|
+
}
|
|
337
353
|
logger.debug('sendDataChannel() | calling pc.setLocalDescription() [offer:%o]', offer);
|
|
338
354
|
await this._pc.setLocalDescription(offer);
|
|
339
355
|
this._remoteSdp.sendSctpAssociation({ offerMediaObject });
|
|
@@ -351,6 +367,7 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
351
367
|
return { dataChannel, sctpStreamParameters };
|
|
352
368
|
}
|
|
353
369
|
async receive({ trackId, kind, rtpParameters }) {
|
|
370
|
+
var _a;
|
|
354
371
|
this._assertRecvDirection();
|
|
355
372
|
logger.debug('receive() [trackId:%s, kind:%s]', trackId, kind);
|
|
356
373
|
const localId = rtpParameters.mid || String(this._mapMidTransceiver.size);
|
|
@@ -375,8 +392,12 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
375
392
|
answerMediaObject
|
|
376
393
|
});
|
|
377
394
|
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
|
|
378
|
-
if (!this._transportReady)
|
|
379
|
-
await this._setupTransport({
|
|
395
|
+
if (!this._transportReady) {
|
|
396
|
+
await this._setupTransport({
|
|
397
|
+
localDtlsRole: (_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
|
|
398
|
+
localSdpObject
|
|
399
|
+
});
|
|
400
|
+
}
|
|
380
401
|
logger.debug('receive() | calling pc.setLocalDescription() [answer:%o]', answer);
|
|
381
402
|
await this._pc.setLocalDescription(answer);
|
|
382
403
|
const transceiver = this._pc.getTransceivers()
|
|
@@ -404,6 +425,35 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
404
425
|
const answer = await this._pc.createAnswer();
|
|
405
426
|
logger.debug('stopReceiving() | calling pc.setLocalDescription() [answer:%o]', answer);
|
|
406
427
|
await this._pc.setLocalDescription(answer);
|
|
428
|
+
this._mapMidTransceiver.delete(localId);
|
|
429
|
+
}
|
|
430
|
+
async pauseReceiving(localId) {
|
|
431
|
+
this._assertRecvDirection();
|
|
432
|
+
logger.debug('pauseReceiving() [localId:%s]', localId);
|
|
433
|
+
const transceiver = this._mapMidTransceiver.get(localId);
|
|
434
|
+
if (!transceiver)
|
|
435
|
+
throw new Error('associated RTCRtpTransceiver not found');
|
|
436
|
+
transceiver.direction = 'inactive';
|
|
437
|
+
const offer = { type: 'offer', sdp: this._remoteSdp.getSdp() };
|
|
438
|
+
logger.debug('pauseReceiving() | calling pc.setRemoteDescription() [offer:%o]', offer);
|
|
439
|
+
await this._pc.setRemoteDescription(offer);
|
|
440
|
+
const answer = await this._pc.createAnswer();
|
|
441
|
+
logger.debug('pauseReceiving() | calling pc.setLocalDescription() [answer:%o]', answer);
|
|
442
|
+
await this._pc.setLocalDescription(answer);
|
|
443
|
+
}
|
|
444
|
+
async resumeReceiving(localId) {
|
|
445
|
+
this._assertRecvDirection();
|
|
446
|
+
logger.debug('resumeReceiving() [localId:%s]', localId);
|
|
447
|
+
const transceiver = this._mapMidTransceiver.get(localId);
|
|
448
|
+
if (!transceiver)
|
|
449
|
+
throw new Error('associated RTCRtpTransceiver not found');
|
|
450
|
+
transceiver.direction = 'recvonly';
|
|
451
|
+
const offer = { type: 'offer', sdp: this._remoteSdp.getSdp() };
|
|
452
|
+
logger.debug('resumeReceiving() | calling pc.setRemoteDescription() [offer:%o]', offer);
|
|
453
|
+
await this._pc.setRemoteDescription(offer);
|
|
454
|
+
const answer = await this._pc.createAnswer();
|
|
455
|
+
logger.debug('resumeReceiving() | calling pc.setLocalDescription() [answer:%o]', answer);
|
|
456
|
+
await this._pc.setLocalDescription(answer);
|
|
407
457
|
}
|
|
408
458
|
async getReceiverStats(localId) {
|
|
409
459
|
this._assertRecvDirection();
|
|
@@ -413,6 +463,7 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
413
463
|
return transceiver.receiver.getStats();
|
|
414
464
|
}
|
|
415
465
|
async receiveDataChannel({ sctpStreamParameters, label, protocol }) {
|
|
466
|
+
var _a;
|
|
416
467
|
this._assertRecvDirection();
|
|
417
468
|
const { streamId, ordered, maxPacketLifeTime, maxRetransmits } = sctpStreamParameters;
|
|
418
469
|
const options = {
|
|
@@ -435,7 +486,10 @@ class Safari12 extends HandlerInterface_1.HandlerInterface {
|
|
|
435
486
|
const answer = await this._pc.createAnswer();
|
|
436
487
|
if (!this._transportReady) {
|
|
437
488
|
const localSdpObject = sdpTransform.parse(answer.sdp);
|
|
438
|
-
await this._setupTransport({
|
|
489
|
+
await this._setupTransport({
|
|
490
|
+
localDtlsRole: (_a = this._forcedLocalDtlsRole) !== null && _a !== void 0 ? _a : 'client',
|
|
491
|
+
localSdpObject
|
|
492
|
+
});
|
|
439
493
|
}
|
|
440
494
|
logger.debug('receiveDataChannel() | calling pc.setRemoteDescription() [answer:%o]', answer);
|
|
441
495
|
await this._pc.setLocalDescription(answer);
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mediasoup-client",
|
|
3
|
-
"version": "3.6.
|
|
3
|
+
"version": "3.6.44",
|
|
4
4
|
"description": "mediasoup client side JavaScript library",
|
|
5
5
|
"contributors": [
|
|
6
6
|
"Iñaki Baz Castillo <ibc@aliax.net> (https://inakibaz.me)",
|
|
@@ -49,11 +49,11 @@
|
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@types/sdp-transform": "^2.4.5",
|
|
51
51
|
"@types/uuid": "^3.4.9",
|
|
52
|
-
"@typescript-eslint/eslint-plugin": "^4.
|
|
53
|
-
"@typescript-eslint/parser": "^4.
|
|
52
|
+
"@typescript-eslint/eslint-plugin": "^4.33.0",
|
|
53
|
+
"@typescript-eslint/parser": "^4.33.0",
|
|
54
54
|
"eslint": "^7.32.0",
|
|
55
|
-
"eslint-plugin-jest": "^24.
|
|
56
|
-
"jest": "^27.
|
|
55
|
+
"eslint-plugin-jest": "^24.5.2",
|
|
56
|
+
"jest": "^27.3.1",
|
|
57
57
|
"jest-tobetype": "^1.2.3",
|
|
58
58
|
"open-cli": "^6.0.1",
|
|
59
59
|
"tsc-watch": "^4.5.0",
|
package/src/Consumer.ts
CHANGED
|
@@ -42,6 +42,8 @@ export class Consumer extends EnhancedEventEmitter
|
|
|
42
42
|
* @emits trackended
|
|
43
43
|
* @emits @getstats
|
|
44
44
|
* @emits @close
|
|
45
|
+
* @emits @pause
|
|
46
|
+
* @emits @resume
|
|
45
47
|
*/
|
|
46
48
|
constructor(
|
|
47
49
|
{
|
|
@@ -250,6 +252,8 @@ export class Consumer extends EnhancedEventEmitter
|
|
|
250
252
|
this._paused = true;
|
|
251
253
|
this._track.enabled = false;
|
|
252
254
|
|
|
255
|
+
this.emit('@pause');
|
|
256
|
+
|
|
253
257
|
// Emit observer event.
|
|
254
258
|
this._observer.safeEmit('pause');
|
|
255
259
|
}
|
|
@@ -271,6 +275,8 @@ export class Consumer extends EnhancedEventEmitter
|
|
|
271
275
|
this._paused = false;
|
|
272
276
|
this._track.enabled = true;
|
|
273
277
|
|
|
278
|
+
this.emit('@resume');
|
|
279
|
+
|
|
274
280
|
// Emit observer event.
|
|
275
281
|
this._observer.safeEmit('resume');
|
|
276
282
|
}
|
package/src/Transport.ts
CHANGED
|
@@ -80,7 +80,7 @@ export type IceCandidate =
|
|
|
80
80
|
*/
|
|
81
81
|
port: number;
|
|
82
82
|
/**
|
|
83
|
-
* The type of candidate
|
|
83
|
+
* The type of candidate.
|
|
84
84
|
*/
|
|
85
85
|
type: 'host' | 'srflx' | 'prflx' | 'relay';
|
|
86
86
|
/**
|
|
@@ -92,11 +92,11 @@ export type IceCandidate =
|
|
|
92
92
|
export type DtlsParameters =
|
|
93
93
|
{
|
|
94
94
|
/**
|
|
95
|
-
* DTLS role. Default 'auto'.
|
|
95
|
+
* Server DTLS role. Default 'auto'.
|
|
96
96
|
*/
|
|
97
97
|
role?: DtlsRole;
|
|
98
98
|
/**
|
|
99
|
-
* DTLS fingerprints.
|
|
99
|
+
* Server DTLS fingerprints.
|
|
100
100
|
*/
|
|
101
101
|
fingerprints: DtlsFingerprint[];
|
|
102
102
|
}
|
|
@@ -892,6 +892,22 @@ export class Transport extends EnhancedEventEmitter
|
|
|
892
892
|
.catch(() => {});
|
|
893
893
|
});
|
|
894
894
|
|
|
895
|
+
consumer.on('@pause', () =>
|
|
896
|
+
{
|
|
897
|
+
this._awaitQueue.push(
|
|
898
|
+
async () => this._handler.pauseReceiving(consumer.localId),
|
|
899
|
+
'consumer @pause event')
|
|
900
|
+
.catch(() => {});
|
|
901
|
+
});
|
|
902
|
+
|
|
903
|
+
consumer.on('@resume', () =>
|
|
904
|
+
{
|
|
905
|
+
this._awaitQueue.push(
|
|
906
|
+
async () => this._handler.resumeReceiving(consumer.localId),
|
|
907
|
+
'consumer @resume event')
|
|
908
|
+
.catch(() => {});
|
|
909
|
+
});
|
|
910
|
+
|
|
895
911
|
consumer.on('@getstats', (callback, errback) =>
|
|
896
912
|
{
|
|
897
913
|
if (this._closed)
|
package/src/handlers/Chrome55.ts
CHANGED
|
@@ -38,6 +38,9 @@ export class Chrome55 extends HandlerInterface
|
|
|
38
38
|
// Generic sending RTP parameters for audio and video suitable for the SDP
|
|
39
39
|
// remote answer.
|
|
40
40
|
private _sendingRemoteRtpParametersByKind?: { [key: string]: RtpParameters };
|
|
41
|
+
// Initial server side DTLS role. If not 'auto', it will force the opposite
|
|
42
|
+
// value in client side.
|
|
43
|
+
private _forcedLocalDtlsRole?: DtlsRole;
|
|
41
44
|
// RTCPeerConnection instance.
|
|
42
45
|
private _pc: any;
|
|
43
46
|
// Local stream for sending.
|
|
@@ -181,6 +184,13 @@ export class Chrome55 extends HandlerInterface
|
|
|
181
184
|
video : ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities)
|
|
182
185
|
};
|
|
183
186
|
|
|
187
|
+
if (dtlsParameters.role && dtlsParameters.role !== 'auto')
|
|
188
|
+
{
|
|
189
|
+
this._forcedLocalDtlsRole = dtlsParameters.role === 'server'
|
|
190
|
+
? 'client'
|
|
191
|
+
: 'server';
|
|
192
|
+
}
|
|
193
|
+
|
|
184
194
|
this._pc = new (RTCPeerConnection as any)(
|
|
185
195
|
{
|
|
186
196
|
iceServers : iceServers || [],
|
|
@@ -315,7 +325,13 @@ export class Chrome55 extends HandlerInterface
|
|
|
315
325
|
ortc.reduceCodecs(sendingRemoteRtpParameters.codecs);
|
|
316
326
|
|
|
317
327
|
if (!this._transportReady)
|
|
318
|
-
|
|
328
|
+
{
|
|
329
|
+
await this._setupTransport(
|
|
330
|
+
{
|
|
331
|
+
localDtlsRole : this._forcedLocalDtlsRole ?? 'server',
|
|
332
|
+
localSdpObject
|
|
333
|
+
});
|
|
334
|
+
}
|
|
319
335
|
|
|
320
336
|
if (track.kind === 'video' && encodings && encodings.length > 1)
|
|
321
337
|
{
|
|
@@ -525,7 +541,13 @@ export class Chrome55 extends HandlerInterface
|
|
|
525
541
|
.find((m: any) => m.type === 'application');
|
|
526
542
|
|
|
527
543
|
if (!this._transportReady)
|
|
528
|
-
|
|
544
|
+
{
|
|
545
|
+
await this._setupTransport(
|
|
546
|
+
{
|
|
547
|
+
localDtlsRole : this._forcedLocalDtlsRole ?? 'server',
|
|
548
|
+
localSdpObject
|
|
549
|
+
});
|
|
550
|
+
}
|
|
529
551
|
|
|
530
552
|
logger.debug(
|
|
531
553
|
'sendDataChannel() | calling pc.setLocalDescription() [offer:%o]',
|
|
@@ -602,7 +624,13 @@ export class Chrome55 extends HandlerInterface
|
|
|
602
624
|
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
|
|
603
625
|
|
|
604
626
|
if (!this._transportReady)
|
|
605
|
-
|
|
627
|
+
{
|
|
628
|
+
await this._setupTransport(
|
|
629
|
+
{
|
|
630
|
+
localDtlsRole : this._forcedLocalDtlsRole ?? 'client',
|
|
631
|
+
localSdpObject
|
|
632
|
+
});
|
|
633
|
+
}
|
|
606
634
|
|
|
607
635
|
logger.debug(
|
|
608
636
|
'receive() | calling pc.setLocalDescription() [answer:%o]',
|
|
@@ -653,6 +681,20 @@ export class Chrome55 extends HandlerInterface
|
|
|
653
681
|
|
|
654
682
|
await this._pc.setLocalDescription(answer);
|
|
655
683
|
}
|
|
684
|
+
|
|
685
|
+
async pauseReceiving(
|
|
686
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
687
|
+
localId: string): Promise<void>
|
|
688
|
+
{
|
|
689
|
+
// Unimplemented.
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
async resumeReceiving(
|
|
693
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
694
|
+
localId: string): Promise<void>
|
|
695
|
+
{
|
|
696
|
+
// Unimplemented.
|
|
697
|
+
}
|
|
656
698
|
|
|
657
699
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
658
700
|
async getReceiverStats(localId: string): Promise<RTCStatsReport>
|
|
@@ -708,7 +750,11 @@ export class Chrome55 extends HandlerInterface
|
|
|
708
750
|
{
|
|
709
751
|
const localSdpObject = sdpTransform.parse(answer.sdp);
|
|
710
752
|
|
|
711
|
-
await this._setupTransport(
|
|
753
|
+
await this._setupTransport(
|
|
754
|
+
{
|
|
755
|
+
localDtlsRole : this._forcedLocalDtlsRole ?? 'client',
|
|
756
|
+
localSdpObject
|
|
757
|
+
});
|
|
712
758
|
}
|
|
713
759
|
|
|
714
760
|
logger.debug(
|
package/src/handlers/Chrome67.ts
CHANGED
|
@@ -37,6 +37,9 @@ export class Chrome67 extends HandlerInterface
|
|
|
37
37
|
// Generic sending RTP parameters for audio and video suitable for the SDP
|
|
38
38
|
// remote answer.
|
|
39
39
|
private _sendingRemoteRtpParametersByKind?: { [key: string]: RtpParameters };
|
|
40
|
+
// Initial server side DTLS role. If not 'auto', it will force the opposite
|
|
41
|
+
// value in client side.
|
|
42
|
+
private _forcedLocalDtlsRole?: DtlsRole;
|
|
40
43
|
// RTCPeerConnection instance.
|
|
41
44
|
private _pc: any;
|
|
42
45
|
// Local stream for sending.
|
|
@@ -182,6 +185,13 @@ export class Chrome67 extends HandlerInterface
|
|
|
182
185
|
video : ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities)
|
|
183
186
|
};
|
|
184
187
|
|
|
188
|
+
if (dtlsParameters.role && dtlsParameters.role !== 'auto')
|
|
189
|
+
{
|
|
190
|
+
this._forcedLocalDtlsRole = dtlsParameters.role === 'server'
|
|
191
|
+
? 'client'
|
|
192
|
+
: 'server';
|
|
193
|
+
}
|
|
194
|
+
|
|
185
195
|
this._pc = new (RTCPeerConnection as any)(
|
|
186
196
|
{
|
|
187
197
|
iceServers : iceServers || [],
|
|
@@ -316,7 +326,13 @@ export class Chrome67 extends HandlerInterface
|
|
|
316
326
|
ortc.reduceCodecs(sendingRemoteRtpParameters.codecs);
|
|
317
327
|
|
|
318
328
|
if (!this._transportReady)
|
|
319
|
-
|
|
329
|
+
{
|
|
330
|
+
await this._setupTransport(
|
|
331
|
+
{
|
|
332
|
+
localDtlsRole : this._forcedLocalDtlsRole ?? 'server',
|
|
333
|
+
localSdpObject
|
|
334
|
+
});
|
|
335
|
+
}
|
|
320
336
|
|
|
321
337
|
if (track.kind === 'video' && encodings && encodings.length > 1)
|
|
322
338
|
{
|
|
@@ -602,7 +618,13 @@ export class Chrome67 extends HandlerInterface
|
|
|
602
618
|
.find((m: any) => m.type === 'application');
|
|
603
619
|
|
|
604
620
|
if (!this._transportReady)
|
|
605
|
-
|
|
621
|
+
{
|
|
622
|
+
await this._setupTransport(
|
|
623
|
+
{
|
|
624
|
+
localDtlsRole : this._forcedLocalDtlsRole ?? 'server',
|
|
625
|
+
localSdpObject
|
|
626
|
+
});
|
|
627
|
+
}
|
|
606
628
|
|
|
607
629
|
logger.debug(
|
|
608
630
|
'sendDataChannel() | calling pc.setLocalDescription() [offer:%o]',
|
|
@@ -678,7 +700,13 @@ export class Chrome67 extends HandlerInterface
|
|
|
678
700
|
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
|
|
679
701
|
|
|
680
702
|
if (!this._transportReady)
|
|
681
|
-
|
|
703
|
+
{
|
|
704
|
+
await this._setupTransport(
|
|
705
|
+
{
|
|
706
|
+
localDtlsRole : this._forcedLocalDtlsRole ?? 'client',
|
|
707
|
+
localSdpObject
|
|
708
|
+
});
|
|
709
|
+
}
|
|
682
710
|
|
|
683
711
|
logger.debug(
|
|
684
712
|
'receive() | calling pc.setLocalDescription() [answer:%o]',
|
|
@@ -733,6 +761,20 @@ export class Chrome67 extends HandlerInterface
|
|
|
733
761
|
await this._pc.setLocalDescription(answer);
|
|
734
762
|
}
|
|
735
763
|
|
|
764
|
+
async pauseReceiving(
|
|
765
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
766
|
+
localId: string): Promise<void>
|
|
767
|
+
{
|
|
768
|
+
// Unimplemented.
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
async resumeReceiving(
|
|
772
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
773
|
+
localId: string): Promise<void>
|
|
774
|
+
{
|
|
775
|
+
// Unimplemented.
|
|
776
|
+
}
|
|
777
|
+
|
|
736
778
|
async getReceiverStats(localId: string): Promise<RTCStatsReport>
|
|
737
779
|
{
|
|
738
780
|
this._assertRecvDirection();
|
|
@@ -793,7 +835,11 @@ export class Chrome67 extends HandlerInterface
|
|
|
793
835
|
{
|
|
794
836
|
const localSdpObject = sdpTransform.parse(answer.sdp);
|
|
795
837
|
|
|
796
|
-
await this._setupTransport(
|
|
838
|
+
await this._setupTransport(
|
|
839
|
+
{
|
|
840
|
+
localDtlsRole : this._forcedLocalDtlsRole ?? 'client',
|
|
841
|
+
localSdpObject
|
|
842
|
+
});
|
|
797
843
|
}
|
|
798
844
|
|
|
799
845
|
logger.debug(
|
package/src/handlers/Chrome70.ts
CHANGED
|
@@ -38,6 +38,9 @@ export class Chrome70 extends HandlerInterface
|
|
|
38
38
|
// Generic sending RTP parameters for audio and video suitable for the SDP
|
|
39
39
|
// remote answer.
|
|
40
40
|
private _sendingRemoteRtpParametersByKind?: { [key: string]: RtpParameters };
|
|
41
|
+
// Initial server side DTLS role. If not 'auto', it will force the opposite
|
|
42
|
+
// value in client side.
|
|
43
|
+
private _forcedLocalDtlsRole?: DtlsRole;
|
|
41
44
|
// RTCPeerConnection instance.
|
|
42
45
|
private _pc: any;
|
|
43
46
|
// Map of RTCTransceivers indexed by MID.
|
|
@@ -168,6 +171,13 @@ export class Chrome70 extends HandlerInterface
|
|
|
168
171
|
video : ortc.getSendingRemoteRtpParameters('video', extendedRtpCapabilities)
|
|
169
172
|
};
|
|
170
173
|
|
|
174
|
+
if (dtlsParameters.role && dtlsParameters.role !== 'auto')
|
|
175
|
+
{
|
|
176
|
+
this._forcedLocalDtlsRole = dtlsParameters.role === 'server'
|
|
177
|
+
? 'client'
|
|
178
|
+
: 'server';
|
|
179
|
+
}
|
|
180
|
+
|
|
171
181
|
this._pc = new (RTCPeerConnection as any)(
|
|
172
182
|
{
|
|
173
183
|
iceServers : iceServers || [],
|
|
@@ -298,7 +308,13 @@ export class Chrome70 extends HandlerInterface
|
|
|
298
308
|
let offerMediaObject;
|
|
299
309
|
|
|
300
310
|
if (!this._transportReady)
|
|
301
|
-
|
|
311
|
+
{
|
|
312
|
+
await this._setupTransport(
|
|
313
|
+
{
|
|
314
|
+
localDtlsRole : this._forcedLocalDtlsRole ?? 'server',
|
|
315
|
+
localSdpObject
|
|
316
|
+
});
|
|
317
|
+
}
|
|
302
318
|
|
|
303
319
|
if (encodings && encodings.length > 1)
|
|
304
320
|
{
|
|
@@ -478,6 +494,8 @@ export class Chrome70 extends HandlerInterface
|
|
|
478
494
|
answer);
|
|
479
495
|
|
|
480
496
|
await this._pc.setRemoteDescription(answer);
|
|
497
|
+
|
|
498
|
+
this._mapMidTransceiver.delete(localId);
|
|
481
499
|
}
|
|
482
500
|
|
|
483
501
|
async replaceTrack(
|
|
@@ -606,7 +624,13 @@ export class Chrome70 extends HandlerInterface
|
|
|
606
624
|
.find((m: any) => m.type === 'application');
|
|
607
625
|
|
|
608
626
|
if (!this._transportReady)
|
|
609
|
-
|
|
627
|
+
{
|
|
628
|
+
await this._setupTransport(
|
|
629
|
+
{
|
|
630
|
+
localDtlsRole : this._forcedLocalDtlsRole ?? 'server',
|
|
631
|
+
localSdpObject
|
|
632
|
+
});
|
|
633
|
+
}
|
|
610
634
|
|
|
611
635
|
logger.debug(
|
|
612
636
|
'sendDataChannel() | calling pc.setLocalDescription() [offer:%o]',
|
|
@@ -681,7 +705,13 @@ export class Chrome70 extends HandlerInterface
|
|
|
681
705
|
answer = { type: 'answer', sdp: sdpTransform.write(localSdpObject) };
|
|
682
706
|
|
|
683
707
|
if (!this._transportReady)
|
|
684
|
-
|
|
708
|
+
{
|
|
709
|
+
await this._setupTransport(
|
|
710
|
+
{
|
|
711
|
+
localDtlsRole : this._forcedLocalDtlsRole ?? 'client',
|
|
712
|
+
localSdpObject
|
|
713
|
+
});
|
|
714
|
+
}
|
|
685
715
|
|
|
686
716
|
logger.debug(
|
|
687
717
|
'receive() | calling pc.setLocalDescription() [answer:%o]',
|
|
@@ -733,6 +763,22 @@ export class Chrome70 extends HandlerInterface
|
|
|
733
763
|
answer);
|
|
734
764
|
|
|
735
765
|
await this._pc.setLocalDescription(answer);
|
|
766
|
+
|
|
767
|
+
this._mapMidTransceiver.delete(localId);
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
async pauseReceiving(
|
|
771
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
772
|
+
localId: string): Promise<void>
|
|
773
|
+
{
|
|
774
|
+
// Unimplemented.
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
async resumeReceiving(
|
|
778
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
779
|
+
localId: string): Promise<void>
|
|
780
|
+
{
|
|
781
|
+
// Unimplemented.
|
|
736
782
|
}
|
|
737
783
|
|
|
738
784
|
async getReceiverStats(localId: string): Promise<RTCStatsReport>
|
|
@@ -795,7 +841,11 @@ export class Chrome70 extends HandlerInterface
|
|
|
795
841
|
{
|
|
796
842
|
const localSdpObject = sdpTransform.parse(answer.sdp);
|
|
797
843
|
|
|
798
|
-
await this._setupTransport(
|
|
844
|
+
await this._setupTransport(
|
|
845
|
+
{
|
|
846
|
+
localDtlsRole : this._forcedLocalDtlsRole ?? 'client',
|
|
847
|
+
localSdpObject
|
|
848
|
+
});
|
|
799
849
|
}
|
|
800
850
|
|
|
801
851
|
logger.debug(
|