@webex/web-client-media-engine 1.37.4 → 1.37.6

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
@@ -8573,6 +8573,7 @@ class ReceiveSlot extends EventEmitter {
8573
8573
  this.handleTrackMuted = this.handleTrackMuted.bind(this);
8574
8574
  this.handleTrackUnmuted = this.handleTrackUnmuted.bind(this);
8575
8575
  this._stream = new MediaStream([track]);
8576
+ this._sourceState = 'no source';
8576
8577
  this.addTrackHandlers(track);
8577
8578
  }
8578
8579
  addTrackHandlers(track) {
@@ -8600,8 +8601,11 @@ class ReceiveSlot extends EventEmitter {
8600
8601
  this._stream.addTrack(newTrack);
8601
8602
  }
8602
8603
  _updateSource(state, csi) {
8603
- this.currentRxCsi = csi;
8604
- this.emit(exports.ReceiveSlotEvents.SourceUpdate, state, csi);
8604
+ if (state !== this._sourceState || csi !== this._currentRxCsi) {
8605
+ this._sourceState = state;
8606
+ this._currentRxCsi = csi;
8607
+ this.emit(exports.ReceiveSlotEvents.SourceUpdate, state, csi);
8608
+ }
8605
8609
  }
8606
8610
  close() {
8607
8611
  this._stream.getTracks().forEach((t) => {
@@ -8614,6 +8618,9 @@ class ReceiveSlot extends EventEmitter {
8614
8618
  get stream() {
8615
8619
  return this._stream;
8616
8620
  }
8621
+ get currentRxCsi() {
8622
+ return this._currentRxCsi;
8623
+ }
8617
8624
  }
8618
8625
  ReceiveSlot.Events = exports.ReceiveSlotEvents;
8619
8626
 
@@ -9649,10 +9656,17 @@ class MultistreamConnection extends EventEmitter {
9649
9656
  : [{ active: false }];
9650
9657
  }
9651
9658
  createSendTransceiver(mediaType, sceneId, sendEncodingsOptions) {
9652
- const rtcTransceiver = this.pc.addTransceiver(toMediaStreamTrackKind(mediaType), {
9653
- direction: 'sendrecv',
9654
- sendEncodings: sendEncodingsOptions,
9655
- });
9659
+ let rtcTransceiver;
9660
+ try {
9661
+ rtcTransceiver = this.pc.addTransceiver(toMediaStreamTrackKind(mediaType), {
9662
+ direction: 'sendrecv',
9663
+ sendEncodings: sendEncodingsOptions,
9664
+ });
9665
+ }
9666
+ catch (e) {
9667
+ logger.error(`addTransceiver failed due to : ${e}`);
9668
+ throw e;
9669
+ }
9656
9670
  this.addMid(mediaType);
9657
9671
  const csi = generateCsi(getMediaFamily(mediaType), sceneId);
9658
9672
  this.sendTransceivers.set(mediaType, new SendOnlyTransceiver(rtcTransceiver, csi));
@@ -9670,8 +9684,9 @@ class MultistreamConnection extends EventEmitter {
9670
9684
  this.dataChannel.send(msg);
9671
9685
  });
9672
9686
  if (getMediaFamily(mediaType) === MediaFamily.Video) {
9687
+ let prevNumTotalSources = 0;
9688
+ let prevNumLiveSources = 0;
9673
9689
  jmpSession.on(JmpSessionEvents.SourceIndication, (data) => {
9674
- this.emit(exports.MultistreamConnectionEventNames.VideoSourceCountUpdate, data.numTotalSources, data.numLiveSources);
9675
9690
  data.sources.forEach((s) => {
9676
9691
  const receiveSlot = this.getReceiveSlotById(s.id);
9677
9692
  if (!receiveSlot) {
@@ -9680,6 +9695,12 @@ class MultistreamConnection extends EventEmitter {
9680
9695
  }
9681
9696
  receiveSlot._updateSource(s.state, s.csi);
9682
9697
  });
9698
+ if (data.numTotalSources !== prevNumTotalSources ||
9699
+ data.numLiveSources !== prevNumLiveSources) {
9700
+ prevNumTotalSources = data.numTotalSources;
9701
+ prevNumLiveSources = data.numLiveSources;
9702
+ this.emit(exports.MultistreamConnectionEventNames.VideoSourceCountUpdate, data.numTotalSources, data.numLiveSources, getMediaContent(mediaType));
9703
+ }
9683
9704
  });
9684
9705
  jmpSession.on(JmpSessionEvents.ScrRequestReceived, (data) => {
9685
9706
  this.sendSourceWarnings(mediaType, data.requests);
@@ -9687,8 +9708,9 @@ class MultistreamConnection extends EventEmitter {
9687
9708
  });
9688
9709
  }
9689
9710
  if (getMediaFamily(mediaType) === MediaFamily.Audio) {
9711
+ let prevNumTotalSources = 0;
9712
+ let prevNumLiveSources = 0;
9690
9713
  jmpSession.on(JmpSessionEvents.SourceIndication, (data) => {
9691
- this.emit(exports.MultistreamConnectionEventNames.AudioSourceCountUpdate, data.numTotalSources, data.numLiveSources);
9692
9714
  data.sources.forEach((s) => {
9693
9715
  const receiveSlot = this.getReceiveSlotById(s.id);
9694
9716
  if (!receiveSlot) {
@@ -9697,6 +9719,12 @@ class MultistreamConnection extends EventEmitter {
9697
9719
  }
9698
9720
  receiveSlot._updateSource(s.state, s.csi);
9699
9721
  });
9722
+ if (data.numTotalSources !== prevNumTotalSources ||
9723
+ data.numLiveSources !== prevNumLiveSources) {
9724
+ prevNumTotalSources = data.numTotalSources;
9725
+ prevNumLiveSources = data.numLiveSources;
9726
+ this.emit(exports.MultistreamConnectionEventNames.AudioSourceCountUpdate, data.numTotalSources, data.numLiveSources, getMediaContent(mediaType));
9727
+ }
9700
9728
  });
9701
9729
  jmpSession.on(JmpSessionEvents.ActiveSpeaker, (data) => this.emit(exports.MultistreamConnectionEventNames.ActiveSpeakerNotification, data));
9702
9730
  jmpSession.on(JmpSessionEvents.ScrRequestReceived, (data) => {