@webex/internal-media-core 1.35.7 → 1.36.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
@@ -4218,7 +4218,7 @@ function _mergeNamespaces$1(n, m) {
4218
4218
  return Object.freeze(n);
4219
4219
  }
4220
4220
 
4221
- /*! *****************************************************************************
4221
+ /******************************************************************************
4222
4222
  Copyright (c) Microsoft Corporation.
4223
4223
 
4224
4224
  Permission to use, copy, modify, and/or distribute this software for any
@@ -4532,8 +4532,13 @@ var logger$1$1 = {
4532
4532
  var Logger$2 = logger$1$1.exports;
4533
4533
  var DEFAULT_LOGGER_NAME$1 = 'webrtc-core';
4534
4534
  var logger$3 = Logger$2.get(DEFAULT_LOGGER_NAME$1);
4535
- // Set log level to debug by default.
4536
- logger$3.setLevel(Logger$2.DEBUG);
4535
+ Logger$2.useDefaults({
4536
+ defaultLevel: Logger$2.DEBUG,
4537
+ /* eslint-disable-next-line jsdoc/require-jsdoc */
4538
+ formatter: (messages, context) => {
4539
+ messages.unshift("[".concat(context.name, "]"));
4540
+ }
4541
+ });
4537
4542
  var DeviceKind;
