@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/esm/index.js CHANGED
@@ -6692,7 +6692,7 @@ function isValidStreamInfo(obj) {
6692
6692
  const maybeStreamInfo = obj;
6693
6693
  return Boolean(maybeStreamInfo.id &&
6694
6694
  isValidStreamId(maybeStreamInfo.id) &&
6695
- ['no source', 'invalid source', 'live', 'avatar', 'bandwidth disabled'].includes(maybeStreamInfo.state));
6695
+ ['no source', 'invalid source', 'live', 'avatar', 'bandwidth disabled', 'away'].includes(maybeStreamInfo.state));
6696
6696
  }
6697
6697
  function areStreamInfosEqual(left, right) {
6698
6698
  return (areStreamIdsEqual(left.id, right.id) && left.state === right.state && left.csi === right.csi);
@@ -10619,6 +10619,7 @@ class ReceiveOnlyTransceiver extends Transceiver {
10619
10619
  stats.calliopeMediaType = this.mediaType;
10620
10620
  stats.requestedBitrate = this.metadata.requestedBitrate;
10621
10621
  stats.requestedFrameSize = this.metadata.requestedFrameSize;
10622
+ stats.requestedFrameRate = this.metadata.requestedFrameRate;
10622
10623
  stats.isRequested = this.metadata.isRequested;
10623
10624
  stats.lastRequestedUpdateTimestamp = this.metadata.lastRequestedUpdateTimestamp;
10624
10625
  stats.isActiveSpeaker = this.metadata.isActiveSpeaker;
@@ -10643,13 +10644,14 @@ class ReceiveOnlyTransceiver extends Transceiver {
10643
10644
  this.munger.reset();
10644
10645
  }
10645
10646
  handleRequested(streamRequest) {
10646
- var _a, _b;
10647
+ var _a, _b, _c, _d;
10647
10648
  if (!this.metadata.isRequested) {
10648
10649
  this.metadata.isRequested = true;
10649
10650
  this.metadata.lastRequestedUpdateTimestamp = getCurrentTimestamp();
10650
10651
  }
10651
10652
  this.metadata.requestedBitrate = streamRequest.maxPayloadBitsPerSecond;
10652
10653
  this.metadata.requestedFrameSize = (_b = (_a = streamRequest.codecInfos[0]) === null || _a === void 0 ? void 0 : _a.h264) === null || _b === void 0 ? void 0 : _b.maxFs;
10654
+ this.metadata.requestedFrameRate = (_d = (_c = streamRequest.codecInfos[0]) === null || _c === void 0 ? void 0 : _c.h264) === null || _d === void 0 ? void 0 : _d.maxFps;
10653
10655
  }
10654
10656
  handleUnrequested() {
10655
10657
  if (this.metadata.isRequested) {
@@ -10658,6 +10660,7 @@ class ReceiveOnlyTransceiver extends Transceiver {
10658
10660
  }
10659
10661
  this.metadata.requestedBitrate = undefined;
10660
10662
  this.metadata.requestedFrameSize = undefined;
10663
+ this.metadata.requestedFrameRate = undefined;
10661
10664
  this.receiveSlot._updateSource('no source', undefined);
10662
10665
  }
10663
10666
  handleActiveSpeakerUpdate(value) {
@@ -14393,6 +14396,7 @@ class SendOnlyTransceiver extends Transceiver {
14393
14396
  this.namedMediaGroupsChange = new TypedEvent();
14394
14397
  this.requestedIdEncodingParamsMap = new Map();
14395
14398
  this.updateSendParametersQueue = new AsyncQueue();
14399
+ this.sourceStateOverrideChange = new TypedEvent();
14396
14400
  this.metadata = { lastRequestedUpdateTimestampsMap: new Map() };
14397
14401
  this.munger = config.munger;
14398
14402
  this.csi = config.csi;
@@ -14631,6 +14635,22 @@ class SendOnlyTransceiver extends Transceiver {
14631
14635
  this.munger.deleteCodecParameters(parameters);
14632
14636
  this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);
14633
14637
  }
14638
+ setSourceStateOverride(state) {
14639
+ this.sourceStateOverride = state;
14640
+ this.sourceStateOverrideChange.emit();
14641
+ }
14642
+ get currentSourceState() {
14643
+ if (this.sourceStateOverride) {
14644
+ return this.sourceStateOverride;
14645
+ }
14646
+ if (!this.publishedStream) {
14647
+ return 'no source';
14648
+ }
14649
+ if (this.publishedStream.muted) {
14650
+ return 'avatar';
14651
+ }
14652
+ return 'live';
14653
+ }
14634
14654
  }
14635
14655
 
14636
14656
  class SendSlot {
@@ -14675,6 +14695,12 @@ class SendSlot {
14675
14695
  this.sendTransceiver.deleteCodecParameters(parameters);
14676
14696
  });
14677
14697
  }
14698
+ setSourceStateOverride(state) {
14699
+ this.sendTransceiver.setSourceStateOverride(state);
14700
+ }
14701
+ clearSourceStateOverride() {
14702
+ this.sendTransceiver.setSourceStateOverride(undefined);
14703
+ }
14678
14704
  }
14679
14705
 
14680
14706
  const organizeTransceiverStats = (sendTransceivers, recvTransceivers) => __awaiter$1(void 0, void 0, void 0, function* () {
@@ -14894,7 +14920,13 @@ class MultistreamConnection extends EventEmitter$2 {
14894
14920
  const munger = new EgressSdpMunger({
14895
14921
  doFullIce: this.options.doFullIce,
14896
14922
  });
14897
- const transceiver = new SendOnlyTransceiver({ rtcRtpTransceiver, mid, mediaType, munger, csi });
14923
+ const transceiver = new SendOnlyTransceiver({
14924
+ rtcRtpTransceiver,
14925
+ mid,
14926
+ mediaType,
14927
+ munger,
14928
+ csi,
14929
+ });
14898
14930
  if (getMediaFamily(mediaType) === MediaFamily.Video) {
14899
14931
  transceiver.rtxEnabled = true;
14900
14932
  transceiver.setCodecParameters({
@@ -14924,6 +14956,9 @@ class MultistreamConnection extends EventEmitter$2 {
14924
14956
  transceiver.namedMediaGroupsChange.on(() => {
14925
14957
  this.sendSourceAdvertisement(mediaType);
14926
14958
  });
14959
+ transceiver.sourceStateOverrideChange.on(() => {
14960
+ this.sendMediaRequestStatus(mediaType);
14961
+ });
14927
14962
  this.sendTransceivers.set(mediaType, transceiver);
14928
14963
  this.createJmpSession(mediaType);
14929
14964
  }
@@ -15171,23 +15206,12 @@ SCTP Max Message Size: ${maxMessageSize}`);
15171
15206
  }
15172
15207
  }
15173
15208
  getVideoStreamStates(mediaType) {
15174
- var _a;
15175
15209
  const sendTransceiver = this.getSendTransceiverOrThrow(mediaType);
15176
- const published = !!sendTransceiver.publishedStream;
15177
- const muted = (_a = sendTransceiver.publishedStream) === null || _a === void 0 ? void 0 : _a.muted;
15178
- return sendTransceiver.senderIds.map((id) => {
15179
- let state;
15180
- if (!published) {
15181
- state = 'no source';
15182
- }
15183
- else if (muted) {
15184
- state = 'avatar';
15185
- }
15186
- else {
15187
- state = 'live';
15188
- }
15189
- return { id, state, csi: sendTransceiver.csi };
15190
- });
15210
+ return sendTransceiver.senderIds.map((id) => ({
15211
+ id,
15212
+ state: sendTransceiver.currentSourceState,
15213
+ csi: sendTransceiver.csi,
15214
+ }));
15191
15215
  }
15192
15216
  createReceiveTransceiver(mediaType) {
15193
15217
  const rtcRtpTransceiver = this.pc.addTransceiver(toMediaStreamTrackKind(mediaType), {