@webex/plugin-meetings 3.8.1 → 3.9.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.
Files changed (290) hide show
  1. package/README.md +26 -13
  2. package/dist/breakouts/breakout.js +1 -1
  3. package/dist/breakouts/index.js +1 -1
  4. package/dist/constants.js +32 -3
  5. package/dist/constants.js.map +1 -1
  6. package/dist/controls-options-manager/enums.js +1 -0
  7. package/dist/controls-options-manager/enums.js.map +1 -1
  8. package/dist/controls-options-manager/types.js.map +1 -1
  9. package/dist/controls-options-manager/util.js +26 -0
  10. package/dist/controls-options-manager/util.js.map +1 -1
  11. package/dist/interpretation/index.js +1 -1
  12. package/dist/interpretation/siLanguage.js +1 -1
  13. package/dist/locus-info/controlsUtils.js +11 -3
  14. package/dist/locus-info/controlsUtils.js.map +1 -1
  15. package/dist/locus-info/index.js +68 -84
  16. package/dist/locus-info/index.js.map +1 -1
  17. package/dist/media/index.js +2 -2
  18. package/dist/media/index.js.map +1 -1
  19. package/dist/meeting/brbState.js +17 -14
  20. package/dist/meeting/brbState.js.map +1 -1
  21. package/dist/meeting/in-meeting-actions.js +11 -1
  22. package/dist/meeting/in-meeting-actions.js.map +1 -1
  23. package/dist/meeting/index.js +428 -253
  24. package/dist/meeting/index.js.map +1 -1
  25. package/dist/meeting/request.js +19 -0
  26. package/dist/meeting/request.js.map +1 -1
  27. package/dist/meeting/request.type.js.map +1 -1
  28. package/dist/{rtcMetrics/constants.js → meeting/type.js} +1 -5
  29. package/dist/meeting/type.js.map +1 -0
  30. package/dist/meeting/util.js +68 -2
  31. package/dist/meeting/util.js.map +1 -1
  32. package/dist/meetings/index.js +35 -33
  33. package/dist/meetings/index.js.map +1 -1
  34. package/dist/members/index.js +11 -9
  35. package/dist/members/index.js.map +1 -1
  36. package/dist/members/request.js +3 -3
  37. package/dist/members/request.js.map +1 -1
  38. package/dist/members/util.js +18 -6
  39. package/dist/members/util.js.map +1 -1
  40. package/dist/metrics/constants.js +1 -0
  41. package/dist/metrics/constants.js.map +1 -1
  42. package/dist/multistream/mediaRequestManager.js +1 -1
  43. package/dist/multistream/mediaRequestManager.js.map +1 -1
  44. package/dist/multistream/remoteMedia.js +34 -5
  45. package/dist/multistream/remoteMedia.js.map +1 -1
  46. package/dist/multistream/remoteMediaGroup.js +42 -2
  47. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  48. package/dist/multistream/sendSlotManager.js +32 -2
  49. package/dist/multistream/sendSlotManager.js.map +1 -1
  50. package/dist/reachability/index.js +5 -10
  51. package/dist/reachability/index.js.map +1 -1
  52. package/dist/types/constants.d.ts +28 -0
  53. package/dist/types/controls-options-manager/enums.d.ts +2 -1
  54. package/dist/types/controls-options-manager/types.d.ts +4 -1
  55. package/dist/types/locus-info/index.d.ts +0 -9
  56. package/dist/types/meeting/brbState.d.ts +0 -1
  57. package/dist/types/meeting/in-meeting-actions.d.ts +10 -0
  58. package/dist/types/meeting/index.d.ts +47 -19
  59. package/dist/types/meeting/request.d.ts +9 -1
  60. package/dist/types/meeting/request.type.d.ts +74 -0
  61. package/dist/types/meeting/type.d.ts +9 -0
  62. package/dist/types/meeting/util.d.ts +3 -0
  63. package/dist/types/members/index.d.ts +10 -7
  64. package/dist/types/members/request.d.ts +1 -1
  65. package/dist/types/members/util.d.ts +7 -3
  66. package/dist/types/metrics/constants.d.ts +1 -0
  67. package/dist/types/multistream/remoteMedia.d.ts +20 -1
  68. package/dist/types/multistream/remoteMediaGroup.d.ts +11 -0
  69. package/dist/types/multistream/sendSlotManager.d.ts +16 -0
  70. package/dist/types/reachability/index.d.ts +2 -2
  71. package/dist/webinar/index.js +1 -1
  72. package/package.json +24 -25
  73. package/src/constants.ts +32 -2
  74. package/src/controls-options-manager/enums.ts +1 -0
  75. package/src/controls-options-manager/types.ts +6 -1
  76. package/src/controls-options-manager/util.ts +31 -0
  77. package/src/locus-info/controlsUtils.ts +15 -0
  78. package/src/locus-info/index.ts +88 -82
  79. package/src/media/index.ts +2 -2
  80. package/src/meeting/brbState.ts +13 -9
  81. package/src/meeting/in-meeting-actions.ts +21 -0
  82. package/src/meeting/index.ts +254 -71
  83. package/src/meeting/request.ts +16 -0
  84. package/src/meeting/request.type.ts +64 -0
  85. package/src/meeting/type.ts +9 -0
  86. package/src/meeting/util.ts +73 -2
  87. package/src/meetings/index.ts +3 -2
  88. package/src/members/index.ts +13 -10
  89. package/src/members/request.ts +2 -2
  90. package/src/members/util.ts +16 -4
  91. package/src/metrics/constants.ts +1 -0
  92. package/src/multistream/mediaRequestManager.ts +7 -7
  93. package/src/multistream/remoteMedia.ts +34 -4
  94. package/src/multistream/remoteMediaGroup.ts +37 -2
  95. package/src/multistream/sendSlotManager.ts +34 -2
  96. package/src/reachability/index.ts +5 -13
  97. package/test/unit/spec/controls-options-manager/util.js +58 -0
  98. package/test/unit/spec/locus-info/controlsUtils.js +52 -0
  99. package/test/unit/spec/locus-info/index.js +218 -82
  100. package/test/unit/spec/media/index.ts +107 -0
  101. package/test/unit/spec/meeting/brbState.ts +23 -4
  102. package/test/unit/spec/meeting/in-meeting-actions.ts +10 -0
  103. package/test/unit/spec/meeting/index.js +901 -84
  104. package/test/unit/spec/meeting/request.js +71 -0
  105. package/test/unit/spec/meeting/utils.js +122 -1
  106. package/test/unit/spec/meetings/index.js +2 -0
  107. package/test/unit/spec/members/index.js +68 -9
  108. package/test/unit/spec/members/request.js +2 -2
  109. package/test/unit/spec/members/utils.js +27 -7
  110. package/test/unit/spec/multistream/mediaRequestManager.ts +19 -6
  111. package/test/unit/spec/multistream/remoteMedia.ts +66 -2
  112. package/test/unit/spec/multistream/sendSlotManager.ts +59 -0
  113. package/test/unit/spec/reachability/index.ts +2 -6
  114. package/dist/annotation/annotation.types.d.ts +0 -42
  115. package/dist/annotation/constants.d.ts +0 -31
  116. package/dist/annotation/index.d.ts +0 -117
  117. package/dist/breakouts/breakout.d.ts +0 -8
  118. package/dist/breakouts/collection.d.ts +0 -5
  119. package/dist/breakouts/edit-lock-error.d.ts +0 -15
  120. package/dist/breakouts/events.d.ts +0 -8
  121. package/dist/breakouts/index.d.ts +0 -5
  122. package/dist/breakouts/request.d.ts +0 -22
  123. package/dist/breakouts/utils.d.ts +0 -15
  124. package/dist/common/browser-detection.d.ts +0 -9
  125. package/dist/common/collection.d.ts +0 -48
  126. package/dist/common/config.d.ts +0 -2
  127. package/dist/common/errors/captcha-error.d.ts +0 -15
  128. package/dist/common/errors/intent-to-join.d.ts +0 -16
  129. package/dist/common/errors/join-meeting.d.ts +0 -17
  130. package/dist/common/errors/media.d.ts +0 -15
  131. package/dist/common/errors/no-meeting-info.d.ts +0 -14
  132. package/dist/common/errors/parameter.d.ts +0 -15
  133. package/dist/common/errors/password-error.d.ts +0 -15
  134. package/dist/common/errors/permission.d.ts +0 -14
  135. package/dist/common/errors/reclaim-host-role-error.d.ts +0 -60
  136. package/dist/common/errors/reclaim-host-role-error.js +0 -158
  137. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  138. package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
  139. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  140. package/dist/common/errors/reconnection-in-progress.js +0 -35
  141. package/dist/common/errors/reconnection-in-progress.js.map +0 -1
  142. package/dist/common/errors/reconnection.d.ts +0 -15
  143. package/dist/common/errors/stats.d.ts +0 -15
  144. package/dist/common/errors/webex-errors.d.ts +0 -81
  145. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  146. package/dist/common/events/events-scope.d.ts +0 -17
  147. package/dist/common/events/events.d.ts +0 -12
  148. package/dist/common/events/trigger-proxy.d.ts +0 -2
  149. package/dist/common/events/util.d.ts +0 -2
  150. package/dist/common/logs/logger-config.d.ts +0 -2
  151. package/dist/common/logs/logger-proxy.d.ts +0 -2
  152. package/dist/common/logs/request.d.ts +0 -34
  153. package/dist/common/queue.d.ts +0 -32
  154. package/dist/config.d.ts +0 -73
  155. package/dist/constants.d.ts +0 -952
  156. package/dist/controls-options-manager/constants.d.ts +0 -4
  157. package/dist/controls-options-manager/enums.d.ts +0 -5
  158. package/dist/controls-options-manager/index.d.ts +0 -120
  159. package/dist/controls-options-manager/types.d.ts +0 -43
  160. package/dist/controls-options-manager/util.d.ts +0 -7
  161. package/dist/index.d.ts +0 -4
  162. package/dist/interceptors/index.d.ts +0 -2
  163. package/dist/interceptors/locusRetry.d.ts +0 -27
  164. package/dist/interpretation/collection.d.ts +0 -5
  165. package/dist/interpretation/index.d.ts +0 -5
  166. package/dist/interpretation/siLanguage.d.ts +0 -5
  167. package/dist/locus-info/controlsUtils.d.ts +0 -2
  168. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  169. package/dist/locus-info/fullState.d.ts +0 -2
  170. package/dist/locus-info/hostUtils.d.ts +0 -2
  171. package/dist/locus-info/index.d.ts +0 -269
  172. package/dist/locus-info/infoUtils.d.ts +0 -2
  173. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  174. package/dist/locus-info/parser.d.ts +0 -212
  175. package/dist/locus-info/selfUtils.d.ts +0 -2
  176. package/dist/media/index.d.ts +0 -32
  177. package/dist/media/properties.d.ts +0 -108
  178. package/dist/media/util.d.ts +0 -2
  179. package/dist/mediaQualityMetrics/config.d.ts +0 -233
  180. package/dist/mediaQualityMetrics/config.js +0 -513
  181. package/dist/mediaQualityMetrics/config.js.map +0 -1
  182. package/dist/meeting/effectsState.d.ts +0 -42
  183. package/dist/meeting/effectsState.js +0 -260
  184. package/dist/meeting/effectsState.js.map +0 -1
  185. package/dist/meeting/in-meeting-actions.d.ts +0 -79
  186. package/dist/meeting/index.d.ts +0 -1622
  187. package/dist/meeting/locusMediaRequest.d.ts +0 -74
  188. package/dist/meeting/muteState.d.ts +0 -116
  189. package/dist/meeting/request.d.ts +0 -257
  190. package/dist/meeting/request.type.d.ts +0 -11
  191. package/dist/meeting/state.d.ts +0 -9
  192. package/dist/meeting/util.d.ts +0 -2
  193. package/dist/meeting/voicea-meeting.d.ts +0 -16
  194. package/dist/meeting-info/collection.d.ts +0 -20
  195. package/dist/meeting-info/index.d.ts +0 -57
  196. package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
  197. package/dist/meeting-info/request.d.ts +0 -22
  198. package/dist/meeting-info/util.d.ts +0 -2
  199. package/dist/meeting-info/utilv2.d.ts +0 -2
  200. package/dist/meetings/collection.d.ts +0 -23
  201. package/dist/meetings/index.d.ts +0 -296
  202. package/dist/meetings/meetings.types.d.ts +0 -4
  203. package/dist/meetings/request.d.ts +0 -27
  204. package/dist/meetings/util.d.ts +0 -18
  205. package/dist/member/index.d.ts +0 -148
  206. package/dist/member/member.types.d.ts +0 -11
  207. package/dist/member/member.types.js +0 -18
  208. package/dist/member/member.types.js.map +0 -1
  209. package/dist/member/types.d.ts +0 -32
  210. package/dist/member/util.d.ts +0 -2
  211. package/dist/members/collection.d.ts +0 -24
  212. package/dist/members/index.d.ts +0 -308
  213. package/dist/members/request.d.ts +0 -58
  214. package/dist/members/types.d.ts +0 -25
  215. package/dist/members/util.d.ts +0 -2
  216. package/dist/metrics/config.d.ts +0 -169
  217. package/dist/metrics/config.js +0 -289
  218. package/dist/metrics/config.js.map +0 -1
  219. package/dist/metrics/constants.d.ts +0 -59
  220. package/dist/metrics/index.d.ts +0 -152
  221. package/dist/multistream/mediaRequestManager.d.ts +0 -119
  222. package/dist/multistream/receiveSlot.d.ts +0 -68
  223. package/dist/multistream/receiveSlotManager.d.ts +0 -56
  224. package/dist/multistream/remoteMedia.d.ts +0 -72
  225. package/dist/multistream/remoteMediaGroup.d.ts +0 -49
  226. package/dist/multistream/remoteMediaManager.d.ts +0 -300
  227. package/dist/multistream/sendSlotManager.d.ts +0 -69
  228. package/dist/networkQualityMonitor/index.d.ts +0 -70
  229. package/dist/networkQualityMonitor/index.js +0 -226
  230. package/dist/networkQualityMonitor/index.js.map +0 -1
  231. package/dist/peer-connection-manager/index.d.ts +0 -6
  232. package/dist/peer-connection-manager/index.js +0 -671
  233. package/dist/peer-connection-manager/index.js.map +0 -1
  234. package/dist/peer-connection-manager/util.d.ts +0 -6
  235. package/dist/peer-connection-manager/util.js +0 -110
  236. package/dist/peer-connection-manager/util.js.map +0 -1
  237. package/dist/personal-meeting-room/index.d.ts +0 -47
  238. package/dist/personal-meeting-room/request.d.ts +0 -14
  239. package/dist/personal-meeting-room/util.d.ts +0 -2
  240. package/dist/reachability/clusterReachability.d.ts +0 -109
  241. package/dist/reachability/index.d.ts +0 -139
  242. package/dist/reachability/request.d.ts +0 -35
  243. package/dist/reachability/util.d.ts +0 -8
  244. package/dist/reactions/constants.d.ts +0 -3
  245. package/dist/reactions/reactions.d.ts +0 -4
  246. package/dist/reactions/reactions.type.d.ts +0 -32
  247. package/dist/reconnection-manager/index.d.ts +0 -112
  248. package/dist/recording-controller/enums.d.ts +0 -7
  249. package/dist/recording-controller/index.d.ts +0 -193
  250. package/dist/recording-controller/util.d.ts +0 -13
  251. package/dist/roap/collection.d.ts +0 -10
  252. package/dist/roap/collection.js +0 -63
  253. package/dist/roap/collection.js.map +0 -1
  254. package/dist/roap/handler.d.ts +0 -47
  255. package/dist/roap/handler.js +0 -279
  256. package/dist/roap/handler.js.map +0 -1
  257. package/dist/roap/index.d.ts +0 -116
  258. package/dist/roap/request.d.ts +0 -35
  259. package/dist/roap/state.d.ts +0 -9
  260. package/dist/roap/state.js +0 -127
  261. package/dist/roap/state.js.map +0 -1
  262. package/dist/roap/turnDiscovery.d.ts +0 -81
  263. package/dist/roap/util.d.ts +0 -2
  264. package/dist/roap/util.js +0 -76
  265. package/dist/roap/util.js.map +0 -1
  266. package/dist/rtcMetrics/constants.d.ts +0 -4
  267. package/dist/rtcMetrics/constants.js.map +0 -1
  268. package/dist/rtcMetrics/index.d.ts +0 -61
  269. package/dist/rtcMetrics/index.js +0 -197
  270. package/dist/rtcMetrics/index.js.map +0 -1
  271. package/dist/statsAnalyzer/global.d.ts +0 -118
  272. package/dist/statsAnalyzer/global.js +0 -127
  273. package/dist/statsAnalyzer/global.js.map +0 -1
  274. package/dist/statsAnalyzer/index.d.ts +0 -193
  275. package/dist/statsAnalyzer/index.js +0 -1019
  276. package/dist/statsAnalyzer/index.js.map +0 -1
  277. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
  278. package/dist/statsAnalyzer/mqaUtil.js +0 -181
  279. package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
  280. package/dist/transcription/index.d.ts +0 -64
  281. package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
  282. package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
  283. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  284. package/dist/types/rtcMetrics/constants.d.ts +0 -4
  285. package/dist/types/rtcMetrics/index.d.ts +0 -71
  286. package/dist/types/statsAnalyzer/global.d.ts +0 -36
  287. package/dist/types/statsAnalyzer/index.d.ts +0 -217
  288. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
  289. package/dist/webinar/collection.d.ts +0 -16
  290. package/dist/webinar/index.d.ts +0 -5
