@webex/plugin-meetings 3.8.1 → 3.9.0-multiple-llm.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) 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 +34 -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 +107 -95
  16. package/dist/locus-info/index.js.map +1 -1
  17. package/dist/locus-info/parser.js +4 -1
  18. package/dist/locus-info/parser.js.map +1 -1
  19. package/dist/media/index.js +2 -2
  20. package/dist/media/index.js.map +1 -1
  21. package/dist/media/properties.js +53 -5
  22. package/dist/media/properties.js.map +1 -1
  23. package/dist/meeting/brbState.js +17 -14
  24. package/dist/meeting/brbState.js.map +1 -1
  25. package/dist/meeting/in-meeting-actions.js +13 -1
  26. package/dist/meeting/in-meeting-actions.js.map +1 -1
  27. package/dist/meeting/index.js +555 -296
  28. package/dist/meeting/index.js.map +1 -1
  29. package/dist/meeting/muteState.js +2 -5
  30. package/dist/meeting/muteState.js.map +1 -1
  31. package/dist/meeting/request.js +44 -0
  32. package/dist/meeting/request.js.map +1 -1
  33. package/dist/meeting/request.type.js.map +1 -1
  34. package/dist/{rtcMetrics/constants.js → meeting/type.js} +1 -5
  35. package/dist/meeting/type.js.map +1 -0
  36. package/dist/meeting/util.js +98 -13
  37. package/dist/meeting/util.js.map +1 -1
  38. package/dist/meeting-info/meeting-info-v2.js +29 -21
  39. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  40. package/dist/meetings/index.js +18 -10
  41. package/dist/meetings/index.js.map +1 -1
  42. package/dist/member/types.js.map +1 -1
  43. package/dist/members/collection.js +13 -0
  44. package/dist/members/collection.js.map +1 -1
  45. package/dist/members/index.js +53 -29
  46. package/dist/members/index.js.map +1 -1
  47. package/dist/members/request.js +3 -3
  48. package/dist/members/request.js.map +1 -1
  49. package/dist/members/util.js +25 -8
  50. package/dist/members/util.js.map +1 -1
  51. package/dist/metrics/constants.js +3 -1
  52. package/dist/metrics/constants.js.map +1 -1
  53. package/dist/multistream/mediaRequestManager.js +1 -1
  54. package/dist/multistream/mediaRequestManager.js.map +1 -1
  55. package/dist/multistream/remoteMedia.js +34 -5
  56. package/dist/multistream/remoteMedia.js.map +1 -1
  57. package/dist/multistream/remoteMediaGroup.js +42 -2
  58. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  59. package/dist/multistream/sendSlotManager.js +32 -2
  60. package/dist/multistream/sendSlotManager.js.map +1 -1
  61. package/dist/reachability/index.js +8 -13
  62. package/dist/reachability/index.js.map +1 -1
  63. package/dist/types/constants.d.ts +30 -0
  64. package/dist/types/controls-options-manager/enums.d.ts +2 -1
  65. package/dist/types/controls-options-manager/types.d.ts +4 -1
  66. package/dist/types/locus-info/index.d.ts +54 -10
  67. package/dist/types/media/properties.d.ts +21 -0
  68. package/dist/types/meeting/brbState.d.ts +0 -1
  69. package/dist/types/meeting/in-meeting-actions.d.ts +12 -0
  70. package/dist/types/meeting/index.d.ts +58 -20
  71. package/dist/types/meeting/request.d.ts +18 -1
  72. package/dist/types/meeting/request.type.d.ts +74 -0
  73. package/dist/types/meeting/type.d.ts +9 -0
  74. package/dist/types/meeting/util.d.ts +13 -3
  75. package/dist/types/meeting-info/meeting-info-v2.d.ts +6 -3
  76. package/dist/types/meetings/index.d.ts +3 -1
  77. package/dist/types/member/types.d.ts +1 -0
  78. package/dist/types/members/collection.d.ts +6 -0
  79. package/dist/types/members/index.d.ts +22 -9
  80. package/dist/types/members/request.d.ts +1 -1
  81. package/dist/types/members/util.d.ts +13 -6
  82. package/dist/types/metrics/constants.d.ts +2 -0
  83. package/dist/types/multistream/remoteMedia.d.ts +20 -1
  84. package/dist/types/multistream/remoteMediaGroup.d.ts +11 -0
  85. package/dist/types/multistream/sendSlotManager.d.ts +16 -0
  86. package/dist/types/reachability/index.d.ts +2 -2
  87. package/dist/webinar/index.js +1 -1
  88. package/package.json +25 -26
  89. package/src/constants.ts +34 -2
  90. package/src/controls-options-manager/enums.ts +1 -0
  91. package/src/controls-options-manager/types.ts +6 -1
  92. package/src/controls-options-manager/util.ts +31 -0
  93. package/src/locus-info/controlsUtils.ts +15 -0
  94. package/src/locus-info/index.ts +174 -96
  95. package/src/locus-info/parser.ts +5 -1
  96. package/src/media/index.ts +2 -2
  97. package/src/media/properties.ts +43 -0
  98. package/src/meeting/brbState.ts +13 -9
  99. package/src/meeting/in-meeting-actions.ts +25 -0
  100. package/src/meeting/index.ts +362 -75
  101. package/src/meeting/muteState.ts +2 -6
  102. package/src/meeting/request.ts +39 -0
  103. package/src/meeting/request.type.ts +64 -0
  104. package/src/meeting/type.ts +9 -0
  105. package/src/meeting/util.ts +114 -22
  106. package/src/meeting-info/meeting-info-v2.ts +24 -5
  107. package/src/meetings/index.ts +12 -5
  108. package/src/member/types.ts +1 -0
  109. package/src/members/collection.ts +11 -0
  110. package/src/members/index.ts +51 -15
  111. package/src/members/request.ts +2 -2
  112. package/src/members/util.ts +34 -6
  113. package/src/metrics/constants.ts +2 -0
  114. package/src/multistream/mediaRequestManager.ts +7 -7
  115. package/src/multistream/remoteMedia.ts +34 -4
  116. package/src/multistream/remoteMediaGroup.ts +37 -2
  117. package/src/multistream/sendSlotManager.ts +34 -2
  118. package/src/reachability/index.ts +8 -16
  119. package/test/unit/spec/common/browser-detection.js +0 -24
  120. package/test/unit/spec/controls-options-manager/util.js +58 -0
  121. package/test/unit/spec/locus-info/controlsUtils.js +52 -0
  122. package/test/unit/spec/locus-info/index.js +270 -97
  123. package/test/unit/spec/locus-info/parser.js +3 -2
  124. package/test/unit/spec/media/index.ts +107 -0
  125. package/test/unit/spec/media/properties.ts +137 -0
  126. package/test/unit/spec/meeting/brbState.ts +23 -4
  127. package/test/unit/spec/meeting/in-meeting-actions.ts +12 -0
  128. package/test/unit/spec/meeting/index.js +1194 -97
  129. package/test/unit/spec/meeting/muteState.js +32 -6
  130. package/test/unit/spec/meeting/request.js +92 -0
  131. package/test/unit/spec/meeting/utils.js +167 -17
  132. package/test/unit/spec/meeting-info/meetinginfov2.js +8 -3
  133. package/test/unit/spec/meetings/index.js +12 -5
  134. package/test/unit/spec/members/collection.js +120 -0
  135. package/test/unit/spec/members/index.js +140 -12
  136. package/test/unit/spec/members/request.js +57 -2
  137. package/test/unit/spec/members/utils.js +139 -17
  138. package/test/unit/spec/multistream/mediaRequestManager.ts +19 -6
  139. package/test/unit/spec/multistream/remoteMedia.ts +66 -2
  140. package/test/unit/spec/multistream/sendSlotManager.ts +59 -0
  141. package/test/unit/spec/reachability/index.ts +160 -9
  142. package/test/unit/spec/roap/turnDiscovery.ts +3 -3
  143. package/dist/annotation/annotation.types.d.ts +0 -42
  144. package/dist/annotation/constants.d.ts +0 -31
  145. package/dist/annotation/index.d.ts +0 -117
  146. package/dist/breakouts/breakout.d.ts +0 -8
  147. package/dist/breakouts/collection.d.ts +0 -5
  148. package/dist/breakouts/edit-lock-error.d.ts +0 -15
  149. package/dist/breakouts/events.d.ts +0 -8
  150. package/dist/breakouts/index.d.ts +0 -5
  151. package/dist/breakouts/request.d.ts +0 -22
  152. package/dist/breakouts/utils.d.ts +0 -15
  153. package/dist/common/browser-detection.d.ts +0 -9
  154. package/dist/common/collection.d.ts +0 -48
  155. package/dist/common/config.d.ts +0 -2
  156. package/dist/common/errors/captcha-error.d.ts +0 -15
  157. package/dist/common/errors/intent-to-join.d.ts +0 -16
  158. package/dist/common/errors/join-meeting.d.ts +0 -17
  159. package/dist/common/errors/media.d.ts +0 -15
  160. package/dist/common/errors/no-meeting-info.d.ts +0 -14
  161. package/dist/common/errors/parameter.d.ts +0 -15
  162. package/dist/common/errors/password-error.d.ts +0 -15
  163. package/dist/common/errors/permission.d.ts +0 -14
  164. package/dist/common/errors/reclaim-host-role-error.d.ts +0 -60
  165. package/dist/common/errors/reclaim-host-role-error.js +0 -158
  166. package/dist/common/errors/reclaim-host-role-error.js.map +0 -1
  167. package/dist/common/errors/reclaim-host-role-errors.d.ts +0 -60
  168. package/dist/common/errors/reconnection-in-progress.d.ts +0 -9
  169. package/dist/common/errors/reconnection-in-progress.js +0 -35
  170. package/dist/common/errors/reconnection-in-progress.js.map +0 -1
  171. package/dist/common/errors/reconnection.d.ts +0 -15
  172. package/dist/common/errors/stats.d.ts +0 -15
  173. package/dist/common/errors/webex-errors.d.ts +0 -81
  174. package/dist/common/errors/webex-meetings-error.d.ts +0 -20
  175. package/dist/common/events/events-scope.d.ts +0 -17
  176. package/dist/common/events/events.d.ts +0 -12
  177. package/dist/common/events/trigger-proxy.d.ts +0 -2
  178. package/dist/common/events/util.d.ts +0 -2
  179. package/dist/common/logs/logger-config.d.ts +0 -2
  180. package/dist/common/logs/logger-proxy.d.ts +0 -2
  181. package/dist/common/logs/request.d.ts +0 -34
  182. package/dist/common/queue.d.ts +0 -32
  183. package/dist/config.d.ts +0 -73
  184. package/dist/constants.d.ts +0 -952
  185. package/dist/controls-options-manager/constants.d.ts +0 -4
  186. package/dist/controls-options-manager/enums.d.ts +0 -5
  187. package/dist/controls-options-manager/index.d.ts +0 -120
  188. package/dist/controls-options-manager/types.d.ts +0 -43
  189. package/dist/controls-options-manager/util.d.ts +0 -7
  190. package/dist/index.d.ts +0 -4
  191. package/dist/interceptors/index.d.ts +0 -2
  192. package/dist/interceptors/locusRetry.d.ts +0 -27
  193. package/dist/interpretation/collection.d.ts +0 -5
  194. package/dist/interpretation/index.d.ts +0 -5
  195. package/dist/interpretation/siLanguage.d.ts +0 -5
  196. package/dist/locus-info/controlsUtils.d.ts +0 -2
  197. package/dist/locus-info/embeddedAppsUtils.d.ts +0 -2
  198. package/dist/locus-info/fullState.d.ts +0 -2
  199. package/dist/locus-info/hostUtils.d.ts +0 -2
  200. package/dist/locus-info/index.d.ts +0 -269
  201. package/dist/locus-info/infoUtils.d.ts +0 -2
  202. package/dist/locus-info/mediaSharesUtils.d.ts +0 -2
  203. package/dist/locus-info/parser.d.ts +0 -212
  204. package/dist/locus-info/selfUtils.d.ts +0 -2
  205. package/dist/media/index.d.ts +0 -32
  206. package/dist/media/properties.d.ts +0 -108
  207. package/dist/media/util.d.ts +0 -2
  208. package/dist/mediaQualityMetrics/config.d.ts +0 -233
  209. package/dist/mediaQualityMetrics/config.js +0 -513
  210. package/dist/mediaQualityMetrics/config.js.map +0 -1
  211. package/dist/meeting/effectsState.d.ts +0 -42
  212. package/dist/meeting/effectsState.js +0 -260
  213. package/dist/meeting/effectsState.js.map +0 -1
  214. package/dist/meeting/in-meeting-actions.d.ts +0 -79
  215. package/dist/meeting/index.d.ts +0 -1622
  216. package/dist/meeting/locusMediaRequest.d.ts +0 -74
  217. package/dist/meeting/muteState.d.ts +0 -116
  218. package/dist/meeting/request.d.ts +0 -257
  219. package/dist/meeting/request.type.d.ts +0 -11
  220. package/dist/meeting/state.d.ts +0 -9
  221. package/dist/meeting/util.d.ts +0 -2
  222. package/dist/meeting/voicea-meeting.d.ts +0 -16
  223. package/dist/meeting-info/collection.d.ts +0 -20
  224. package/dist/meeting-info/index.d.ts +0 -57
  225. package/dist/meeting-info/meeting-info-v2.d.ts +0 -93
  226. package/dist/meeting-info/request.d.ts +0 -22
  227. package/dist/meeting-info/util.d.ts +0 -2
  228. package/dist/meeting-info/utilv2.d.ts +0 -2
  229. package/dist/meetings/collection.d.ts +0 -23
  230. package/dist/meetings/index.d.ts +0 -296
  231. package/dist/meetings/meetings.types.d.ts +0 -4
  232. package/dist/meetings/request.d.ts +0 -27
  233. package/dist/meetings/util.d.ts +0 -18
  234. package/dist/member/index.d.ts +0 -148
  235. package/dist/member/member.types.d.ts +0 -11
  236. package/dist/member/member.types.js +0 -18
  237. package/dist/member/member.types.js.map +0 -1
  238. package/dist/member/types.d.ts +0 -32
  239. package/dist/member/util.d.ts +0 -2
  240. package/dist/members/collection.d.ts +0 -24
  241. package/dist/members/index.d.ts +0 -308
  242. package/dist/members/request.d.ts +0 -58
  243. package/dist/members/types.d.ts +0 -25
  244. package/dist/members/util.d.ts +0 -2
  245. package/dist/metrics/config.d.ts +0 -169
  246. package/dist/metrics/config.js +0 -289
  247. package/dist/metrics/config.js.map +0 -1
  248. package/dist/metrics/constants.d.ts +0 -59
  249. package/dist/metrics/index.d.ts +0 -152
  250. package/dist/multistream/mediaRequestManager.d.ts +0 -119
  251. package/dist/multistream/receiveSlot.d.ts +0 -68
  252. package/dist/multistream/receiveSlotManager.d.ts +0 -56
  253. package/dist/multistream/remoteMedia.d.ts +0 -72
  254. package/dist/multistream/remoteMediaGroup.d.ts +0 -49
  255. package/dist/multistream/remoteMediaManager.d.ts +0 -300
  256. package/dist/multistream/sendSlotManager.d.ts +0 -69
  257. package/dist/networkQualityMonitor/index.d.ts +0 -70
  258. package/dist/networkQualityMonitor/index.js +0 -226
  259. package/dist/networkQualityMonitor/index.js.map +0 -1
  260. package/dist/peer-connection-manager/index.d.ts +0 -6
  261. package/dist/peer-connection-manager/index.js +0 -671
  262. package/dist/peer-connection-manager/index.js.map +0 -1
  263. package/dist/peer-connection-manager/util.d.ts +0 -6
  264. package/dist/peer-connection-manager/util.js +0 -110
  265. package/dist/peer-connection-manager/util.js.map +0 -1
  266. package/dist/personal-meeting-room/index.d.ts +0 -47
  267. package/dist/personal-meeting-room/request.d.ts +0 -14
  268. package/dist/personal-meeting-room/util.d.ts +0 -2
  269. package/dist/reachability/clusterReachability.d.ts +0 -109
  270. package/dist/reachability/index.d.ts +0 -139
  271. package/dist/reachability/request.d.ts +0 -35
  272. package/dist/reachability/util.d.ts +0 -8
  273. package/dist/reactions/constants.d.ts +0 -3
  274. package/dist/reactions/reactions.d.ts +0 -4
  275. package/dist/reactions/reactions.type.d.ts +0 -32
  276. package/dist/reconnection-manager/index.d.ts +0 -112
  277. package/dist/recording-controller/enums.d.ts +0 -7
  278. package/dist/recording-controller/index.d.ts +0 -193
  279. package/dist/recording-controller/util.d.ts +0 -13
  280. package/dist/roap/collection.d.ts +0 -10
  281. package/dist/roap/collection.js +0 -63
  282. package/dist/roap/collection.js.map +0 -1
  283. package/dist/roap/handler.d.ts +0 -47
  284. package/dist/roap/handler.js +0 -279
  285. package/dist/roap/handler.js.map +0 -1
  286. package/dist/roap/index.d.ts +0 -116
  287. package/dist/roap/request.d.ts +0 -35
  288. package/dist/roap/state.d.ts +0 -9
  289. package/dist/roap/state.js +0 -127
  290. package/dist/roap/state.js.map +0 -1
  291. package/dist/roap/turnDiscovery.d.ts +0 -81
  292. package/dist/roap/util.d.ts +0 -2
  293. package/dist/roap/util.js +0 -76
  294. package/dist/roap/util.js.map +0 -1
  295. package/dist/rtcMetrics/constants.d.ts +0 -4
  296. package/dist/rtcMetrics/constants.js.map +0 -1
  297. package/dist/rtcMetrics/index.d.ts +0 -61
  298. package/dist/rtcMetrics/index.js +0 -197
  299. package/dist/rtcMetrics/index.js.map +0 -1
  300. package/dist/statsAnalyzer/global.d.ts +0 -118
  301. package/dist/statsAnalyzer/global.js +0 -127
  302. package/dist/statsAnalyzer/global.js.map +0 -1
  303. package/dist/statsAnalyzer/index.d.ts +0 -193
  304. package/dist/statsAnalyzer/index.js +0 -1019
  305. package/dist/statsAnalyzer/index.js.map +0 -1
  306. package/dist/statsAnalyzer/mqaUtil.d.ts +0 -22
  307. package/dist/statsAnalyzer/mqaUtil.js +0 -181
  308. package/dist/statsAnalyzer/mqaUtil.js.map +0 -1
  309. package/dist/transcription/index.d.ts +0 -64
  310. package/dist/types/common/errors/reconnection-in-progress.d.ts +0 -9
  311. package/dist/types/mediaQualityMetrics/config.d.ts +0 -241
  312. package/dist/types/networkQualityMonitor/index.d.ts +0 -70
  313. package/dist/types/rtcMetrics/constants.d.ts +0 -4
  314. package/dist/types/rtcMetrics/index.d.ts +0 -71
  315. package/dist/types/statsAnalyzer/global.d.ts +0 -36
  316. package/dist/types/statsAnalyzer/index.d.ts +0 -217
  317. package/dist/types/statsAnalyzer/mqaUtil.d.ts +0 -48
  318. package/dist/webinar/collection.d.ts +0 -16
  319. 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