@webex/plugin-meetings 3.0.0-beta.15 → 3.0.0-beta.151

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