@webex/web-client-media-engine 2.0.6 → 2.0.8
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/dist/cjs/index.js +53 -31
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +53 -31
- package/dist/esm/index.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/package.json +2 -2
package/dist/esm/index.js
CHANGED
|
@@ -1126,6 +1126,7 @@ class LocalTrack extends EventEmitter$2 {
|
|
|
1126
1126
|
constructor(stream) {
|
|
1127
1127
|
super();
|
|
1128
1128
|
this.isPublished = false;
|
|
1129
|
+
this.loadingEffects = new Map();
|
|
1129
1130
|
this.effects = new Map();
|
|
1130
1131
|
this.originalStream = stream;
|
|
1131
1132
|
this.underlyingStream = stream;
|
|
@@ -1264,9 +1265,18 @@ class LocalTrack extends EventEmitter$2 {
|
|
|
1264
1265
|
*/
|
|
1265
1266
|
addEffect(name, effect) {
|
|
1266
1267
|
return __awaiter$1(this, void 0, void 0, function* () {
|
|
1268
|
+
// Load the effect
|
|
1269
|
+
this.loadingEffects.set(name, effect);
|
|
1267
1270
|
yield effect.load(this.underlyingStream);
|
|
1271
|
+
// Check that the loaded effect is the latest one and dispose if not
|
|
1272
|
+
if (effect !== this.loadingEffects.get(name)) {
|
|
1273
|
+
yield effect.dispose();
|
|
1274
|
+
throw new Error(`Effect "${name}" not required after loading`);
|
|
1275
|
+
}
|
|
1276
|
+
// Use the loaded effect
|
|
1268
1277
|
this.underlyingStream = effect.getUnderlyingStream();
|
|
1269
1278
|
this.effects.set(name, effect);
|
|
1279
|
+
this.loadingEffects.delete(name);
|
|
1270
1280
|
this.emit(LocalTrackEvents.UnderlyingTrackChange);
|
|
1271
1281
|
});
|
|
1272
1282
|
}
|
|
@@ -1296,6 +1306,9 @@ class LocalTrack extends EventEmitter$2 {
|
|
|
1296
1306
|
*/
|
|
1297
1307
|
disposeEffects() {
|
|
1298
1308
|
return __awaiter$1(this, void 0, void 0, function* () {
|
|
1309
|
+
// Clear effects that are loading to indicate that they are not needed
|
|
1310
|
+
this.loadingEffects.clear();
|
|
1311
|
+
// Dispose of any effects currently in use
|
|
1299
1312
|
if (this.effects.size > 0) {
|
|
1300
1313
|
yield Promise.all(Array.from(this.effects.values(), (effect) => effect.dispose()));
|
|
1301
1314
|
this.effects.clear();
|
|
@@ -1477,7 +1490,7 @@ class ConnectionStateHandler extends EventEmitter$2 {
|
|
|
1477
1490
|
else {
|
|
1478
1491
|
mediaConnectionState = ConnectionState.Connecting;
|
|
1479
1492
|
}
|
|
1480
|
-
logger$3.log(`iceConnectionState=${iceState} connectionState=${connectionState} => ${
|
|
1493
|
+
logger$3.log(`iceConnectionState=${iceState} connectionState=${connectionState} => ${mediaConnectionState}`);
|
|
1481
1494
|
return mediaConnectionState;
|
|
1482
1495
|
}
|
|
1483
1496
|
/**
|
|
@@ -13539,25 +13552,29 @@ class MultistreamConnection extends EventEmitter {
|
|
|
13539
13552
|
}
|
|
13540
13553
|
createReceiveSlot(mediaType) {
|
|
13541
13554
|
return __awaiter(this, void 0, void 0, function* () {
|
|
13542
|
-
|
|
13543
|
-
|
|
13544
|
-
|
|
13545
|
-
|
|
13546
|
-
|
|
13547
|
-
|
|
13548
|
-
|
|
13549
|
-
|
|
13550
|
-
|
|
13551
|
-
|
|
13555
|
+
return new Promise((createReceiveSlotResolve) => {
|
|
13556
|
+
this.offerAnswerQueue.push(() => __awaiter(this, void 0, void 0, function* () {
|
|
13557
|
+
const rtcRtpTransceiver = this.pc.addTransceiver(toMediaStreamTrackKind(mediaType), {
|
|
13558
|
+
direction: 'recvonly',
|
|
13559
|
+
});
|
|
13560
|
+
this.addMid(mediaType);
|
|
13561
|
+
const recvOnlyTransceiver = new ReceiveOnlyTransceiver(rtcRtpTransceiver, (mid) => {
|
|
13562
|
+
const ingressSignaler = this.streamSignalerManager.getIngressStreamSignaler(mid);
|
|
13563
|
+
if (!ingressSignaler) {
|
|
13564
|
+
return null;
|
|
13565
|
+
}
|
|
13566
|
+
return ingressSignaler.getReceiverId();
|
|
13567
|
+
});
|
|
13568
|
+
if (this.pc.getRemoteDescription()) {
|
|
13569
|
+
yield this.doLocalOfferAnswer();
|
|
13570
|
+
}
|
|
13571
|
+
this.recvTransceivers.set(mediaType, [
|
|
13572
|
+
...(this.recvTransceivers.get(mediaType) || []),
|
|
13573
|
+
recvOnlyTransceiver,
|
|
13574
|
+
]);
|
|
13575
|
+
createReceiveSlotResolve(recvOnlyTransceiver.receiveSlot);
|
|
13576
|
+
}));
|
|
13552
13577
|
});
|
|
13553
|
-
if (this.pc.getRemoteDescription()) {
|
|
13554
|
-
yield this.doLocalOfferAnswer();
|
|
13555
|
-
}
|
|
13556
|
-
this.recvTransceivers.set(mediaType, [
|
|
13557
|
-
...(this.recvTransceivers.get(mediaType) || []),
|
|
13558
|
-
recvOnlyTransceiver,
|
|
13559
|
-
]);
|
|
13560
|
-
return recvOnlyTransceiver.receiveSlot;
|
|
13561
13578
|
});
|
|
13562
13579
|
}
|
|
13563
13580
|
getIngressPayloadType(mediaType, mimeType) {
|
|
@@ -13634,23 +13651,28 @@ class MultistreamConnection extends EventEmitter {
|
|
|
13634
13651
|
logger.debug(`setAnswerResolve function was cleared between setAnswer and result of setRemoteDescription`);
|
|
13635
13652
|
}
|
|
13636
13653
|
if (isInitialAnswer && this.customCodecParameters.size > 0) {
|
|
13637
|
-
yield this.
|
|
13654
|
+
yield this.queueLocalOfferAnswer();
|
|
13638
13655
|
}
|
|
13639
13656
|
}));
|
|
13640
13657
|
});
|
|
13641
13658
|
}
|
|
13642
13659
|
doLocalOfferAnswer() {
|
|
13660
|
+
var _a;
|
|
13661
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
13662
|
+
const offer = yield this.pc.createOffer();
|
|
13663
|
+
if (!offer.sdp) {
|
|
13664
|
+
throw new Error('No SDP offer');
|
|
13665
|
+
}
|
|
13666
|
+
offer.sdp = this.preProcessLocalOffer(offer.sdp);
|
|
13667
|
+
yield this.pc.setLocalDescription(offer);
|
|
13668
|
+
const answer = this.preProcessRemoteAnswer((_a = this.pc.getRemoteDescription()) === null || _a === void 0 ? void 0 : _a.sdp);
|
|
13669
|
+
return this.pc.setRemoteDescription({ type: 'answer', sdp: answer });
|
|
13670
|
+
});
|
|
13671
|
+
}
|
|
13672
|
+
queueLocalOfferAnswer() {
|
|
13643
13673
|
return __awaiter(this, void 0, void 0, function* () {
|
|
13644
13674
|
return this.offerAnswerQueue.push(() => __awaiter(this, void 0, void 0, function* () {
|
|
13645
|
-
|
|
13646
|
-
const offer = yield this.pc.createOffer();
|
|
13647
|
-
if (!offer.sdp) {
|
|
13648
|
-
throw new Error('No SDP offer');
|
|
13649
|
-
}
|
|
13650
|
-
offer.sdp = this.preProcessLocalOffer(offer.sdp);
|
|
13651
|
-
yield this.pc.setLocalDescription(offer);
|
|
13652
|
-
const answer = this.preProcessRemoteAnswer((_a = this.pc.getRemoteDescription()) === null || _a === void 0 ? void 0 : _a.sdp);
|
|
13653
|
-
return this.pc.setRemoteDescription({ type: 'answer', sdp: answer });
|
|
13675
|
+
yield this.doLocalOfferAnswer();
|
|
13654
13676
|
}));
|
|
13655
13677
|
});
|
|
13656
13678
|
}
|
|
@@ -13783,7 +13805,7 @@ class MultistreamConnection extends EventEmitter {
|
|
|
13783
13805
|
});
|
|
13784
13806
|
this.customCodecParameters.set(mediaType, currentParams);
|
|
13785
13807
|
if (this.pc.getRemoteDescription()) {
|
|
13786
|
-
yield this.
|
|
13808
|
+
yield this.queueLocalOfferAnswer();
|
|
13787
13809
|
}
|
|
13788
13810
|
});
|
|
13789
13811
|
}
|
|
@@ -13795,7 +13817,7 @@ class MultistreamConnection extends EventEmitter {
|
|
|
13795
13817
|
});
|
|
13796
13818
|
this.customCodecParameters.set(mediaType, currentParams);
|
|
13797
13819
|
if (this.pc.getRemoteDescription()) {
|
|
13798
|
-
yield this.
|
|
13820
|
+
yield this.queueLocalOfferAnswer();
|
|
13799
13821
|
}
|
|
13800
13822
|
});
|
|
13801
13823
|
}
|