@webex/web-client-media-engine 3.24.3 → 3.25.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/cjs/index.js CHANGED
@@ -6696,7 +6696,7 @@ function isValidStreamInfo(obj) {
6696
6696
  const maybeStreamInfo = obj;
6697
6697
  return Boolean(maybeStreamInfo.id &&
6698
6698
  isValidStreamId(maybeStreamInfo.id) &&
6699
- ['no source', 'invalid source', 'live', 'avatar', 'bandwidth disabled'].includes(maybeStreamInfo.state));
6699
+ ['no source', 'invalid source', 'live', 'avatar', 'bandwidth disabled', 'away'].includes(maybeStreamInfo.state));
6700
6700
  }
6701
6701
  function areStreamInfosEqual(left, right) {
6702
6702
  return (areStreamIdsEqual(left.id, right.id) && left.state === right.state && left.csi === right.csi);
@@ -10623,6 +10623,7 @@ class ReceiveOnlyTransceiver extends Transceiver {
10623
10623
  stats.calliopeMediaType = this.mediaType;
10624
10624
  stats.requestedBitrate = this.metadata.requestedBitrate;
10625
10625
  stats.requestedFrameSize = this.metadata.requestedFrameSize;
10626
+ stats.requestedFrameRate = this.metadata.requestedFrameRate;
10626
10627
  stats.isRequested = this.metadata.isRequested;
10627
10628
  stats.lastRequestedUpdateTimestamp = this.metadata.lastRequestedUpdateTimestamp;
10628
10629
  stats.isActiveSpeaker = this.metadata.isActiveSpeaker;
@@ -10647,13 +10648,14 @@ class ReceiveOnlyTransceiver extends Transceiver {
10647
10648
  this.munger.reset();
10648
10649
  }
10649
10650
  handleRequested(streamRequest) {
10650
- var _a, _b;
10651
+ var _a, _b, _c, _d;
10651
10652
  if (!this.metadata.isRequested) {
10652
10653
  this.metadata.isRequested = true;
10653
10654
  this.metadata.lastRequestedUpdateTimestamp = getCurrentTimestamp();
10654
10655
  }
10655
10656
  this.metadata.requestedBitrate = streamRequest.maxPayloadBitsPerSecond;
10656
10657
  this.metadata.requestedFrameSize = (_b = (_a = streamRequest.codecInfos[0]) === null || _a === void 0 ? void 0 : _a.h264) === null || _b === void 0 ? void 0 : _b.maxFs;
10658
+ this.metadata.requestedFrameRate = (_d = (_c = streamRequest.codecInfos[0]) === null || _c === void 0 ? void 0 : _c.h264) === null || _d === void 0 ? void 0 : _d.maxFps;
10657
10659
  }
10658
10660
  handleUnrequested() {
10659
10661
  if (this.metadata.isRequested) {
@@ -10662,6 +10664,7 @@ class ReceiveOnlyTransceiver extends Transceiver {
10662
10664
  }
10663
10665
  this.metadata.requestedBitrate = undefined;
10664
10666
  this.metadata.requestedFrameSize = undefined;
10667
+ this.metadata.requestedFrameRate = undefined;
10665
10668
  this.receiveSlot._updateSource('no source', undefined);
10666
10669
  }
10667
10670
  handleActiveSpeakerUpdate(value) {
@@ -14397,6 +14400,7 @@ class SendOnlyTransceiver extends Transceiver {
14397
14400
  this.namedMediaGroupsChange = new TypedEvent();
14398
14401
  this.requestedIdEncodingParamsMap = new Map();
14399
14402
  this.updateSendParametersQueue = new AsyncQueue();
14403
+ this.sourceStateOverrideChange = new TypedEvent();
14400
14404
  this.metadata = { lastRequestedUpdateTimestampsMap: new Map() };
14401
14405
  this.munger = config.munger;
14402
14406
  this.csi = config.csi;
@@ -14635,6 +14639,22 @@ class SendOnlyTransceiver extends Transceiver {
14635
14639
  this.munger.deleteCodecParameters(parameters);
14636
14640
  this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);
14637
14641
  }
14642
+ setSourceStateOverride(state) {
14643
+ this.sourceStateOverride = state;
14644
+ this.sourceStateOverrideChange.emit();
14645
+ }
14646
+ get currentSourceState() {
14647
+ if (this.sourceStateOverride) {
14648
+ return this.sourceStateOverride;
14649
+ }
14650
+ if (!this.publishedStream) {
14651
+ return 'no source';
14652
+ }
14653
+ if (this.publishedStream.muted) {
14654
+ return 'avatar';
14655
+ }
14656
+ return 'live';
14657
+ }
14638
14658
  }
14639
14659
 
14640
14660
  class SendSlot {
@@ -14679,6 +14699,12 @@ class SendSlot {
14679
14699
  this.sendTransceiver.deleteCodecParameters(parameters);
14680
14700
  });
14681
14701
  }
14702
+ setSourceStateOverride(state) {
14703
+ this.sendTransceiver.setSourceStateOverride(state);
14704
+ }
14705
+ clearSourceStateOverride() {
14706
+ this.sendTransceiver.setSourceStateOverride(undefined);
14707
+ }
14682
14708
  }
14683
14709
 
14684
14710
  const organizeTransceiverStats = (sendTransceivers, recvTransceivers) => __awaiter$1(void 0, void 0, void 0, function* () {
@@ -14898,7 +14924,13 @@ class MultistreamConnection extends EventEmitter$2 {
14898
14924
  const munger = new EgressSdpMunger({
14899
14925
  doFullIce: this.options.doFullIce,
14900
14926
  });
14901
- const transceiver = new SendOnlyTransceiver({ rtcRtpTransceiver, mid, mediaType, munger, csi });
14927
+ const transceiver = new SendOnlyTransceiver({
14928
+ rtcRtpTransceiver,
14929
+ mid,
14930
+ mediaType,
14931
+ munger,
14932
+ csi,
14933
+ });
14902
14934
  if (getMediaFamily(mediaType) === exports.MediaFamily.Video) {
14903
14935
  transceiver.rtxEnabled = true;
14904
14936
  transceiver.setCodecParameters({
@@ -14928,6 +14960,9 @@ class MultistreamConnection extends EventEmitter$2 {
14928
14960
  transceiver.namedMediaGroupsChange.on(() => {
14929
14961
  this.sendSourceAdvertisement(mediaType);
14930
14962
  });
14963
+ transceiver.sourceStateOverrideChange.on(() => {
14964
+ this.sendMediaRequestStatus(mediaType);
14965
+ });
14931
14966
  this.sendTransceivers.set(mediaType, transceiver);
14932
14967
  this.createJmpSession(mediaType);
14933
14968
  }
@@ -15175,23 +15210,12 @@ SCTP Max Message Size: ${maxMessageSize}`);
15175
15210
  }
15176
15211
  }
15177
15212
  getVideoStreamStates(mediaType) {
15178
- var _a;
15179
15213
  const sendTransceiver = this.getSendTransceiverOrThrow(mediaType);
15180
- const published = !!sendTransceiver.publishedStream;
15181
- const muted = (_a = sendTransceiver.publishedStream) === null || _a === void 0 ? void 0 : _a.muted;
15182
- return sendTransceiver.senderIds.map((id) => {
15183
- let state;
15184
- if (!published) {
15185
- state = 'no source';
15186
- }
15187
- else if (muted) {
15188
- state = 'avatar';
15189
- }
15190
- else {
15191
- state = 'live';
15192
- }
15193
- return { id, state, csi: sendTransceiver.csi };
15194
- });
15214
+ return sendTransceiver.senderIds.map((id) => ({
15215
+ id,
15216
+ state: sendTransceiver.currentSourceState,
15217
+ csi: sendTransceiver.csi,
15218
+ }));
15195
15219
  }
15196
15220
  createReceiveTransceiver(mediaType) {
15197
15221
  const rtcRtpTransceiver = this.pc.addTransceiver(toMediaStreamTrackKind(mediaType), {