@webex/web-client-media-engine 3.17.0 → 3.17.1

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
@@ -10460,7 +10460,7 @@ class Transceiver {
10460
10460
  class ReceiveOnlyTransceiver extends Transceiver {
10461
10461
  constructor(rtcRtpTransceiver, mid, munger) {
10462
10462
  super(rtcRtpTransceiver, mid);
10463
- this.metadata = {};
10463
+ this.metadata = { isActiveSpeaker: false };
10464
10464
  this.munger = munger;
10465
10465
  this._receiveSlot = new ReceiveSlot(() => {
10466
10466
  if (!this._rtcRtpTransceiver.mid) {
@@ -10491,6 +10491,8 @@ class ReceiveOnlyTransceiver extends Transceiver {
10491
10491
  stats.calliopeMediaType = this.metadata.mediaType;
10492
10492
  stats.requestedBitrate = this.metadata.requestedBitrate;
10493
10493
  stats.requestedFrameSize = this.metadata.requestedFrameSize;
10494
+ stats.isActiveSpeaker = this.metadata.isActiveSpeaker;
10495
+ stats.lastActiveSpeakerUpdateTimestamp = this.metadata.lastActiveSpeakerUpdateTimestamp;
10494
10496
  Object.assign(stats, this.receiverId);
10495
10497
  }
10496
10498
  statsMap.set(key, stats);
@@ -10520,6 +10522,12 @@ class ReceiveOnlyTransceiver extends Transceiver {
10520
10522
  this.metadata.requestedFrameSize = undefined;
10521
10523
  this.receiveSlot._updateSource('no source', undefined);
10522
10524
  }
10525
+ handleActiveSpeakerUpdate(value) {
10526
+ this.metadata.isActiveSpeaker = value;
10527
+ if (value) {
10528
+ this.metadata.lastActiveSpeakerUpdateTimestamp = performance.timeOrigin + performance.now();
10529
+ }
10530
+ }
10523
10531
  }
10524
10532
  ReceiveOnlyTransceiver.rid = '1';
10525
10533
 
@@ -14804,6 +14812,15 @@ SCTP Max Message Size: ${maxMessageSize}`);
14804
14812
  });
14805
14813
  jmpSession.on(JmpSessionEvents.ActiveSpeaker, (data) => {
14806
14814
  this.emit(MultistreamConnectionEventNames.ActiveSpeakerNotification, data.csis);
14815
+ this.recvTransceivers.forEach((transceivers) => {
14816
+ transceivers.forEach((t) => {
14817
+ const { currentRxCsi } = t.receiveSlot;
14818
+ if (currentRxCsi !== undefined) {
14819
+ const isActiveSpeaker = data.csis.some((activeCsi) => (activeCsi & 0xfffffffe) === (currentRxCsi & 0xfffffffe));
14820
+ t.handleActiveSpeakerUpdate(isActiveSpeaker);
14821
+ }
14822
+ });
14823
+ });
14807
14824
  });
14808
14825
  this.jmpSessions.set(mediaType, jmpSession);
14809
14826
  }