4538
4543
  (function (DeviceKind) {
4539
4544
  DeviceKind["AudioInput"] = "audioinput";
@@ -5411,16 +5416,26 @@ class LocalTrack extends EventEmitter$2 {
5411
5416
  }
5412
5417
  return effect;
5413
5418
  }
5419
+ /**
5420
+ * Get a copy of the effects Map.
5421
+ *
5422
+ * @returns A copy of the effects map.
5423
+ */
5424
+ getEffects() {
5425
+ return new Map(this.effects);
5426
+ }
5414
5427
  /**
5415
5428
  * Cleanup the local microphone track.
5416
5429
  */
5417
5430
  disposeEffects() {
5418
- if (this.effects.size > 0) {
5419
- this.effects.forEach(effect => effect.dispose());
5420
- this.effects.clear();
5421
- this.underlyingStream = this.originalStream;
5422
- this.emit(exports.LocalTrackEvents.UnderlyingTrackChange);
5423
- }
5431
+ return __awaiter$1(this, void 0, void 0, function* () {
5432
+ if (this.effects.size > 0) {
5433
+ yield Promise.all(Array.from(this.effects.values(), effect => effect.dispose()));
5434
+ this.effects.clear();
5435
+ this.underlyingStream = this.originalStream;
5436
+ this.emit(exports.LocalTrackEvents.UnderlyingTrackChange);
5437
+ }
5438
+ });
5424
5439
  }
5425
5440
  /**
5426
5441
  * Apply constraints to the track.
@@ -8997,14 +9012,15 @@ var MediaCodecMimeType;
8997
9012
  })(MediaCodecMimeType || (MediaCodecMimeType = {}));
8998
9013
  var defaultMaxVideoEncodeFrameSize = 8160;
8999
9014
  var defaultMaxVideoEncodeMbps = 244800;
9000
- var RecommendedOpusBitrates;
9015
+ exports.RecommendedOpusBitrates = void 0;
9001
9016
  (function (RecommendedOpusBitrates) {
9002
9017
  RecommendedOpusBitrates[RecommendedOpusBitrates["NB"] = 12000] = "NB";
9003
9018
  RecommendedOpusBitrates[RecommendedOpusBitrates["WB"] = 20000] = "WB";
9004
9019
  RecommendedOpusBitrates[RecommendedOpusBitrates["FB"] = 40000] = "FB";
9005
9020
  RecommendedOpusBitrates[RecommendedOpusBitrates["FB_MONO_MUSIC"] = 64000] = "FB_MONO_MUSIC";
9006
9021
  RecommendedOpusBitrates[RecommendedOpusBitrates["FB_STEREO_MUSIC"] = 128000] = "FB_STEREO_MUSIC";
9007
- })(RecommendedOpusBitrates || (RecommendedOpusBitrates = {}));
9022
+ })(exports.RecommendedOpusBitrates || (exports.RecommendedOpusBitrates = {}));
9023
+ var maxFrameSizeToMaxBitrateMap = new Map([[60, 99000], [240, 199000], [576, 300000], [920, 640000], [1296, 720000], [2304, 880000], [3600, 2500000], [8160, 4000000]]);
9008
9024
  function areProfileLevelIdsCompatible(senderProfileLevelId, receiverProfileLevelId, levelAsymmetryAllowed) {
9009
9025
  var senderProfile = Number.parseInt("0x".concat(senderProfileLevelId), 16);
9010
9026
  var recvProfile = Number.parseInt("0x".concat(receiverProfileLevelId), 16);
@@ -9053,8 +9069,22 @@ function getFrameHeightByMaxFs(sourceAspectRatio, requestedMaxFs) {
9053
9069
  var minNumberRatiosForHeight = sourceAspectRatio[1] / _gcd;
9054
9070
  return Math.floor(Math.sqrt(requestedMaxFs * 16 * 16 / (minNumberRatiosForWidth * minNumberRatiosForHeight))) * minNumberRatiosForHeight;
9055
9071
  }
9056
- function getScaleDownRatio(sourceAspectRatio, sourceHeight, requestedMaxFs) {
9057
- return sourceHeight / getFrameHeightByMaxFs(sourceAspectRatio, requestedMaxFs);
9072
+ function getScaleDownRatio(sourceWidth, sourceHeight, maxFs, maxWidth, maxHeight) {
9073
+ if (!sourceWidth || !sourceHeight || !maxFs) {
9074
+ return undefined;
9075
+ }
9076
+ var scaleDownRatio = Math.max(sourceHeight / getFrameHeightByMaxFs([sourceWidth, sourceHeight], maxFs), 1.0);
9077
+ if (maxWidth && maxHeight) {
9078
+ scaleDownRatio = Math.max(sourceWidth / maxWidth, sourceHeight / maxHeight, scaleDownRatio);
9079
+ }
9080
+ return scaleDownRatio;
9081
+ }
9082
+ function getRecommendedMaxBitrateForFrameSize(requestedMaxFs) {
9083
+ if (requestedMaxFs < 60) {
9084
+ throw new Error("requested video max frame size can not less than 60");
9085
+ }
9086
+ var expectedHeight = [...maxFrameSizeToMaxBitrateMap.keys()].sort((a, b) => b - a).find(h => requestedMaxFs >= h);
9087
+ return maxFrameSizeToMaxBitrateMap.get(expectedHeight);
9058
9088
  }
9059
9089
  var commonjsGlobal$1 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global$1 !== 'undefined' ? global$1 : typeof self !== 'undefined' ? self : {};
9060
9090
  var logger$2 = {
@@ -12608,40 +12638,6 @@ class SendOnlyTransceiver extends Transceiver {
12608
12638
  }
12609
12639
  });
12610
12640
  }
12611
- updateSimulcastStreamStates(requestedIdEncodingParamsMap) {
12612
- return __awaiter(this, void 0, void 0, function* () {
12613
- var sendParameters = this.sender.getParameters();
12614
- sendParameters.encodings.forEach((encoding, index) => {
12615
- var encodingParams = requestedIdEncodingParamsMap.get(index);
12616
- encoding.active = Boolean(encodingParams);
12617
- if (encodingParams) {
12618
- if (encodingParams.scaleDownRatio >= 1 && encoding.scaleResolutionDownBy !== encodingParams.scaleDownRatio) {
12619
- encoding.scaleResolutionDownBy = encodingParams.scaleDownRatio;
12620
- }
12621
- if (encodingParams.maxPayloadBitsPerSecond) {
12622
- encoding.maxBitrate = encodingParams.maxPayloadBitsPerSecond;
12623
- }
12624
- }
12625
- });
12626
- yield this.sender.setParameters(sendParameters);
12627
- });
12628
- }
12629
- getScaleDownRatio(expectedMaxFs) {
12630
- var _a;
12631
- if (!expectedMaxFs) {
12632
- return -1;
12633
- }
12634
- if (!this.publishedTrack) {
12635
- return -1;
12636
- }
12637
- var setting = (_a = this.publishedTrack) === null || _a === void 0 ? void 0 : _a.underlyingTrack.getSettings();
12638
- var sourceHeight = setting === null || setting === void 0 ? void 0 : setting.height;
12639
- var sourceWidth = setting === null || setting === void 0 ? void 0 : setting.width;
12640
- if (!sourceWidth || !sourceHeight) {
12641
- return -1;
12642
- }
12643
- return Math.max(getScaleDownRatio([sourceWidth, sourceHeight], sourceHeight, expectedMaxFs), 1.0);
12644
- }
12645
12641
  publishTrack(track) {
12646
12642
  return this.replacePublishedTrack(track);
12647
12643
  }
@@ -12656,6 +12652,28 @@ class SendOnlyTransceiver extends Transceiver {
12656
12652
  getStats() {
12657
12653
  return this.sender.getStats();
12658
12654
  }
12655
+ updateSendParameters(requestedIdEncodingParamsMap) {
12656
+ return __awaiter(this, void 0, void 0, function* () {
12657
+ var sendParameters = this.sender.getParameters();
12658
+ sendParameters.encodings.forEach((encoding, index) => {
12659
+ var encodingParams = requestedIdEncodingParamsMap.get(index);
12660
+ encoding.active = !!encodingParams;
12661
+ if (encodingParams) {
12662
+ var {
12663
+ maxPayloadBitsPerSecond,
12664
+ scaleDownRatio
12665
+ } = encodingParams;
12666
+ if (maxPayloadBitsPerSecond !== undefined && maxPayloadBitsPerSecond >= 0) {
12667
+ encoding.maxBitrate = maxPayloadBitsPerSecond;
12668
+ }
12669
+ if (scaleDownRatio !== undefined && scaleDownRatio >= 1.0) {
12670
+ encoding.scaleResolutionDownBy = scaleDownRatio;
12671
+ }
12672
+ }
12673
+ });
12674
+ yield this.sender.setParameters(sendParameters);
12675
+ });
12676
+ }
12659
12677
  }
12660
12678
  class StatsManager {
12661
12679
  constructor(statsGetter) {
@@ -14562,6 +14580,7 @@ logger$4.setLevel(Logger$3.DEBUG);
14562
14580
  function setLogHandler(logHandler) {
14563
14581
  Logger$3.setHandler(logHandler);
14564
14582
  Logger$1.setHandler(logHandler);
14583
+ Logger$2.setHandler(logHandler);
14565
14584
  }
14566
14585
  function toMediaStreamTrackKind(mediaType) {
14567
14586
  return [MediaType.VideoMain, MediaType.VideoSlides].includes(mediaType) ? exports.MediaStreamTrackKind.Video : exports.MediaStreamTrackKind.Audio;
@@ -14791,6 +14810,7 @@ class MultistreamConnection extends EventEmitter {
14791
14810
  updateRequestedStreams(mediaType, requests) {
14792
14811
  var sendTransceiver = this.getSendTransceiverOrThrow(mediaType);
14793
14812
  var signaler = this.streamSignalerManager.getEgressStreamSignalerOrThrow(sendTransceiver.mid);
14813
+ var mediaFamily = getMediaFamily$1(mediaType);
14794
14814
  var requestedIdEncodingParamsMap = new Map();
14795
14815
  var rsRequests = requests.filter(r => isValidReceiverSelectedInfo(r.policySpecificInfo));
14796
14816
  if (rsRequests.length !== requests.length) {
@@ -14803,7 +14823,7 @@ class MultistreamConnection extends EventEmitter {
14803
14823
  codecInfos,
14804
14824
  maxPayloadBitsPerSecond
14805
14825
  } = _ref6;
14806
- var _a;
14826
+ var _a, _b, _c, _d;
14807
14827
  if (ids.length > 1) {
14808
14828
  throw new Error("More than a single ID being unexpected/invalid ".concat(ids));
14809
14829
  }
@@ -14820,10 +14840,16 @@ class MultistreamConnection extends EventEmitter {
14820
14840
  if (streamIdsMatched) {
14821
14841
  var encodingIndex = signaler.getEncodingIndexForStreamId(id);
14822
14842
  if (encodingIndex !== -1) {
14823
- requestedIdEncodingParamsMap.set(encodingIndex, {
14824
- scaleDownRatio: sendTransceiver.getScaleDownRatio((_a = codecInfo === null || codecInfo === void 0 ? void 0 : codecInfo.h264) === null || _a === void 0 ? void 0 : _a.maxFs),
14843
+ var encodingParams = {
14825
14844
  maxPayloadBitsPerSecond
14826
- });
14845
+ };
14846
+ if (mediaFamily === MediaFamily.Video) {
14847
+ var trackSettings = (_a = sendTransceiver.publishedTrack) === null || _a === void 0 ? void 0 : _a.getSettings();
14848
+ if (trackSettings) {
14849
+ encodingParams.scaleDownRatio = getScaleDownRatio(trackSettings.width, trackSettings.height, (_b = codecInfo === null || codecInfo === void 0 ? void 0 : codecInfo.h264) === null || _b === void 0 ? void 0 : _b.maxFs, (_c = codecInfo === null || codecInfo === void 0 ? void 0 : codecInfo.h264) === null || _c === void 0 ? void 0 : _c.maxWidth, (_d = codecInfo === null || codecInfo === void 0 ? void 0 : codecInfo.h264) === null || _d === void 0 ? void 0 : _d.maxHeight);
14850
+ }
14851
+ }
14852
+ requestedIdEncodingParamsMap.set(encodingIndex, encodingParams);
14827
14853
  } else {
14828
14854
  logger$4.warn("".concat(mediaType, ": Unable to get encoding index for stream ID: ").concat(JSON.stringify(id)));
14829
14855
  }
@@ -14832,9 +14858,7 @@ class MultistreamConnection extends EventEmitter {
14832
14858
  }
14833
14859
  });
14834
14860
  sendTransceiver.setTrackRequested(requestedIdEncodingParamsMap.size > 0);
14835
- if (getMediaFamily$1(mediaType) === MediaFamily.Video) {
14836
- sendTransceiver.updateSimulcastStreamStates(requestedIdEncodingParamsMap);
14837
- }
14861
+ sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap);
14838
14862
  }
14839
14863
  createDataChannel() {
14840
14864
  var dataChannel = this.pc.createDataChannel('datachannel', {});
@@ -24535,6 +24559,7 @@ exports.getDevices = getDevices;
24535
24559
  exports.getErrorDescription = getErrorDescription;
24536
24560
  exports.getLogger = getLogger;
24537
24561
  exports.getMediaFamily = getMediaFamily;
24562
+ exports.getRecommendedMaxBitrateForFrameSize = getRecommendedMaxBitrateForFrameSize;
24538
24563
  exports.getVideoInputDevices = getVideoInputDevices;
24539
24564
  exports.isBrowserSupported = isBrowserSupported;
24540
24565
  exports.setLogger = setLogger;
package/dist/esm/index.js CHANGED
@@ -4207,7 +4207,7 @@ function _mergeNamespaces$1(n, m) {
4207
4207
  return Object.freeze(n);
4208
4208
  }
4209
4209
 
4210
- /*! *****************************************************************************
4210
+ /******************************************************************************
4211
4211
  Copyright (c) Microsoft Corporation.
4212
4212
 
4213
4213
  Permission to use, copy, modify, and/or distribute this software for any
@@ -4521,8 +4521,13 @@ var logger$1$1 = {
4521
4521
  var Logger$2 = logger$1$1.exports;
4522
4522
  var DEFAULT_LOGGER_NAME$1 = 'webrtc-core';
4523
4523
  var logger$3 = Logger$2.get(DEFAULT_LOGGER_NAME$1);
4524
- // Set log level to debug by default.
4525
- logger$3.setLevel(Logger$2.DEBUG);
4524
+ Logger$2.useDefaults({
4525
+ defaultLevel: Logger$2.DEBUG,
4526
+ /* eslint-disable-next-line jsdoc/require-jsdoc */
4527
+ formatter: (messages, context) => {
4528
+ messages.unshift("[".concat(context.name, "]"));
4529
+ }
4530
+ });
4526
4531
  var DeviceKind;
