@webex/internal-media-core 2.18.5 → 2.20.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
@@ -17922,7 +17922,8 @@ var initialMqeIntervalStreamTransmitVideo = {
17922
17922
  requestedKeyFrames: 0,
17923
17923
  localConfigurationChanges: 0,
17924
17924
  remoteConfigurationChanges: 0,
17925
- h264CodecProfile: 'BP'
17925
+ h264CodecProfile: 'BP',
17926
+ isAvatar: false
17926
17927
  };
17927
17928
 
17928
17929
  var max = array => {
@@ -18519,7 +18520,7 @@ class MqeBuilder {
18519
18520
  return result;
18520
18521
  }
18521
18522
  buildMqeIntervalStreamTransmitVideo(id) {
18522
- var _getPropertyFromStats37, _getPropertyFromStats38, _getPropertyFromStats39, _getPropertyFromStats40, _getPropertyFromStats41, _getPropertyFromStats42, _getPropertyFromStats43, _getPropertyFromStats44, _getPropertyFromStats45, _getH264ProfileFromSt2;
18523
+ var _getPropertyFromStats37, _getPropertyFromStats38, _getPropertyFromStats39, _getPropertyFromStats40, _getPropertyFromStats41, _getPropertyFromStats42, _getPropertyFromStats43, _getPropertyFromStats44, _getPropertyFromStats45, _getH264ProfileFromSt2, _getPropertyFromStats46;
18523
18524
  var result = structuredClone(initialMqeIntervalStreamTransmitVideo);
18524
18525
  result.common = this.buildMqeIntervalStreamTransmitCommon(id);
18525
18526
  var current = this.currentIntervalStats;
@@ -18542,6 +18543,8 @@ class MqeBuilder {
18542
18543
  result.localConfigurationChanges = 0;
18543
18544
  var currentH264CodecProfile = (_getH264ProfileFromSt2 = getH264ProfileFromStatsByStreamStatsId(current, id)) !== null && _getH264ProfileFromSt2 !== void 0 ? _getH264ProfileFromSt2 : 'BP';
18544
18545
  result.h264CodecProfile = currentH264CodecProfile;
18546
+ var currentSourceState = (_getPropertyFromStats46 = getPropertyFromStatsById(current, id, 'sourceState')) !== null && _getPropertyFromStats46 !== void 0 ? _getPropertyFromStats46 : '';
18547
+ result.isAvatar = currentSourceState === 'avatar';
18545
18548
  var currentLastUsedEffect = getPropertyFromStatsById(current, id, 'lastUsedEffect');
18546
18549
  if ((currentLastUsedEffect === null || currentLastUsedEffect === void 0 ? void 0 : currentLastUsedEffect.kind) === 'virtual-background-effect' && 'virtualBackgroundMode' in currentLastUsedEffect) {
18547
18550
  if (currentLastUsedEffect.virtualBackgroundMode === 'BLUR') {
@@ -18559,34 +18562,34 @@ class MqeBuilder {
18559
18562
  return result;
18560
18563
  }
18561
18564
  buildMqeIntervalStreamTransmitCommon(id) {
18562
- var _getPropertyFromStats46, _getPropertyFromStats47, _getPropertyFromStats48, _getPropertyFromStats49, _getPropertyFromStats52, _getPropertyFromStats53, _getPropertyFromStats54, _getPropertyFromStats55, _getCodecFromStatsByS2;
18565
+ var _getPropertyFromStats47, _getPropertyFromStats48, _getPropertyFromStats49, _getPropertyFromStats50, _getPropertyFromStats53, _getPropertyFromStats54, _getPropertyFromStats55, _getPropertyFromStats56, _getCodecFromStatsByS2;
18563
18566
  var result = structuredClone(initialMqeIntervalStreamTransmitCommon);
18564
18567
  var current = this.currentIntervalStats;
18565
18568
  var previous = this.previousIntervalStats;
18566
- var currentPacketsSent = (_getPropertyFromStats46 = getPropertyFromStatsById(current, id, 'packetsSent')) !== null && _getPropertyFromStats46 !== void 0 ? _getPropertyFromStats46 : 0;
18567
- var previousPacketsSent = (_getPropertyFromStats47 = getPropertyFromStatsById(previous, id, 'packetsSent')) !== null && _getPropertyFromStats47 !== void 0 ? _getPropertyFromStats47 : 0;
18568
- var currentRetransmittedPacketsSent = (_getPropertyFromStats48 = getPropertyFromStatsById(current, id, 'retransmittedPacketsSent')) !== null && _getPropertyFromStats48 !== void 0 ? _getPropertyFromStats48 : 0;
18569
- var previousRetransmittedPacketsSent = (_getPropertyFromStats49 = getPropertyFromStatsById(previous, id, 'retransmittedPacketsSent')) !== null && _getPropertyFromStats49 !== void 0 ? _getPropertyFromStats49 : 0;
18569
+ var currentPacketsSent = (_getPropertyFromStats47 = getPropertyFromStatsById(current, id, 'packetsSent')) !== null && _getPropertyFromStats47 !== void 0 ? _getPropertyFromStats47 : 0;
18570
+ var previousPacketsSent = (_getPropertyFromStats48 = getPropertyFromStatsById(previous, id, 'packetsSent')) !== null && _getPropertyFromStats48 !== void 0 ? _getPropertyFromStats48 : 0;
18571
+ var currentRetransmittedPacketsSent = (_getPropertyFromStats49 = getPropertyFromStatsById(current, id, 'retransmittedPacketsSent')) !== null && _getPropertyFromStats49 !== void 0 ? _getPropertyFromStats49 : 0;
18572
+ var previousRetransmittedPacketsSent = (_getPropertyFromStats50 = getPropertyFromStatsById(previous, id, 'retransmittedPacketsSent')) !== null && _getPropertyFromStats50 !== void 0 ? _getPropertyFromStats50 : 0;
18570
18573
  result.rtpPackets = currentPacketsSent - previousPacketsSent - (currentRetransmittedPacketsSent - previousRetransmittedPacketsSent);
18571
18574
  if (this.mediaKind === 'video') {
18572
- var _getPropertyFromStats50, _getPropertyFromStats51;
18573
- var currentMaxTransmittedFrameRateForMaxRequestedFrameSize = (_getPropertyFromStats50 = getPropertyFromStatsById(current, id, 'maxTransmittedFrameRateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats50 !== void 0 ? _getPropertyFromStats50 : 0;
18575
+ var _getPropertyFromStats51, _getPropertyFromStats52;
18576
+ var currentMaxTransmittedFrameRateForMaxRequestedFrameSize = (_getPropertyFromStats51 = getPropertyFromStatsById(current, id, 'maxTransmittedFrameRateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats51 !== void 0 ? _getPropertyFromStats51 : 0;
18574
18577
  result.transmittedFrameRate = currentMaxTransmittedFrameRateForMaxRequestedFrameSize;
18575
- var currentMaxRequestedFrameRateForMaxRequestedFrameSize = (_getPropertyFromStats51 = getPropertyFromStatsById(current, id, 'maxRequestedFrameRateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats51 !== void 0 ? _getPropertyFromStats51 : 0;
18578
+ var currentMaxRequestedFrameRateForMaxRequestedFrameSize = (_getPropertyFromStats52 = getPropertyFromStatsById(current, id, 'maxRequestedFrameRateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats52 !== void 0 ? _getPropertyFromStats52 : 0;
18576
18579
  result.requestedFrames = currentMaxRequestedFrameRateForMaxRequestedFrameSize;
18577
18580
  }
18578
- var currentBytesSent = (_getPropertyFromStats52 = getPropertyFromStatsById(current, id, 'bytesSent')) !== null && _getPropertyFromStats52 !== void 0 ? _getPropertyFromStats52 : 0;
18579
- var previousBytesSent = (_getPropertyFromStats53 = getPropertyFromStatsById(previous, id, 'bytesSent')) !== null && _getPropertyFromStats53 !== void 0 ? _getPropertyFromStats53 : 0;
18580
- var currentRetransmittedBytesSent = (_getPropertyFromStats54 = getPropertyFromStatsById(current, id, 'retransmittedBytesSent')) !== null && _getPropertyFromStats54 !== void 0 ? _getPropertyFromStats54 : 0;
18581
- var previousRetransmittedBytesSent = (_getPropertyFromStats55 = getPropertyFromStatsById(previous, id, 'retransmittedBytesSent')) !== null && _getPropertyFromStats55 !== void 0 ? _getPropertyFromStats55 : 0;
18581
+ var currentBytesSent = (_getPropertyFromStats53 = getPropertyFromStatsById(current, id, 'bytesSent')) !== null && _getPropertyFromStats53 !== void 0 ? _getPropertyFromStats53 : 0;
18582
+ var previousBytesSent = (_getPropertyFromStats54 = getPropertyFromStatsById(previous, id, 'bytesSent')) !== null && _getPropertyFromStats54 !== void 0 ? _getPropertyFromStats54 : 0;
18583
+ var currentRetransmittedBytesSent = (_getPropertyFromStats55 = getPropertyFromStatsById(current, id, 'retransmittedBytesSent')) !== null && _getPropertyFromStats55 !== void 0 ? _getPropertyFromStats55 : 0;
18584
+ var previousRetransmittedBytesSent = (_getPropertyFromStats56 = getPropertyFromStatsById(previous, id, 'retransmittedBytesSent')) !== null && _getPropertyFromStats56 !== void 0 ? _getPropertyFromStats56 : 0;
18582
18585
  result.transmittedBitrate = bytesToBitrate(currentBytesSent - previousBytesSent - (currentRetransmittedBytesSent - previousRetransmittedBytesSent), MQE_INTERVAL);
18583
18586
  if (this.mediaKind === 'audio') {
18584
- var _getPropertyFromStats56;
18585
- var currentRequestedBitrateArray = (_getPropertyFromStats56 = getPropertyFromStatsById(current, id, 'requestedBitrateArray')) !== null && _getPropertyFromStats56 !== void 0 ? _getPropertyFromStats56 : [];
18587
+ var _getPropertyFromStats57;
18588
+ var currentRequestedBitrateArray = (_getPropertyFromStats57 = getPropertyFromStatsById(current, id, 'requestedBitrateArray')) !== null && _getPropertyFromStats57 !== void 0 ? _getPropertyFromStats57 : [];
18586
18589
  result.requestedBitrate = max(currentRequestedBitrateArray);
18587
18590
  } else {
18588
- var _getPropertyFromStats57;
18589
- var currentMaxRequestedBitrateForMaxRequestedFrameSize = (_getPropertyFromStats57 = getPropertyFromStatsById(current, id, 'maxRequestedBitrateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats57 !== void 0 ? _getPropertyFromStats57 : 0;
18591
+ var _getPropertyFromStats58;
18592
+ var currentMaxRequestedBitrateForMaxRequestedFrameSize = (_getPropertyFromStats58 = getPropertyFromStatsById(current, id, 'maxRequestedBitrateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats58 !== void 0 ? _getPropertyFromStats58 : 0;
18590
18593
  result.requestedBitrate = currentMaxRequestedBitrateForMaxRequestedFrameSize;
18591
18594
  }
18592
18595
  var currentCodec = (_getCodecFromStatsByS2 = getCodecFromStatsByStreamStatsId(current, id)) !== null && _getCodecFromStatsByS2 !== void 0 ? _getCodecFromStatsByS2 : this.mediaKind === 'audio' ? 'opus' : 'H264';
@@ -18703,6 +18706,15 @@ exports.NetworkQualityEventNames = void 0;
18703
18706
  (function (NetworkQualityEventNames) {
18704
18707
  NetworkQualityEventNames["NETWORK_QUALITY"] = "NETWORK_QUALITY";
18705
18708
  })(exports.NetworkQualityEventNames || (exports.NetworkQualityEventNames = {}));
18709
+ exports.StatsMonitorEventNames = void 0;
18710
+ (function (StatsMonitorEventNames) {
18711
+ StatsMonitorEventNames["INBOUND_AUDIO_ISSUE"] = "INBOUND_AUDIO_ISSUE";
18712
+ })(exports.StatsMonitorEventNames || (exports.StatsMonitorEventNames = {}));
18713
+ exports.InboundAudioIssueSubTypes = void 0;
18714
+ (function (InboundAudioIssueSubTypes) {
18715
+ InboundAudioIssueSubTypes["DECODE_RESULTS_IN_ZERO_AUDIO_LEVEL"] = "DECODE_RESULTS_IN_ZERO_AUDIO_LEVEL";
18716
+ InboundAudioIssueSubTypes["ALL_PACKETS_DISCARDED"] = "ALL_PACKETS_DISCARDED";
18717
+ })(exports.InboundAudioIssueSubTypes || (exports.InboundAudioIssueSubTypes = {}));
18706
18718
 
18707
18719
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
18708
18720
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -18711,6 +18723,7 @@ class StatsAnalyzer extends EventEmitter$5 {
18711
18723
  var {
18712
18724
  config,
18713
18725
  networkQualityMonitor,
18726
+ statsMonitor,
18714
18727
  isMultistream = false
18715
18728
  } = _ref;
18716
18729
  super();
@@ -18722,6 +18735,7 @@ class StatsAnalyzer extends EventEmitter$5 {
18722
18735
  _defineProperty(this, "mqeInterval", void 0);
18723
18736
  _defineProperty(this, "mqeSentCount", 0);
18724
18737
  _defineProperty(this, "networkQualityMonitor", void 0);
18738
+ _defineProperty(this, "statsMonitor", void 0);
18725
18739
  _defineProperty(this, "mediaConnection", null);
18726
18740
  _defineProperty(this, "statsStarted", false);
18727
18741
  _defineProperty(this, "mqeIntervalSessionReceiveAudioMainBuilder", void 0);
@@ -18763,6 +18777,7 @@ class StatsAnalyzer extends EventEmitter$5 {
18763
18777
  });
18764
18778
  this.config = config;
18765
18779
  this.networkQualityMonitor = networkQualityMonitor;
18780
+ this.statsMonitor = statsMonitor;
18766
18781
  this.mqeIntervalSessionReceiveAudioMainBuilder = new MqeIntervalSessionReceiveAudioBuilder({
18767
18782
  isMain: true,
18768
18783
  multistreamEnabled: isMultistream
@@ -18981,7 +18996,7 @@ class StatsAnalyzer extends EventEmitter$5 {
18981
18996
  })();
18982
18997
  }
18983
18998
  monitorStats(transceiverStats) {
18984
- var _this$meetingMediaSta3, _this$meetingMediaSta4, _this$meetingMediaSta5, _this$meetingMediaSta6, _this$meetingMediaSta7, _this$previousTransce, _this$previousTransce2, _this$previousTransce3, _this$previousTransce4, _this$previousTransce5, _this$previousTransce6, _this$previousTransce7, _this$previousTransce8, _this$previousTransce9, _this$previousTransce10, _this$previousTransce11, _this$previousTransce12;
18999
+ var _this$meetingMediaSta3, _this$meetingMediaSta4, _this$meetingMediaSta5, _this$meetingMediaSta6, _this$meetingMediaSta7, _this$meetingMediaSta8, _this$previousTransce, _this$previousTransce2, _this$previousTransce3, _this$previousTransce4, _this$previousTransce5, _this$previousTransce6, _this$previousTransce7, _this$previousTransce8, _this$previousTransce9, _this$previousTransce10, _this$previousTransce11, _this$previousTransce12;
18985
19000
  var emitNetworkQualityEvents = (mediaType, intervalStats) => {
18986
19001
  var roundTripTimeArray = getPropertyFromStatsByTypeInArray(intervalStats, 'remote-inbound-rtp', 'roundTripTime');
18987
19002
  var jitterArray = getPropertyFromStatsByTypeInArray(intervalStats, 'remote-inbound-rtp', 'jitter');
@@ -18997,129 +19012,45 @@ class StatsAnalyzer extends EventEmitter$5 {
18997
19012
  var current = convertToStatsMap(transceiverStats.audio.senders);
18998
19013
  if (this.previousTransceiverStats) {
18999
19014
  var previous = convertToStatsMap(this.previousTransceiverStats.audio.senders);
19000
- var currentPacketsSent = getSumFromStatsByType(current, 'outbound-rtp', 'packetsSent');
19001
- var previousPacketsSent = getSumFromStatsByType(previous, 'outbound-rtp', 'packetsSent');
19002
- if (currentPacketsSent === previousPacketsSent) {
19003
- getLogger().info("StatsAnalyzer#monitorStats --> No audio packets sent, last packets sent count: ".concat(currentPacketsSent, "."));
19004
- }
19005
- var totalAudioEnergyExists = getPropertyFromStatsByType(current, 'media-source', 'totalAudioEnergy') !== undefined;
19006
- if (totalAudioEnergyExists) {
19007
- var currentTotalAudioEnergy = getSumFromStatsByType(current, 'media-source', 'totalAudioEnergy');
19008
- var previousTotalAudioEnergy = getSumFromStatsByType(previous, 'media-source', 'totalAudioEnergy');
19009
- if (currentTotalAudioEnergy === previousTotalAudioEnergy) {
19010
- getLogger().info("StatsAnalyzer#monitorStats --> No audio energy, last total audio energy: ".concat(currentTotalAudioEnergy, "."));
19011
- }
19012
- }
19013
- var audioLevelExists = getPropertyFromStatsByType(current, 'media-source', 'audioLevel') !== undefined;
19014
- if (audioLevelExists) {
19015
- var currentAudioLevel = getSumFromStatsByType(current, 'media-source', 'audioLevel');
19016
- if (currentAudioLevel === 0) {
19017
- getLogger().info("StatsAnalyzer#monitorStats --> Audio level is 0.");
19018
- }
19019
- }
19015
+ this.statsMonitor.checkOutboundAudio(previous, current);
19020
19016
  }
19021
19017
  emitNetworkQualityEvents('audio', current);
19022
19018
  }
19023
- if ((_this$meetingMediaSta4 = this.meetingMediaStatus) !== null && _this$meetingMediaSta4 !== void 0 && _this$meetingMediaSta4.expected.sendVideo) {
19024
- var _current = convertToStatsMap(transceiverStats.video.senders);
19019
+ if ((_this$meetingMediaSta4 = this.meetingMediaStatus) !== null && _this$meetingMediaSta4 !== void 0 && _this$meetingMediaSta4.expected.receiveAudio) {
19020
+ var _current = convertToStatsMap(transceiverStats.audio.receivers);
19025
19021
  if (this.previousTransceiverStats) {
19026
- var _previous = convertToStatsMap(this.previousTransceiverStats.video.senders);
19027
- var _currentPacketsSent = getSumFromStatsByType(_current, 'outbound-rtp', 'packetsSent');
19028
- var _previousPacketsSent = getSumFromStatsByType(_previous, 'outbound-rtp', 'packetsSent');
19029
- if (_currentPacketsSent === _previousPacketsSent) {
19030
- getLogger().info("StatsAnalyzer#monitorStats --> No video packets sent, last packets sent count: ".concat(_currentPacketsSent, "."));
19031
- }
19032
- var currentFramesEncoded = getSumFromStatsByType(_current, 'outbound-rtp', 'framesEncoded');
19033
- var previousFramesEncoded = getSumFromStatsByType(_previous, 'outbound-rtp', 'framesEncoded');
19034
- if (currentFramesEncoded === previousFramesEncoded) {
19035
- getLogger().info("StatsAnalyzer#monitorStats --> No video frames encoded, last frames encoded count: ".concat(currentFramesEncoded, "."));
19036
- }
19037
- var currentFramesSent = getSumFromStatsByType(_current, 'outbound-rtp', 'framesSent');
19038
- var previousFramesSent = getSumFromStatsByType(_previous, 'outbound-rtp', 'framesSent');
19039
- if (currentFramesSent === previousFramesSent) {
19040
- getLogger().info("StatsAnalyzer#monitorStats --> No video frames sent, last frames sent count: ".concat(currentFramesSent, "."));
19041
- }
19022
+ var _previous = convertToStatsMap(this.previousTransceiverStats.audio.receivers);
19023
+ this.statsMonitor.checkInboundAudio(_previous, _current);
19042
19024
  }
19043
- emitNetworkQualityEvents('video', _current);
19044
19025
  }
19045
- if ((_this$meetingMediaSta5 = this.meetingMediaStatus) !== null && _this$meetingMediaSta5 !== void 0 && _this$meetingMediaSta5.expected.receiveVideo) {
19046
- var _current2 = convertToStatsMap(transceiverStats.video.receivers);
19026
+ if ((_this$meetingMediaSta5 = this.meetingMediaStatus) !== null && _this$meetingMediaSta5 !== void 0 && _this$meetingMediaSta5.expected.sendVideo) {
19027
+ var _current2 = convertToStatsMap(transceiverStats.video.senders);
19047
19028
  if (this.previousTransceiverStats) {
19048
- var currentSourceStateArray = getPropertyFromStatsByTypeInArray(_current2, 'inbound-rtp', 'sourceState');
19049
- if (currentSourceStateArray.includes('live')) {
19050
- var _previous2 = convertToStatsMap(this.previousTransceiverStats.video.receivers);
19051
- var currentPacketsReceived = getSumFromStatsByType(_current2, 'inbound-rtp', 'packetsReceived');
19052
- var previousPacketsReceived = getSumFromStatsByType(_previous2, 'inbound-rtp', 'packetsReceived');
19053
- if (currentPacketsReceived === previousPacketsReceived) {
19054
- getLogger().info("StatsAnalyzer#monitorStats --> No video packets received, last packets received count: ".concat(currentPacketsReceived, "."));
19055
- }
19056
- var currentFramesDecoded = getSumFromStatsByType(_current2, 'inbound-rtp', 'framesDecoded');
19057
- var previousFramesDecoded = getSumFromStatsByType(_previous2, 'inbound-rtp', 'framesDecoded');
19058
- if (currentFramesDecoded === previousFramesDecoded) {
19059
- getLogger().info("StatsAnalyzer#monitorStats --> No video frames decoded, last frames decoded count: ".concat(currentFramesDecoded, "."));
19060
- }
19061
- var currentFramesReceived = getSumFromStatsByType(_current2, 'inbound-rtp', 'framesReceived');
19062
- var previousFramesReceived = getSumFromStatsByType(_previous2, 'inbound-rtp', 'framesReceived');
19063
- if (currentFramesReceived === previousFramesReceived) {
19064
- getLogger().info("StatsAnalyzer#monitorStats --> No video frames received, last frames received count: ".concat(currentFramesReceived, "."));
19065
- }
19066
- var currentFramesDropped = getSumFromStatsByType(_current2, 'inbound-rtp', 'framesDropped');
19067
- var previousFramesDropped = getSumFromStatsByType(_previous2, 'inbound-rtp', 'framesDropped');
19068
- if (currentFramesDropped - previousFramesDropped > 10) {
19069
- getLogger().info("StatsAnalyzer#monitorStats --> Too many video frames dropped, total frames dropped count: ".concat(currentFramesDropped, "."));
19070
- }
19071
- }
19029
+ var _previous2 = convertToStatsMap(this.previousTransceiverStats.video.senders);
19030
+ this.statsMonitor.checkOutboundVideo(_previous2, _current2);
19072
19031
  }
19032
+ emitNetworkQualityEvents('video', _current2);
19073
19033
  }
19074
- if ((_this$meetingMediaSta6 = this.meetingMediaStatus) !== null && _this$meetingMediaSta6 !== void 0 && _this$meetingMediaSta6.expected.sendShare) {
19075
- var _current3 = convertToStatsMap(transceiverStats.screenShareVideo.senders);
19034
+ if ((_this$meetingMediaSta6 = this.meetingMediaStatus) !== null && _this$meetingMediaSta6 !== void 0 && _this$meetingMediaSta6.expected.receiveVideo) {
19035
+ var _current3 = convertToStatsMap(transceiverStats.video.receivers);
19076
19036
  if (this.previousTransceiverStats) {
19077
- var _previous3 = convertToStatsMap(this.previousTransceiverStats.screenShareVideo.senders);
19078
- var _currentPacketsSent2 = getSumFromStatsByType(_current3, 'outbound-rtp', 'packetsSent');
19079
- var _previousPacketsSent2 = getSumFromStatsByType(_previous3, 'outbound-rtp', 'packetsSent');
19080
- if (_currentPacketsSent2 === _previousPacketsSent2) {
19081
- getLogger().info("StatsAnalyzer#monitorStats --> No share packets sent, last packets sent count: ".concat(_currentPacketsSent2, "."));
19082
- }
19083
- var _currentFramesEncoded = getSumFromStatsByType(_current3, 'outbound-rtp', 'framesEncoded');
19084
- var _previousFramesEncoded = getSumFromStatsByType(_previous3, 'outbound-rtp', 'framesEncoded');
19085
- if (_currentFramesEncoded === _previousFramesEncoded) {
19086
- getLogger().info("StatsAnalyzer#monitorStats --> No share frames encoded, last frames encoded count: ".concat(_currentFramesEncoded, "."));
19087
- }
19088
- var _currentFramesSent = getSumFromStatsByType(_current3, 'outbound-rtp', 'framesSent');
19089
- var _previousFramesSent = getSumFromStatsByType(_previous3, 'outbound-rtp', 'framesSent');
19090
- if (_currentFramesSent === _previousFramesSent) {
19091
- getLogger().info("StatsAnalyzer#monitorStats --> No share frames sent, last frames sent count: ".concat(_currentFramesSent, "."));
19092
- }
19037
+ var _previous3 = convertToStatsMap(this.previousTransceiverStats.video.receivers);
19038
+ this.statsMonitor.checkInboundVideo(_previous3, _current3);
19093
19039
  }
19094
- emitNetworkQualityEvents('share', _current3);
19095
19040
  }
19096
- if ((_this$meetingMediaSta7 = this.meetingMediaStatus) !== null && _this$meetingMediaSta7 !== void 0 && _this$meetingMediaSta7.expected.receiveShare) {
19097
- var _current4 = convertToStatsMap(transceiverStats.screenShareVideo.receivers);
19041
+ if ((_this$meetingMediaSta7 = this.meetingMediaStatus) !== null && _this$meetingMediaSta7 !== void 0 && _this$meetingMediaSta7.expected.sendShare) {
19042
+ var _current4 = convertToStatsMap(transceiverStats.screenShareVideo.senders);
19098
19043
  if (this.previousTransceiverStats) {
19099
- var _currentSourceStateArray = getPropertyFromStatsByTypeInArray(_current4, 'inbound-rtp', 'sourceState');
19100
- if (_currentSourceStateArray.includes('live')) {
19101
- var _previous4 = convertToStatsMap(this.previousTransceiverStats.screenShareVideo.receivers);
19102
- var _currentPacketsReceived = getSumFromStatsByType(_current4, 'inbound-rtp', 'packetsReceived');
19103
- var _previousPacketsReceived = getSumFromStatsByType(_previous4, 'inbound-rtp', 'packetsReceived');
19104
- if (_currentPacketsReceived === _previousPacketsReceived) {
19105
- getLogger().info("StatsAnalyzer#monitorStats --> No share packets received, last packets received count: ".concat(_currentPacketsReceived, "."));
19106
- }
19107
- var _currentFramesDecoded = getSumFromStatsByType(_current4, 'inbound-rtp', 'framesDecoded');
19108
- var _previousFramesDecoded = getSumFromStatsByType(_previous4, 'inbound-rtp', 'framesDecoded');
19109
- if (_currentFramesDecoded === _previousFramesDecoded) {
19110
- getLogger().info("StatsAnalyzer#monitorStats --> No share frames decoded, last frames decoded count: ".concat(_currentFramesDecoded, "."));
19111
- }
19112
- var _currentFramesReceived = getSumFromStatsByType(_current4, 'inbound-rtp', 'framesReceived');
19113
- var _previousFramesReceived = getSumFromStatsByType(_previous4, 'inbound-rtp', 'framesReceived');
19114
- if (_currentFramesReceived === _previousFramesReceived) {
19115
- getLogger().info("StatsAnalyzer#monitorStats --> No share frames received, last frames received count: ".concat(_currentFramesReceived, "."));
19116
- }
19117
- var _currentFramesDropped = getSumFromStatsByType(_current4, 'inbound-rtp', 'framesDropped');
19118
- var _previousFramesDropped = getSumFromStatsByType(_previous4, 'inbound-rtp', 'framesDropped');
19119
- if (_currentFramesDropped - _previousFramesDropped > 10) {
19120
- getLogger().info("StatsAnalyzer#monitorStats --> Too many share frames dropped, total frames dropped count: ".concat(_currentFramesDropped, "."));
19121
- }
19122
- }
19044
+ var _previous4 = convertToStatsMap(this.previousTransceiverStats.screenShareVideo.senders);
19045
+ this.statsMonitor.checkOutboundShare(_previous4, _current4);
19046
+ }
19047
+ emitNetworkQualityEvents('share', _current4);
19048
+ }
19049
+ if ((_this$meetingMediaSta8 = this.meetingMediaStatus) !== null && _this$meetingMediaSta8 !== void 0 && _this$meetingMediaSta8.expected.receiveShare) {
19050
+ var _current5 = convertToStatsMap(transceiverStats.screenShareVideo.receivers);
19051
+ if (this.previousTransceiverStats) {
19052
+ var _previous5 = convertToStatsMap(this.previousTransceiverStats.screenShareVideo.receivers);
19053
+ this.statsMonitor.checkInboundShare(_previous5, _current5);
19123
19054
  }
19124
19055
  }
19125
19056
  this.emitStartStopEvents('audio', getSumFromStatsByType(convertToStatsMap((_this$previousTransce = (_this$previousTransce2 = this.previousTransceiverStats) === null || _this$previousTransce2 === void 0 ? void 0 : _this$previousTransce2.audio.senders) !== null && _this$previousTransce !== void 0 ? _this$previousTransce : []), 'outbound-rtp', 'packetsSent'), getSumFromStatsByType(convertToStatsMap(transceiverStats.audio.senders), 'outbound-rtp', 'packetsSent'), true);
@@ -19232,6 +19163,155 @@ class NetworkQualityMonitor extends EventEmitter$5 {
19232
19163
  }
19233
19164
  }
19234
19165
 
19166
+ var MIN_AUDIO_PACKETS_RECEIVER_THRESHOLD = 500;
19167
+ var InboundAudioThresholds = {
19168
+ DecodeResultsInZeroAudioLevel: {
19169
+ concealedRatio: 0.7,
19170
+ lossRatio: 0.2,
19171
+ discardedRatio: 0.5
19172
+ },
19173
+ AllPacketsDiscarded: {
19174
+ discardedRatio: 0.9
19175
+ }
19176
+ };
19177
+ class StatsMonitor extends EventEmitter$5 {
19178
+ hasAudioDecodeIssue(totalAudioEnergy, totalSamplesReceived, concealedRatio, lossRatio, discardedRatio) {
19179
+ var thresholds = InboundAudioThresholds.DecodeResultsInZeroAudioLevel;
19180
+ return totalAudioEnergy === 0 && totalSamplesReceived > 0 && concealedRatio < thresholds.concealedRatio && lossRatio < thresholds.lossRatio && discardedRatio < thresholds.discardedRatio;
19181
+ }
19182
+ checkInboundAudio(previous, current) {
19183
+ var previousPacketsReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'packetsReceived');
19184
+ var packetsReceived = getSumFromStatsByType(current, 'inbound-rtp', 'packetsReceived');
19185
+ var totalSamplesReceived = getSumFromStatsByType(current, 'inbound-rtp', 'totalSamplesReceived');
19186
+ var totalAudioEnergy = getSumFromStatsByType(current, 'inbound-rtp', 'totalAudioEnergy');
19187
+ var packetsDiscarded = getSumFromStatsByType(current, 'inbound-rtp', 'packetsDiscarded');
19188
+ var concealedSamples = getSumFromStatsByType(current, 'inbound-rtp', 'concealedSamples');
19189
+ var packetsLost = getSumFromStatsByType(current, 'inbound-rtp', 'packetsLost');
19190
+ var concealedRatio = totalSamplesReceived > 0 ? concealedSamples / totalSamplesReceived : 0;
19191
+ var lossRatio = packetsReceived + packetsLost > 0 ? packetsLost / (packetsReceived + packetsLost) : 0;
19192
+ var discardedRatio = packetsReceived > 0 ? packetsDiscarded / packetsReceived : 0;
19193
+ if (packetsReceived > MIN_AUDIO_PACKETS_RECEIVER_THRESHOLD && packetsReceived > previousPacketsReceived) {
19194
+ if (this.hasAudioDecodeIssue(totalAudioEnergy, totalSamplesReceived, concealedRatio, lossRatio, discardedRatio)) {
19195
+ getLogger().info("StatsMonitor#checkInboundAudio --> Incoming audio from all streams is not being decoded correctly, totalAudioEnergy: ".concat(totalAudioEnergy, ", totalSamplesReceived: ").concat(totalSamplesReceived, ", packetsReceived: ").concat(packetsReceived, ", concealedRatio: ").concat(concealedRatio, ", lossRatio: ").concat(lossRatio, ", discardedRatio: ").concat(discardedRatio, "."));
19196
+ this.emit(exports.StatsMonitorEventNames.INBOUND_AUDIO_ISSUE, {
19197
+ issueSubType: exports.InboundAudioIssueSubTypes.DECODE_RESULTS_IN_ZERO_AUDIO_LEVEL
19198
+ });
19199
+ } else if (discardedRatio >= InboundAudioThresholds.AllPacketsDiscarded.discardedRatio) {
19200
+ getLogger().info("StatsMonitor#checkInboundAudio --> Incoming audio packets from all streams are being discarded, packetsReceived: ".concat(packetsReceived, ", packetsDiscarded: ").concat(packetsDiscarded, ", discardedRatio: ").concat(discardedRatio, "."));
19201
+ this.emit(exports.StatsMonitorEventNames.INBOUND_AUDIO_ISSUE, {
19202
+ issueSubType: exports.InboundAudioIssueSubTypes.ALL_PACKETS_DISCARDED
19203
+ });
19204
+ }
19205
+ }
19206
+ }
19207
+ checkOutboundAudio(previous, current) {
19208
+ var currentPacketsSent = getSumFromStatsByType(current, 'outbound-rtp', 'packetsSent');
19209
+ var previousPacketsSent = getSumFromStatsByType(previous, 'outbound-rtp', 'packetsSent');
19210
+ if (currentPacketsSent === previousPacketsSent) {
19211
+ getLogger().info("StatsMonitor#checkOutboundAudio --> No audio packets sent, last packets sent count: ".concat(currentPacketsSent, "."));
19212
+ }
19213
+ var totalAudioEnergyExists = getPropertyFromStatsByType(current, 'media-source', 'totalAudioEnergy') !== undefined;
19214
+ if (totalAudioEnergyExists) {
19215
+ var currentTotalAudioEnergy = getSumFromStatsByType(current, 'media-source', 'totalAudioEnergy');
19216
+ var previousTotalAudioEnergy = getSumFromStatsByType(previous, 'media-source', 'totalAudioEnergy');
19217
+ if (currentTotalAudioEnergy === previousTotalAudioEnergy) {
19218
+ getLogger().info("StatsMonitor#checkOutboundAudio --> No audio energy from local audio source, last total audio energy: ".concat(currentTotalAudioEnergy, "."));
19219
+ }
19220
+ }
19221
+ var audioLevelExists = getPropertyFromStatsByType(current, 'media-source', 'audioLevel') !== undefined;
19222
+ if (audioLevelExists) {
19223
+ var currentAudioLevel = getSumFromStatsByType(current, 'media-source', 'audioLevel');
19224
+ if (currentAudioLevel === 0) {
19225
+ getLogger().info("StatsMonitor#checkOutboundAudio --> Audio level in local audio source is 0.");
19226
+ }
19227
+ }
19228
+ }
19229
+ checkInboundVideo(previous, current) {
19230
+ var currentSourceStateArray = getPropertyFromStatsByTypeInArray(current, 'inbound-rtp', 'sourceState');
19231
+ if (currentSourceStateArray.includes('live')) {
19232
+ var currentPacketsReceived = getSumFromStatsByType(current, 'inbound-rtp', 'packetsReceived');
19233
+ var previousPacketsReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'packetsReceived');
19234
+ if (currentPacketsReceived === previousPacketsReceived) {
19235
+ getLogger().info("StatsMonitor#checkInboundVideo --> No video packets received, last packets received count: ".concat(currentPacketsReceived, "."));
19236
+ }
19237
+ var currentFramesDecoded = getSumFromStatsByType(current, 'inbound-rtp', 'framesDecoded');
19238
+ var previousFramesDecoded = getSumFromStatsByType(previous, 'inbound-rtp', 'framesDecoded');
19239
+ if (currentFramesDecoded === previousFramesDecoded) {
19240
+ getLogger().info("StatsMonitor#checkInboundVideo --> No video frames decoded, last frames decoded count: ".concat(currentFramesDecoded, "."));
19241
+ }
19242
+ var currentFramesReceived = getSumFromStatsByType(current, 'inbound-rtp', 'framesReceived');
19243
+ var previousFramesReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'framesReceived');
19244
+ if (currentFramesReceived === previousFramesReceived) {
19245
+ getLogger().info("StatsMonitor#checkInboundVideo --> No video frames received, last frames received count: ".concat(currentFramesReceived, "."));
19246
+ }
19247
+ var currentFramesDropped = getSumFromStatsByType(current, 'inbound-rtp', 'framesDropped');
19248
+ var previousFramesDropped = getSumFromStatsByType(previous, 'inbound-rtp', 'framesDropped');
19249
+ if (currentFramesDropped - previousFramesDropped > 10) {
19250
+ getLogger().info("StatsMonitor#checkInboundVideo --> Too many inbound video frames dropped, total frames dropped count: ".concat(currentFramesDropped, "."));
19251
+ }
19252
+ }
19253
+ }
19254
+ checkOutboundVideo(previous, current) {
19255
+ var currentPacketsSent = getSumFromStatsByType(current, 'outbound-rtp', 'packetsSent');
19256
+ var previousPacketsSent = getSumFromStatsByType(previous, 'outbound-rtp', 'packetsSent');
19257
+ if (currentPacketsSent === previousPacketsSent) {
19258
+ getLogger().info("StatsMonitor#checkOutboundVideo --> No video packets sent, last packets sent count: ".concat(currentPacketsSent, "."));
19259
+ }
19260
+ var currentFramesEncoded = getSumFromStatsByType(current, 'outbound-rtp', 'framesEncoded');
19261
+ var previousFramesEncoded = getSumFromStatsByType(previous, 'outbound-rtp', 'framesEncoded');
19262
+ if (currentFramesEncoded === previousFramesEncoded) {
19263
+ getLogger().info("StatsMonitor#checkOutboundVideo --> No video frames encoded, last frames encoded count: ".concat(currentFramesEncoded, "."));
19264
+ }
19265
+ var currentFramesSent = getSumFromStatsByType(current, 'outbound-rtp', 'framesSent');
19266
+ var previousFramesSent = getSumFromStatsByType(previous, 'outbound-rtp', 'framesSent');
19267
+ if (currentFramesSent === previousFramesSent) {
19268
+ getLogger().info("StatsMonitor#checkOutboundVideo --> No video frames sent, last frames sent count: ".concat(currentFramesSent, "."));
19269
+ }
19270
+ }
19271
+ checkInboundShare(previous, current) {
19272
+ var currentSourceStateArray = getPropertyFromStatsByTypeInArray(current, 'inbound-rtp', 'sourceState');
19273
+ if (currentSourceStateArray.includes('live')) {
19274
+ var currentPacketsReceived = getSumFromStatsByType(current, 'inbound-rtp', 'packetsReceived');
19275
+ var previousPacketsReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'packetsReceived');
19276
+ if (currentPacketsReceived === previousPacketsReceived) {
19277
+ getLogger().info("StatsMonitor#checkInboundShare --> No share packets received, last packets received count: ".concat(currentPacketsReceived, "."));
19278
+ }
19279
+ var currentFramesDecoded = getSumFromStatsByType(current, 'inbound-rtp', 'framesDecoded');
19280
+ var previousFramesDecoded = getSumFromStatsByType(previous, 'inbound-rtp', 'framesDecoded');
19281
+ if (currentFramesDecoded === previousFramesDecoded) {
19282
+ getLogger().info("StatsMonitor#checkInboundShare --> No share frames decoded, last frames decoded count: ".concat(currentFramesDecoded, "."));
19283
+ }
19284
+ var currentFramesReceived = getSumFromStatsByType(current, 'inbound-rtp', 'framesReceived');
19285
+ var previousFramesReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'framesReceived');
19286
+ if (currentFramesReceived === previousFramesReceived) {
19287
+ getLogger().info("StatsMonitor#checkInboundShare --> No share frames received, last frames received count: ".concat(currentFramesReceived, "."));
19288
+ }
19289
+ var currentFramesDropped = getSumFromStatsByType(current, 'inbound-rtp', 'framesDropped');
19290
+ var previousFramesDropped = getSumFromStatsByType(previous, 'inbound-rtp', 'framesDropped');
19291
+ if (currentFramesDropped - previousFramesDropped > 10) {
19292
+ getLogger().info("StatsMonitor#checkInboundShare --> Too many inbound share frames dropped, total frames dropped count: ".concat(currentFramesDropped, "."));
19293
+ }
19294
+ }
19295
+ }
19296
+ checkOutboundShare(previous, current) {
19297
+ var currentPacketsSent = getSumFromStatsByType(current, 'outbound-rtp', 'packetsSent');
19298
+ var previousPacketsSent = getSumFromStatsByType(previous, 'outbound-rtp', 'packetsSent');
19299
+ if (currentPacketsSent === previousPacketsSent) {
19300
+ getLogger().info("StatsMonitor#checkOutboundShare --> No share packets sent, last packets sent count: ".concat(currentPacketsSent, "."));
19301
+ }
19302
+ var currentFramesEncoded = getSumFromStatsByType(current, 'outbound-rtp', 'framesEncoded');
19303
+ var previousFramesEncoded = getSumFromStatsByType(previous, 'outbound-rtp', 'framesEncoded');
19304
+ if (currentFramesEncoded === previousFramesEncoded) {
19305
+ getLogger().info("StatsMonitor#checkOutboundShare --> No share frames encoded, last frames encoded count: ".concat(currentFramesEncoded, "."));
19306
+ }
19307
+ var currentFramesSent = getSumFromStatsByType(current, 'outbound-rtp', 'framesSent');
19308
+ var previousFramesSent = getSumFromStatsByType(previous, 'outbound-rtp', 'framesSent');
19309
+ if (currentFramesSent === previousFramesSent) {
19310
+ getLogger().info("StatsMonitor#checkOutboundShare --> No share frames sent, last frames sent count: ".concat(currentFramesSent, "."));
19311
+ }
19312
+ }
19313
+ }
19314
+
19235
19315
  var Media = {
19236
19316
  createAudioTrack: createAudioTrack,
19237
19317
  createVideoTrack: createVideoTrack,
@@ -19268,6 +19348,7 @@ exports.RemoteStream = RemoteStream;
19268
19348
  exports.RoapMediaConnection = RoapMediaConnection;
19269
19349
  exports.SendSlot = SendSlot;
19270
19350
  exports.StatsAnalyzer = StatsAnalyzer;
19351
+ exports.StatsMonitor = StatsMonitor;
19271
19352
  exports.StreamRequest = StreamRequest;
19272
19353
  exports.WcmeError = WcmeError;
19273
19354
  exports.configureWcmeLogger = configureWcmeLogger;
package/dist/esm/index.js CHANGED
@@ -17918,7 +17918,8 @@ var initialMqeIntervalStreamTransmitVideo = {
17918
17918
  requestedKeyFrames: 0,
17919
17919
  localConfigurationChanges: 0,
17920
17920
  remoteConfigurationChanges: 0,
17921
- h264CodecProfile: 'BP'
17921
+ h264CodecProfile: 'BP',
17922
+ isAvatar: false
17922
17923
  };
17923
17924
 
17924
17925
  var max = array => {
@@ -18515,7 +18516,7 @@ class MqeBuilder {
18515
18516
  return result;
18516
18517
  }
18517
18518
  buildMqeIntervalStreamTransmitVideo(id) {
18518
- var _getPropertyFromStats37, _getPropertyFromStats38, _getPropertyFromStats39, _getPropertyFromStats40, _getPropertyFromStats41, _getPropertyFromStats42, _getPropertyFromStats43, _getPropertyFromStats44, _getPropertyFromStats45, _getH264ProfileFromSt2;
18519
+ var _getPropertyFromStats37, _getPropertyFromStats38, _getPropertyFromStats39, _getPropertyFromStats40, _getPropertyFromStats41, _getPropertyFromStats42, _getPropertyFromStats43, _getPropertyFromStats44, _getPropertyFromStats45, _getH264ProfileFromSt2, _getPropertyFromStats46;
18519
18520
  var result = structuredClone(initialMqeIntervalStreamTransmitVideo);
18520
18521
  result.common = this.buildMqeIntervalStreamTransmitCommon(id);
18521
18522
  var current = this.currentIntervalStats;
@@ -18538,6 +18539,8 @@ class MqeBuilder {
18538
18539
  result.localConfigurationChanges = 0;
18539
18540
  var currentH264CodecProfile = (_getH264ProfileFromSt2 = getH264ProfileFromStatsByStreamStatsId(current, id)) !== null && _getH264ProfileFromSt2 !== void 0 ? _getH264ProfileFromSt2 : 'BP';
18540
18541
  result.h264CodecProfile = currentH264CodecProfile;
18542
+ var currentSourceState = (_getPropertyFromStats46 = getPropertyFromStatsById(current, id, 'sourceState')) !== null && _getPropertyFromStats46 !== void 0 ? _getPropertyFromStats46 : '';
18543
+ result.isAvatar = currentSourceState === 'avatar';
18541
18544
  var currentLastUsedEffect = getPropertyFromStatsById(current, id, 'lastUsedEffect');
18542
18545
  if ((currentLastUsedEffect === null || currentLastUsedEffect === void 0 ? void 0 : currentLastUsedEffect.kind) === 'virtual-background-effect' && 'virtualBackgroundMode' in currentLastUsedEffect) {
18543
18546
  if (currentLastUsedEffect.virtualBackgroundMode === 'BLUR') {
@@ -18555,34 +18558,34 @@ class MqeBuilder {
18555
18558
  return result;
18556
18559
  }
18557
18560
  buildMqeIntervalStreamTransmitCommon(id) {
18558
- var _getPropertyFromStats46, _getPropertyFromStats47, _getPropertyFromStats48, _getPropertyFromStats49, _getPropertyFromStats52, _getPropertyFromStats53, _getPropertyFromStats54, _getPropertyFromStats55, _getCodecFromStatsByS2;
18561
+ var _getPropertyFromStats47, _getPropertyFromStats48, _getPropertyFromStats49, _getPropertyFromStats50, _getPropertyFromStats53, _getPropertyFromStats54, _getPropertyFromStats55, _getPropertyFromStats56, _getCodecFromStatsByS2;
18559
18562
  var result = structuredClone(initialMqeIntervalStreamTransmitCommon);
18560
18563
  var current = this.currentIntervalStats;
18561
18564
  var previous = this.previousIntervalStats;
18562
- var currentPacketsSent = (_getPropertyFromStats46 = getPropertyFromStatsById(current, id, 'packetsSent')) !== null && _getPropertyFromStats46 !== void 0 ? _getPropertyFromStats46 : 0;
18563
- var previousPacketsSent = (_getPropertyFromStats47 = getPropertyFromStatsById(previous, id, 'packetsSent')) !== null && _getPropertyFromStats47 !== void 0 ? _getPropertyFromStats47 : 0;
18564
- var currentRetransmittedPacketsSent = (_getPropertyFromStats48 = getPropertyFromStatsById(current, id, 'retransmittedPacketsSent')) !== null && _getPropertyFromStats48 !== void 0 ? _getPropertyFromStats48 : 0;
18565
- var previousRetransmittedPacketsSent = (_getPropertyFromStats49 = getPropertyFromStatsById(previous, id, 'retransmittedPacketsSent')) !== null && _getPropertyFromStats49 !== void 0 ? _getPropertyFromStats49 : 0;
18565
+ var currentPacketsSent = (_getPropertyFromStats47 = getPropertyFromStatsById(current, id, 'packetsSent')) !== null && _getPropertyFromStats47 !== void 0 ? _getPropertyFromStats47 : 0;
18566
+ var previousPacketsSent = (_getPropertyFromStats48 = getPropertyFromStatsById(previous, id, 'packetsSent')) !== null && _getPropertyFromStats48 !== void 0 ? _getPropertyFromStats48 : 0;
18567
+ var currentRetransmittedPacketsSent = (_getPropertyFromStats49 = getPropertyFromStatsById(current, id, 'retransmittedPacketsSent')) !== null && _getPropertyFromStats49 !== void 0 ? _getPropertyFromStats49 : 0;
18568
+ var previousRetransmittedPacketsSent = (_getPropertyFromStats50 = getPropertyFromStatsById(previous, id, 'retransmittedPacketsSent')) !== null && _getPropertyFromStats50 !== void 0 ? _getPropertyFromStats50 : 0;
18566
18569
  result.rtpPackets = currentPacketsSent - previousPacketsSent - (currentRetransmittedPacketsSent - previousRetransmittedPacketsSent);
18567
18570
  if (this.mediaKind === 'video') {
18568
- var _getPropertyFromStats50, _getPropertyFromStats51;
18569
- var currentMaxTransmittedFrameRateForMaxRequestedFrameSize = (_getPropertyFromStats50 = getPropertyFromStatsById(current, id, 'maxTransmittedFrameRateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats50 !== void 0 ? _getPropertyFromStats50 : 0;
18571
+ var _getPropertyFromStats51, _getPropertyFromStats52;
18572
+ var currentMaxTransmittedFrameRateForMaxRequestedFrameSize = (_getPropertyFromStats51 = getPropertyFromStatsById(current, id, 'maxTransmittedFrameRateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats51 !== void 0 ? _getPropertyFromStats51 : 0;
18570
18573
  result.transmittedFrameRate = currentMaxTransmittedFrameRateForMaxRequestedFrameSize;
18571
- var currentMaxRequestedFrameRateForMaxRequestedFrameSize = (_getPropertyFromStats51 = getPropertyFromStatsById(current, id, 'maxRequestedFrameRateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats51 !== void 0 ? _getPropertyFromStats51 : 0;
18574
+ var currentMaxRequestedFrameRateForMaxRequestedFrameSize = (_getPropertyFromStats52 = getPropertyFromStatsById(current, id, 'maxRequestedFrameRateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats52 !== void 0 ? _getPropertyFromStats52 : 0;
18572
18575
  result.requestedFrames = currentMaxRequestedFrameRateForMaxRequestedFrameSize;
18573
18576
  }
18574
- var currentBytesSent = (_getPropertyFromStats52 = getPropertyFromStatsById(current, id, 'bytesSent')) !== null && _getPropertyFromStats52 !== void 0 ? _getPropertyFromStats52 : 0;
18575
- var previousBytesSent = (_getPropertyFromStats53 = getPropertyFromStatsById(previous, id, 'bytesSent')) !== null && _getPropertyFromStats53 !== void 0 ? _getPropertyFromStats53 : 0;
18576
- var currentRetransmittedBytesSent = (_getPropertyFromStats54 = getPropertyFromStatsById(current, id, 'retransmittedBytesSent')) !== null && _getPropertyFromStats54 !== void 0 ? _getPropertyFromStats54 : 0;
18577
- var previousRetransmittedBytesSent = (_getPropertyFromStats55 = getPropertyFromStatsById(previous, id, 'retransmittedBytesSent')) !== null && _getPropertyFromStats55 !== void 0 ? _getPropertyFromStats55 : 0;
18577
+ var currentBytesSent = (_getPropertyFromStats53 = getPropertyFromStatsById(current, id, 'bytesSent')) !== null && _getPropertyFromStats53 !== void 0 ? _getPropertyFromStats53 : 0;
18578
+ var previousBytesSent = (_getPropertyFromStats54 = getPropertyFromStatsById(previous, id, 'bytesSent')) !== null && _getPropertyFromStats54 !== void 0 ? _getPropertyFromStats54 : 0;
18579
+ var currentRetransmittedBytesSent = (_getPropertyFromStats55 = getPropertyFromStatsById(current, id, 'retransmittedBytesSent')) !== null && _getPropertyFromStats55 !== void 0 ? _getPropertyFromStats55 : 0;
18580
+ var previousRetransmittedBytesSent = (_getPropertyFromStats56 = getPropertyFromStatsById(previous, id, 'retransmittedBytesSent')) !== null && _getPropertyFromStats56 !== void 0 ? _getPropertyFromStats56 : 0;
18578
18581
  result.transmittedBitrate = bytesToBitrate(currentBytesSent - previousBytesSent - (currentRetransmittedBytesSent - previousRetransmittedBytesSent), MQE_INTERVAL);
18579
18582
  if (this.mediaKind === 'audio') {
18580
- var _getPropertyFromStats56;
18581
- var currentRequestedBitrateArray = (_getPropertyFromStats56 = getPropertyFromStatsById(current, id, 'requestedBitrateArray')) !== null && _getPropertyFromStats56 !== void 0 ? _getPropertyFromStats56 : [];
18583
+ var _getPropertyFromStats57;
18584
+ var currentRequestedBitrateArray = (_getPropertyFromStats57 = getPropertyFromStatsById(current, id, 'requestedBitrateArray')) !== null && _getPropertyFromStats57 !== void 0 ? _getPropertyFromStats57 : [];
18582
18585
  result.requestedBitrate = max(currentRequestedBitrateArray);
18583
18586
  } else {
18584
- var _getPropertyFromStats57;
18585
- var currentMaxRequestedBitrateForMaxRequestedFrameSize = (_getPropertyFromStats57 = getPropertyFromStatsById(current, id, 'maxRequestedBitrateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats57 !== void 0 ? _getPropertyFromStats57 : 0;
18587
+ var _getPropertyFromStats58;
18588
+ var currentMaxRequestedBitrateForMaxRequestedFrameSize = (_getPropertyFromStats58 = getPropertyFromStatsById(current, id, 'maxRequestedBitrateForMaxRequestedFrameSize')) !== null && _getPropertyFromStats58 !== void 0 ? _getPropertyFromStats58 : 0;
18586
18589
  result.requestedBitrate = currentMaxRequestedBitrateForMaxRequestedFrameSize;
18587
18590
  }
18588
18591
  var currentCodec = (_getCodecFromStatsByS2 = getCodecFromStatsByStreamStatsId(current, id)) !== null && _getCodecFromStatsByS2 !== void 0 ? _getCodecFromStatsByS2 : this.mediaKind === 'audio' ? 'opus' : 'H264';
@@ -18699,6 +18702,15 @@ var NetworkQualityEventNames;
18699
18702
  (function (NetworkQualityEventNames) {
18700
18703
  NetworkQualityEventNames["NETWORK_QUALITY"] = "NETWORK_QUALITY";
18701
18704
  })(NetworkQualityEventNames || (NetworkQualityEventNames = {}));
18705
+ var StatsMonitorEventNames;
18706
+ (function (StatsMonitorEventNames) {
18707
+ StatsMonitorEventNames["INBOUND_AUDIO_ISSUE"] = "INBOUND_AUDIO_ISSUE";
18708
+ })(StatsMonitorEventNames || (StatsMonitorEventNames = {}));
18709
+ var InboundAudioIssueSubTypes;
18710
+ (function (InboundAudioIssueSubTypes) {
18711
+ InboundAudioIssueSubTypes["DECODE_RESULTS_IN_ZERO_AUDIO_LEVEL"] = "DECODE_RESULTS_IN_ZERO_AUDIO_LEVEL";
18712
+ InboundAudioIssueSubTypes["ALL_PACKETS_DISCARDED"] = "ALL_PACKETS_DISCARDED";
18713
+ })(InboundAudioIssueSubTypes || (InboundAudioIssueSubTypes = {}));
18702
18714
 
18703
18715
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
18704
18716
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -18707,6 +18719,7 @@ class StatsAnalyzer extends EventEmitter$5 {
18707
18719
  var {
18708
18720
  config,
18709
18721
  networkQualityMonitor,
18722
+ statsMonitor,
18710
18723
  isMultistream = false
18711
18724
  } = _ref;
18712
18725
  super();
@@ -18718,6 +18731,7 @@ class StatsAnalyzer extends EventEmitter$5 {
18718
18731
  _defineProperty(this, "mqeInterval", void 0);
18719
18732
  _defineProperty(this, "mqeSentCount", 0);
18720
18733
  _defineProperty(this, "networkQualityMonitor", void 0);
18734
+ _defineProperty(this, "statsMonitor", void 0);
18721
18735
  _defineProperty(this, "mediaConnection", null);
18722
18736
  _defineProperty(this, "statsStarted", false);
18723
18737
  _defineProperty(this, "mqeIntervalSessionReceiveAudioMainBuilder", void 0);
@@ -18759,6 +18773,7 @@ class StatsAnalyzer extends EventEmitter$5 {
18759
18773
  });
18760
18774
  this.config = config;
18761
18775
  this.networkQualityMonitor = networkQualityMonitor;
18776
+ this.statsMonitor = statsMonitor;
18762
18777
  this.mqeIntervalSessionReceiveAudioMainBuilder = new MqeIntervalSessionReceiveAudioBuilder({
18763
18778
  isMain: true,
18764
18779
  multistreamEnabled: isMultistream
@@ -18977,7 +18992,7 @@ class StatsAnalyzer extends EventEmitter$5 {
18977
18992
  })();
18978
18993
  }
18979
18994
  monitorStats(transceiverStats) {
18980
- var _this$meetingMediaSta3, _this$meetingMediaSta4, _this$meetingMediaSta5, _this$meetingMediaSta6, _this$meetingMediaSta7, _this$previousTransce, _this$previousTransce2, _this$previousTransce3, _this$previousTransce4, _this$previousTransce5, _this$previousTransce6, _this$previousTransce7, _this$previousTransce8, _this$previousTransce9, _this$previousTransce10, _this$previousTransce11, _this$previousTransce12;
18995
+ var _this$meetingMediaSta3, _this$meetingMediaSta4, _this$meetingMediaSta5, _this$meetingMediaSta6, _this$meetingMediaSta7, _this$meetingMediaSta8, _this$previousTransce, _this$previousTransce2, _this$previousTransce3, _this$previousTransce4, _this$previousTransce5, _this$previousTransce6, _this$previousTransce7, _this$previousTransce8, _this$previousTransce9, _this$previousTransce10, _this$previousTransce11, _this$previousTransce12;
18981
18996
  var emitNetworkQualityEvents = (mediaType, intervalStats) => {
18982
18997
  var roundTripTimeArray = getPropertyFromStatsByTypeInArray(intervalStats, 'remote-inbound-rtp', 'roundTripTime');
18983
18998
  var jitterArray = getPropertyFromStatsByTypeInArray(intervalStats, 'remote-inbound-rtp', 'jitter');
@@ -18993,129 +19008,45 @@ class StatsAnalyzer extends EventEmitter$5 {
18993
19008
  var current = convertToStatsMap(transceiverStats.audio.senders);
18994
19009
  if (this.previousTransceiverStats) {
18995
19010
  var previous = convertToStatsMap(this.previousTransceiverStats.audio.senders);
18996
- var currentPacketsSent = getSumFromStatsByType(current, 'outbound-rtp', 'packetsSent');
18997
- var previousPacketsSent = getSumFromStatsByType(previous, 'outbound-rtp', 'packetsSent');
18998
- if (currentPacketsSent === previousPacketsSent) {
18999
- getLogger().info("StatsAnalyzer#monitorStats --> No audio packets sent, last packets sent count: ".concat(currentPacketsSent, "."));
19000
- }
19001
- var totalAudioEnergyExists = getPropertyFromStatsByType(current, 'media-source', 'totalAudioEnergy') !== undefined;
19002
- if (totalAudioEnergyExists) {
19003
- var currentTotalAudioEnergy = getSumFromStatsByType(current, 'media-source', 'totalAudioEnergy');
19004
- var previousTotalAudioEnergy = getSumFromStatsByType(previous, 'media-source', 'totalAudioEnergy');
19005
- if (currentTotalAudioEnergy === previousTotalAudioEnergy) {
19006
- getLogger().info("StatsAnalyzer#monitorStats --> No audio energy, last total audio energy: ".concat(currentTotalAudioEnergy, "."));
19007
- }
19008
- }
19009
- var audioLevelExists = getPropertyFromStatsByType(current, 'media-source', 'audioLevel') !== undefined;
19010
- if (audioLevelExists) {
19011
- var currentAudioLevel = getSumFromStatsByType(current, 'media-source', 'audioLevel');
19012
- if (currentAudioLevel === 0) {
19013
- getLogger().info("StatsAnalyzer#monitorStats --> Audio level is 0.");
19014
- }
19015
- }
19011
+ this.statsMonitor.checkOutboundAudio(previous, current);
19016
19012
  }
19017
19013
  emitNetworkQualityEvents('audio', current);
19018
19014
  }
19019
- if ((_this$meetingMediaSta4 = this.meetingMediaStatus) !== null && _this$meetingMediaSta4 !== void 0 && _this$meetingMediaSta4.expected.sendVideo) {
19020
- var _current = convertToStatsMap(transceiverStats.video.senders);
19015
+ if ((_this$meetingMediaSta4 = this.meetingMediaStatus) !== null && _this$meetingMediaSta4 !== void 0 && _this$meetingMediaSta4.expected.receiveAudio) {
19016
+ var _current = convertToStatsMap(transceiverStats.audio.receivers);
19021
19017
  if (this.previousTransceiverStats) {
19022
- var _previous = convertToStatsMap(this.previousTransceiverStats.video.senders);
19023
- var _currentPacketsSent = getSumFromStatsByType(_current, 'outbound-rtp', 'packetsSent');
19024
- var _previousPacketsSent = getSumFromStatsByType(_previous, 'outbound-rtp', 'packetsSent');
19025
- if (_currentPacketsSent === _previousPacketsSent) {
19026
- getLogger().info("StatsAnalyzer#monitorStats --> No video packets sent, last packets sent count: ".concat(_currentPacketsSent, "."));
19027
- }
19028
- var currentFramesEncoded = getSumFromStatsByType(_current, 'outbound-rtp', 'framesEncoded');
19029
- var previousFramesEncoded = getSumFromStatsByType(_previous, 'outbound-rtp', 'framesEncoded');
19030
- if (currentFramesEncoded === previousFramesEncoded) {
19031
- getLogger().info("StatsAnalyzer#monitorStats --> No video frames encoded, last frames encoded count: ".concat(currentFramesEncoded, "."));
19032
- }
19033
- var currentFramesSent = getSumFromStatsByType(_current, 'outbound-rtp', 'framesSent');
19034
- var previousFramesSent = getSumFromStatsByType(_previous, 'outbound-rtp', 'framesSent');
19035
- if (currentFramesSent === previousFramesSent) {
19036
- getLogger().info("StatsAnalyzer#monitorStats --> No video frames sent, last frames sent count: ".concat(currentFramesSent, "."));
19037
- }
19018
+ var _previous = convertToStatsMap(this.previousTransceiverStats.audio.receivers);
19019
+ this.statsMonitor.checkInboundAudio(_previous, _current);
19038
19020
  }
19039
- emitNetworkQualityEvents('video', _current);
19040
19021
  }
19041
- if ((_this$meetingMediaSta5 = this.meetingMediaStatus) !== null && _this$meetingMediaSta5 !== void 0 && _this$meetingMediaSta5.expected.receiveVideo) {
19042
- var _current2 = convertToStatsMap(transceiverStats.video.receivers);
19022
+ if ((_this$meetingMediaSta5 = this.meetingMediaStatus) !== null && _this$meetingMediaSta5 !== void 0 && _this$meetingMediaSta5.expected.sendVideo) {
19023
+ var _current2 = convertToStatsMap(transceiverStats.video.senders);
19043
19024
  if (this.previousTransceiverStats) {
19044
- var currentSourceStateArray = getPropertyFromStatsByTypeInArray(_current2, 'inbound-rtp', 'sourceState');
19045
- if (currentSourceStateArray.includes('live')) {
19046
- var _previous2 = convertToStatsMap(this.previousTransceiverStats.video.receivers);
19047
- var currentPacketsReceived = getSumFromStatsByType(_current2, 'inbound-rtp', 'packetsReceived');
19048
- var previousPacketsReceived = getSumFromStatsByType(_previous2, 'inbound-rtp', 'packetsReceived');
19049
- if (currentPacketsReceived === previousPacketsReceived) {
19050
- getLogger().info("StatsAnalyzer#monitorStats --> No video packets received, last packets received count: ".concat(currentPacketsReceived, "."));
19051
- }
19052
- var currentFramesDecoded = getSumFromStatsByType(_current2, 'inbound-rtp', 'framesDecoded');
19053
- var previousFramesDecoded = getSumFromStatsByType(_previous2, 'inbound-rtp', 'framesDecoded');
19054
- if (currentFramesDecoded === previousFramesDecoded) {
19055
- getLogger().info("StatsAnalyzer#monitorStats --> No video frames decoded, last frames decoded count: ".concat(currentFramesDecoded, "."));
19056
- }
19057
- var currentFramesReceived = getSumFromStatsByType(_current2, 'inbound-rtp', 'framesReceived');
19058
- var previousFramesReceived = getSumFromStatsByType(_previous2, 'inbound-rtp', 'framesReceived');
19059
- if (currentFramesReceived === previousFramesReceived) {
19060
- getLogger().info("StatsAnalyzer#monitorStats --> No video frames received, last frames received count: ".concat(currentFramesReceived, "."));
19061
- }
19062
- var currentFramesDropped = getSumFromStatsByType(_current2, 'inbound-rtp', 'framesDropped');
19063
- var previousFramesDropped = getSumFromStatsByType(_previous2, 'inbound-rtp', 'framesDropped');
19064
- if (currentFramesDropped - previousFramesDropped > 10) {
19065
- getLogger().info("StatsAnalyzer#monitorStats --> Too many video frames dropped, total frames dropped count: ".concat(currentFramesDropped, "."));
19066
- }
19067
- }
19025
+ var _previous2 = convertToStatsMap(this.previousTransceiverStats.video.senders);
19026
+ this.statsMonitor.checkOutboundVideo(_previous2, _current2);
19068
19027
  }
19028
+ emitNetworkQualityEvents('video', _current2);
19069
19029
  }
19070
- if ((_this$meetingMediaSta6 = this.meetingMediaStatus) !== null && _this$meetingMediaSta6 !== void 0 && _this$meetingMediaSta6.expected.sendShare) {
19071
- var _current3 = convertToStatsMap(transceiverStats.screenShareVideo.senders);
19030
+ if ((_this$meetingMediaSta6 = this.meetingMediaStatus) !== null && _this$meetingMediaSta6 !== void 0 && _this$meetingMediaSta6.expected.receiveVideo) {
19031
+ var _current3 = convertToStatsMap(transceiverStats.video.receivers);
19072
19032
  if (this.previousTransceiverStats) {
19073
- var _previous3 = convertToStatsMap(this.previousTransceiverStats.screenShareVideo.senders);
19074
- var _currentPacketsSent2 = getSumFromStatsByType(_current3, 'outbound-rtp', 'packetsSent');
19075
- var _previousPacketsSent2 = getSumFromStatsByType(_previous3, 'outbound-rtp', 'packetsSent');
19076
- if (_currentPacketsSent2 === _previousPacketsSent2) {
19077
- getLogger().info("StatsAnalyzer#monitorStats --> No share packets sent, last packets sent count: ".concat(_currentPacketsSent2, "."));
19078
- }
19079
- var _currentFramesEncoded = getSumFromStatsByType(_current3, 'outbound-rtp', 'framesEncoded');
19080
- var _previousFramesEncoded = getSumFromStatsByType(_previous3, 'outbound-rtp', 'framesEncoded');
19081
- if (_currentFramesEncoded === _previousFramesEncoded) {
19082
- getLogger().info("StatsAnalyzer#monitorStats --> No share frames encoded, last frames encoded count: ".concat(_currentFramesEncoded, "."));
19083
- }
19084
- var _currentFramesSent = getSumFromStatsByType(_current3, 'outbound-rtp', 'framesSent');
19085
- var _previousFramesSent = getSumFromStatsByType(_previous3, 'outbound-rtp', 'framesSent');
19086
- if (_currentFramesSent === _previousFramesSent) {
19087
- getLogger().info("StatsAnalyzer#monitorStats --> No share frames sent, last frames sent count: ".concat(_currentFramesSent, "."));
19088
- }
19033
+ var _previous3 = convertToStatsMap(this.previousTransceiverStats.video.receivers);
19034
+ this.statsMonitor.checkInboundVideo(_previous3, _current3);
19089
19035
  }
19090
- emitNetworkQualityEvents('share', _current3);
19091
19036
  }
19092
- if ((_this$meetingMediaSta7 = this.meetingMediaStatus) !== null && _this$meetingMediaSta7 !== void 0 && _this$meetingMediaSta7.expected.receiveShare) {
19093
- var _current4 = convertToStatsMap(transceiverStats.screenShareVideo.receivers);
19037
+ if ((_this$meetingMediaSta7 = this.meetingMediaStatus) !== null && _this$meetingMediaSta7 !== void 0 && _this$meetingMediaSta7.expected.sendShare) {
19038
+ var _current4 = convertToStatsMap(transceiverStats.screenShareVideo.senders);
19094
19039
  if (this.previousTransceiverStats) {
19095
- var _currentSourceStateArray = getPropertyFromStatsByTypeInArray(_current4, 'inbound-rtp', 'sourceState');
19096
- if (_currentSourceStateArray.includes('live')) {
19097
- var _previous4 = convertToStatsMap(this.previousTransceiverStats.screenShareVideo.receivers);
19098
- var _currentPacketsReceived = getSumFromStatsByType(_current4, 'inbound-rtp', 'packetsReceived');
19099
- var _previousPacketsReceived = getSumFromStatsByType(_previous4, 'inbound-rtp', 'packetsReceived');
19100
- if (_currentPacketsReceived === _previousPacketsReceived) {
19101
- getLogger().info("StatsAnalyzer#monitorStats --> No share packets received, last packets received count: ".concat(_currentPacketsReceived, "."));
19102
- }
19103
- var _currentFramesDecoded = getSumFromStatsByType(_current4, 'inbound-rtp', 'framesDecoded');
19104
- var _previousFramesDecoded = getSumFromStatsByType(_previous4, 'inbound-rtp', 'framesDecoded');
19105
- if (_currentFramesDecoded === _previousFramesDecoded) {
19106
- getLogger().info("StatsAnalyzer#monitorStats --> No share frames decoded, last frames decoded count: ".concat(_currentFramesDecoded, "."));
19107
- }
19108
- var _currentFramesReceived = getSumFromStatsByType(_current4, 'inbound-rtp', 'framesReceived');
19109
- var _previousFramesReceived = getSumFromStatsByType(_previous4, 'inbound-rtp', 'framesReceived');
19110
- if (_currentFramesReceived === _previousFramesReceived) {
19111
- getLogger().info("StatsAnalyzer#monitorStats --> No share frames received, last frames received count: ".concat(_currentFramesReceived, "."));
19112
- }
19113
- var _currentFramesDropped = getSumFromStatsByType(_current4, 'inbound-rtp', 'framesDropped');
19114
- var _previousFramesDropped = getSumFromStatsByType(_previous4, 'inbound-rtp', 'framesDropped');
19115
- if (_currentFramesDropped - _previousFramesDropped > 10) {
19116
- getLogger().info("StatsAnalyzer#monitorStats --> Too many share frames dropped, total frames dropped count: ".concat(_currentFramesDropped, "."));
19117
- }
19118
- }
19040
+ var _previous4 = convertToStatsMap(this.previousTransceiverStats.screenShareVideo.senders);
19041
+ this.statsMonitor.checkOutboundShare(_previous4, _current4);
19042
+ }
19043
+ emitNetworkQualityEvents('share', _current4);
19044
+ }
19045
+ if ((_this$meetingMediaSta8 = this.meetingMediaStatus) !== null && _this$meetingMediaSta8 !== void 0 && _this$meetingMediaSta8.expected.receiveShare) {
19046
+ var _current5 = convertToStatsMap(transceiverStats.screenShareVideo.receivers);
19047
+ if (this.previousTransceiverStats) {
19048
+ var _previous5 = convertToStatsMap(this.previousTransceiverStats.screenShareVideo.receivers);
19049
+ this.statsMonitor.checkInboundShare(_previous5, _current5);
19119
19050
  }
19120
19051
  }
19121
19052
  this.emitStartStopEvents('audio', getSumFromStatsByType(convertToStatsMap((_this$previousTransce = (_this$previousTransce2 = this.previousTransceiverStats) === null || _this$previousTransce2 === void 0 ? void 0 : _this$previousTransce2.audio.senders) !== null && _this$previousTransce !== void 0 ? _this$previousTransce : []), 'outbound-rtp', 'packetsSent'), getSumFromStatsByType(convertToStatsMap(transceiverStats.audio.senders), 'outbound-rtp', 'packetsSent'), true);
@@ -19228,6 +19159,155 @@ class NetworkQualityMonitor extends EventEmitter$5 {
19228
19159
  }
19229
19160
  }
19230
19161
 
19162
+ var MIN_AUDIO_PACKETS_RECEIVER_THRESHOLD = 500;
19163
+ var InboundAudioThresholds = {
19164
+ DecodeResultsInZeroAudioLevel: {
19165
+ concealedRatio: 0.7,
19166
+ lossRatio: 0.2,
19167
+ discardedRatio: 0.5
19168
+ },
19169
+ AllPacketsDiscarded: {
19170
+ discardedRatio: 0.9
19171
+ }
19172
+ };
19173
+ class StatsMonitor extends EventEmitter$5 {
19174
+ hasAudioDecodeIssue(totalAudioEnergy, totalSamplesReceived, concealedRatio, lossRatio, discardedRatio) {
19175
+ var thresholds = InboundAudioThresholds.DecodeResultsInZeroAudioLevel;
19176
+ return totalAudioEnergy === 0 && totalSamplesReceived > 0 && concealedRatio < thresholds.concealedRatio && lossRatio < thresholds.lossRatio && discardedRatio < thresholds.discardedRatio;
19177
+ }
19178
+ checkInboundAudio(previous, current) {
19179
+ var previousPacketsReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'packetsReceived');
19180
+ var packetsReceived = getSumFromStatsByType(current, 'inbound-rtp', 'packetsReceived');
19181
+ var totalSamplesReceived = getSumFromStatsByType(current, 'inbound-rtp', 'totalSamplesReceived');
19182
+ var totalAudioEnergy = getSumFromStatsByType(current, 'inbound-rtp', 'totalAudioEnergy');
19183
+ var packetsDiscarded = getSumFromStatsByType(current, 'inbound-rtp', 'packetsDiscarded');
19184
+ var concealedSamples = getSumFromStatsByType(current, 'inbound-rtp', 'concealedSamples');
19185
+ var packetsLost = getSumFromStatsByType(current, 'inbound-rtp', 'packetsLost');
19186
+ var concealedRatio = totalSamplesReceived > 0 ? concealedSamples / totalSamplesReceived : 0;
19187
+ var lossRatio = packetsReceived + packetsLost > 0 ? packetsLost / (packetsReceived + packetsLost) : 0;
19188
+ var discardedRatio = packetsReceived > 0 ? packetsDiscarded / packetsReceived : 0;
19189
+ if (packetsReceived > MIN_AUDIO_PACKETS_RECEIVER_THRESHOLD && packetsReceived > previousPacketsReceived) {
19190
+ if (this.hasAudioDecodeIssue(totalAudioEnergy, totalSamplesReceived, concealedRatio, lossRatio, discardedRatio)) {
19191
+ getLogger().info("StatsMonitor#checkInboundAudio --> Incoming audio from all streams is not being decoded correctly, totalAudioEnergy: ".concat(totalAudioEnergy, ", totalSamplesReceived: ").concat(totalSamplesReceived, ", packetsReceived: ").concat(packetsReceived, ", concealedRatio: ").concat(concealedRatio, ", lossRatio: ").concat(lossRatio, ", discardedRatio: ").concat(discardedRatio, "."));
19192
+ this.emit(StatsMonitorEventNames.INBOUND_AUDIO_ISSUE, {
19193
+ issueSubType: InboundAudioIssueSubTypes.DECODE_RESULTS_IN_ZERO_AUDIO_LEVEL
19194
+ });
19195
+ } else if (discardedRatio >= InboundAudioThresholds.AllPacketsDiscarded.discardedRatio) {
19196
+ getLogger().info("StatsMonitor#checkInboundAudio --> Incoming audio packets from all streams are being discarded, packetsReceived: ".concat(packetsReceived, ", packetsDiscarded: ").concat(packetsDiscarded, ", discardedRatio: ").concat(discardedRatio, "."));
19197
+ this.emit(StatsMonitorEventNames.INBOUND_AUDIO_ISSUE, {
19198
+ issueSubType: InboundAudioIssueSubTypes.ALL_PACKETS_DISCARDED
19199
+ });
19200
+ }
19201
+ }
19202
+ }
19203
+ checkOutboundAudio(previous, current) {
19204
+ var currentPacketsSent = getSumFromStatsByType(current, 'outbound-rtp', 'packetsSent');
19205
+ var previousPacketsSent = getSumFromStatsByType(previous, 'outbound-rtp', 'packetsSent');
19206
+ if (currentPacketsSent === previousPacketsSent) {
19207
+ getLogger().info("StatsMonitor#checkOutboundAudio --> No audio packets sent, last packets sent count: ".concat(currentPacketsSent, "."));
19208
+ }
19209
+ var totalAudioEnergyExists = getPropertyFromStatsByType(current, 'media-source', 'totalAudioEnergy') !== undefined;
19210
+ if (totalAudioEnergyExists) {
19211
+ var currentTotalAudioEnergy = getSumFromStatsByType(current, 'media-source', 'totalAudioEnergy');
19212
+ var previousTotalAudioEnergy = getSumFromStatsByType(previous, 'media-source', 'totalAudioEnergy');
19213
+ if (currentTotalAudioEnergy === previousTotalAudioEnergy) {
19214
+ getLogger().info("StatsMonitor#checkOutboundAudio --> No audio energy from local audio source, last total audio energy: ".concat(currentTotalAudioEnergy, "."));
19215
+ }
19216
+ }
19217
+ var audioLevelExists = getPropertyFromStatsByType(current, 'media-source', 'audioLevel') !== undefined;
19218
+ if (audioLevelExists) {
19219
+ var currentAudioLevel = getSumFromStatsByType(current, 'media-source', 'audioLevel');
19220
+ if (currentAudioLevel === 0) {
19221
+ getLogger().info("StatsMonitor#checkOutboundAudio --> Audio level in local audio source is 0.");
19222
+ }
19223
+ }
19224
+ }
19225
+ checkInboundVideo(previous, current) {
19226
+ var currentSourceStateArray = getPropertyFromStatsByTypeInArray(current, 'inbound-rtp', 'sourceState');
19227
+ if (currentSourceStateArray.includes('live')) {
19228
+ var currentPacketsReceived = getSumFromStatsByType(current, 'inbound-rtp', 'packetsReceived');
19229
+ var previousPacketsReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'packetsReceived');
19230
+ if (currentPacketsReceived === previousPacketsReceived) {
19231
+ getLogger().info("StatsMonitor#checkInboundVideo --> No video packets received, last packets received count: ".concat(currentPacketsReceived, "."));
19232
+ }
19233
+ var currentFramesDecoded = getSumFromStatsByType(current, 'inbound-rtp', 'framesDecoded');
19234
+ var previousFramesDecoded = getSumFromStatsByType(previous, 'inbound-rtp', 'framesDecoded');
19235
+ if (currentFramesDecoded === previousFramesDecoded) {
19236
+ getLogger().info("StatsMonitor#checkInboundVideo --> No video frames decoded, last frames decoded count: ".concat(currentFramesDecoded, "."));
19237
+ }
19238
+ var currentFramesReceived = getSumFromStatsByType(current, 'inbound-rtp', 'framesReceived');
19239
+ var previousFramesReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'framesReceived');
19240
+ if (currentFramesReceived === previousFramesReceived) {
19241
+ getLogger().info("StatsMonitor#checkInboundVideo --> No video frames received, last frames received count: ".concat(currentFramesReceived, "."));
19242
+ }
19243
+ var currentFramesDropped = getSumFromStatsByType(current, 'inbound-rtp', 'framesDropped');
19244
+ var previousFramesDropped = getSumFromStatsByType(previous, 'inbound-rtp', 'framesDropped');
19245
+ if (currentFramesDropped - previousFramesDropped > 10) {
19246
+ getLogger().info("StatsMonitor#checkInboundVideo --> Too many inbound video frames dropped, total frames dropped count: ".concat(currentFramesDropped, "."));
19247
+ }
19248
+ }
19249
+ }
19250
+ checkOutboundVideo(previous, current) {
19251
+ var currentPacketsSent = getSumFromStatsByType(current, 'outbound-rtp', 'packetsSent');
19252
+ var previousPacketsSent = getSumFromStatsByType(previous, 'outbound-rtp', 'packetsSent');
19253
+ if (currentPacketsSent === previousPacketsSent) {
19254
+ getLogger().info("StatsMonitor#checkOutboundVideo --> No video packets sent, last packets sent count: ".concat(currentPacketsSent, "."));
19255
+ }
19256
+ var currentFramesEncoded = getSumFromStatsByType(current, 'outbound-rtp', 'framesEncoded');
19257
+ var previousFramesEncoded = getSumFromStatsByType(previous, 'outbound-rtp', 'framesEncoded');
19258
+ if (currentFramesEncoded === previousFramesEncoded) {
19259
+ getLogger().info("StatsMonitor#checkOutboundVideo --> No video frames encoded, last frames encoded count: ".concat(currentFramesEncoded, "."));
19260
+ }
19261
+ var currentFramesSent = getSumFromStatsByType(current, 'outbound-rtp', 'framesSent');
19262
+ var previousFramesSent = getSumFromStatsByType(previous, 'outbound-rtp', 'framesSent');
19263
+ if (currentFramesSent === previousFramesSent) {
19264
+ getLogger().info("StatsMonitor#checkOutboundVideo --> No video frames sent, last frames sent count: ".concat(currentFramesSent, "."));
19265
+ }
19266
+ }
19267
+ checkInboundShare(previous, current) {
19268
+ var currentSourceStateArray = getPropertyFromStatsByTypeInArray(current, 'inbound-rtp', 'sourceState');
19269
+ if (currentSourceStateArray.includes('live')) {
19270
+ var currentPacketsReceived = getSumFromStatsByType(current, 'inbound-rtp', 'packetsReceived');
19271
+ var previousPacketsReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'packetsReceived');
19272
+ if (currentPacketsReceived === previousPacketsReceived) {
19273
+ getLogger().info("StatsMonitor#checkInboundShare --> No share packets received, last packets received count: ".concat(currentPacketsReceived, "."));
19274
+ }
19275
+ var currentFramesDecoded = getSumFromStatsByType(current, 'inbound-rtp', 'framesDecoded');
19276
+ var previousFramesDecoded = getSumFromStatsByType(previous, 'inbound-rtp', 'framesDecoded');
19277
+ if (currentFramesDecoded === previousFramesDecoded) {
19278
+ getLogger().info("StatsMonitor#checkInboundShare --> No share frames decoded, last frames decoded count: ".concat(currentFramesDecoded, "."));
19279
+ }
19280
+ var currentFramesReceived = getSumFromStatsByType(current, 'inbound-rtp', 'framesReceived');
19281
+ var previousFramesReceived = getSumFromStatsByType(previous, 'inbound-rtp', 'framesReceived');
19282
+ if (currentFramesReceived === previousFramesReceived) {
19283
+ getLogger().info("StatsMonitor#checkInboundShare --> No share frames received, last frames received count: ".concat(currentFramesReceived, "."));
19284
+ }
19285
+ var currentFramesDropped = getSumFromStatsByType(current, 'inbound-rtp', 'framesDropped');
19286
+ var previousFramesDropped = getSumFromStatsByType(previous, 'inbound-rtp', 'framesDropped');
19287
+ if (currentFramesDropped - previousFramesDropped > 10) {
19288
+ getLogger().info("StatsMonitor#checkInboundShare --> Too many inbound share frames dropped, total frames dropped count: ".concat(currentFramesDropped, "."));
19289
+ }
19290
+ }
19291
+ }
19292
+ checkOutboundShare(previous, current) {
19293
+ var currentPacketsSent = getSumFromStatsByType(current, 'outbound-rtp', 'packetsSent');
19294
+ var previousPacketsSent = getSumFromStatsByType(previous, 'outbound-rtp', 'packetsSent');
19295
+ if (currentPacketsSent === previousPacketsSent) {
19296
+ getLogger().info("StatsMonitor#checkOutboundShare --> No share packets sent, last packets sent count: ".concat(currentPacketsSent, "."));
19297
+ }
19298
+ var currentFramesEncoded = getSumFromStatsByType(current, 'outbound-rtp', 'framesEncoded');
19299
+ var previousFramesEncoded = getSumFromStatsByType(previous, 'outbound-rtp', 'framesEncoded');
19300
+ if (currentFramesEncoded === previousFramesEncoded) {
19301
+ getLogger().info("StatsMonitor#checkOutboundShare --> No share frames encoded, last frames encoded count: ".concat(currentFramesEncoded, "."));
19302
+ }
19303
+ var currentFramesSent = getSumFromStatsByType(current, 'outbound-rtp', 'framesSent');
19304
+ var previousFramesSent = getSumFromStatsByType(previous, 'outbound-rtp', 'framesSent');
19305
+ if (currentFramesSent === previousFramesSent) {
19306
+ getLogger().info("StatsMonitor#checkOutboundShare --> No share frames sent, last frames sent count: ".concat(currentFramesSent, "."));
19307
+ }
19308
+ }
19309
+ }
19310
+
19231
19311
  var Media = {
19232
19312
  createAudioTrack: createAudioTrack,
19233
19313
  createVideoTrack: createVideoTrack,
@@ -19245,4 +19325,4 @@ var Media = {
19245
19325
  }
19246
19326
  };
19247
19327
 
19248
- export { ActiveSpeakerInfo, CodecInfo$1 as CodecInfo, ConnectionState, ErrorType, Errors, H264Codec, LocalCameraStream, LocalDisplayStream, LocalMicrophoneStream, LocalStream, LocalStreamEventNames, LocalSystemAudioStream, Media, MediaConnectionEventNames, MediaContent, MediaFamily, MediaStreamTrackKind, MediaType, MultistreamRoapMediaConnection, NetworkQualityEventNames, NetworkQualityMonitor, PeerConnection, Policy, ReceiveSlot, ReceiveSlotEvents, ReceiverSelectedInfo, RecommendedOpusBitrates, RemoteStream, RemoteStreamEventNames, RemoteTrackType, RoapMediaConnection, SendSlot, StatsAnalyzer, StatsAnalyzerEventNames, StreamEventNames, StreamRequest, WcmeError, WcmeErrorType, configureWcmeLogger, createCameraAndMicrophoneStreams, createCameraStream, createDisplayMedia, createDisplayStream, createDisplayStreamWithAudio, createMicrophoneStream, getAudioInputDevices, getAudioOutputDevices, getDevices, getErrorDescription, getLogger, getMediaFamily, getRecommendedMaxBitrateForFrameSize, getVideoInputDevices, setLogger, setOnDeviceChangeHandler };
19328
+ export { ActiveSpeakerInfo, CodecInfo$1 as CodecInfo, ConnectionState, ErrorType, Errors, H264Codec, InboundAudioIssueSubTypes, LocalCameraStream, LocalDisplayStream, LocalMicrophoneStream, LocalStream, LocalStreamEventNames, LocalSystemAudioStream, Media, MediaConnectionEventNames, MediaContent, MediaFamily, MediaStreamTrackKind, MediaType, MultistreamRoapMediaConnection, NetworkQualityEventNames, NetworkQualityMonitor, PeerConnection, Policy, ReceiveSlot, ReceiveSlotEvents, ReceiverSelectedInfo, RecommendedOpusBitrates, RemoteStream, RemoteStreamEventNames, RemoteTrackType, RoapMediaConnection, SendSlot, StatsAnalyzer, StatsAnalyzerEventNames, StatsMonitor, StatsMonitorEventNames, StreamEventNames, StreamRequest, WcmeError, WcmeErrorType, configureWcmeLogger, createCameraAndMicrophoneStreams, createCameraStream, createDisplayMedia, createDisplayStream, createDisplayStreamWithAudio, createMicrophoneStream, getAudioInputDevices, getAudioOutputDevices, getDevices, getErrorDescription, getLogger, getMediaFamily, getRecommendedMaxBitrateForFrameSize, getVideoInputDevices, setLogger, setOnDeviceChangeHandler };
@@ -80,8 +80,7 @@ export interface Typegen0 {
80
80
  };
81
81
  eventsCausingGuards: {
82
82
  isHandlingOfferRequest: 'REMOTE_OFFER_REQUEST_ARRIVED' | 'done.invoke.roap.creatingLocalOffer:invocation[0]';
83
- isOkInTransaction: 'done.invoke.roap.settingRemoteAnswer:invocation[0]';
84
- isOkNotInTransaction: 'REMOTE_OFFER_ARRIVED' | 'REMOTE_OFFER_REQUEST_ARRIVED';
83
+ isOkInTransaction: 'REMOTE_OFFER_ARRIVED' | 'REMOTE_OFFER_REQUEST_ARRIVED' | 'done.invoke.roap.settingRemoteAnswer:invocation[0]';
85
84
  isPendingLocalOffer: '' | 'done.invoke.roap.creatingLocalOffer:invocation[0]';
86
85
  isSameSeq: 'ERROR_ARRIVED' | 'REMOTE_ANSWER_ARRIVED' | 'REMOTE_OFFER_ARRIVED' | 'REMOTE_OFFER_REQUEST_ARRIVED';
87
86
  shouldErrorTriggerOfferRetry: 'ERROR_ARRIVED';
@@ -1 +1 @@
1
- {"version":3,"file":"roap.typegen.d.ts","sourceRoot":"","sources":["../../../src/MediaConnection/roap.typegen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"roap.typegen.d.ts","sourceRoot":"","sources":["../../../src/MediaConnection/roap.typegen.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MqeBuilder.d.ts","sourceRoot":"","sources":["../../../src/StatsAnalyzer/MqeBuilder.ts"],"names":[],"mappings":"AAIA,OAAO,EAUL,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,6BAA6B,EAC7B,8BAA8B,EAC9B,6BAA6B,EAC7B,8BAA8B,EAC9B,+BAA+B,EAC/B,8BAA8B,EAC/B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAe,QAAQ,EAAE,MAAM,SAAS,CAAC;AAmBhD,8BAAsB,UAAU;IAE9B,oBAAoB,EAAE,QAAQ,CAAa;IAG3C,qBAAqB,EAAE,QAAQ,CAAa;IAE5C,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;IAE1B,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC;IAEtC,SAAS,CAAC,SAAS,EAAE,wBAAwB,CAAC,WAAW,CAAC,CAAC;IAE3D,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC;gBAO3B,MAAM,EAAE;QAClB,MAAM,EAAE,OAAO,CAAC;QAChB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,SAAS,EAAE,wBAAwB,CAAC,WAAW,CAAC,CAAC;QACjD,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC;KAC9B;IAYD,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQ5C,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IA2RpD,KAAK,IAAI,IAAI;IAQb,oBAAoB,IAAI,IAAI;IAiD5B,SAAS,CAAC,6BAA6B,IAAI,wBAAwB;IAyBnE,SAAS,CAAC,8BAA8B,IAAI,yBAAyB;IAgHrE,SAAS,CAAC,kCAAkC,CAAC,EAAE,EAAE,MAAM,GAAG,6BAA6B;IAiBvF,SAAS,CAAC,kCAAkC,CAAC,EAAE,EAAE,MAAM,GAAG,6BAA6B;IAkFvF,SAAS,CAAC,mCAAmC,CAAC,EAAE,EAAE,MAAM,GAAG,8BAA8B;IAqKzF,SAAS,CAAC,+BAA+B,IAAI,0BAA0B;IA8GvE,SAAS,CAAC,mCAAmC,CAAC,EAAE,EAAE,MAAM,GAAG,8BAA8B;IA6BzF,SAAS,CAAC,mCAAmC,CAAC,EAAE,EAAE,MAAM,GAAG,8BAA8B;IAwFzF,SAAS,CAAC,oCAAoC,CAAC,EAAE,EAAE,MAAM,GAAG,+BAA+B;CAyF5F"}
1
+ {"version":3,"file":"MqeBuilder.d.ts","sourceRoot":"","sources":["../../../src/StatsAnalyzer/MqeBuilder.ts"],"names":[],"mappings":"AAIA,OAAO,EAUL,wBAAwB,EACxB,yBAAyB,EACzB,0BAA0B,EAC1B,6BAA6B,EAC7B,8BAA8B,EAC9B,6BAA6B,EAC7B,8BAA8B,EAC9B,+BAA+B,EAC/B,8BAA8B,EAC/B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAe,QAAQ,EAAE,MAAM,SAAS,CAAC;AAmBhD,8BAAsB,UAAU;IAE9B,oBAAoB,EAAE,QAAQ,CAAa;IAG3C,qBAAqB,EAAE,QAAQ,CAAa;IAE5C,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;IAE1B,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC;IAEtC,SAAS,CAAC,SAAS,EAAE,wBAAwB,CAAC,WAAW,CAAC,CAAC;IAE3D,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC;gBAO3B,MAAM,EAAE;QAClB,MAAM,EAAE,OAAO,CAAC;QAChB,kBAAkB,EAAE,OAAO,CAAC;QAC5B,SAAS,EAAE,wBAAwB,CAAC,WAAW,CAAC,CAAC;QACjD,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC;KAC9B;IAYD,QAAQ,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAQ5C,0BAA0B,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IA2RpD,KAAK,IAAI,IAAI;IAQb,oBAAoB,IAAI,IAAI;IAiD5B,SAAS,CAAC,6BAA6B,IAAI,wBAAwB;IAyBnE,SAAS,CAAC,8BAA8B,IAAI,yBAAyB;IAgHrE,SAAS,CAAC,kCAAkC,CAAC,EAAE,EAAE,MAAM,GAAG,6BAA6B;IAiBvF,SAAS,CAAC,kCAAkC,CAAC,EAAE,EAAE,MAAM,GAAG,6BAA6B;IAkFvF,SAAS,CAAC,mCAAmC,CAAC,EAAE,EAAE,MAAM,GAAG,8BAA8B;IAqKzF,SAAS,CAAC,+BAA+B,IAAI,0BAA0B;IA8GvE,SAAS,CAAC,mCAAmC,CAAC,EAAE,EAAE,MAAM,GAAG,8BAA8B;IA6BzF,SAAS,CAAC,mCAAmC,CAAC,EAAE,EAAE,MAAM,GAAG,8BAA8B;IA6FzF,SAAS,CAAC,oCAAoC,CAAC,EAAE,EAAE,MAAM,GAAG,+BAA+B;CAyF5F"}
@@ -3,6 +3,7 @@ import { MultistreamRoapMediaConnection, RoapMediaConnection } from '../MediaCon
3
3
  import { NetworkQualityMonitor } from './NetworkQualityMonitor';
4
4
  import { StatsAnalyzerEvents } from './eventTypes';
5
5
  import { ActualExpectedMediaStatus, StatsAnalyzerConfig } from './types';
6
+ import { StatsMonitor } from './StatsMonitor';
6
7
  export declare class StatsAnalyzer extends EventEmitter<StatsAnalyzerEvents> {
7
8
  private config;
8
9
  private lastEmittedStartStopEvents;
@@ -12,6 +13,7 @@ export declare class StatsAnalyzer extends EventEmitter<StatsAnalyzerEvents> {
12
13
  private mqeInterval?;
13
14
  private mqeSentCount;
14
15
  private networkQualityMonitor;
16
+ private statsMonitor;
15
17
  private mediaConnection;
16
18
  private statsStarted;
17
19
  private mqeIntervalSessionReceiveAudioMainBuilder;
@@ -23,9 +25,10 @@ export declare class StatsAnalyzer extends EventEmitter<StatsAnalyzerEvents> {
23
25
  private mqeIntervalSessionTransmitVideoMainBuilder;
24
26
  private mqeIntervalSessionTransmitVideoSlidesBuilder;
25
27
  private intervalMetadata;
26
- constructor({ config, networkQualityMonitor, isMultistream, }: {
28
+ constructor({ config, networkQualityMonitor, statsMonitor, isMultistream, }: {
27
29
  config: StatsAnalyzerConfig;
28
30
  networkQualityMonitor: NetworkQualityMonitor;
31
+ statsMonitor: StatsMonitor;
29
32
  isMultistream?: boolean;
30
33
  });
31
34
  private get builders();
@@ -1 +1 @@
1
- {"version":3,"file":"StatsAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/StatsAnalyzer/StatsAnalyzer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,8BAA8B,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAQzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAGL,mBAAmB,EAEpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAkB,MAAM,SAAS,CAAC;AAkBzF,qBAAa,aAAc,SAAQ,YAAY,CAAC,mBAAmB,CAAC;IAClE,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,0BAA0B,CAAkC;IAEpE,OAAO,CAAC,wBAAwB,CAAC,CAAmB;IAEpD,OAAO,CAAC,kBAAkB,CAAC,CAA4B;IAEvD,OAAO,CAAC,aAAa,CAAC,CAAgC;IAEtD,OAAO,CAAC,WAAW,CAAC,CAAgC;IAEpD,OAAO,CAAC,YAAY,CAAK;IAEzB,OAAO,CAAC,qBAAqB,CAAwB;IAErD,OAAO,CAAC,eAAe,CAAqE;IAE5F,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,yCAAyC,CAAwC;IAEzF,OAAO,CAAC,2CAA2C,CAAwC;IAE3F,OAAO,CAAC,0CAA0C,CAAyC;IAE3F,OAAO,CAAC,4CAA4C,CAAyC;IAE7F,OAAO,CAAC,yCAAyC,CAAwC;IAEzF,OAAO,CAAC,2CAA2C,CAAwC;IAE3F,OAAO,CAAC,0CAA0C,CAAyC;IAE3F,OAAO,CAAC,4CAA4C,CAAyC;IAG7F,OAAO,CAAC,gBAAgB,CAItB;gBAUU,EACV,MAAM,EACN,qBAAqB,EACrB,aAAqB,GACtB,EAAE;QACD,MAAM,EAAE,mBAAmB,CAAC;QAC5B,qBAAqB,EAAE,qBAAqB,CAAC;QAC7C,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB;IA6CD,OAAO,KAAK,QAAQ,GAWnB;IAeM,iBAAiB,IAAI,MAAM,GAAG,SAAS;IAqEvC,cAAc,IAAI,MAAM,GAAG,SAAS;IA0B3C,IAAI,+BAA+B,IAAI,MAAM,GAAG,SAAS,CAQxD;IAQD,OAAO,KAAK,eAAe,GAY1B;IASD,OAAO,KAAK,aAAa,GAmBxB;IAOM,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,yBAAyB,CAAC;IAsBnE,OAAO,CAAC,WAAW;IAuFN,aAAa,CACxB,eAAe,EAAE,8BAA8B,GAAG,mBAAmB;IA6B1D,YAAY;IAkCzB,OAAO,CAAC,mBAAmB,CAkDzB;YAKY,iBAAiB;IAqE/B,OAAO,CAAC,YAAY;CAscrB"}
1
+ {"version":3,"file":"StatsAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/StatsAnalyzer/StatsAnalyzer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,8BAA8B,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAQzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAGL,mBAAmB,EAEpB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAkB,MAAM,SAAS,CAAC;AAczF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAK9C,qBAAa,aAAc,SAAQ,YAAY,CAAC,mBAAmB,CAAC;IAClE,OAAO,CAAC,MAAM,CAAsB;IAEpC,OAAO,CAAC,0BAA0B,CAAkC;IAEpE,OAAO,CAAC,wBAAwB,CAAC,CAAmB;IAEpD,OAAO,CAAC,kBAAkB,CAAC,CAA4B;IAEvD,OAAO,CAAC,aAAa,CAAC,CAAgC;IAEtD,OAAO,CAAC,WAAW,CAAC,CAAgC;IAEpD,OAAO,CAAC,YAAY,CAAK;IAEzB,OAAO,CAAC,qBAAqB,CAAwB;IAErD,OAAO,CAAC,YAAY,CAAe;IAEnC,OAAO,CAAC,eAAe,CAAqE;IAE5F,OAAO,CAAC,YAAY,CAAS;IAE7B,OAAO,CAAC,yCAAyC,CAAwC;IAEzF,OAAO,CAAC,2CAA2C,CAAwC;IAE3F,OAAO,CAAC,0CAA0C,CAAyC;IAE3F,OAAO,CAAC,4CAA4C,CAAyC;IAE7F,OAAO,CAAC,yCAAyC,CAAwC;IAEzF,OAAO,CAAC,2CAA2C,CAAwC;IAE3F,OAAO,CAAC,0CAA0C,CAAyC;IAE3F,OAAO,CAAC,4CAA4C,CAAyC;IAG7F,OAAO,CAAC,gBAAgB,CAItB;gBAUU,EACV,MAAM,EACN,qBAAqB,EACrB,YAAY,EACZ,aAAqB,GACtB,EAAE;QACD,MAAM,EAAE,mBAAmB,CAAC;QAC5B,qBAAqB,EAAE,qBAAqB,CAAC;QAC7C,YAAY,EAAE,YAAY,CAAC;QAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB;IA8CD,OAAO,KAAK,QAAQ,GAWnB;IAeM,iBAAiB,IAAI,MAAM,GAAG,SAAS;IAqEvC,cAAc,IAAI,MAAM,GAAG,SAAS;IA0B3C,IAAI,+BAA+B,IAAI,MAAM,GAAG,SAAS,CAQxD;IAQD,OAAO,KAAK,eAAe,GAY1B;IASD,OAAO,KAAK,aAAa,GAmBxB;IAOM,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,yBAAyB,CAAC;IAsBnE,OAAO,CAAC,WAAW;IAuFN,aAAa,CACxB,eAAe,EAAE,8BAA8B,GAAG,mBAAmB;IA6B1D,YAAY;IAkCzB,OAAO,CAAC,mBAAmB,CAkDzB;YAKY,iBAAiB;IAiE/B,OAAO,CAAC,YAAY;CA6LrB"}
@@ -0,0 +1,13 @@
1
+ import { StatsMap } from './types';
2
+ import { StatsMonitorEvents } from './eventTypes';
3
+ import { EventEmitter } from '../EventEmitter';
4
+ export declare class StatsMonitor extends EventEmitter<StatsMonitorEvents> {
5
+ private hasAudioDecodeIssue;
6
+ checkInboundAudio(previous: StatsMap, current: StatsMap): void;
7
+ checkOutboundAudio(previous: StatsMap, current: StatsMap): void;
8
+ checkInboundVideo(previous: StatsMap, current: StatsMap): void;
9
+ checkOutboundVideo(previous: StatsMap, current: StatsMap): void;
10
+ checkInboundShare(previous: StatsMap, current: StatsMap): void;
11
+ checkOutboundShare(previous: StatsMap, current: StatsMap): void;
12
+ }
13
+ //# sourceMappingURL=StatsMonitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatsMonitor.d.ts","sourceRoot":"","sources":["../../../src/StatsAnalyzer/StatsMonitor.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAGL,kBAAkB,EACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAe/C,qBAAa,YAAa,SAAQ,YAAY,CAAC,kBAAkB,CAAC;IAChE,OAAO,CAAC,mBAAmB;IAuB3B,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ;IA0DvD,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ;IAwDxD,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ;IAoEvD,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ;IAqCxD,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ;IAoEvD,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ;CA+BzD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=StatsMonitor.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatsMonitor.test.d.ts","sourceRoot":"","sources":["../../../src/StatsAnalyzer/StatsMonitor.test.ts"],"names":[],"mappings":""}
@@ -40,5 +40,18 @@ interface NetworkQualityEvent {
40
40
  export interface NetworkQualityMonitorEvents extends EventMap {
41
41
  [NetworkQualityEventNames.NETWORK_QUALITY]: (event: NetworkQualityEvent) => void;
42
42
  }
43
+ export declare enum StatsMonitorEventNames {
44
+ INBOUND_AUDIO_ISSUE = "INBOUND_AUDIO_ISSUE"
45
+ }
46
+ export declare enum InboundAudioIssueSubTypes {
47
+ DECODE_RESULTS_IN_ZERO_AUDIO_LEVEL = "DECODE_RESULTS_IN_ZERO_AUDIO_LEVEL",
48
+ ALL_PACKETS_DISCARDED = "ALL_PACKETS_DISCARDED"
49
+ }
50
+ export interface InboundAudioIssueEvent {
51
+ issueSubType: InboundAudioIssueSubTypes;
52
+ }
53
+ export interface StatsMonitorEvents extends EventMap {
54
+ [StatsMonitorEventNames.INBOUND_AUDIO_ISSUE]: (event: InboundAudioIssueEvent) => void;
55
+ }
43
56
  export {};
44
57
  //# sourceMappingURL=eventTypes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"eventTypes.d.ts","sourceRoot":"","sources":["../../../src/StatsAnalyzer/eventTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,oBAAY,uBAAuB;IACjC,aAAa,kBAAkB;IAC/B,mBAAmB,wBAAwB;IAC3C,mBAAmB,wBAAwB;IAC3C,oBAAoB,yBAAyB;IAC7C,oBAAoB,yBAAyB;CAC9C;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAoB,SAAQ,QAAQ;IACnD,CAAC,uBAAuB,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC5E,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACpF,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACpF,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACrF,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACtF;AAED,oBAAY,8BAA8B,GAAG;IAC3C,KAAK,EAAE,uBAAuB,CAAC,mBAAmB,GAAG,uBAAuB,CAAC,mBAAmB,CAAC;IACjG,MAAM,EACF,uBAAuB,CAAC,oBAAoB,GAC5C,uBAAuB,CAAC,oBAAoB,CAAC;CAClD,CAAC;AAEF,oBAAY,0BAA0B,GAAG,OAAO,CAAC;IAC/C,KAAK,EAAE,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC/C,KAAK,EAAE,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC/C,KAAK,EAAE,OAAO,CAAC,8BAA8B,CAAC,CAAC;CAChD,CAAC,CAAC;AAEH,oBAAY,wBAAwB;IAClC,eAAe,oBAAoB;CACpC;AAED,UAAU,mBAAmB;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,2BAA4B,SAAQ,QAAQ;IAC3D,CAAC,wBAAwB,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAClF"}
1
+ {"version":3,"file":"eventTypes.d.ts","sourceRoot":"","sources":["../../../src/StatsAnalyzer/eventTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,oBAAY,uBAAuB;IACjC,aAAa,kBAAkB;IAC/B,mBAAmB,wBAAwB;IAC3C,mBAAmB,wBAAwB;IAC3C,oBAAoB,yBAAyB;IAC7C,oBAAoB,yBAAyB;CAC9C;AACD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAoB,SAAQ,QAAQ;IACnD,CAAC,uBAAuB,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC5E,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACpF,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACpF,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IACrF,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACtF;AAED,oBAAY,8BAA8B,GAAG;IAC3C,KAAK,EAAE,uBAAuB,CAAC,mBAAmB,GAAG,uBAAuB,CAAC,mBAAmB,CAAC;IACjG,MAAM,EACF,uBAAuB,CAAC,oBAAoB,GAC5C,uBAAuB,CAAC,oBAAoB,CAAC;CAClD,CAAC;AAEF,oBAAY,0BAA0B,GAAG,OAAO,CAAC;IAC/C,KAAK,EAAE,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC/C,KAAK,EAAE,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC/C,KAAK,EAAE,OAAO,CAAC,8BAA8B,CAAC,CAAC;CAChD,CAAC,CAAC;AAEH,oBAAY,wBAAwB;IAClC,eAAe,oBAAoB;CACpC;AAED,UAAU,mBAAmB;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,2BAA4B,SAAQ,QAAQ;IAC3D,CAAC,wBAAwB,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAClF;AAED,oBAAY,sBAAsB;IAChC,mBAAmB,wBAAwB;CAC5C;AAED,oBAAY,yBAAyB;IACnC,kCAAkC,uCAAuC;IACzE,qBAAqB,0BAA0B;CAChD;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,yBAAyB,CAAC;CACzC;AAED,MAAM,WAAW,kBAAmB,SAAQ,QAAQ;IAClD,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,CAAC;CACvF"}
@@ -1,5 +1,6 @@
1
1
  export * from './StatsAnalyzer';
2
2
  export * from './NetworkQualityMonitor';
3
3
  export * from './eventTypes';
4
+ export * from './StatsMonitor';
4
5
  export { ActualExpectedMediaStatus } from './types';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/StatsAnalyzer/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/StatsAnalyzer/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mqeTypes.d.ts","sourceRoot":"","sources":["../../../src/StatsAnalyzer/mqeTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,oBAAY,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5D,oBAAY,8BAA8B,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5E,oBAAY,+BAA+B,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9E,oBAAY,8BAA8B,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5E,oBAAY,+BAA+B,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9E,oBAAY,yBAAyB,GAAG,CACpC,8BAA8B,GAC9B,8BAA8B,CACjC,CAAC,QAAQ,CAAC,CAAC;AAEZ,oBAAY,0BAA0B,GAAG,CACrC,+BAA+B,GAC/B,+BAA+B,CAClC,CAAC,QAAQ,CAAC,CAAC;AAEZ,oBAAY,wBAAwB,GAAG,CACnC,yBAAyB,GACzB,0BAA0B,CAC7B,CAAC,QAAQ,CAAC,CAAC;AAEZ,oBAAY,6BAA6B,GAAG,8BAA8B,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzF,oBAAY,6BAA6B,GAAG,8BAA8B,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzF,oBAAY,8BAA8B,GAAG,CACzC,6BAA6B,GAC7B,6BAA6B,CAChC,CAAC,QAAQ,CAAC,CAAC;AAEZ,oBAAY,8BAA8B,GAAG,+BAA+B,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3F,oBAAY,8BAA8B,GAAG,+BAA+B,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3F,oBAAY,+BAA+B,GAAG,CAC1C,8BAA8B,GAC9B,8BAA8B,CACjC,CAAC,QAAQ,CAAC,CAAC;AAMZ,eAAO,MAAM,kBAAkB,EAAE,WAOhC,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,wBAM7C,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,yBAkB9C,CAAC;AAEF,eAAO,MAAM,qCAAqC,EAAE,8BAWnD,CAAC;AAEF,eAAO,MAAM,oCAAoC,EAAE,6BAElD,CAAC;AAEF,eAAO,MAAM,iCAAiC,EAAE,0BAgB/C,CAAC;AAEF,eAAO,MAAM,sCAAsC,EAAE,+BAMpD,CAAC;AAEF,eAAO,MAAM,qCAAqC,EAAE,8BAEnD,CAAC;AAEF,eAAO,MAAM,oCAAoC,EAAE,6BAUlD,CAAC;AAEF,eAAO,MAAM,qCAAqC,EAAE,8BAWnD,CAAC"}
1
+ {"version":3,"file":"mqeTypes.d.ts","sourceRoot":"","sources":["../../../src/StatsAnalyzer/mqeTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,oBAAY,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5D,oBAAY,8BAA8B,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5E,oBAAY,+BAA+B,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9E,oBAAY,8BAA8B,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5E,oBAAY,+BAA+B,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9E,oBAAY,yBAAyB,GAAG,CACpC,8BAA8B,GAC9B,8BAA8B,CACjC,CAAC,QAAQ,CAAC,CAAC;AAEZ,oBAAY,0BAA0B,GAAG,CACrC,+BAA+B,GAC/B,+BAA+B,CAClC,CAAC,QAAQ,CAAC,CAAC;AAEZ,oBAAY,wBAAwB,GAAG,CACnC,yBAAyB,GACzB,0BAA0B,CAC7B,CAAC,QAAQ,CAAC,CAAC;AAEZ,oBAAY,6BAA6B,GAAG,8BAA8B,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzF,oBAAY,6BAA6B,GAAG,8BAA8B,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEzF,oBAAY,8BAA8B,GAAG,CACzC,6BAA6B,GAC7B,6BAA6B,CAChC,CAAC,QAAQ,CAAC,CAAC;AAEZ,oBAAY,8BAA8B,GAAG,+BAA+B,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3F,oBAAY,8BAA8B,GAAG,+BAA+B,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3F,oBAAY,+BAA+B,GAAG,CAC1C,8BAA8B,GAC9B,8BAA8B,CACjC,CAAC,QAAQ,CAAC,CAAC;AAMZ,eAAO,MAAM,kBAAkB,EAAE,WAOhC,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,wBAM7C,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE,yBAkB9C,CAAC;AAEF,eAAO,MAAM,qCAAqC,EAAE,8BAWnD,CAAC;AAEF,eAAO,MAAM,oCAAoC,EAAE,6BAElD,CAAC;AAEF,eAAO,MAAM,iCAAiC,EAAE,0BAgB/C,CAAC;AAEF,eAAO,MAAM,sCAAsC,EAAE,+BAMpD,CAAC;AAEF,eAAO,MAAM,qCAAqC,EAAE,8BAEnD,CAAC;AAEF,eAAO,MAAM,oCAAoC,EAAE,6BAUlD,CAAC;AAEF,eAAO,MAAM,qCAAqC,EAAE,8BAYnD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webex/internal-media-core",
3
- "version": "2.18.5",
3
+ "version": "2.20.0",
4
4
  "files": [
5
5
  "dist/cjs",
6
6
  "dist/esm",