@webex/plugin-meetings 3.0.0-beta.379 → 3.0.0-beta.380

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.
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
2
 
3
3
  var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
+ var _Object$keys2 = require("@babel/runtime-corejs2/core-js/object/keys");
5
+ var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols");
6
+ var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor");
7
+ var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors");
8
+ var _Object$defineProperties = require("@babel/runtime-corejs2/core-js/object/define-properties");
4
9
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
5
10
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
11
  _Object$defineProperty(exports, "__esModule", {
@@ -26,6 +31,8 @@ var _config = require("../mediaQualityMetrics/config");
26
31
  var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
27
32
  var _global = _interopRequireDefault(require("./global"));
28
33
  var _mqaUtil = require("./mqaUtil");
34
+ function ownKeys(object, enumerableOnly) { var keys = _Object$keys2(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; }
35
+ 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) { (0, _defineProperty2.default)(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; }
29
36
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
30
37
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
31
38
  var EVENTS = {
@@ -248,7 +255,11 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
248
255
  }, {
249
256
  key: "updateMediaStatus",
250
257
  value: function updateMediaStatus(status) {
251
- this.meetingMediaStatus = status;
258
+ var _this$meetingMediaSta, _this$meetingMediaSta2;
259
+ this.meetingMediaStatus = {
260
+ actual: _objectSpread(_objectSpread({}, (_this$meetingMediaSta = this.meetingMediaStatus) === null || _this$meetingMediaSta === void 0 ? void 0 : _this$meetingMediaSta.actual), status === null || status === void 0 ? void 0 : status.actual),
261
+ expected: _objectSpread(_objectSpread({}, (_this$meetingMediaSta2 = this.meetingMediaStatus) === null || _this$meetingMediaSta2 === void 0 ? void 0 : _this$meetingMediaSta2.expected), status === null || status === void 0 ? void 0 : status.expected)
262
+ };
252
263
  }
253
264
 
254
265
  /**
@@ -693,122 +704,77 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
693
704
  return prev + (((_this7$lastStatsResul = _this7.lastStatsResults[cur]) === null || _this7$lastStatsResul === void 0 ? void 0 : _this7$lastStatsResul.recv[value]) || 0);
694
705
  }, 0);
695
706
  };
696
- if (this.meetingMediaStatus.expected.sendAudio && this.lastStatsResults['audio-send']) {
707
+
708
+ // Audio Transmit
709
+ if (this.lastStatsResults['audio-send']) {
697
710
  // compare audio stats sent
698
711
  // NOTE: relies on there being only one sender.
699
712
  var currentStats = this.statsResults['audio-send'].send;
700
713
  var previousStats = this.lastStatsResults['audio-send'].send;
701
- if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
714
+ if (this.meetingMediaStatus.expected.sendAudio && currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
702
715
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets sent", currentStats.totalPacketsSent);
703
716
  } else {
704
- if (currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
717
+ if (this.meetingMediaStatus.expected.sendAudio && currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
705
718
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio Energy present", currentStats.totalAudioEnergy);
706
719
  }
707
- if (currentStats.audioLevel === 0) {
720
+ if (this.meetingMediaStatus.expected.sendAudio && currentStats.audioLevel === 0) {
708
721
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> audio level is 0 for the user");
709
722
  }
710
723
  }
711
724
  this.emitStartStopEvents('audio', previousStats.totalPacketsSent, currentStats.totalPacketsSent, true);
712
725
  }
713
- if (this.meetingMediaStatus.expected.receiveAudio) {
714
- // compare audio stats received
715
- var currentPacketsReceived = getCurrentStatsTotals('audio-recv', 'totalPacketsReceived');
716
- var previousPacketsReceived = getPreviousStatsTotals('audio-recv', 'totalPacketsReceived');
717
- var currentSamplesReceived = getCurrentStatsTotals('audio-recv', 'totalSamplesReceived');
718
- var previousSamplesReceived = getPreviousStatsTotals('audio-recv', 'totalSamplesReceived');
719
- if (currentPacketsReceived === previousPacketsReceived || currentPacketsReceived === 0) {
720
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio RTP packets received", currentPacketsReceived);
721
- } else if (currentSamplesReceived === previousSamplesReceived || currentSamplesReceived === 0) {
722
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No audio samples received", currentSamplesReceived);
723
- }
724
- this.emitStartStopEvents('audio', previousPacketsReceived, currentPacketsReceived, false);
725
- }
726
- if (this.meetingMediaStatus.expected.sendVideo && this.lastStatsResults['video-send']) {
726
+
727
+ // Audio Receive
728
+ var currentAudioPacketsReceived = getCurrentStatsTotals('audio-recv', 'totalPacketsReceived');
729
+ var previousAudioPacketsReceived = getPreviousStatsTotals('audio-recv', 'totalPacketsReceived');
730
+ this.emitStartStopEvents('audio', previousAudioPacketsReceived, currentAudioPacketsReceived, false);
731
+
732
+ // Video Transmit
733
+ if (this.lastStatsResults['video-send']) {
727
734
  // compare video stats sent
728
735
  var _currentStats = this.statsResults['video-send'].send;
729
736
  var _previousStats = this.lastStatsResults['video-send'].send;
730
- if (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0) {
737
+ if (this.meetingMediaStatus.expected.sendVideo && (_currentStats.totalPacketsSent === _previousStats.totalPacketsSent || _currentStats.totalPacketsSent === 0)) {
731
738
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets sent", _currentStats.totalPacketsSent);
732
739
  } else {
733
- if (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0) {
740
+ if (this.meetingMediaStatus.expected.sendVideo && (_currentStats.framesEncoded === _previousStats.framesEncoded || _currentStats.framesEncoded === 0)) {
734
741
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames Encoded", _currentStats.framesEncoded);
735
742
  }
736
- if (this.statsResults['video-send'].send.framesSent === this.lastStatsResults['video-send'].send.framesSent || this.statsResults['video-send'].send.framesSent === 0) {
743
+ if (this.meetingMediaStatus.expected.sendVideo && (this.statsResults['video-send'].send.framesSent === this.lastStatsResults['video-send'].send.framesSent || this.statsResults['video-send'].send.framesSent === 0)) {
737
744
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video Frames sent", this.statsResults['video-send'].send.framesSent);
738
745
  }
739
746
  }
740
747
  this.emitStartStopEvents('video', _previousStats.framesSent, _currentStats.framesSent, true);
741
748
  }
742
- if (this.meetingMediaStatus.expected.receiveVideo) {
743
- // compare video stats received
744
- var _currentPacketsReceived = getCurrentStatsTotals('video-recv', 'totalPacketsReceived');
745
- var _previousPacketsReceived = getPreviousStatsTotals('video-recv', 'totalPacketsReceived');
746
- var currentFramesReceived = getCurrentStatsTotals('video-recv', 'framesReceived');
747
- var previousFramesReceived = getPreviousStatsTotals('video-recv', 'framesReceived');
748
- var currentFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');
749
- var previousFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');
750
- var currentFramesDropped = getCurrentStatsTotals('video-recv', 'framesDropped');
751
- var previousFramesDropped = getPreviousStatsTotals('video-recv', 'framesDropped');
752
- if (_currentPacketsReceived === _previousPacketsReceived || _currentPacketsReceived === 0) {
753
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video RTP packets received", _currentPacketsReceived);
754
- } else {
755
- if (currentFramesReceived === previousFramesReceived || currentFramesReceived === 0) {
756
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames received", currentFramesReceived);
757
- }
758
- if (currentFramesDecoded === previousFramesDecoded || currentFramesDecoded === 0) {
759
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No video frames decoded", currentFramesDecoded);
760
- }
761
- if (currentFramesDropped - previousFramesDropped > 10) {
762
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> video frames are getting dropped", currentFramesDropped - previousFramesDropped);
763
- }
764
- }
765
- this.emitStartStopEvents('video', previousFramesDecoded, currentFramesDecoded, false);
766
- }
767
- if (this.meetingMediaStatus.expected.sendShare && this.lastStatsResults['video-share-send']) {
749
+
750
+ // Video Receive
751
+ var currentVideoFramesDecoded = getCurrentStatsTotals('video-recv', 'framesDecoded');
752
+ var previousVideoFramesDecoded = getPreviousStatsTotals('video-recv', 'framesDecoded');
753
+ this.emitStartStopEvents('video', previousVideoFramesDecoded, currentVideoFramesDecoded, false);
754
+
755
+ // Share Transmit
756
+ if (this.lastStatsResults['video-share-send']) {
768
757
  // compare share stats sent
769
758
 
770
759
  var _currentStats2 = this.statsResults['video-share-send'].send;
771
760
  var _previousStats2 = this.lastStatsResults['video-share-send'].send;
772
- if (_currentStats2.totalPacketsSent === _previousStats2.totalPacketsSent || _currentStats2.totalPacketsSent === 0) {
761
+ if (this.meetingMediaStatus.expected.sendShare && (_currentStats2.totalPacketsSent === _previousStats2.totalPacketsSent || _currentStats2.totalPacketsSent === 0)) {
773
762
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets sent", _currentStats2.totalPacketsSent);
774
763
  } else {
775
- if (_currentStats2.framesEncoded === _previousStats2.framesEncoded || _currentStats2.framesEncoded === 0) {
764
+ if (this.meetingMediaStatus.expected.sendShare && (_currentStats2.framesEncoded === _previousStats2.framesEncoded || _currentStats2.framesEncoded === 0)) {
776
765
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames getting encoded", _currentStats2.framesEncoded);
777
766
  }
778
- if (this.statsResults['video-share-send'].send.framesSent === this.lastStatsResults['video-share-send'].send.framesSent || this.statsResults['video-share-send'].send.framesSent === 0) {
767
+ if (this.meetingMediaStatus.expected.sendShare && (this.statsResults['video-share-send'].send.framesSent === this.lastStatsResults['video-share-send'].send.framesSent || this.statsResults['video-share-send'].send.framesSent === 0)) {
779
768
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames sent", this.statsResults['video-share-send'].send.framesSent);
780
769
  }
781
770
  }
771
+ this.emitStartStopEvents('share', _previousStats2.framesSent, _currentStats2.framesSent, true);
782
772
  }
783
- if (this.meetingMediaStatus.expected.sendShare) {
784
- // TODO:need to check receive share value
785
- // compare share stats received
786
- var _currentPacketsReceived2 = getCurrentStatsTotals('video-share-recv', 'totalPacketsReceived');
787
- var _previousPacketsReceived2 = getPreviousStatsTotals('video-share-recv', 'totalPacketsReceived');
788
- var _currentFramesReceived = getCurrentStatsTotals('video-share-recv', 'framesReceived');
789
- var _previousFramesReceived = getPreviousStatsTotals('video-share-recv', 'framesReceived');
790
- var _currentFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');
791
- var _previousFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');
792
- var _currentFramesDropped = getCurrentStatsTotals('video-share-recv', 'framesDropped');
793
- var _previousFramesDropped = getPreviousStatsTotals('video-share-recv', 'framesDropped');
794
- if (_currentPacketsReceived2 === _previousPacketsReceived2 || _currentPacketsReceived2 === 0) {
795
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share RTP packets received", _currentPacketsReceived2);
796
- } else {
797
- if (_currentFramesReceived === _previousFramesReceived || _currentFramesReceived === 0) {
798
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames received", _currentFramesReceived);
799
- }
800
- if (_currentFramesDecoded === _previousFramesDecoded || _currentFramesDecoded === 0) {
801
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No share frames decoded", _currentFramesDecoded);
802
- }
803
- if (_currentFramesDropped - _previousFramesDropped > 10) {
804
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> share frames are getting dropped", _currentFramesDropped - _previousFramesDropped);
805
- }
806
- }
807
773
 
808
- // we are not calling emitStartStopEvents() for sending or receiving share because sharing is often started and stopped
809
- // in meetings and this.meetingMediaStatus.expected values can be out of sync with the actual packet flow
810
- // so we would send "sharing stopped" events incorrectly
811
- }
774
+ // Share receive
775
+ var currentShareFramesDecoded = getCurrentStatsTotals('video-share-recv', 'framesDecoded');
776
+ var previousShareFramesDecoded = getPreviousStatsTotals('video-share-recv', 'framesDecoded');
777
+ this.emitStartStopEvents('share', previousShareFramesDecoded, currentShareFramesDecoded, false);
812
778
  }
813
779
  }
814
780
 
@@ -936,11 +902,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
936
902
  var receiveSlot = this.receiveSlotCallback(result.ssrc);
937
903
  var sourceState = receiveSlot === null || receiveSlot === void 0 ? void 0 : receiveSlot.sourceState;
938
904
  var idAndCsi = receiveSlot ? "id: \"".concat(receiveSlot.id || '', "\"").concat(receiveSlot.csi ? " and csi: ".concat(receiveSlot.csi) : '') : '';
939
- if (result.frameWidth && result.frameHeight) {
940
- this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
941
- this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
942
- this.statsResults[mediaType][sendrecvType].framesReceived = result.framesReceived;
943
- }
944
905
  var bytes = result.bytesReceived - this.statsResults[mediaType][sendrecvType].totalBytesReceived;
945
906
  kilobytes = bytes / 1024;
946
907
  this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
@@ -948,19 +909,44 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
948
909
  if (currentPacketsLost < 0) {
949
910
  currentPacketsLost = 0;
950
911
  }
951
- var currentPacketsReceived = result.packetsReceived - this.statsResults[mediaType][sendrecvType].totalPacketsReceived;
912
+ var packetsReceivedDiff = result.packetsReceived - this.statsResults[mediaType][sendrecvType].totalPacketsReceived;
952
913
  this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
953
- if (currentPacketsReceived === 0) {
914
+ if (packetsReceivedDiff === 0) {
954
915
  if (receiveSlot && sourceState === 'live') {
955
- _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for receive slot ".concat(idAndCsi, ". Total packets received on slot: "), result.packetsReceived);
916
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for mediaType: ".concat(mediaType, ", receive slot ").concat(idAndCsi, ". Total packets received on slot: "), result.packetsReceived);
917
+ }
918
+ }
919
+ if (mediaType.startsWith('video') || mediaType.startsWith('share')) {
920
+ var videoFramesReceivedDiff = result.framesReceived - this.statsResults[mediaType][sendrecvType].framesReceived;
921
+ if (videoFramesReceivedDiff === 0) {
922
+ if (receiveSlot && sourceState === 'live') {
923
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No frames received for mediaType: ".concat(mediaType, ", receive slot ").concat(idAndCsi, ". Total frames received on slot: "), result.framesReceived);
924
+ }
925
+ }
926
+ var videoFramesDecodedDiff = result.framesDecoded - this.statsResults[mediaType][sendrecvType].framesDecoded;
927
+ if (videoFramesDecodedDiff === 0) {
928
+ if (receiveSlot && sourceState === 'live') {
929
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No frames decoded for mediaType: ".concat(mediaType, ", receive slot ").concat(idAndCsi, ". Total frames decoded on slot: "), result.framesDecoded);
930
+ }
931
+ }
932
+ var videoFramesDroppedDiff = result.framesDropped - this.statsResults[mediaType][sendrecvType].framesDropped;
933
+ if (videoFramesDroppedDiff > 10) {
934
+ if (receiveSlot && sourceState === 'live') {
935
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> Frames dropped for mediaType: ".concat(mediaType, ", receive slot ").concat(idAndCsi, ". Total frames dropped on slot: "), result.framesDropped);
936
+ }
956
937
  }
957
938
  }
958
939
 
959
940
  // Check the over all packet Lost ratio
960
- this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = currentPacketsLost > 0 ? currentPacketsLost / (currentPacketsReceived + currentPacketsLost) : 0;
941
+ this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = currentPacketsLost > 0 ? currentPacketsLost / (packetsReceivedDiff + currentPacketsLost) : 0;
961
942
  if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
962
943
  _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver with slot ".concat(idAndCsi), this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
963
944
  }
945
+ if (result.frameWidth && result.frameHeight) {
946
+ this.statsResults[mediaType][sendrecvType].width = result.frameWidth;
947
+ this.statsResults[mediaType][sendrecvType].height = result.frameHeight;
948
+ this.statsResults[mediaType][sendrecvType].framesReceived = result.framesReceived;
949
+ }
964
950
 
965
951
  // TODO: check the packet loss value is negative values here
966
952
 
@@ -976,6 +962,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
976
962
  this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;
977
963
  this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
978
964
  this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;
965
+ this.statsResults[mediaType][sendrecvType].framesDropped = result.framesDropped;
979
966
  this.statsResults[mediaType][sendrecvType].decoderImplementation = result.decoderImplementation;
980
967
  this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
981
968
  this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;