@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/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} => ${this.mediaConnectionState}`);
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
- const rtcRtpTransceiver = this.pc.addTransceiver(toMediaStreamTrackKind(mediaType), {
13543
- direction: 'recvonly',
13544
- });
13545
- this.addMid(mediaType);
13546
- const recvOnlyTransceiver = new ReceiveOnlyTransceiver(rtcRtpTransceiver, (mid) => {
13547
- const ingressSignaler = this.streamSignalerManager.getIngressStreamSignaler(mid);
13548
- if (!ingressSignaler) {
13549
- return null;
13550
- }
13551
- return ingressSignaler.getReceiverId();
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.doLocalOfferAnswer();
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
- var _a;
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.doLocalOfferAnswer();
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.doLocalOfferAnswer();
13820
+ yield this.queueLocalOfferAnswer();
13799
13821
  }
13800
13822
  });
13801
13823
  }