@webex/web-client-media-engine 3.24.3 → 3.25.1
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 +43 -19
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/index.js +43 -19
- package/dist/esm/index.js.map +1 -1
- package/dist/types/index.d.ts +6 -0
- package/package.json +2 -2
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);
|
|
@@ -10619,6 +10619,7 @@ class ReceiveOnlyTransceiver extends Transceiver {
|
|
|
10619
10619
|
stats.calliopeMediaType = this.mediaType;
|
|
10620
10620
|
stats.requestedBitrate = this.metadata.requestedBitrate;
|
|
10621
10621
|
stats.requestedFrameSize = this.metadata.requestedFrameSize;
|
|
10622
|
+
stats.requestedFrameRate = this.metadata.requestedFrameRate;
|
|
10622
10623
|
stats.isRequested = this.metadata.isRequested;
|
|
10623
10624
|
stats.lastRequestedUpdateTimestamp = this.metadata.lastRequestedUpdateTimestamp;
|
|
10624
10625
|
stats.isActiveSpeaker = this.metadata.isActiveSpeaker;
|
|
@@ -10643,13 +10644,14 @@ class ReceiveOnlyTransceiver extends Transceiver {
|
|
|
10643
10644
|
this.munger.reset();
|
|
10644
10645
|
}
|
|
10645
10646
|
handleRequested(streamRequest) {
|
|
10646
|
-
var _a, _b;
|
|
10647
|
+
var _a, _b, _c, _d;
|
|
10647
10648
|
if (!this.metadata.isRequested) {
|
|
10648
10649
|
this.metadata.isRequested = true;
|
|
10649
10650
|
this.metadata.lastRequestedUpdateTimestamp = getCurrentTimestamp();
|
|
10650
10651
|
}
|
|
10651
10652
|
this.metadata.requestedBitrate = streamRequest.maxPayloadBitsPerSecond;
|
|
10652
10653
|
this.metadata.requestedFrameSize = (_b = (_a = streamRequest.codecInfos[0]) === null || _a === void 0 ? void 0 : _a.h264) === null || _b === void 0 ? void 0 : _b.maxFs;
|
|
10654
|
+
this.metadata.requestedFrameRate = (_d = (_c = streamRequest.codecInfos[0]) === null || _c === void 0 ? void 0 : _c.h264) === null || _d === void 0 ? void 0 : _d.maxFps;
|
|
10653
10655
|
}
|
|
10654
10656
|
handleUnrequested() {
|
|
10655
10657
|
if (this.metadata.isRequested) {
|
|
@@ -10658,6 +10660,7 @@ class ReceiveOnlyTransceiver extends Transceiver {
|
|
|
10658
10660
|
}
|
|
10659
10661
|
this.metadata.requestedBitrate = undefined;
|
|
10660
10662
|
this.metadata.requestedFrameSize = undefined;
|
|
10663
|
+
this.metadata.requestedFrameRate = undefined;
|
|
10661
10664
|
this.receiveSlot._updateSource('no source', undefined);
|
|
10662
10665
|
}
|
|
10663
10666
|
handleActiveSpeakerUpdate(value) {
|
|
@@ -14393,6 +14396,7 @@ class SendOnlyTransceiver extends Transceiver {
|
|
|
14393
14396
|
this.namedMediaGroupsChange = new TypedEvent();
|
|
14394
14397
|
this.requestedIdEncodingParamsMap = new Map();
|
|
14395
14398
|
this.updateSendParametersQueue = new AsyncQueue();
|
|
14399
|
+
this.sourceStateOverrideChange = new TypedEvent();
|
|
14396
14400
|
this.metadata = { lastRequestedUpdateTimestampsMap: new Map() };
|
|
14397
14401
|
this.munger = config.munger;
|
|
14398
14402
|
this.csi = config.csi;
|
|
@@ -14631,6 +14635,22 @@ class SendOnlyTransceiver extends Transceiver {
|
|
|
14631
14635
|
this.munger.deleteCodecParameters(parameters);
|
|
14632
14636
|
this.negotiationNeeded.emit(OfferAnswerType.LocalOnly);
|
|
14633
14637
|
}
|
|
14638
|
+
setSourceStateOverride(state) {
|
|
14639
|
+
this.sourceStateOverride = state;
|
|
14640
|
+
this.sourceStateOverrideChange.emit();
|
|
14641
|
+
}
|
|
14642
|
+
get currentSourceState() {
|
|
14643
|
+
if (this.sourceStateOverride) {
|
|
14644
|
+
return this.sourceStateOverride;
|
|
14645
|
+
}
|
|
14646
|
+
if (!this.publishedStream) {
|
|
14647
|
+
return 'no source';
|
|
14648
|
+
}
|
|
14649
|
+
if (this.publishedStream.muted) {
|
|
14650
|
+
return 'avatar';
|
|
14651
|
+
}
|
|
14652
|
+
return 'live';
|
|
14653
|
+
}
|
|
14634
14654
|
}
|
|
14635
14655
|
|
|
14636
14656
|
class SendSlot {
|
|
@@ -14675,6 +14695,12 @@ class SendSlot {
|
|
|
14675
14695
|
this.sendTransceiver.deleteCodecParameters(parameters);
|
|
14676
14696
|
});
|
|
14677
14697
|
}
|
|
14698
|
+
setSourceStateOverride(state) {
|
|
14699
|
+
this.sendTransceiver.setSourceStateOverride(state);
|
|
14700
|
+
}
|
|
14701
|
+
clearSourceStateOverride() {
|
|
14702
|
+
this.sendTransceiver.setSourceStateOverride(undefined);
|
|
14703
|
+
}
|
|
14678
14704
|
}
|
|
14679
14705
|
|
|
14680
14706
|
const organizeTransceiverStats = (sendTransceivers, recvTransceivers) => __awaiter$1(void 0, void 0, void 0, function* () {
|
|
@@ -14894,7 +14920,13 @@ class MultistreamConnection extends EventEmitter$2 {
|
|
|
14894
14920
|
const munger = new EgressSdpMunger({
|
|
14895
14921
|
doFullIce: this.options.doFullIce,
|
|
14896
14922
|
});
|
|
14897
|
-
const transceiver = new SendOnlyTransceiver({
|
|
14923
|
+
const transceiver = new SendOnlyTransceiver({
|
|
14924
|
+
rtcRtpTransceiver,
|
|
14925
|
+
mid,
|
|
14926
|
+
mediaType,
|
|
14927
|
+
munger,
|
|
14928
|
+
csi,
|
|
14929
|
+
});
|
|
14898
14930
|
if (getMediaFamily(mediaType) === MediaFamily.Video) {
|
|
14899
14931
|
transceiver.rtxEnabled = true;
|
|
14900
14932
|
transceiver.setCodecParameters({
|
|
@@ -14924,6 +14956,9 @@ class MultistreamConnection extends EventEmitter$2 {
|
|
|
14924
14956
|
transceiver.namedMediaGroupsChange.on(() => {
|
|
14925
14957
|
this.sendSourceAdvertisement(mediaType);
|
|
14926
14958
|
});
|
|
14959
|
+
transceiver.sourceStateOverrideChange.on(() => {
|
|
14960
|
+
this.sendMediaRequestStatus(mediaType);
|
|
14961
|
+
});
|
|
14927
14962
|
this.sendTransceivers.set(mediaType, transceiver);
|
|
14928
14963
|
this.createJmpSession(mediaType);
|
|
14929
14964
|
}
|
|
@@ -15171,23 +15206,12 @@ SCTP Max Message Size: ${maxMessageSize}`);
|
|
|
15171
15206
|
}
|
|
15172
15207
|
}
|
|
15173
15208
|
getVideoStreamStates(mediaType) {
|
|
15174
|
-
var _a;
|
|
15175
15209
|
const sendTransceiver = this.getSendTransceiverOrThrow(mediaType);
|
|
15176
|
-
|
|
15177
|
-
|
|
15178
|
-
|
|
15179
|
-
|
|
15180
|
-
|
|
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
|
-
});
|
|
15210
|
+
return sendTransceiver.senderIds.map((id) => ({
|
|
15211
|
+
id,
|
|
15212
|
+
state: sendTransceiver.currentSourceState,
|
|
15213
|
+
csi: sendTransceiver.csi,
|
|
15214
|
+
}));
|
|
15191
15215
|
}
|
|
15192
15216
|
createReceiveTransceiver(mediaType) {
|
|
15193
15217
|
const rtcRtpTransceiver = this.pc.addTransceiver(toMediaStreamTrackKind(mediaType), {
|