@webex/web-client-media-engine 3.31.6 → 3.33.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
@@ -7214,6 +7214,7 @@ var WcmeErrorType;
7214
7214
  WcmeErrorType["GET_MAX_BITRATE_FAILED"] = "GET_MAX_BITRATE_FAILED";
7215
7215
  WcmeErrorType["GET_PAYLOAD_TYPE_FAILED"] = "GET_PAYLOAD_TYPE_FAILED";
7216
7216
  WcmeErrorType["SET_NMG_FAILED"] = "SET_NMG_FAILED";
7217
+ WcmeErrorType["SET_SOURCE_STATE_OVERRIDE_FAILED"] = "SET_SOURCE_STATE_OVERRIDE_FAILED";
7217
7218
  WcmeErrorType["DATA_CHANNEL_SEND_FAILED"] = "DATA_CHANNEL_SEND_FAILED";
7218
7219
  WcmeErrorType["RENEW_PEER_CONNECTION_FAILED"] = "RENEW_PEER_CONNECTION_FAILED";
7219
7220
  })(WcmeErrorType || (WcmeErrorType = {}));
@@ -7539,6 +7540,7 @@ var MediaCodecMimeType;
7539
7540
  })(MediaCodecMimeType || (MediaCodecMimeType = {}));
7540
7541
  const defaultMaxVideoEncodeFrameSize = 8160;
7541
7542
  const defaultMaxVideoEncodeMbps = 244800;
7543
+ const defaultStartBitrateKbps = 3000;
7542
7544
  var RecommendedOpusBitrates;