@@ -1,1019 +0,0 @@
1
- "use strict";
2
-
3
- var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
4
- var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
5
- var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
- _Object$defineProperty(exports, "__esModule", {
7
- value: true
8
- });
9
- exports.StatsAnalyzer = exports.EVENTS = void 0;
10
- var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
11
- var _stringify = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/json/stringify"));
12
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
13
- var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
14
- var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/assertThisInitialized"));
15
- var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
16
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
17
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
18
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
19
- var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
20
- var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
21
- var _constants = require("../constants");
22
- var _config = _interopRequireDefault(require("../mediaQualityMetrics/config"));
23
- var _loggerProxy = _interopRequireDefault(require("../common/logs/logger-proxy"));
24
- var _global = _interopRequireDefault(require("./global"));
25
- var _mqaUtil = require("./mqaUtil");
26
- 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); }; }
27
- 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; } }
28
- var EVENTS = {
29
- MEDIA_QUALITY: 'MEDIA_QUALITY',
30
- NO_FRAMES_SENT: 'NO_FRAMES_SENT',
31
- NO_VIDEO_ENCODED: 'NO_VIDEO_ENCODED',
32
- LOCAL_MEDIA_STARTED: 'LOCAL_MEDIA_STARTED',
33
- LOCAL_MEDIA_STOPPED: 'LOCAL_MEDIA_STOPPED',
34
- REMOTE_MEDIA_STARTED: 'REMOTE_MEDIA_STARTED',
35
- REMOTE_MEDIA_STOPPED: 'REMOTE_MEDIA_STOPPED'
36
- };
37
-
38
- /**
39
- * Stats Analyzer class that will emit events based on detected quality
40
- *
41
- * @export
42
- * @class StatsAnalyzer
43
- * @extends {EventsScope}
44
- */
45
- exports.EVENTS = EVENTS;
46
- var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
47
- (0, _inherits2.default)(StatsAnalyzer, _EventsScope);
48
- var _super = _createSuper(StatsAnalyzer);
49
- /**
50
- * Creates a new instance of StatsAnalyzer
51
- * @constructor
52
- * @public
53
- * @param {Object} config SDK Configuration Object
54
- * @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)
55
- * @param {Object} statsResults Default properties for stats
56
- */
57
- function StatsAnalyzer(config) {
58
- var _this;
59
- var networkQualityMonitor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
60
- var statsResults = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _global.default;
61
- (0, _classCallCheck2.default)(this, StatsAnalyzer);
62
- _this = _super.call(this);
63
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "config", void 0);
64
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "correlationId", void 0);
65
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastEmittedStartStopEvent", void 0);
66
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastMqaDataSent", void 0);
67
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "lastStatsResults", void 0);
68
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "localMQEStats", void 0);
69
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "meetingMediaStatus", void 0);
70
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mqaInterval", void 0);
71
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "mqaSentCount", void 0);
72
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "networkQualityMonitor", void 0);
73
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "peerConnection", void 0);
74
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsInterval", void 0);
75
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsResults", void 0);
76
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "statsStarted", void 0);
77
- /**
78
- * emits started/stopped events for local/remote media by checking
79
- * if given values are increasing or not. The previousValue, currentValue
80
- * params can be any numerical value like number of receive packets or
81
- * decoded frames, etc.
82
- *
83
- * @private
84
- * @param {string} mediaType
85
- * @param {number} previousValue - value to compare
86
- * @param {number} currentValue - value to compare (must be same type of value as previousValue)
87
- * @param {boolean} isLocal - true if stats are for local media being sent out, false for remote media being received
88
- * @memberof StatsAnalyzer
89
- * @returns {void}
90
- */
91
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "emitStartStopEvents", function (mediaType, previousValue, currentValue, isLocal) {
92
- if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {
93
- throw new Error("Unsupported mediaType: ".concat(mediaType));
94
- }
95
-
96
- // eslint-disable-next-line no-param-reassign
97
- if (previousValue === undefined) previousValue = 0;
98
- // eslint-disable-next-line no-param-reassign
99
- if (currentValue === undefined) currentValue = 0;
100
- var lastEmittedEvent = isLocal ? _this.lastEmittedStartStopEvent[mediaType].local : _this.lastEmittedStartStopEvent[mediaType].remote;
101
- var newEvent;
102
- if (currentValue - previousValue > 0) {
103
- newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STARTED : EVENTS.REMOTE_MEDIA_STARTED;
104
- } else if (currentValue === previousValue && currentValue >= 0) {
105
- newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STOPPED : EVENTS.REMOTE_MEDIA_STOPPED;
106
- }
107
- if (newEvent && lastEmittedEvent !== newEvent) {
108
- if (isLocal) {
109
- _this.lastEmittedStartStopEvent[mediaType].local = newEvent;
110
- } else {
111
- _this.lastEmittedStartStopEvent[mediaType].remote = newEvent;
112
- }
113
- _this.emit({
114
- file: 'statsAnalyzer/index',
115
- function: 'compareLastStatsResult'
116
- }, newEvent, {
117
- type: mediaType
118
- });
119
- }
120
- });
121
- /**
122
- * Processes remote and local candidate result and stores
123
- * @private
124
- * @param {*} result
125
- * @param {*} type
126
- * @param {boolean} isSender
127
- * @param {boolean} isRemote
128
- *
129
- * @returns {void}
130
- */
131
- (0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "parseCandidate", function (result, type, isSender, isRemote) {
132
- if (!result || !result.id) {
133
- return;
134
- }
135
- var RemoteCandidateType = {};
136
- var RemoteTransport = {};
137
- var RemoteIpAddress = {};
138
- var RemoteNetworkType = {};
139
- if (!result.id) return;
140
- var sendRecvType = isSender ? _constants.STATS.SEND_DIRECTION : _constants.STATS.RECEIVE_DIRECTION;
141
- var ipType = isRemote ? _constants.STATS.REMOTE : _constants.STATS.LOCAL;
142
- if (!RemoteCandidateType[result.id]) {
143
- RemoteCandidateType[result.id] = [];
144
- }
145
- if (!RemoteTransport[result.id]) {
146
- RemoteTransport[result.id] = [];
147
- }
148
- if (!RemoteIpAddress[result.id]) {
149
- RemoteIpAddress[result.id] = [];
150
- }
151
- if (!RemoteNetworkType[result.id]) {
152
- RemoteNetworkType[result.id] = [];
153
- }
154
- if (result.candidateType && RemoteCandidateType[result.id].indexOf(result.candidateType) === -1) {
155
- RemoteCandidateType[result.id].push(result.candidateType);
156
- }
157
- if (result.protocol && RemoteTransport[result.id].indexOf(result.protocol) === -1) {
158
- RemoteTransport[result.id].push(result.protocol.toUpperCase());
159
- }
160
- if (result.ip && RemoteIpAddress[result.id].indexOf("".concat(result.ip, ":").concat(result.portNumber)) === -1) {
161
- RemoteIpAddress[result.id].push("".concat(result.ip)); // TODO: Add ports
162
- }
163
-
164
- if (result.networkType && RemoteNetworkType[result.id].indexOf(result.networkType) === -1) {
165
- RemoteNetworkType[result.id].push(result.networkType);
166
- }
167
- _this.statsResults.internal.candidates[result.id] = {
168
- candidateType: RemoteCandidateType[result.id],
169
- ipAddress: RemoteIpAddress[result.id],
170
- portNumber: result.port,
171
- networkType: RemoteNetworkType[result.id],
172
- priority: result.priority,
173
- transport: RemoteTransport[result.id],
174
- timestamp: result.time,
175
- id: result.id,
176
- type: result.type
177
- };
178
- _this.statsResults.connectionType[ipType].candidateType = RemoteCandidateType[result.id];
179
- _this.statsResults.connectionType[ipType].ipAddress = RemoteIpAddress[result.id];
180
- _this.statsResults.connectionType[ipType].networkType = RemoteNetworkType[result.id][0] === _constants.NETWORK_TYPE.VPN ? _constants.NETWORK_TYPE.UNKNOWN : RemoteNetworkType[result.id][0];
181
- _this.statsResults.connectionType[ipType].transport = RemoteTransport[result.id];
182
- _this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;
183
- });
184
- _this.statsStarted = false;
185
- _this.statsResults = statsResults;
186
- _this.lastStatsResults = null;
187
- _this.config = config;
188
- _this.networkQualityMonitor = networkQualityMonitor;
189
- _this.correlationId = config.correlationId;
190
- _this.mqaSentCount = -1;
191
- _this.lastMqaDataSent = {
192
- resolutions: {
193
- video: {
194
- send: {},
195
- recv: {}
196
- },
197
- audio: {
198
- send: {},
199
- recv: {}
200
- },
201
- share: {
202
- send: {},
203
- recv: {}
204
- }
205
- },
206
- video: {
207
- send: {},
208
- recv: {}
209
- },
210
- audio: {
211
- send: {},
212
- recv: {}
213
- },
214
- share: {
215
- send: {},
216
- recv: {}
217
- }
218
- };
219
- _this.localMQEStats = {
220
- audio: {
221
- RX: {
222
- packetsLost: [],
223
- jitter: [],
224
- latency: [],
225
- bitRate: []
226
- },
227
- TX: {
228
- packetsLost: [],
229
- jitter: [],
230
- latency: [],
231
- bitRate: []
232
- }
233
- },
234
- video: {
235
- RX: {
236
- packetsLost: [],
237
- jitter: [],
238
- latency: [],
239
- bitRate: [],
240
- frameRate: [],
241
- resolutionWidth: [],
242
- resolutionHeight: [],
243
- requestedKeyFrame: [],
244
- receivedKeyFrame: []
245
- },
246
- TX: {
247
- packetsLost: [],
248
- jitter: [],
249
- latency: [],
250
- bitRate: [],
251
- frameRate: [],
252
- resolutionWidth: [],
253
- resolutionHeight: [],
254
- requestedKeyFrame: [],
255
- receivedKeyFrame: []
256
- }
257
- }
258
- };
259
- _this.lastEmittedStartStopEvent = {
260
- audio: {
261
- local: undefined,
262
- remote: undefined
263
- },
264
- video: {
265
- local: undefined,
266
- remote: undefined
267
- },
268
- share: {
269
- local: undefined,
270
- remote: undefined
271
- }
272
- };
273
- return _this;
274
- }
275
- (0, _createClass2.default)(StatsAnalyzer, [{
276
- key: "populateResults",
277
- value: function populateResults(lastMqa) {
278
- // Audio
279
-
280
- this.localMQEStats.audio.RX.packetsLost.push(lastMqa.audioReceive[0].common.mediaHopByHopLost);
281
- this.localMQEStats.audio.RX.jitter.push(lastMqa.audioReceive[0].streams[0].common.rtpJitter);
282
- this.localMQEStats.audio.RX.latency.push(lastMqa.audioReceive[0].common.roundTripTime);
283
- this.localMQEStats.audio.RX.bitRate.push(lastMqa.audioReceive[0].streams[0].common.receivedBitrate);
284
- this.localMQEStats.audio.TX.packetsLost.push(lastMqa.audioTransmit[0].common.remoteLossRate);
285
- this.localMQEStats.audio.TX.jitter.push(lastMqa.audioTransmit[0].common.remoteJitter);
286
- this.localMQEStats.audio.TX.latency.push(lastMqa.audioTransmit[0].common.roundTripTime);
287
- this.localMQEStats.audio.TX.bitRate.push(lastMqa.audioTransmit[0].streams[0].common.transmittedBitrate);
288
-
289
- // Video
290
-
291
- this.localMQEStats.video.RX.packetsLost.push(lastMqa.videoReceive[0].common.mediaHopByHopLost);
292
- this.localMQEStats.video.RX.jitter.push(lastMqa.videoReceive[0].streams[0].common.rtpJitter);
293
- this.localMQEStats.video.RX.latency.push(lastMqa.videoReceive[0].streams[0].common.roundTripTime);
294
- this.localMQEStats.video.RX.bitRate.push(lastMqa.videoReceive[0].streams[0].common.receivedBitrate);
295
- this.localMQEStats.video.RX.frameRate.push(lastMqa.videoReceive[0].streams[0].common.receivedFrameRate);
296
- this.localMQEStats.video.RX.resolutionWidth.push(lastMqa.videoReceive[0].streams[0].receivedWidth);
297
- this.localMQEStats.video.RX.resolutionHeight.push(lastMqa.videoReceive[0].streams[0].receivedHeight);
298
- this.localMQEStats.video.RX.requestedKeyFrame.push();
299
- this.localMQEStats.video.RX.receivedKeyFrame.push();
300
- this.localMQEStats.video.TX.packetsLost.push(lastMqa.videoTransmit[0].common.remoteLossRate);
301
- this.localMQEStats.video.TX.jitter.push(lastMqa.videoTransmit[0].common.remoteJitter);
302
- this.localMQEStats.video.TX.latency.push(lastMqa.videoTransmit[0].common.roundTripTime);
303
- this.localMQEStats.video.TX.bitRate.push(lastMqa.videoTransmit[0].streams[0].common.transmittedBitrate);
304
- this.localMQEStats.video.TX.frameRate.push(lastMqa.videoTransmit[0].streams[0].common.transmittedFrameRate);
305
- this.localMQEStats.video.TX.resolutionWidth.push(lastMqa.videoTransmit[0].streams[0].transmittedWidth);
306
- this.localMQEStats.video.TX.resolutionHeight.push(lastMqa.videoTransmit[0].streams[0].transmittedHeight);
307
- this.localMQEStats.video.TX.requestedKeyFrame.push(lastMqa.videoTransmit[0].streams[0].requestedKeyFrames);
308
- this.localMQEStats.video.TX.receivedKeyFrame.push();
309
- }
310
- }, {
311
- key: "resetStatsResults",
312
- value: function resetStatsResults() {
313
- this.statsResults.audio.send.meanRemoteJitter = [];
314
- this.statsResults.video.send.meanRemoteJitter = [];
315
- this.statsResults.share.send.meanRemoteJitter = [];
316
- this.statsResults.audio.recv.meanRtpJitter = [];
317
-
318
- // TODO: currently no values are present
319
- this.statsResults.video.recv.meanRtpJitter = [];
320
- this.statsResults.share.recv.meanRtpJitter = [];
321
-
322
- // Reset the roundTripTime
323
- this.statsResults.audio.send.meanRoundTripTime = [];
324
- this.statsResults.video.send.meanRoundTripTime = [];
325
- this.statsResults.share.send.meanRoundTripTime = [];
326
- }
327
-
328
- /**
329
- * sets mediaStatus status for analyzing metrics
330
- *
331
- * @public
332
- * @param {Object} status for the audio and video
333
- * @memberof StatsAnalyzer
334
- * @returns {void}
335
- */
336
- }, {
337
- key: "updateMediaStatus",
338
- value: function updateMediaStatus(status) {
339
- this.meetingMediaStatus = status;
340
- }
341
-
342
- /**
343
- * captures MQA data from peerconnection
344
- *
345
- * @public
346
- * @memberof StatsAnalyzer
347
- * @returns {void}
348
- */
349
- }, {
350
- key: "sendMqaData",
351
- value: function sendMqaData() {
352
- var _this$peerConnection, _this$peerConnection$, _this$peerConnection$2, _this$peerConnection$3, _this$peerConnection2, _this$peerConnection3, _this$peerConnection4, _this$peerConnection5;
353
- var audioReceiver = _config.default.intervals[0].audioReceive[0];
354
- var audioSender = _config.default.intervals[0].audioTransmit[0];
355
- var videoReceiver = _config.default.intervals[0].videoReceive[0];
356
- var videoSender = _config.default.intervals[0].videoTransmit[0];
357
- var shareSender = _config.default.intervals[0].videoTransmit[1];
358
- var shareReceiver = _config.default.intervals[0].videoReceive[1];
359
- (0, _mqaUtil.getAudioSenderMqa)({
360
- audioSender: audioSender,
361
- statsResults: this.statsResults,
362
- lastMqaDataSent: this.lastMqaDataSent
363
- });
364
- (0, _mqaUtil.getAudioReceiverMqa)({
365
- audioReceiver: audioReceiver,
366
- statsResults: this.statsResults,
367
- lastMqaDataSent: this.lastMqaDataSent
368
- });
369
- (0, _mqaUtil.getVideoReceiverMqa)({
370
- videoReceiver: videoReceiver,
371
- statsResults: this.statsResults,
372
- lastMqaDataSent: this.lastMqaDataSent
373
- });
374
- (0, _mqaUtil.getVideoSenderMqa)({
375
- videoSender: videoSender,
376
- statsResults: this.statsResults,
377
- lastMqaDataSent: this.lastMqaDataSent
378
- });
379
-
380
- // Capture mqa for share scenario
381
-
382
- (0, _mqaUtil.getVideoSenderMqa)({
383
- videoSender: shareSender,
384
- statsResults: this.statsResults,
385
- lastMqaDataSent: this.lastMqaDataSent,
386
- isShareStream: true
387
- });
388
- (0, _mqaUtil.getVideoReceiverMqa)({
389
- videoReceiver: shareReceiver,
390
- statsResults: this.statsResults,
391
- lastMqaDataSent: this.lastMqaDataSent,
392
- isShareStream: true
393
- });
394
- _config.default.intervals[0].intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress[0];
395
-
396
- // Adding peripheral information
397
- _config.default.intervals[0].intervalMetadata.peripherals = [];
398
- _config.default.intervals[0].intervalMetadata.peripherals.push({
399
- information: _constants._UNKNOWN_,
400
- name: _constants.MEDIA_DEVICES.SPEAKER
401
- });
402
- _config.default.intervals[0].intervalMetadata.peripherals.push({
403
- information: ((_this$peerConnection = this.peerConnection) === null || _this$peerConnection === void 0 ? void 0 : (_this$peerConnection$ = _this$peerConnection.audioTransceiver) === null || _this$peerConnection$ === void 0 ? void 0 : (_this$peerConnection$2 = _this$peerConnection$.sender) === null || _this$peerConnection$2 === void 0 ? void 0 : (_this$peerConnection$3 = _this$peerConnection$2.track) === null || _this$peerConnection$3 === void 0 ? void 0 : _this$peerConnection$3.label) || _constants._UNKNOWN_,
404
- name: _constants.MEDIA_DEVICES.MICROPHONE
405
- });
406
- _config.default.intervals[0].intervalMetadata.peripherals.push({
407
- information: ((_this$peerConnection2 = this.peerConnection) === null || _this$peerConnection2 === void 0 ? void 0 : (_this$peerConnection3 = _this$peerConnection2.videoTransceiver) === null || _this$peerConnection3 === void 0 ? void 0 : (_this$peerConnection4 = _this$peerConnection3.sender) === null || _this$peerConnection4 === void 0 ? void 0 : (_this$peerConnection5 = _this$peerConnection4.track) === null || _this$peerConnection5 === void 0 ? void 0 : _this$peerConnection5.label) || _constants._UNKNOWN_,
408
- name: _constants.MEDIA_DEVICES.CAMERA
409
- });
410
-
411
- // @ts-ignore
412
- _config.default.networkType = this.statsResults.connectionType.local.networkType;
413
- this.mqaSentCount += 1;
414
- _config.default.intervals[0].intervalNumber = this.mqaSentCount;
415
-
416
- // DO Deep copy, for some reason it takes the reference all the time rather then old value set
417
- this.lastMqaDataSent = (0, _cloneDeep2.default)(this.statsResults);
418
- this.populateResults(_config.default.intervals[0]);
419
- this.resetStatsResults();
420
- this.emit({
421
- file: 'statsAnalyzer',
422
- function: 'sendMqaData'
423
- }, EVENTS.MEDIA_QUALITY, {
424
- data: _config.default.intervals[0],
425
- // @ts-ignore
426
- networkType: _config.default.networkType
427
- });
428
- }
429
-
430
- /**
431
- * updated the peerconnection when changed
432
- *
433
- * @private
434
- * @memberof updatePeerconnection
435
- * @param {PeerConnection} peerConnection
436
- * @returns {void}
437
- */
438
- }, {
439
- key: "updatePeerconnection",
440
- value: function updatePeerconnection(peerConnection) {
441
- this.peerConnection = peerConnection;
442
- }
443
-
444
- /**
445
- * Starts the stats analyzer on interval
446
- *
447
- * @public
448
- * @memberof StatsAnalyzer
449
- * @param {PeerConnection} peerConnection
450
- * @returns {Promise}
451
- */
452
- }, {
453
- key: "startAnalyzer",
454
- value: function startAnalyzer(peerConnection) {
455
- var _this2 = this;
456
- if (!this.statsStarted) {
457
- this.statsStarted = true;
458
- this.peerConnection = peerConnection;
459
- return this.getStatsAndParse().then(function () {
460
- _this2.statsInterval = setInterval(function () {
461
- _this2.getStatsAndParse();
462
- }, _this2.config.analyzerInterval);
463
- // Trigger initial fetch
464
- _this2.sendMqaData();
465
- _this2.mqaInterval = setInterval(function () {
466
- _this2.sendMqaData();
467
- }, _constants.MQA_INTEVAL);
468
- });
469
- }
470
- return _promise.default.resolve();
471
- }
472
-
473
- /**
474
- * Cleans up the analyzer when done
475
- *
476
- * @public
477
- * @memberof StatsAnalyzer
478
- * @returns {void}
479
- */
480
- }, {
481
- key: "stopAnalyzer",
482
- value: function stopAnalyzer() {
483
- var _this3 = this;
484
- var sendOneLastMqa = this.mqaInterval && this.statsInterval;
485
- if (this.statsInterval) {
486
- clearInterval(this.statsInterval);
487
- this.statsInterval = undefined;
488
- }
489
- if (this.mqaInterval) {
490
- clearInterval(this.mqaInterval);
491
- this.mqaInterval = undefined;
492
- }
493
- if (sendOneLastMqa) {
494
- return this.getStatsAndParse().then(function () {
495
- _this3.sendMqaData();
496
- _this3.peerConnection = null;
497
- });
498
- }
499
- return _promise.default.resolve();
500
- }
501
-
502
- /**
503
- * Parse a single result of get stats
504
- *
505
- * @private
506
- * @param {*} getStatsResult
507
- * @param {String} type
508
- * @param {boolean} isSender
509
- * @returns {void}
510
- * @memberof StatsAnalyzer
511
- */
512
- }, {
513
- key: "parseGetStatsResult",
514
- value: function parseGetStatsResult(getStatsResult, type, isSender) {
515
- if (!getStatsResult) {
516
- return;
517
- }
518
- switch (getStatsResult.type) {
519
- case 'outbound-rtp':
520
- this.processOutboundRTPResult(getStatsResult, type);
521
- break;
522
- case 'inbound-rtp':
523
- this.processInboundRTPResult(getStatsResult, type);
524
- break;
525
- case 'remote-inbound-rtp':
526
- case 'remote-outbound-rtp':
527
- // @ts-ignore
528
- this.compareSentAndReceived(getStatsResult, type, isSender);
529
- break;
530
- case 'remotecandidate':
531
- case 'remote-candidate':
532
- this.parseCandidate(getStatsResult, type, isSender, true);
533
- break;
534
- case 'local-candidate':
535
- this.parseCandidate(getStatsResult, type, isSender, false);
536
- break;
537
- case 'media-source':
538
- // @ts-ignore
539
- this.parseAudioSource(getStatsResult, type);
540
- break;
541
- default:
542
- break;
543
- }
544
- }
545
-
546
- /**
547
- * Filters the get stats results for types
548
- * @private
549
- * @param {Array} getStatsResults
550
- * @param {String} type
551
- * @param {boolean} isSender
552
- * @returns {void}
553
- */
554
- }, {
555
- key: "filterAndParseGetStatsResults",
556
- value: function filterAndParseGetStatsResults(getStatsResults, type, isSender) {
557
- var _this4 = this;
558
- var types = _constants.DEFAULT_GET_STATS_FILTER.types;
559
- getStatsResults.forEach(function (result) {
560
- if (types.includes(result.type)) {
561
- _this4.parseGetStatsResult(result, type, isSender);
562
- }
563
- });
564
- }
565
-
566
- /**
567
- * parse the audio
568
- * @param {String} result
569
- * @param {boolean} type
570
- * @returns {void}
571
- */
572
- }, {
573
- key: "parseAudioSource",
574
- value: function parseAudioSource(result, type) {
575
- if (!result) {
576
- return;
577
- }
578
- if (type === _constants.STATS.AUDIO_CORRELATE) {
579
- this.statsResults[type].send.audioLevel = result.audioLevel;
580
- this.statsResults[type].send.totalAudioEnergy = result.totalAudioEnergy;
581
- }
582
- }
583
- }, {
584
- key: "compareLastStatsResult",
585
- value:
586
- /**
587
- * compares current and previous stats to check if packets are not sent
588
- *
589
- * @private
590
- * @memberof StatsAnalyzer
591
- * @returns {void}
592
- */
593
- function compareLastStatsResult() {
594
- if (this.lastStatsResults !== null && this.meetingMediaStatus) {
595
- // compare audio stats sent
596
- var mediaType = _constants.STATS.AUDIO_CORRELATE;
597
- var currentStats = null;
598
- var previousStats = null;
599
- if (this.meetingMediaStatus.expected.sendAudio) {
600
- currentStats = this.statsResults[mediaType].send;
601
- previousStats = this.lastStatsResults[mediaType].send;
602
- if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
603
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets sent"));
604
- } else {
605
- if (currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
606
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " Energy present"));
607
- }
608
- if (currentStats.audioLevel === 0) {
609
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> ".concat(mediaType, " level is 0 for the user"));
610
- }
611
- }
612
- this.emitStartStopEvents(mediaType, previousStats.totalPacketsSent, currentStats.totalPacketsSent, true);
613
- }
614
- if (this.meetingMediaStatus.expected.receiveAudio) {
615
- // compare audio stats received
616
- currentStats = this.statsResults[mediaType].recv;
617
- previousStats = this.lastStatsResults[mediaType].recv;
618
- if (currentStats.totalPacketsReceived === previousStats.totalPacketsReceived || currentStats.totalPacketsReceived === 0) {
619
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets received"));
620
- } else if (currentStats.totalSamplesReceived === previousStats.totalSamplesReceived || currentStats.totalSamplesReceived === 0) {
621
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " samples received"));
622
- }
623
- this.emitStartStopEvents(mediaType, previousStats.totalPacketsReceived, currentStats.totalPacketsReceived, false);
624
- }
625
- mediaType = _constants.STATS.VIDEO_CORRELATE;
626
- if (this.meetingMediaStatus.expected.sendVideo) {
627
- // compare video stats sent
628
- currentStats = this.statsResults[mediaType].send;
629
- previousStats = this.lastStatsResults[mediaType].send;
630
- if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
631
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets sent"));
632
- } else if (this.lastEmittedStartStopEvent[mediaType].local !== EVENTS.LOCAL_MEDIA_STOPPED) {
633
- if (currentStats.framesEncoded === previousStats.framesEncoded || currentStats.framesEncoded === 0) {
634
- this.lastEmittedStartStopEvent[mediaType].local = EVENTS.NO_VIDEO_ENCODED;
635
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " Frames Encoded"));
636
- this.emit({
637
- file: 'statsAnalyzer',
638
- function: 'compareLastStatsResult'
639
- }, EVENTS.NO_VIDEO_ENCODED, {
640
- mediaType: mediaType
641
- });
642
- }
643
- if (this.statsResults.resolutions[mediaType].send.framesSent === this.lastStatsResults.resolutions[mediaType].send.framesSent || this.statsResults.resolutions[mediaType].send.framesSent === 0) {
644
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " Frames sent"));
645
- }
646
-
647
- // Video is encoded but frames are not sent
648
- if (currentStats.framesEncoded !== previousStats.framesEncoded && (currentStats.framesSent === previousStats.framesSent || currentStats.framesSent === 0)) {
649
- this.lastEmittedStartStopEvent[mediaType].local = EVENTS.NO_FRAMES_SENT;
650
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames sent even though frames are encoded"));
651
- this.emit({
652
- file: 'statsAnalyzer',
653
- function: 'compareLastStatsResult'
654
- }, EVENTS.NO_FRAMES_SENT, {
655
- mediaType: mediaType
656
- });
657
- }
658
- }
659
- this.emitStartStopEvents(mediaType, previousStats.framesSent, currentStats.framesSent, true);
660
- }
661
- if (this.meetingMediaStatus.expected.receiveVideo) {
662
- // compare video stats reveived
663
-
664
- currentStats = this.statsResults[mediaType].recv;
665
- previousStats = this.lastStatsResults[mediaType].recv;
666
- if (currentStats.totalPacketsReceived === previousStats.totalPacketsReceived || currentStats.totalPacketsReceived === 0) {
667
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets received"));
668
- } else {
669
- if (this.statsResults.resolutions[mediaType].recv.framesReceived === this.lastStatsResults.resolutions[mediaType].recv.framesReceived || this.statsResults.resolutions[mediaType].recv.framesReceived === 0) {
670
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames received"));
671
- }
672
- if (this.statsResults[mediaType].recv.framesDecoded === this.lastStatsResults[mediaType].recv.framesDecoded || this.statsResults.resolutions[mediaType].send.framesDecoded === 0) {
673
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames decoded"));
674
- }
675
- if (this.statsResults.resolutions[mediaType].recv.framesDropped - this.lastStatsResults.resolutions[mediaType].recv.framesDropped > 10) {
676
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> ".concat(mediaType, " frames are getting dropped"));
677
- }
678
- }
679
- this.emitStartStopEvents(mediaType, previousStats.framesDecoded, currentStats.framesDecoded, false);
680
- }
681
- mediaType = _constants.STATS.SHARE_CORRELATE;
682
- if (this.meetingMediaStatus.expected.sendShare) {
683
- // compare share stats sent
684
-
685
- currentStats = this.statsResults[mediaType].send;
686
- previousStats = this.lastStatsResults[mediaType].send;
687
- if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
688
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets sent"));
689
- } else if (this.lastEmittedStartStopEvent[mediaType].local !== EVENTS.LOCAL_MEDIA_STOPPED) {
690
- if (currentStats.framesEncoded === previousStats.framesEncoded || currentStats.framesEncoded === 0) {
691
- this.lastEmittedStartStopEvent[mediaType].local = EVENTS.NO_VIDEO_ENCODED;
692
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames getting encoded"));
693
- this.emit({
694
- file: 'statsAnalyzer',
695
- function: 'compareLastStatsResult'
696
- }, EVENTS.NO_VIDEO_ENCODED, {
697
- mediaType: mediaType
698
- });
699
- }
700
- if (this.statsResults.resolutions[mediaType].send.framesSent === this.lastStatsResults.resolutions[mediaType].send.framesSent || this.statsResults.resolutions[mediaType].send.framesSent === 0) {
701
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames sent"));
702
- }
703
-
704
- // Share video is encoded but frames are not sent
705
- if (currentStats.framesEncoded !== previousStats.framesEncoded && (currentStats.framesSent === previousStats.framesSent || currentStats.framesSent === 0)) {
706
- this.lastEmittedStartStopEvent[mediaType].local = EVENTS.NO_FRAMES_SENT;
707
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " Frames sent even though frames are being encoded"));
708
- this.emit({
709
- file: 'statsAnalyzer',
710
- function: 'compareLastStatsResult'
711
- }, EVENTS.NO_FRAMES_SENT, {
712
- mediaType: mediaType
713
- });
714
- }
715
- }
716
-
717
- // TODO:need to check receive share value
718
- // compare share stats reveived
719
- currentStats = this.statsResults[mediaType].recv;
720
- previousStats = this.lastStatsResults[mediaType].recv;
721
- if (currentStats.totalPacketsReceived === previousStats.totalPacketsReceived || currentStats.totalPacketsSent === 0) {
722
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets received"));
723
- } else {
724
- if (this.statsResults.resolutions[mediaType].recv.framesReceived === this.lastStatsResults.resolutions[mediaType].recv.framesReceived || this.statsResults.resolutions[mediaType].recv.framesReceived === 0) {
725
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames received"));
726
- }
727
- if (this.statsResults[mediaType].recv.framesDecoded === this.lastStatsResults[mediaType].recv.framesDecoded || this.statsResults.resolutions[mediaType].send.framesDecoded === 0) {
728
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames decoded"));
729
- }
730
- if (this.statsResults.resolutions[mediaType].recv.framesDropped - this.lastStatsResults.resolutions[mediaType].recv.framesDropped > 10) {
731
- _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> ".concat(mediaType, " frames are getting dropped"));
732
- }
733
- }
734
-
735
- // we are not calling emitStartStopEvents() for sending or receiving share because sharing is often started and stopped
736
- // in meetings and this.meetingMediaStatus.expected values can be out of sync with the actual packet flow
737
- // so we would send "sharing stopped" events incorrectly
738
- }
739
- }
740
- }
741
-
742
- /**
743
- * Does a `getStats` on all the transceivers and parses the results
744
- *
745
- * @private
746
- * @memberof StatsAnalyzer
747
- * @returns {Promise}
748
- */
749
- }, {
750
- key: "getStatsAndParse",
751
- value: function getStatsAndParse() {
752
- var _this5 = this;
753
- if (!this.peerConnection) {
754
- return _promise.default.resolve();
755
- }
756
- if (this.peerConnection && this.peerConnection.connectionState === _constants.CONNECTION_STATE.FAILED) {
757
- _loggerProxy.default.logger.trace('StatsAnalyzer:index#getStatsAndParse --> PeerConnection is in failed state');
758
- return _promise.default.resolve();
759
- }
760
- _loggerProxy.default.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');
761
- return _promise.default.all([this.peerConnection.videoTransceiver.sender.getStats().then(function (res) {
762
- _this5.filterAndParseGetStatsResults(res, _constants.STATS.VIDEO_CORRELATE, true);
763
- }), this.peerConnection.videoTransceiver.receiver.getStats().then(function (res) {
764
- _this5.filterAndParseGetStatsResults(res, _constants.STATS.VIDEO_CORRELATE, false);
765
- }), this.peerConnection.audioTransceiver.sender.getStats().then(function (res) {
766
- _this5.filterAndParseGetStatsResults(res, _constants.STATS.AUDIO_CORRELATE, true);
767
- }), this.peerConnection.audioTransceiver.receiver.getStats().then(function (res) {
768
- _this5.filterAndParseGetStatsResults(res, _constants.STATS.AUDIO_CORRELATE, false);
769
- }),
770
- // TODO: add checks for screen share
771
- this.peerConnection.shareTransceiver.sender.getStats().then(function (res) {
772
- _this5.filterAndParseGetStatsResults(res, _constants.STATS.SHARE_CORRELATE, true);
773
- }), this.peerConnection.shareTransceiver.receiver.getStats().then(function (res) {
774
- _this5.filterAndParseGetStatsResults(res, _constants.STATS.SHARE_CORRELATE, false);
775
- })]).then(function () {
776
- _this5.statsResults[_constants.STATS.AUDIO_CORRELATE].direction = _this5.peerConnection.audioTransceiver.currentDirection;
777
- _this5.statsResults[_constants.STATS.VIDEO_CORRELATE].direction = _this5.peerConnection.videoTransceiver.currentDirection;
778
- _this5.statsResults[_constants.STATS.SHARE_CORRELATE].direction = _this5.peerConnection.shareTransceiver.currentDirection;
779
-
780
- // Process Stats results every 5 seconds
781
- _this5.compareLastStatsResult();
782
-
783
- // Save the last results to compare with the current
784
- _this5.lastStatsResults = JSON.parse((0, _stringify.default)(_this5.statsResults));
785
- _loggerProxy.default.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats');
786
- });
787
- }
788
-
789
- /**
790
- * Processes OutboundRTP stats result and stores
791
- * @private
792
- * @param {*} result
793
- * @param {*} type
794
- * @returns {void}
795
- */
796
- }, {
797
- key: "processOutboundRTPResult",
798
- value: function processOutboundRTPResult(result, type) {
799
- var mediaType = type || _constants.STATS.AUDIO_CORRELATE;
800
- var sendrecvType = _constants.STATS.SEND_DIRECTION;
801
- this.processTrackResult(result, type, sendrecvType);
802
- if (result.bytesSent) {
803
- var kilobytes = 0;
804
- if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesSent) {
805
- this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
806
- }
807
- if (!this.statsResults.internal[mediaType][sendrecvType].framesEncoded) {
808
- this.statsResults.internal[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
809
- }
810
- if (!this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded) {
811
- this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
812
- }
813
- var bytes = result.bytesSent - this.statsResults.internal[mediaType][sendrecvType].prevBytesSent;
814
- this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
815
- kilobytes = bytes / 1024;
816
- this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
817
- this.statsResults[mediaType].bytesSent = kilobytes;
818
- this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded - this.statsResults.internal[mediaType][sendrecvType].framesEncoded;
819
- this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded - this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded;
820
- this.statsResults.internal[mediaType].outboundRtpId = result.id;
821
- if (!this.statsResults.internal[mediaType][sendrecvType].packetsSent) {
822
- this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
823
- }
824
- this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent - this.statsResults.internal[mediaType][sendrecvType].packetsSent;
825
- this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
826
-
827
- // Data saved to send MQA metrics
828
-
829
- this.statsResults[mediaType][sendrecvType].totalKeyFramesEncoded = result.keyFramesEncoded;
830
- this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
831
- this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;
832
- this.statsResults[mediaType][sendrecvType].totalPacketsSent = result.packetsSent;
833
- this.statsResults[mediaType][sendrecvType].totalFirCount = result.firCount;
834
- this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;
835
- this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
836
- this.statsResults[mediaType][sendrecvType].encoderImplementation = result.encoderImplementation;
837
- this.statsResults[mediaType][sendrecvType].qualityLimitationReason = result.qualityLimitationReason;
838
- this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges = result.qualityLimitationResolutionChanges;
839
- this.statsResults[mediaType][sendrecvType].retransmittedPacketsSent = result.retransmittedPacketsSent;
840
- this.statsResults[mediaType][sendrecvType].totalBytesSent = result.bytesSent;
841
- this.statsResults[mediaType][sendrecvType].headerBytesSent = result.headerBytesSent;
842
- this.statsResults[mediaType][sendrecvType].retransmittedBytesSent = result.retransmittedBytesSent;
843
- }
844
- }
845
-
846
- /**
847
- * Processes InboundRTP stats result and stores
848
- * @private
849
- * @param {*} result
850
- * @param {*} type
851
- * @returns {void}
852
- */
853
- }, {
854
- key: "processInboundRTPResult",
855
- value: function processInboundRTPResult(result, type) {
856
- var mediaType = type || _constants.STATS.AUDIO_CORRELATE;
857
- var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
858
- this.processTrackResult(result, type, sendrecvType);
859
- if (result.bytesReceived) {
860
- var kilobytes = 0;
861
- if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {
862
- this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
863
- }
864
- if (!this.statsResults.internal[mediaType][sendrecvType].pliCount) {
865
- this.statsResults.internal[mediaType][sendrecvType].pliCount = result.pliCount;
866
- }
867
- if (!this.statsResults.internal[mediaType][sendrecvType].packetsLost) {
868
- this.statsResults.internal[mediaType][sendrecvType].packetsLost = result.packetsLost;
869
- }
870
- if (!this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived) {
871
- this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
872
- }
873
- if (!this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp) {
874
- this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
875
- }
876
- var bytes = result.bytesReceived - this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived;
877
- this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
878
- kilobytes = bytes / 1024;
879
- this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
880
- this.statsResults[mediaType].bytesReceived = kilobytes.toFixed(1);
881
- this.statsResults[mediaType][sendrecvType].pliCount = result.pliCount - this.statsResults.internal[mediaType][sendrecvType].pliCount;
882
- this.statsResults[mediaType][sendrecvType].currentPacketsLost = result.packetsLost - this.statsResults.internal[mediaType][sendrecvType].packetsLost;
883
- if (this.statsResults[mediaType][sendrecvType].currentPacketsLost < 0) {
884
- this.statsResults[mediaType][sendrecvType].currentPacketsLost = 0;
885
- }
886
- this.statsResults[mediaType][sendrecvType].packetsReceived = result.packetsReceived - this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived;
887
- this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
888
- if (this.statsResults[mediaType][sendrecvType].packetsReceived === 0) {
889
- _loggerProxy.default.logger.info("StatsAnalyzer:index#processInboundRTPResult --> No packets received for ".concat(mediaType, " "), this.statsResults[mediaType][sendrecvType].packetsReceived);
890
- }
891
-
892
- // Check the over all packet Lost ratio
893
- this.statsResults[mediaType][sendrecvType].currentPacketLossRatio = this.statsResults[mediaType][sendrecvType].currentPacketsLost > 0 ? this.statsResults[mediaType][sendrecvType].currentPacketsLost / (this.statsResults[mediaType][sendrecvType].packetsReceived + this.statsResults[mediaType][sendrecvType].currentPacketsLost) : 0;
894
- if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
895
- _loggerProxy.default.logger.info('StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver ', this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
896
- }
897
-
898
- // TODO: check the packet loss value is negative values here
899
-
900
- if (result.packetsLost) {
901
- this.statsResults[mediaType][sendrecvType].totalPacketsLost = result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;
902
- } else {
903
- this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;
904
- }
905
- this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
906
-
907
- // From Thin
908
- this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
909
- this.statsResults[mediaType][sendrecvType].totalPliCount = result.pliCount;
910
- this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
911
- this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;
912
- this.statsResults[mediaType][sendrecvType].decoderImplementation = result.decoderImplementation;
913
- this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
914
- this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;
915
- this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;
916
- this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;
917
- this.statsResults[mediaType][sendrecvType].headerBytesReceived = result.headerBytesReceived;
918
- this.statsResults[mediaType][sendrecvType].meanRtpJitter.push(result.jitter);
919
-
920
- // Audio stats
921
-
922
- this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;
923
- this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;
924
- this.statsResults[mediaType][sendrecvType].totalSamplesReceived = result.totalSamplesReceived || 0;
925
- this.statsResults[mediaType][sendrecvType].totalSamplesDecoded = result.totalSamplesDecoded || 0;
926
- this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;
927
- }
928
- }
929
- }, {
930
- key: "processTrackResult",
931
- value:
932
- /**
933
- * Process Track results
934
- *
935
- * @private
936
- * @param {*} result
937
- * @param {*} mediaType
938
- * @param {*} sendrecvType
939
- * @returns {void}
940
- * @memberof StatsAnalyzer
941
- */
942
- function processTrackResult(result, mediaType, sendrecvType) {
943
- if (!result || mediaType === _constants.STATS.AUDIO_CORRELATE) {
944
- return;
945
- }
946
- if (result.type !== 'inbound-rtp' && result.type !== 'outbound-rtp') {
947
- return;
948
- }
949
- if (result.frameWidth && result.frameHeight) {
950
- this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
951
- this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
952
- }
953
- if (sendrecvType === _constants.STATS.RECEIVE_DIRECTION) {
954
- this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
955
- this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
956
- this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;
957
- } else if (sendrecvType === _constants.STATS.SEND_DIRECTION) {
958
- this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
959
- this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
960
- }
961
- if (result.trackIdentifier && mediaType !== _constants.STATS.AUDIO_CORRELATE) {
962
- this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier = result.trackIdentifier;
963
- var jitterBufferDelay = result && result.jitterBufferDelay;
964
- var jitterBufferEmittedCount = result && result.jitterBufferEmittedCount;
965
- this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay = jitterBufferEmittedCount && +jitterBufferDelay / +jitterBufferEmittedCount;
966
-
967
- // Used to calculate the jitter
968
- this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay = result.jitterBufferDelay;
969
- this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount = result.jitterBufferEmittedCount;
970
- }
971
- }
972
-
973
- /**
974
- *
975
- * @private
976
- * @param {*} result
977
- * @param {*} type
978
- * @returns {void}
979
- * @memberof StatsAnalyzer
980
- */
981
- }, {
982
- key: "compareSentAndReceived",
983
- value: function compareSentAndReceived(result, type) {
984
- if (!type) {
985
- return;
986
- }
987
- var mediaType = type;
988
- if (!this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver) {
989
- this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
990
- }
991
- var currentPacketLoss = result.packetsLost - this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver;
992
- this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
993
- this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;
994
- this.statsResults[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
995
- this.statsResults[mediaType].send.meanRemoteJitter.push(result.jitter);
996
- this.statsResults[mediaType].send.meanRoundTripTime.push(result.roundTripTime);
997
- this.statsResults[mediaType].send.timestamp = result.timestamp;
998
- this.statsResults[mediaType].send.ssrc = result.ssrc;
999
- this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;
1000
-
1001
- // Total packloss ratio on this video section of the call
1002
- this.statsResults[mediaType].send.overAllPacketLossRatio = this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0 ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver / this.statsResults[mediaType].send.totalPacketsSent : 0;
1003
- this.statsResults[mediaType].send.currentPacketLossRatio = this.statsResults[mediaType].send.packetsLostOnReceiver > 0 ? this.statsResults[mediaType].send.packetsLostOnReceiver * 100 / (this.statsResults[mediaType].send.packetsSent + this.statsResults[mediaType].send.packetsLostOnReceiver) : 0;
1004
- if (this.statsResults[mediaType].send.maxPacketLossRatio < this.statsResults[mediaType].send.currentPacketLossRatio) {
1005
- this.statsResults[mediaType].send.maxPacketLossRatio = this.statsResults[mediaType].send.currentPacketLossRatio;
1006
- }
1007
- if (result.type === 'remote-inbound-rtp') {
1008
- this.networkQualityMonitor.determineUplinkNetworkQuality({
1009
- mediaType: mediaType,
1010
- remoteRtpResults: result,
1011
- statsAnalyzerCurrentStats: this.statsResults
1012
- });
1013
- }
1014
- }
1015
- }]);
1016
- return StatsAnalyzer;
1017
- }(_eventsScope.default);
1018
- exports.StatsAnalyzer = StatsAnalyzer;
1019
- //# sourceMappingURL=index.js.map