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