4527
4532
  (function (DeviceKind) {
4528
4533
  DeviceKind["AudioInput"] = "audioinput";
@@ -5400,16 +5405,26 @@ class LocalTrack extends EventEmitter$2 {
5400
5405
  }
5401
5406
  return effect;
5402
5407
  }
5408
+ /**
5409
+ * Get a copy of the effects Map.
5410
+ *
5411
+ * @returns A copy of the effects map.
5412
+ */
5413
+ getEffects() {
5414
+ return new Map(this.effects);
5415
+ }
5403
5416
  /**
5404
5417
  * Cleanup the local microphone track.
5405
5418
  */
5406
5419
  disposeEffects() {
5407
- if (this.effects.size > 0) {
5408
- this.effects.forEach(effect => effect.dispose());
5409
- this.effects.clear();
5410
- this.underlyingStream = this.originalStream;
5411
- this.emit(LocalTrackEvents.UnderlyingTrackChange);
5412
- }
5420
+ return __awaiter$1(this, void 0, void 0, function* () {
5421
+ if (this.effects.size > 0) {
5422
+ yield Promise.all(Array.from(this.effects.values(), effect => effect.dispose()));
5423
+ this.effects.clear();
5424
+ this.underlyingStream = this.originalStream;
5425
+ this.emit(LocalTrackEvents.UnderlyingTrackChange);
5426
+ }
5427
+ });
5413
5428
  }
5414
5429
  /**
5415
5430
  * Apply constraints to the track.
@@ -8994,6 +9009,7 @@ var RecommendedOpusBitrates;
8994
9009
  RecommendedOpusBitrates[RecommendedOpusBitrates["FB_MONO_MUSIC"] = 64000] = "FB_MONO_MUSIC";
8995
9010
  RecommendedOpusBitrates[RecommendedOpusBitrates["FB_STEREO_MUSIC"] = 128000] = "FB_STEREO_MUSIC";
8996
9011
  })(RecommendedOpusBitrates || (RecommendedOpusBitrates = {}));
9012
+ var maxFrameSizeToMaxBitrateMap = new Map([[60, 99000], [240, 199000], [576, 300000], [920, 640000], [1296, 720000], [2304, 880000], [3600, 2500000], [8160, 4000000]]);
8997
9013
  function areProfileLevelIdsCompatible(senderProfileLevelId, receiverProfileLevelId, levelAsymmetryAllowed) {
8998
9014
  var senderProfile = Number.parseInt("0x".concat(senderProfileLevelId), 16);
8999
9015
  var recvProfile = Number.parseInt("0x".concat(receiverProfileLevelId), 16);
@@ -9042,8 +9058,22 @@ function getFrameHeightByMaxFs(sourceAspectRatio, requestedMaxFs) {
9042
9058
  var minNumberRatiosForHeight = sourceAspectRatio[1] / _gcd;
9043
9059
  return Math.floor(Math.sqrt(requestedMaxFs * 16 * 16 / (minNumberRatiosForWidth * minNumberRatiosForHeight))) * minNumberRatiosForHeight;
9044
9060
  }
9045
- function getScaleDownRatio(sourceAspectRatio, sourceHeight, requestedMaxFs) {
9046
- return sourceHeight / getFrameHeightByMaxFs(sourceAspectRatio, requestedMaxFs);
9061
+ function getScaleDownRatio(sourceWidth, sourceHeight, maxFs, maxWidth, maxHeight) {
9062
+ if (!sourceWidth || !sourceHeight || !maxFs) {
9063
+ return undefined;
9064
+ }
9065
+ var scaleDownRatio = Math.max(sourceHeight / getFrameHeightByMaxFs([sourceWidth, sourceHeight], maxFs), 1.0);
9066
+ if (maxWidth && maxHeight) {
9067
+ scaleDownRatio = Math.max(sourceWidth / maxWidth, sourceHeight / maxHeight, scaleDownRatio);
9068
+ }
9069
+ return scaleDownRatio;
9070
+ }
9071
+ function getRecommendedMaxBitrateForFrameSize(requestedMaxFs) {
9072
+ if (requestedMaxFs < 60) {
9073
+ throw new Error("requested video max frame size can not less than 60");
9074
+ }
9075
+ var expectedHeight = [...maxFrameSizeToMaxBitrateMap.keys()].sort((a, b) => b - a).find(h => requestedMaxFs >= h);
9076
+ return maxFrameSizeToMaxBitrateMap.get(expectedHeight);
9047
9077
  }
9048
9078
  var commonjsGlobal$1 = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global$1 !== 'undefined' ? global$1 : typeof self !== 'undefined' ? self : {};
9049
9079
  var logger$2 = {
@@ -12597,40 +12627,6 @@ class SendOnlyTransceiver extends Transceiver {
12597
12627
  }
12598
12628
  });
12599
12629
  }
12600
- updateSimulcastStreamStates(requestedIdEncodingParamsMap) {
12601
- return __awaiter(this, void 0, void 0, function* () {
12602
- var sendParameters = this.sender.getParameters();
12603
- sendParameters.encodings.forEach((encoding, index) => {
12604
- var encodingParams = requestedIdEncodingParamsMap.get(index);
12605
- encoding.active = Boolean(encodingParams);
12606
- if (encodingParams) {
12607
- if (encodingParams.scaleDownRatio >= 1 && encoding.scaleResolutionDownBy !== encodingParams.scaleDownRatio) {
12608
- encoding.scaleResolutionDownBy = encodingParams.scaleDownRatio;
12609
- }
12610
- if (encodingParams.maxPayloadBitsPerSecond) {
12611
- encoding.maxBitrate = encodingParams.maxPayloadBitsPerSecond;
12612
- }
12613
- }
12614
- });
12615
- yield this.sender.setParameters(sendParameters);
12616
- });
12617
- }
12618
- getScaleDownRatio(expectedMaxFs) {
12619
- var _a;
12620
- if (!expectedMaxFs) {
12621
- return -1;
12622
- }
12623
- if (!this.publishedTrack) {
12624
- return -1;
12625
- }
12626
- var setting = (_a = this.publishedTrack) === null || _a === void 0 ? void 0 : _a.underlyingTrack.getSettings();
12627
- var sourceHeight = setting === null || setting === void 0 ? void 0 : setting.height;
12628
- var sourceWidth = setting === null || setting === void 0 ? void 0 : setting.width;
12629
- if (!sourceWidth || !sourceHeight) {
12630
- return -1;
12631
- }
12632
- return Math.max(getScaleDownRatio([sourceWidth, sourceHeight], sourceHeight, expectedMaxFs), 1.0);
12633
- }
12634
12630
  publishTrack(track) {
12635
12631
  return this.replacePublishedTrack(track);
12636
12632
  }
@@ -12645,6 +12641,28 @@ class SendOnlyTransceiver extends Transceiver {
12645
12641
  getStats() {
12646
12642
  return this.sender.getStats();
12647
12643
  }
12644
+ updateSendParameters(requestedIdEncodingParamsMap) {
12645
+ return __awaiter(this, void 0, void 0, function* () {
12646
+ var sendParameters = this.sender.getParameters();
12647
+ sendParameters.encodings.forEach((encoding, index) => {
12648
+ var encodingParams = requestedIdEncodingParamsMap.get(index);
12649
+ encoding.active = !!encodingParams;
12650
+ if (encodingParams) {
12651
+ var {
12652
+ maxPayloadBitsPerSecond,
12653
+ scaleDownRatio
12654
+ } = encodingParams;
12655
+ if (maxPayloadBitsPerSecond !== undefined && maxPayloadBitsPerSecond >= 0) {
12656
+ encoding.maxBitrate = maxPayloadBitsPerSecond;
12657
+ }
12658
+ if (scaleDownRatio !== undefined && scaleDownRatio >= 1.0) {
12659
+ encoding.scaleResolutionDownBy = scaleDownRatio;
12660
+ }
12661
+ }
12662
+ });
12663
+ yield this.sender.setParameters(sendParameters);
12664
+ });
12665
+ }
12648
12666
  }
12649
12667
  class StatsManager {
12650
12668
  constructor(statsGetter) {
@@ -14551,6 +14569,7 @@ logger$4.setLevel(Logger$3.DEBUG);
14551
14569
  function setLogHandler(logHandler) {
14552
14570
  Logger$3.setHandler(logHandler);
14553
14571
  Logger$1.setHandler(logHandler);
14572
+ Logger$2.setHandler(logHandler);
14554
14573
  }
14555
14574
  function toMediaStreamTrackKind(mediaType) {
14556
14575
  return [MediaType$1.VideoMain, MediaType$1.VideoSlides].includes(mediaType) ? MediaStreamTrackKind.Video : MediaStreamTrackKind.Audio;
@@ -14780,6 +14799,7 @@ class MultistreamConnection extends EventEmitter {
14780
14799
  updateRequestedStreams(mediaType, requests) {
14781
14800
  var sendTransceiver = this.getSendTransceiverOrThrow(mediaType);
14782
14801
  var signaler = this.streamSignalerManager.getEgressStreamSignalerOrThrow(sendTransceiver.mid);
14802
+ var mediaFamily = getMediaFamily$1(mediaType);
14783
14803
  var requestedIdEncodingParamsMap = new Map();
14784
14804
  var rsRequests = requests.filter(r => isValidReceiverSelectedInfo(r.policySpecificInfo));
14785
14805
  if (rsRequests.length !== requests.length) {
@@ -14792,7 +14812,7 @@ class MultistreamConnection extends EventEmitter {
14792
14812
  codecInfos,
14793
14813
  maxPayloadBitsPerSecond
14794
14814
  } = _ref6;
14795
- var _a;
14815
+ var _a, _b, _c, _d;
14796
14816
  if (ids.length > 1) {
14797
14817
  throw new Error("More than a single ID being unexpected/invalid ".concat(ids));
14798
14818
  }
@@ -14809,10 +14829,16 @@ class MultistreamConnection extends EventEmitter {
14809
14829
  if (streamIdsMatched) {
14810
14830
  var encodingIndex = signaler.getEncodingIndexForStreamId(id);
14811
14831
  if (encodingIndex !== -1) {
14812
- requestedIdEncodingParamsMap.set(encodingIndex, {
14813
- scaleDownRatio: sendTransceiver.getScaleDownRatio((_a = codecInfo === null || codecInfo === void 0 ? void 0 : codecInfo.h264) === null || _a === void 0 ? void 0 : _a.maxFs),
14832
+ var encodingParams = {
14814
14833
  maxPayloadBitsPerSecond
14815
- });
14834
+ };
14835
+ if (mediaFamily === MediaFamily$1.Video) {
14836
+ var trackSettings = (_a = sendTransceiver.publishedTrack) === null || _a === void 0 ? void 0 : _a.getSettings();
14837
+ if (trackSettings) {
14838
+ encodingParams.scaleDownRatio = getScaleDownRatio(trackSettings.width, trackSettings.height, (_b = codecInfo === null || codecInfo === void 0 ? void 0 : codecInfo.h264) === null || _b === void 0 ? void 0 : _b.maxFs, (_c = codecInfo === null || codecInfo === void 0 ? void 0 : codecInfo.h264) === null || _c === void 0 ? void 0 : _c.maxWidth, (_d = codecInfo === null || codecInfo === void 0 ? void 0 : codecInfo.h264) === null || _d === void 0 ? void 0 : _d.maxHeight);
14839
+ }
14840
+ }
14841
+ requestedIdEncodingParamsMap.set(encodingIndex, encodingParams);
14816
14842
  } else {
14817
14843
  logger$4.warn("".concat(mediaType, ": Unable to get encoding index for stream ID: ").concat(JSON.stringify(id)));
14818
14844
  }
@@ -14821,9 +14847,7 @@ class MultistreamConnection extends EventEmitter {
14821
14847
  }
14822
14848
  });
14823
14849
  sendTransceiver.setTrackRequested(requestedIdEncodingParamsMap.size > 0);
14824
- if (getMediaFamily$1(mediaType) === MediaFamily$1.Video) {
14825
- sendTransceiver.updateSimulcastStreamStates(requestedIdEncodingParamsMap);
14826
- }
14850
+ sendTransceiver.updateSendParameters(requestedIdEncodingParamsMap);
14827
14851
  }
14828
14852
  createDataChannel() {
14829
14853
  var dataChannel = this.pc.createDataChannel('datachannel', {});
@@ -24499,4 +24523,4 @@ var Media = {
24499
24523
  isBrowserSupported
24500
24524
  };
24501
24525
 
24502
- export { ActiveSpeakerInfo, CodecInfo, ConnectionState, ErrorType, Errors, Event$1 as Event, H264Codec, LocalCameraTrack, LocalDisplayTrack, LocalMicrophoneTrack, LocalTrack, LocalTrackEvents, Media, MediaFamily, MediaRequest, MediaStreamTrackKind, MediaType, MultistreamRoapMediaConnection, PeerConnection, Policy, ReceiveSlot, ReceiveSlotEvents, ReceiverSelectedInfo, RemoteTrackType, RoapMediaConnection, WcmeError, createCameraTrack, createDisplayTrack, createMicrophoneTrack, getAudioInputDevices, getAudioOutputDevices, getDevices, getErrorDescription, getLogger, getMediaFamily, getVideoInputDevices, isBrowserSupported, setLogger, setOnDeviceChangeHandler };
24526
+ export { ActiveSpeakerInfo, CodecInfo, ConnectionState, ErrorType, Errors, Event$1 as Event, H264Codec, LocalCameraTrack, LocalDisplayTrack, LocalMicrophoneTrack, LocalTrack, LocalTrackEvents, Media, MediaFamily, MediaRequest, MediaStreamTrackKind, MediaType, MultistreamRoapMediaConnection, PeerConnection, Policy, ReceiveSlot, ReceiveSlotEvents, ReceiverSelectedInfo, RecommendedOpusBitrates, RemoteTrackType, RoapMediaConnection, WcmeError, createCameraTrack, createDisplayTrack, createMicrophoneTrack, getAudioInputDevices, getAudioOutputDevices, getDevices, getErrorDescription, getLogger, getMediaFamily, getRecommendedMaxBitrateForFrameSize, getVideoInputDevices, isBrowserSupported, setLogger, setOnDeviceChangeHandler };
@@ -4,7 +4,7 @@ import { LocalTrack, MediaRequest, ReceiveSlot, TransceiverStats } from '@webex/
4
4
  import { MediaType } from '@webex/json-multistream';
5
5
  import { ConnectionState, RoapMessage } from './eventTypes';
6
6
  import { MultistreamConnectionConfig } from './config';
7
- export { MediaRequest, ReceiveSlot, ReceiveSlotEvents, getAudioOutputDevices, getVideoInputDevices, setOnDeviceChangeHandler, WcmeError, AudioDeviceConstraints, VideoDeviceConstraints, LocalTrackEvents, TrackPublishEvent, TrackMuteEvent, TrackEndEvent, LocalCameraTrack, LocalDisplayTrack, LocalMicrophoneTrack, LocalTrack, MediaStreamTrackKind, PeerConnection, createCameraTrack, createDisplayTrack, createMicrophoneTrack, getDevices, getAudioInputDevices, } from '@webex/web-client-media-engine';
7
+ export { MediaRequest, ReceiveSlot, ReceiveSlotEvents, getAudioOutputDevices, getVideoInputDevices, setOnDeviceChangeHandler, WcmeError, AudioDeviceConstraints, VideoDeviceConstraints, LocalTrackEvents, TrackPublishEvent, TrackMuteEvent, TrackEndEvent, LocalCameraTrack, LocalDisplayTrack, LocalMicrophoneTrack, LocalTrack, MediaStreamTrackKind, PeerConnection, createCameraTrack, createDisplayTrack, createMicrophoneTrack, getDevices, getAudioInputDevices, getRecommendedMaxBitrateForFrameSize, RecommendedOpusBitrates, } from '@webex/web-client-media-engine';
8
8
  export { ActiveSpeakerInfo, CodecInfo, getMediaFamily, H264Codec, MediaFamily, MediaType, SourceState, Policy, PolicySpecificInfo, ReceiverSelectedInfo, } from '@webex/json-multistream';
9
9
  export declare class MultistreamRoapMediaConnection extends EventEmitter {
10
10
  private id?;
@@ -1 +1 @@
1
- {"version":3,"file":"MultistreamRoapMediaConnection.d.ts","sourceRoot":"","sources":["../../../src/MediaConnection/MultistreamRoapMediaConnection.ts"],"names":[],"mappings":";AAAA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAElC,OAAO,EAEL,UAAU,EACV,YAAY,EAGZ,WAAW,EACX,gBAAgB,EACjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAA6C,SAAS,EAAC,MAAM,yBAAyB,CAAC;AAG9F,OAAO,EAAQ,eAAe,EAAE,WAAW,EAAmB,MAAM,cAAc,CAAC;AAKnF,OAAO,EAAC,2BAA2B,EAAC,MAAM,UAAU,CAAC;AAGrD,OAAO,EAEL,YAAY,EACZ,WAAW,EACX,iBAAiB,EAEjB,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,SAAS,EACT,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,UAAU,EACV,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,SAAS,EACT,WAAW,EACX,SAAS,EACT,WAAW,EACX,MAAM,EACN,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AAGjC,qBAAa,8BAA+B,SAAQ,YAAY;IAC9D,OAAO,CAAC,EAAE,CAAC,CAAS;IAEpB,OAAO,CAAC,OAAO,CAAC,CAAS;IAEzB,OAAO,CAAC,qBAAqB,CAAwB;IAErD,OAAO,CAAC,IAAI,CAAO;IAEnB,OAAO,CAAC,qBAAqB,CAAS;gBAS1B,qBAAqB,EAAE,2BAA2B,EAAE,OAAO,CAAC,EAAE,MAAM;IAehF,OAAO,CAAC,mBAAmB;IAqC3B,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,2BAA2B;IAyCnC,OAAO,CAAC,UAAU;IA4BX,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB9B,KAAK,IAAI,IAAI;IAOpB,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,eAAe;IAiBhB,SAAS,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE,aAAa,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B1E,kBAAkB,IAAI,eAAe;IAWrC,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;IAOnC,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAShD,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAanD,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvD,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9C,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhD,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAM7D,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,IAAI;IAM9E,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,kBAAkB;CAkB3B"}
1
+ {"version":3,"file":"MultistreamRoapMediaConnection.d.ts","sourceRoot":"","sources":["../../../src/MediaConnection/MultistreamRoapMediaConnection.ts"],"names":[],"mappings":";AAAA,OAAO,YAAY,MAAM,QAAQ,CAAC;AAElC,OAAO,EAEL,UAAU,EACV,YAAY,EAGZ,WAAW,EACX,gBAAgB,EACjB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAA6C,SAAS,EAAC,MAAM,yBAAyB,CAAC;AAG9F,OAAO,EAAQ,eAAe,EAAE,WAAW,EAAmB,MAAM,cAAc,CAAC;AAKnF,OAAO,EAAC,2BAA2B,EAAC,MAAM,UAAU,CAAC;AAGrD,OAAO,EAEL,YAAY,EACZ,WAAW,EACX,iBAAiB,EAEjB,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,EACxB,SAAS,EACT,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,UAAU,EACV,oBAAoB,EAEpB,oCAAoC,EACpC,uBAAuB,GACxB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,SAAS,EACT,WAAW,EACX,SAAS,EACT,WAAW,EACX,MAAM,EACN,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AAGjC,qBAAa,8BAA+B,SAAQ,YAAY;IAC9D,OAAO,CAAC,EAAE,CAAC,CAAS;IAEpB,OAAO,CAAC,OAAO,CAAC,CAAS;IAEzB,OAAO,CAAC,qBAAqB,CAAwB;IAErD,OAAO,CAAC,IAAI,CAAO;IAEnB,OAAO,CAAC,qBAAqB,CAAS;gBAS1B,qBAAqB,EAAE,2BAA2B,EAAE,OAAO,CAAC,EAAE,MAAM;IAehF,OAAO,CAAC,mBAAmB;IAqC3B,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,2BAA2B;IAyCnC,OAAO,CAAC,UAAU;IA4BX,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB9B,KAAK,IAAI,IAAI;IAOpB,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,eAAe;IAiBhB,SAAS,CAAC,UAAU,EAAE,YAAY,EAAE,EAAE,aAAa,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B1E,kBAAkB,IAAI,eAAe;IAWrC,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;IAOnC,mBAAmB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAShD,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAanD,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAYvD,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9C,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhD,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAM7D,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,IAAI;IAM9E,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,kBAAkB;CAkB3B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/internal-media-core",
3
- "version": "1.35.7",
3
+ "version": "1.36.0",
4
4
  "files": [
5
5
  "dist/cjs",
6
6
  "dist/esm",
@@ -47,7 +47,7 @@
47
47
  "@babel/runtime": "^7.18.9",
48
48
  "@webex/json-multistream": "1.22.0",
49
49
  "@webex/ts-sdp": "1.3.2",
50
- "@webex/web-client-media-engine": "1.40.6",
50
+ "@webex/web-client-media-engine": "1.41.0",
51
51
  "detectrtc": "^1.4.1",
52
52
  "events": "^3.3.0",
53
53
  "typed-emitter": "^2.1.0",