@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
|
-
|
|
4536
|
-
|
|
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
|
-
|
|
5419
|
-
this.effects.
|
|
5420
|
-
|
|
5421
|
-
|
|
5422
|
-
|
|
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
|
-
|
|
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(
|
|
9057
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
4525
|
-
|
|
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
|
-
|
|
5408
|
-
this.effects.
|
|
5409
|
-
|
|
5410
|
-
|
|
5411
|
-
|
|
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(
|
|
9046
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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.
|
|
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.
|
|
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",
|