@webex/web-client-media-engine 3.24.3 → 3.25.0

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);
@@ -14393,6 +14393,7 @@ class SendOnlyTransceiver extends Transceiver {
14393
14393
  this.namedMediaGroupsChange = new TypedEvent();
14394
14394
  this.requestedIdEncodingParamsMap = new Map();
14395
14395
  this.updateSendParametersQueue = new AsyncQueue();
14396
+ this.sourceStateOverrideChange = new TypedEvent();
14396
14397
  this.metadata = { lastRequestedUpdateTimestampsMap: new Map() };
14397
14398
  this.munger = config.munger;
14398
14399
  this.csi = config.csi;
@@ -14631,6 +14632,22 @@ class SendOnlyTransceiver extends Transceiver {
14631
14632
  this.munger.deleteCodecParameters(parameters);
14632
14633
  this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);
14633
14634
  }
14635
+ setSourceStateOverride(state) {
14636
+ this.sourceStateOverride = state;
14637
+ this.sourceStateOverrideChange.emit();
14638
+ }
14639
+ get currentSourceState() {
14640
+ if (this.sourceStateOverride) {
14641
+ return this.sourceStateOverride;
14642
+ }
14643
+ if (!this.publishedStream) {
14644
+ return 'no source';
14645
+ }
14646
+ if (this.publishedStream.muted) {
14647
+ return 'avatar';
14648
+ }
14649
+ return 'live';
14650
+ }
14634
14651
  }
14635
14652
 
14636
14653
  class SendSlot {
@@ -14675,6 +14692,12 @@ class SendSlot {
14675
14692
  this.sendTransceiver.deleteCodecParameters(parameters);
14676
14693
  });
14677
14694
  }
14695
+ setSourceStateOverride(state) {
14696
+ this.sendTransceiver.setSourceStateOverride(state);
14697
+ }
14698
+ clearSourceStateOverride() {
14699
+ this.sendTransceiver.setSourceStateOverride(undefined);
14700
+ }
14678
14701
  }
14679
14702
 
14680
14703
  const organizeTransceiverStats = (sendTransceivers, recvTransceivers) => __awaiter$1(void 0, void 0, void 0, function* () {
@@ -14894,7 +14917,13 @@ class MultistreamConnection extends EventEmitter$2 {
14894
14917
  const munger = new EgressSdpMunger({
14895
14918
  doFullIce: this.options.doFullIce,
14896
14919
  });
14897
- const transceiver = new SendOnlyTransceiver({ rtcRtpTransceiver, mid, mediaType, munger, csi });
14920
+ const transceiver = new SendOnlyTransceiver({
14921
+ rtcRtpTransceiver,
14922
+ mid,
14923
+ mediaType,
14924
+ munger,
14925
+ csi,
14926
+ });
14898
14927
  if (getMediaFamily(mediaType) === MediaFamily.Video) {
14899
14928
  transceiver.rtxEnabled = true;
14900
14929
  transceiver.setCodecParameters({
@@ -14924,6 +14953,9 @@ class MultistreamConnection extends EventEmitter$2 {
14924
14953
  transceiver.namedMediaGroupsChange.on(() => {
14925
14954
  this.sendSourceAdvertisement(mediaType);
14926
14955
  });
14956
+ transceiver.sourceStateOverrideChange.on(() => {
14957
+ this.sendMediaRequestStatus(mediaType);
14958
+ });
14927
14959
  this.sendTransceivers.set(mediaType, transceiver);
14928
14960
  this.createJmpSession(mediaType);
14929
14961
  }
@@ -15171,23 +15203,12 @@ SCTP Max Message Size: ${maxMessageSize}`);
15171
15203
  }
15172
15204
  }
15173
15205
  getVideoStreamStates(mediaType) {
15174
- var _a;
15175
15206
  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
- });
15207
+ return sendTransceiver.senderIds.map((id) => ({
15208
+ id,
15209
+ state: sendTransceiver.currentSourceState,
15210
+ csi: sendTransceiver.csi,
15211
+ }));
15191
15212
  }
15192
15213
  createReceiveTransceiver(mediaType) {
15193
15214
  const rtcRtpTransceiver = this.pc.addTransceiver(toMediaStreamTrackKind(mediaType), {