@webex/web-client-media-engine 3.14.1 → 3.15.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 CHANGED
@@ -7149,6 +7149,7 @@ exports.WcmeErrorType = void 0;
7149
7149
  WcmeErrorType["GET_MAX_BITRATE_FAILED"] = "GET_MAX_BITRATE_FAILED";
7150
7150
  WcmeErrorType["GET_PAYLOAD_TYPE_FAILED"] = "GET_PAYLOAD_TYPE_FAILED";
7151
7151
  WcmeErrorType["SET_NMG_FAILED"] = "SET_NMG_FAILED";
7152
+ WcmeErrorType["DATA_CHANNEL_SEND_FAILED"] = "DATA_CHANNEL_SEND_FAILED";
7152
7153
  })(exports.WcmeErrorType || (exports.WcmeErrorType = {}));
7153
7154
  class WcmeError {
7154
7155
  constructor(type, message = '') {
@@ -14316,10 +14317,6 @@ class SendOnlyTransceiver extends Transceiver {
14316
14317
  updateSendParameters(requestedIdEncodingParamsMap) {
14317
14318
  return __awaiter$1(this, void 0, void 0, function* () {
14318
14319
  return this.updateSendParametersQueue.push(() => __awaiter$1(this, void 0, void 0, function* () {
14319
- const requested = requestedIdEncodingParamsMap.size > 0;
14320
- if (this.requested !== requested) {
14321
- yield this.replaceSenderSource(requested ? this.publishedStream : null);
14322
- }
14323
14320
  const sendParameters = this.sender.getParameters();
14324
14321
  sendParameters.encodings.forEach((encoding, index) => {
14325
14322
  var _a, _b;
@@ -14337,7 +14334,12 @@ class SendOnlyTransceiver extends Transceiver {
14337
14334
  }
14338
14335
  });
14339
14336
  yield this.sender.setParameters(sendParameters);
14337
+ const oldRequested = this.requested;
14338
+ const newRequested = requestedIdEncodingParamsMap.size > 0;
14340
14339
  this.requestedIdEncodingParamsMap = requestedIdEncodingParamsMap;
14340
+ if (oldRequested !== newRequested) {
14341
+ yield this.replaceSenderSource(newRequested ? this.publishedStream : null);
14342
+ }
14341
14343
  }));
14342
14344
  });
14343
14345
  }
@@ -14692,8 +14694,21 @@ class MultistreamConnection extends EventEmitter$2 {
14692
14694
  logger.error(`DataChannel not created or not connected. Unable to send JMP message.`);
14693
14695
  return;
14694
14696
  }
14695
- logger.info(`Sending JMP message: ${msg}`);
14696
- this.dataChannel.send(msg);
14697
+ try {
14698
+ logger.info(`Sending JMP message (size: ${msg.length}): ${msg}`);
14699
+ this.dataChannel.send(msg);
14700
+ }
14701
+ catch (err) {
14702
+ const { bufferedAmount, readyState } = this.dataChannel;
14703
+ const { sctp } = this.pc.getUnderlyingRTCPeerConnection();
14704
+ const { maxMessageSize, state } = sctp || {};
14705
+ logErrorAndThrow(exports.WcmeErrorType.DATA_CHANNEL_SEND_FAILED, `Sending JMP message failed with error: ${err},
14706
+ Message size: ${msg.length},
14707
+ Data Channel State: ${readyState},
14708
+ Data Channel Buffered amount: ${bufferedAmount},
14709
+ SCTP State: ${state},
14710
+ SCTP Max Message Size: ${maxMessageSize}`);
14711
+ }
14697
14712
  });
14698
14713
  let prevNumTotalSources = 0;
14699
14714
  let prevNumLiveSources = 0;
@@ -14911,26 +14926,40 @@ class MultistreamConnection extends EventEmitter$2 {
14911
14926
  return { id, state, csi: sendTransceiver.csi };
14912
14927
  });
14913
14928
  }
14929
+ createReceiveTransceiver(mediaType) {
14930
+ const rtcRtpTransceiver = this.pc.addTransceiver(toMediaStreamTrackKind(mediaType), {
14931
+ direction: 'recvonly',
14932
+ });
14933
+ const transceiverMid = this.midPredictor.getNextMid(mediaType);
14934
+ const munger = new IngressSdpMunger();
14935
+ const recvOnlyTransceiver = new ReceiveOnlyTransceiver(rtcRtpTransceiver, transceiverMid, munger);
14936
+ recvOnlyTransceiver.twccDisabled =
14937
+ getMediaFamily(mediaType) === exports.MediaFamily.Audio ? this.options.disableAudioTwcc : false;
14938
+ this.recvTransceivers.set(mediaType, [
14939
+ ...(this.recvTransceivers.get(mediaType) || []),
14940
+ recvOnlyTransceiver,
14941
+ ]);
14942
+ return recvOnlyTransceiver;
14943
+ }
14914
14944
  createReceiveSlot(mediaType) {
14915
14945
  return __awaiter$1(this, void 0, void 0, function* () {
14916
- return new Promise((createReceiveSlotResolve) => {
14946
+ return (yield this.createReceiveSlots(mediaType, 1))[0];
14947
+ });
14948
+ }
14949
+ createReceiveSlots(mediaType, count = 1) {
14950
+ return __awaiter$1(this, void 0, void 0, function* () {
14951
+ return new Promise((createReceiveSlotsResolve) => {
14917
14952
  this.offerAnswerQueue.push(() => __awaiter$1(this, void 0, void 0, function* () {
14918
- const rtcRtpTransceiver = this.pc.addTransceiver(toMediaStreamTrackKind(mediaType), {
14919
- direction: 'recvonly',
14920
- });
14921
- const transceiverMid = this.midPredictor.getNextMid(mediaType);
14922
- const munger = new IngressSdpMunger();
14923
- const recvOnlyTransceiver = new ReceiveOnlyTransceiver(rtcRtpTransceiver, transceiverMid, munger);
14924
- recvOnlyTransceiver.twccDisabled =
14925
- getMediaFamily(mediaType) === exports.MediaFamily.Audio ? this.options.disableAudioTwcc : false;
14926
- this.recvTransceivers.set(mediaType, [
14927
- ...(this.recvTransceivers.get(mediaType) || []),
14928
- recvOnlyTransceiver,
14929
- ]);
14953
+ const createdReceiveOnlyTransceivers = [];
14954
+ for (let i = 0; i < count; i++) {
14955
+ const recvOnlyTransceiver = this.createReceiveTransceiver(mediaType);
14956
+ createdReceiveOnlyTransceivers.push(recvOnlyTransceiver);
14957
+ }
14930
14958
  if (this.pc.getRemoteDescription()) {
14931
14959
  yield this.doLocalOfferAnswer();
14932
14960
  }
14933
- createReceiveSlotResolve(recvOnlyTransceiver.receiveSlot);
14961
+ const receiveSlots = createdReceiveOnlyTransceivers.map((transceiver) => transceiver.receiveSlot);
14962
+ createReceiveSlotsResolve(receiveSlots);
14934
14963
  }));
14935
14964
  });
14936
14965
  });