@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 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} => ${this.mediaConnectionState}`);
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
- const rtcRtpTransceiver = this.pc.addTransceiver(toMediaStreamTrackKind(mediaType), {
13547
- direction: 'recvonly',
13548
- });
13549
- this.addMid(mediaType);
13550
- const recvOnlyTransceiver = new ReceiveOnlyTransceiver(rtcRtpTransceiver, (mid) => {
13551
- const ingressSignaler = this.streamSignalerManager.getIngressStreamSignaler(mid);
13552
- if (!ingressSignaler) {
13553
- return null;
13554
- }
13555
- return ingressSignaler.getReceiverId();
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.doLocalOfferAnswer();
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
- var _a;
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.doLocalOfferAnswer();
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.doLocalOfferAnswer();
13824
+ yield this.queueLocalOfferAnswer();
13803
13825
  }
13804
13826
  });
13805
13827
  }