@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/cjs/index.js
CHANGED
|
@@ -1130,6 +1130,7 @@ class LocalTrack extends EventEmitter$2 {
|
|
|
1130
1130
|
constructor(stream) {
|
|
1131
1131
|
super();
|
|
1132
1132
|
this.isPublished = false;
|
|
1133
|
+
this.loadingEffects = new Map();
|
|
1133
1134
|
this.effects = new Map();
|
|
1134
1135
|
this.originalStream = stream;
|
|
1135
1136
|
this.underlyingStream = stream;
|
|
@@ -1268,9 +1269,18 @@ class LocalTrack extends EventEmitter$2 {
|
|
|
1268
1269
|
*/
|
|
1269
1270
|
addEffect(name, effect) {
|
|
1270
1271
|
return __awaiter$1(this, void 0, void 0, function* () {
|
|
1272
|
+
// Load the effect
|
|
1273
|
+
this.loadingEffects.set(name, effect);
|
|
1271
1274
|
yield effect.load(this.underlyingStream);
|
|
1275
|
+
// Check that the loaded effect is the latest one and dispose if not
|
|
1276
|
+
if (effect !== this.loadingEffects.get(name)) {
|
|
1277
|
+
yield effect.dispose();
|
|
1278
|
+
throw new Error(`Effect "${name}" not required after loading`);
|
|
1279
|
+
}
|
|
1280
|
+
// Use the loaded effect
|
|
1272
1281
|
this.underlyingStream = effect.getUnderlyingStream();
|
|
1273
1282
|
this.effects.set(name, effect);
|
|
1283
|
+
this.loadingEffects.delete(name);
|
|
1274
1284
|
this.emit(exports.LocalTrackEvents.UnderlyingTrackChange);
|
|
1275
1285
|
});
|
|
1276
1286
|
}
|
|
@@ -1300,6 +1310,9 @@ class LocalTrack extends EventEmitter$2 {
|
|
|
1300
1310
|
*/
|
|
1301
1311
|
disposeEffects() {
|
|
1302
1312
|
return __awaiter$1(this, void 0, void 0, function* () {
|
|
1313
|
+
// Clear effects that are loading to indicate that they are not needed
|
|
1314
|
+
this.loadingEffects.clear();
|
|
1315
|
+
// Dispose of any effects currently in use
|
|
1303
1316
|
if (this.effects.size > 0) {
|
|
1304
1317
|
yield Promise.all(Array.from(this.effects.values(), (effect) => effect.dispose()));
|
|
1305
1318
|
this.effects.clear();
|
|
@@ -1481,7 +1494,7 @@ class ConnectionStateHandler extends EventEmitter$2 {
|
|
|
1481
1494
|
else {
|
|
1482
1495
|
mediaConnectionState = exports.ConnectionState.Connecting;
|
|
1483
1496
|
}
|
|
1484
|
-
logger$3.log(`iceConnectionState=${iceState} connectionState=${connectionState} => ${
|
|
1497
|
+
logger$3.log(`iceConnectionState=${iceState} connectionState=${connectionState} => ${mediaConnectionState}`);
|
|
1485
1498
|
return mediaConnectionState;
|
|
1486
1499
|
}
|
|
1487
1500
|
/**
|
|
@@ -13543,25 +13556,29 @@ class MultistreamConnection extends EventEmitter {
|
|
|
13543
13556
|
}
|
|
13544
13557
|
createReceiveSlot(mediaType) {
|
|
13545
13558
|
return __awaiter(this, void 0, void 0, function* () {
|
|
13546
|
-
|
|
13547
|
-
|
|
13548
|
-
|
|
13549
|
-
|
|
13550
|
-
|
|
13551
|
-
|
|
13552
|
-
|
|
13553
|
-
|
|
13554
|
-
|
|
13555
|
-
|
|
13559
|
+
return new Promise((createReceiveSlotResolve) => {
|
|
13560
|
+
this.offerAnswerQueue.push(() => __awaiter(this, void 0, void 0, function* () {
|
|
13561
|
+
const rtcRtpTransceiver = this.pc.addTransceiver(toMediaStreamTrackKind(mediaType), {
|
|
13562
|
+
direction: 'recvonly',
|
|
13563
|
+
});
|
|
13564
|
+
this.addMid(mediaType);
|
|
13565
|
+
const recvOnlyTransceiver = new ReceiveOnlyTransceiver(rtcRtpTransceiver, (mid) => {
|
|
13566
|
+
const ingressSignaler = this.streamSignalerManager.getIngressStreamSignaler(mid);
|
|
13567
|
+
if (!ingressSignaler) {
|
|
13568
|
+
return null;
|
|
13569
|
+
}
|
|
13570
|
+
return ingressSignaler.getReceiverId();
|
|
13571
|
+
});
|
|
13572
|
+
if (this.pc.getRemoteDescription()) {
|
|
13573
|
+
yield this.doLocalOfferAnswer();
|
|
13574
|
+
}
|
|
13575
|
+
this.recvTransceivers.set(mediaType, [
|
|
13576
|
+
...(this.recvTransceivers.get(mediaType) || []),
|
|
13577
|
+
recvOnlyTransceiver,
|
|
13578
|
+
]);
|
|
13579
|
+
createReceiveSlotResolve(recvOnlyTransceiver.receiveSlot);
|
|
13580
|
+
}));
|
|
13556
13581
|
});
|
|
13557
|
-
if (this.pc.getRemoteDescription()) {
|
|
13558
|
-
yield this.doLocalOfferAnswer();
|
|
13559
|
-
}
|
|
13560
|
-
this.recvTransceivers.set(mediaType, [
|
|
13561
|
-
...(this.recvTransceivers.get(mediaType) || []),
|
|
13562
|
-
recvOnlyTransceiver,
|
|
13563
|
-
]);
|
|
13564
|
-
return recvOnlyTransceiver.receiveSlot;
|
|
13565
13582
|
});
|
|
13566
13583
|
}
|
|
13567
13584
|
getIngressPayloadType(mediaType, mimeType) {
|
|
@@ -13638,23 +13655,28 @@ class MultistreamConnection extends EventEmitter {
|
|
|
13638
13655
|
logger.debug(`setAnswerResolve function was cleared between setAnswer and result of setRemoteDescription`);
|
|
13639
13656
|
}
|
|
13640
13657
|
if (isInitialAnswer && this.customCodecParameters.size > 0) {
|
|
13641
|
-
yield this.
|
|
13658
|
+
yield this.queueLocalOfferAnswer();
|
|
13642
13659
|
}
|
|
13643
13660
|
}));
|
|
13644
13661
|
});
|
|
13645
13662
|
}
|
|
13646
13663
|
doLocalOfferAnswer() {
|
|
13664
|
+
var _a;
|
|
13665
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
13666
|
+
const offer = yield this.pc.createOffer();
|
|
13667
|
+
if (!offer.sdp) {
|
|
13668
|
+
throw new Error('No SDP offer');
|
|
13669
|
+
}
|
|
13670
|
+
offer.sdp = this.preProcessLocalOffer(offer.sdp);
|
|
13671
|
+
yield this.pc.setLocalDescription(offer);
|
|
13672
|
+
const answer = this.preProcessRemoteAnswer((_a = this.pc.getRemoteDescription()) === null || _a === void 0 ? void 0 : _a.sdp);
|
|
13673
|
+
return this.pc.setRemoteDescription({ type: 'answer', sdp: answer });
|
|
13674
|
+
});
|
|
13675
|
+
}
|
|
13676
|
+
queueLocalOfferAnswer() {
|
|
13647
13677
|
return __awaiter(this, void 0, void 0, function* () {
|
|
13648
13678
|
return this.offerAnswerQueue.push(() => __awaiter(this, void 0, void 0, function* () {
|
|
13649
|
-
|
|
13650
|
-
const offer = yield this.pc.createOffer();
|
|
13651
|
-
if (!offer.sdp) {
|
|
13652
|
-
throw new Error('No SDP offer');
|
|
13653
|
-
}
|
|
13654
|
-
offer.sdp = this.preProcessLocalOffer(offer.sdp);
|
|
13655
|
-
yield this.pc.setLocalDescription(offer);
|
|
13656
|
-
const answer = this.preProcessRemoteAnswer((_a = this.pc.getRemoteDescription()) === null || _a === void 0 ? void 0 : _a.sdp);
|
|
13657
|
-
return this.pc.setRemoteDescription({ type: 'answer', sdp: answer });
|
|
13679
|
+
yield this.doLocalOfferAnswer();
|
|
13658
13680
|
}));
|
|
13659
13681
|
});
|
|
13660
13682
|
}
|
|
@@ -13787,7 +13809,7 @@ class MultistreamConnection extends EventEmitter {
|
|
|
13787
13809
|
});
|
|
13788
13810
|
this.customCodecParameters.set(mediaType, currentParams);
|
|
13789
13811
|
if (this.pc.getRemoteDescription()) {
|
|
13790
|
-
yield this.
|
|
13812
|
+
yield this.queueLocalOfferAnswer();
|
|
13791
13813
|
}
|
|
13792
13814
|
});
|
|
13793
13815
|
}
|
|
@@ -13799,7 +13821,7 @@ class MultistreamConnection extends EventEmitter {
|
|
|
13799
13821
|
});
|
|
13800
13822
|
this.customCodecParameters.set(mediaType, currentParams);
|
|
13801
13823
|
if (this.pc.getRemoteDescription()) {
|
|
13802
|
-
yield this.
|
|
13824
|
+
yield this.queueLocalOfferAnswer();
|
|
13803
13825
|
}
|
|
13804
13826
|
});
|
|
13805
13827
|
}
|