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