@webex/plugin-meetings 3.0.0-beta.3 → 3.0.0-beta.30

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