@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/cjs/index.js CHANGED
@@ -7218,6 +7218,7 @@ exports.WcmeErrorType = void 0;
7218
7218
  WcmeErrorType["GET_MAX_BITRATE_FAILED"] = "GET_MAX_BITRATE_FAILED";
7219
7219
  WcmeErrorType["GET_PAYLOAD_TYPE_FAILED"] = "GET_PAYLOAD_TYPE_FAILED";
7220
7220
  WcmeErrorType["SET_NMG_FAILED"] = "SET_NMG_FAILED";
7221
+ WcmeErrorType["SET_SOURCE_STATE_OVERRIDE_FAILED"] = "SET_SOURCE_STATE_OVERRIDE_FAILED";
7221
7222
  WcmeErrorType["DATA_CHANNEL_SEND_FAILED"] = "DATA_CHANNEL_SEND_FAILED";
7222
7223
  WcmeErrorType["RENEW_PEER_CONNECTION_FAILED"] = "RENEW_PEER_CONNECTION_FAILED";
7223
7224
  })(exports.WcmeErrorType || (exports.WcmeErrorType = {}));
@@ -7543,6 +7544,7 @@ exports.MediaCodecMimeType = void 0;
7543
7544
  })(exports.MediaCodecMimeType || (exports.MediaCodecMimeType = {}));
7544
7545
  const defaultMaxVideoEncodeFrameSize = 8160;
7545
7546
  const defaultMaxVideoEncodeMbps = 244800;
7547
+ const defaultStartBitrateKbps = 3000;
7546
7548
  exports.RecommendedOpusBitrates = void 0;