7543
7545
  (function (RecommendedOpusBitrates) {
7544
7546
  RecommendedOpusBitrates[RecommendedOpusBitrates["NB"] = 12000] = "NB";
@@ -9950,14 +9952,12 @@ class EgressSdpMunger {
9950
9952
  logger.log(`Some unsupported remote candidates have been removed from mid ${mediaDescription.mid}`);
9951
9953
  }
9952
9954
  mediaDescription.bandwidth = undefined;
9953
- [...mediaDescription.codecs.values()].forEach((ci) => {
9954
- ci.fmtParams.set('x-google-start-bitrate', '60000');
9955
- });
9956
9955
  if (mediaDescription.type === 'audio') {
9957
9956
  [...mediaDescription.codecs.values()].forEach((ci) => {
9958
9957
  ci.fmtParams.set('usedtx', mungeOptions.dtxDisabled ? '0' : '1');
9959
9958
  });
9960
9959
  }
9960
+ applyFormatParameters(mediaDescription, ['H264', 'opus'], this.customCodecParameters);
9961
9961
  }
9962
9962
  getSenderIds() {
9963
9963
  return this.streamIds;
@@ -10493,9 +10493,6 @@ class IngressSdpMunger {
10493
10493
  if (retainCandidatesByTransportType(mediaDescription, ['udp', 'tcp'])) {
10494
10494
  logger.log(`Some unsupported remote candidates have been removed from mid ${mediaDescription.mid}`);
10495
10495
  }
10496
- [...mediaDescription.codecs.values()].forEach((ci) => {
10497
- ci.fmtParams.set('x-google-start-bitrate', '60000');
10498
- });
10499
10496
  applyFormatParameters(mediaDescription, ['rtx'], this.customRtxCodecParameters);
10500
10497
  }
10501
10498
  setCodecParameters(parameters) {
@@ -14648,6 +14645,7 @@ class SendOnlyTransceiver extends Transceiver {
14648
14645
  if (stats.type === 'outbound-rtp') {
14649
14646
  stats.mid = this.mid;
14650
14647
  stats.csi = this.csi;
14648
+ stats.sourceState = this.currentSourceState;
14651
14649
  stats.calliopeMediaType = this.mediaType;
14652
14650
  const senderId = this.munger.getSenderIds().find((id) => id.ssrc === stats.ssrc);
14653
14651
  if (senderId) {
@@ -14781,10 +14779,16 @@ class SendOnlyTransceiver extends Transceiver {
14781
14779
  this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);
14782
14780
  }
14783
14781
  setSourceStateOverride(state) {
14782
+ if (getMediaFamily(this.mediaType) !== MediaFamily.Video) {
14783
+ logErrorAndThrow(WcmeErrorType.SET_SOURCE_STATE_OVERRIDE_FAILED, `Source state can only be overridden for video.`);
14784
+ }
14784
14785
  this.sourceStateOverride = state;
14785
14786
  this.sourceStateOverrideChange.emit();
14786
14787
  }
14787
14788
  get currentSourceState() {
14789
+ if (getMediaFamily(this.mediaType) !== MediaFamily.Video) {
14790
+ return undefined;
14791
+ }
14788
14792
  if (this.sourceStateOverride) {
14789
14793
  return this.sourceStateOverride;
14790
14794
  }
@@ -14961,6 +14965,7 @@ const defaultMultistreamConnectionOptions = {
14961
14965
  doFullIce: BrowserInfo.isFirefox(),
14962
14966
  stopIceGatheringAfterFirstRelayCandidate: false,
14963
14967
  disableAudioMainDtx: true,
14968
+ preferredStartingBitrateKbps: defaultStartBitrateKbps,
14964
14969
  metricsCallback: () => { },
14965
14970
  };
14966
14971
  class MultistreamConnection extends EventEmitter$2 {
@@ -15079,13 +15084,14 @@ class MultistreamConnection extends EventEmitter$2 {
15079
15084
  munger,
15080
15085
  csi,
15081
15086
  });
15087
+ let codecParameters = {
15088
+ 'x-google-start-bitrate': `${this.options.preferredStartingBitrateKbps}`,
15089
+ };
15082
15090
  if (getMediaFamily(mediaType) === MediaFamily.Video) {
15083
15091
  transceiver.rtxEnabled = true;
15084
- transceiver.setCodecParameters({
15085
- 'max-mbps': `${defaultMaxVideoEncodeMbps}`,
15086
- 'max-fs': `${defaultMaxVideoEncodeFrameSize}`,
15087
- });
15092
+ codecParameters = Object.assign(Object.assign({}, codecParameters), { 'max-mbps': `${defaultMaxVideoEncodeMbps}`, 'max-fs': `${defaultMaxVideoEncodeFrameSize}` });
15088
15093
  }
15094
+ transceiver.setCodecParameters(codecParameters);
15089
15095
  transceiver.twccDisabled =
15090
15096
  getMediaFamily(mediaType) === MediaFamily.Audio ? this.options.disableAudioTwcc : false;
15091
15097
  transceiver.dtxDisabled = mediaType !== MediaType.AudioMain || this.options.disableAudioMainDtx;
@@ -15322,7 +15328,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
15322
15328
  if (!this.getSendTransceiverOrThrow(mediaType).requested) {
15323
15329
  return;
15324
15330
  }
15325
- const streamStates = this.getVideoStreamStates(mediaType);
15331
+ const streamStates = this.getVideoStreamStates(getMediaContent(mediaType));
15326
15332
  const task = () => {
15327
15333
  var _a;
15328
15334
  (_a = this.jmpSessions.get(mediaType)) === null || _a === void 0 ? void 0 : _a.sendMediaRequestStatus(streamStates);
@@ -15343,7 +15349,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
15343
15349
  : 0;
15344
15350
  let task;
15345
15351
  if (getMediaFamily(mediaType) === MediaFamily.Video) {
15346
- const sources = this.getVideoStreamStates(mediaType);
15352
+ const sources = this.getVideoStreamStates(getMediaContent(mediaType));
15347
15353
  if (sources === null) {
15348
15354
  return;
15349
15355
  }
@@ -15371,8 +15377,8 @@ SCTP Max Message Size: ${maxMessageSize}`);
15371
15377
  this.pendingJmpTasks.push(task);
15372
15378
  }
15373
15379
  }
15374
- getVideoStreamStates(mediaType) {
15375
- const sendTransceiver = this.getSendTransceiverOrThrow(mediaType);
15380
+ getVideoStreamStates(mediaContent) {
15381
+ const sendTransceiver = this.getSendTransceiverOrThrow(getMediaType(MediaFamily.Video, mediaContent));
15376
15382
  return sendTransceiver.senderIds.map((id) => ({
15377
15383
  id,
15378
15384
  state: sendTransceiver.currentSourceState,