7547
7549
  (function (RecommendedOpusBitrates) {
7548
7550
  RecommendedOpusBitrates[RecommendedOpusBitrates["NB"] = 12000] = "NB";
@@ -9954,14 +9956,12 @@ class EgressSdpMunger {
9954
9956
  logger.log(`Some unsupported remote candidates have been removed from mid ${mediaDescription.mid}`);
9955
9957
  }
9956
9958
  mediaDescription.bandwidth = undefined;
9957
- [...mediaDescription.codecs.values()].forEach((ci) => {
9958
- ci.fmtParams.set('x-google-start-bitrate', '60000');
9959
- });
9960
9959
  if (mediaDescription.type === 'audio') {
9961
9960
  [...mediaDescription.codecs.values()].forEach((ci) => {
9962
9961
  ci.fmtParams.set('usedtx', mungeOptions.dtxDisabled ? '0' : '1');
9963
9962
  });
9964
9963
  }
9964
+ applyFormatParameters(mediaDescription, ['H264', 'opus'], this.customCodecParameters);
9965
9965
  }
9966
9966
  getSenderIds() {
9967
9967
  return this.streamIds;
@@ -10497,9 +10497,6 @@ class IngressSdpMunger {
10497
10497
  if (retainCandidatesByTransportType(mediaDescription, ['udp', 'tcp'])) {
10498
10498
  logger.log(`Some unsupported remote candidates have been removed from mid ${mediaDescription.mid}`);
10499
10499
  }
10500
- [...mediaDescription.codecs.values()].forEach((ci) => {
10501
- ci.fmtParams.set('x-google-start-bitrate', '60000');
10502
- });
10503
10500
  applyFormatParameters(mediaDescription, ['rtx'], this.customRtxCodecParameters);
10504
10501
  }
10505
10502
  setCodecParameters(parameters) {
@@ -14652,6 +14649,7 @@ class SendOnlyTransceiver extends Transceiver {
14652
14649
  if (stats.type === 'outbound-rtp') {
14653
14650
  stats.mid = this.mid;
14654
14651
  stats.csi = this.csi;
14652
+ stats.sourceState = this.currentSourceState;
14655
14653
  stats.calliopeMediaType = this.mediaType;
14656
14654
  const senderId = this.munger.getSenderIds().find((id) => id.ssrc === stats.ssrc);
14657
14655
  if (senderId) {
@@ -14785,10 +14783,16 @@ class SendOnlyTransceiver extends Transceiver {
14785
14783
  this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);
14786
14784
  }
14787
14785
  setSourceStateOverride(state) {
14786
+ if (getMediaFamily(this.mediaType) !== exports.MediaFamily.Video) {
14787
+ logErrorAndThrow(exports.WcmeErrorType.SET_SOURCE_STATE_OVERRIDE_FAILED, `Source state can only be overridden for video.`);
14788
+ }
14788
14789
  this.sourceStateOverride = state;
14789
14790
  this.sourceStateOverrideChange.emit();
14790
14791
  }
14791
14792
  get currentSourceState() {
14793
+ if (getMediaFamily(this.mediaType) !== exports.MediaFamily.Video) {
14794
+ return undefined;
14795
+ }
14792
14796
  if (this.sourceStateOverride) {
14793
14797
  return this.sourceStateOverride;
14794
14798
  }
@@ -14965,6 +14969,7 @@ const defaultMultistreamConnectionOptions = {
14965
14969
  doFullIce: BrowserInfo.isFirefox(),
14966
14970
  stopIceGatheringAfterFirstRelayCandidate: false,
14967
14971
  disableAudioMainDtx: true,
14972
+ preferredStartingBitrateKbps: defaultStartBitrateKbps,
14968
14973
  metricsCallback: () => { },
14969
14974
  };
14970
14975
  class MultistreamConnection extends EventEmitter$2 {
@@ -15083,13 +15088,14 @@ class MultistreamConnection extends EventEmitter$2 {
15083
15088
  munger,
15084
15089
  csi,
15085
15090
  });
15091
+ let codecParameters = {
15092
+ 'x-google-start-bitrate': `${this.options.preferredStartingBitrateKbps}`,
15093
+ };
15086
15094
  if (getMediaFamily(mediaType) === exports.MediaFamily.Video) {
15087
15095
  transceiver.rtxEnabled = true;
15088
- transceiver.setCodecParameters({
15089
- 'max-mbps': `${defaultMaxVideoEncodeMbps}`,
15090
- 'max-fs': `${defaultMaxVideoEncodeFrameSize}`,
15091
- });
15096
+ codecParameters = Object.assign(Object.assign({}, codecParameters), { 'max-mbps': `${defaultMaxVideoEncodeMbps}`, 'max-fs': `${defaultMaxVideoEncodeFrameSize}` });
15092
15097
  }
15098
+ transceiver.setCodecParameters(codecParameters);
15093
15099
  transceiver.twccDisabled =
15094
15100
  getMediaFamily(mediaType) === exports.MediaFamily.Audio ? this.options.disableAudioTwcc : false;
15095
15101
  transceiver.dtxDisabled = mediaType !== exports.MediaType.AudioMain || this.options.disableAudioMainDtx;
@@ -15326,7 +15332,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
15326
15332
  if (!this.getSendTransceiverOrThrow(mediaType).requested) {
15327
15333
  return;
15328
15334
  }
15329
- const streamStates = this.getVideoStreamStates(mediaType);
15335
+ const streamStates = this.getVideoStreamStates(getMediaContent(mediaType));
15330
15336
  const task = () => {
15331
15337
  var _a;
15332
15338
  (_a = this.jmpSessions.get(mediaType)) === null || _a === void 0 ? void 0 : _a.sendMediaRequestStatus(streamStates);
@@ -15347,7 +15353,7 @@ SCTP Max Message Size: ${maxMessageSize}`);
15347
15353
  : 0;
15348
15354
  let task;
15349
15355
  if (getMediaFamily(mediaType) === exports.MediaFamily.Video) {
15350
- const sources = this.getVideoStreamStates(mediaType);
15356
+ const sources = this.getVideoStreamStates(getMediaContent(mediaType));
15351
15357
  if (sources === null) {
15352
15358
  return;
15353
15359
  }
@@ -15375,8 +15381,8 @@ SCTP Max Message Size: ${maxMessageSize}`);
15375
15381
  this.pendingJmpTasks.push(task);
15376
15382
  }
15377
15383
  }
15378
- getVideoStreamStates(mediaType) {
15379
- const sendTransceiver = this.getSendTransceiverOrThrow(mediaType);
15384
+ getVideoStreamStates(mediaContent) {
15385
+ const sendTransceiver = this.getSendTransceiverOrThrow(getMediaType(exports.MediaFamily.Video, mediaContent));
15380
15386
  return sendTransceiver.senderIds.map((id) => ({
15381
15387
  id,
15382
15388
  state: sendTransceiver.currentSourceState,