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

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 (252) hide show
  1. package/UPGRADING.md +9 -9
  2. package/browsers.js +19 -24
  3. package/dist/common/browser-detection.js +1 -0
  4. package/dist/common/browser-detection.js.map +1 -1
  5. package/dist/common/collection.js.map +1 -1
  6. package/dist/common/errors/captcha-error.js +5 -5
  7. package/dist/common/errors/captcha-error.js.map +1 -1
  8. package/dist/common/errors/intent-to-join.js +5 -5
  9. package/dist/common/errors/intent-to-join.js.map +1 -1
  10. package/dist/common/errors/join-meeting.js +6 -6
  11. package/dist/common/errors/join-meeting.js.map +1 -1
  12. package/dist/common/errors/media.js +5 -5
  13. package/dist/common/errors/media.js.map +1 -1
  14. package/dist/common/errors/parameter.js +5 -5
  15. package/dist/common/errors/parameter.js.map +1 -1
  16. package/dist/common/errors/password-error.js +5 -5
  17. package/dist/common/errors/password-error.js.map +1 -1
  18. package/dist/common/errors/permission.js +4 -4
  19. package/dist/common/errors/permission.js.map +1 -1
  20. package/dist/common/errors/reconnection.js +5 -5
  21. package/dist/common/errors/reconnection.js.map +1 -1
  22. package/dist/common/errors/stats.js +5 -5
  23. package/dist/common/errors/stats.js.map +1 -1
  24. package/dist/common/errors/webex-errors.js.map +1 -1
  25. package/dist/common/errors/webex-meetings-error.js.map +1 -1
  26. package/dist/common/events/events-scope.js.map +1 -1
  27. package/dist/common/events/events.js.map +1 -1
  28. package/dist/common/events/trigger-proxy.js.map +1 -1
  29. package/dist/common/events/util.js.map +1 -1
  30. package/dist/common/logs/logger-proxy.js.map +1 -1
  31. package/dist/common/logs/request.js.map +1 -1
  32. package/dist/config.js.map +1 -1
  33. package/dist/constants.js.map +1 -1
  34. package/dist/index.js.map +1 -1
  35. package/dist/locus-info/controlsUtils.js.map +1 -1
  36. package/dist/locus-info/fullState.js.map +1 -1
  37. package/dist/locus-info/hostUtils.js.map +1 -1
  38. package/dist/locus-info/index.js +11 -8
  39. package/dist/locus-info/index.js.map +1 -1
  40. package/dist/locus-info/infoUtils.js.map +1 -1
  41. package/dist/locus-info/mediaSharesUtils.js.map +1 -1
  42. package/dist/locus-info/parser.js +2 -1
  43. package/dist/locus-info/parser.js.map +1 -1
  44. package/dist/locus-info/selfUtils.js +2 -1
  45. package/dist/locus-info/selfUtils.js.map +1 -1
  46. package/dist/media/index.js.map +1 -1
  47. package/dist/media/internal-media-core-wrapper.js.map +1 -1
  48. package/dist/media/properties.js.map +1 -1
  49. package/dist/media/util.js +1 -1
  50. package/dist/media/util.js.map +1 -1
  51. package/dist/mediaQualityMetrics/config.js.map +1 -1
  52. package/dist/meeting/effectsState.js +1 -1
  53. package/dist/meeting/effectsState.js.map +1 -1
  54. package/dist/meeting/in-meeting-actions.js.map +1 -1
  55. package/dist/meeting/index.js +118 -89
  56. package/dist/meeting/index.js.map +1 -1
  57. package/dist/meeting/muteState.js +1 -1
  58. package/dist/meeting/muteState.js.map +1 -1
  59. package/dist/meeting/request.js +25 -0
  60. package/dist/meeting/request.js.map +1 -1
  61. package/dist/meeting/request.type.js +8 -0
  62. package/dist/meeting/request.type.js.map +1 -0
  63. package/dist/meeting/state.js +5 -5
  64. package/dist/meeting/state.js.map +1 -1
  65. package/dist/meeting/util.js.map +1 -1
  66. package/dist/meeting-info/collection.js.map +1 -1
  67. package/dist/meeting-info/index.js +2 -2
  68. package/dist/meeting-info/index.js.map +1 -1
  69. package/dist/meeting-info/meeting-info-v2.js +48 -48
  70. package/dist/meeting-info/meeting-info-v2.js.map +1 -1
  71. package/dist/meeting-info/request.js.map +1 -1
  72. package/dist/meeting-info/util.js.map +1 -1
  73. package/dist/meeting-info/utilv2.js +1 -1
  74. package/dist/meeting-info/utilv2.js.map +1 -1
  75. package/dist/meetings/collection.js.map +1 -1
  76. package/dist/meetings/index.js +251 -250
  77. package/dist/meetings/index.js.map +1 -1
  78. package/dist/meetings/request.js +2 -2
  79. package/dist/meetings/request.js.map +1 -1
  80. package/dist/meetings/util.js +14 -14
  81. package/dist/meetings/util.js.map +1 -1
  82. package/dist/member/index.js +31 -31
  83. package/dist/member/index.js.map +1 -1
  84. package/dist/member/util.js.map +1 -1
  85. package/dist/members/collection.js.map +1 -1
  86. package/dist/members/index.js +43 -43
  87. package/dist/members/index.js.map +1 -1
  88. package/dist/members/request.js.map +1 -1
  89. package/dist/members/util.js.map +1 -1
  90. package/dist/metrics/config.js.map +1 -1
  91. package/dist/metrics/constants.js.map +1 -1
  92. package/dist/metrics/index.js +23 -20
  93. package/dist/metrics/index.js.map +1 -1
  94. package/dist/multistream/multistreamMedia.js +2 -1
  95. package/dist/multistream/multistreamMedia.js.map +1 -1
  96. package/dist/multistream/receiveSlot.js.map +1 -1
  97. package/dist/multistream/receiveSlotManager.js +2 -0
  98. package/dist/multistream/receiveSlotManager.js.map +1 -1
  99. package/dist/multistream/remoteMedia.js.map +1 -1
  100. package/dist/multistream/remoteMediaGroup.js.map +1 -1
  101. package/dist/multistream/remoteMediaManager.js.map +1 -1
  102. package/dist/networkQualityMonitor/index.js +8 -8
  103. package/dist/networkQualityMonitor/index.js.map +1 -1
  104. package/dist/personal-meeting-room/index.js +7 -7
  105. package/dist/personal-meeting-room/index.js.map +1 -1
  106. package/dist/personal-meeting-room/request.js.map +1 -1
  107. package/dist/personal-meeting-room/util.js.map +1 -1
  108. package/dist/reachability/index.js.map +1 -1
  109. package/dist/reachability/request.js.map +1 -1
  110. package/dist/reactions/reactions.js.map +1 -1
  111. package/dist/reactions/reactions.type.js +3 -1
  112. package/dist/reactions/reactions.type.js.map +1 -1
  113. package/dist/reconnection-manager/index.js +4 -4
  114. package/dist/reconnection-manager/index.js.map +1 -1
  115. package/dist/roap/index.js +5 -5
  116. package/dist/roap/index.js.map +1 -1
  117. package/dist/roap/request.js.map +1 -1
  118. package/dist/roap/turnDiscovery.js.map +1 -1
  119. package/dist/statsAnalyzer/global.js.map +1 -1
  120. package/dist/statsAnalyzer/index.js.map +1 -1
  121. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  122. package/dist/transcription/index.js +4 -1
  123. package/dist/transcription/index.js.map +1 -1
  124. package/internal-README.md +7 -6
  125. package/package.json +18 -18
  126. package/src/common/browser-detection.ts +9 -6
  127. package/src/common/collection.ts +3 -1
  128. package/src/common/errors/captcha-error.ts +6 -6
  129. package/src/common/errors/intent-to-join.ts +6 -6
  130. package/src/common/errors/join-meeting.ts +12 -8
  131. package/src/common/errors/media.ts +6 -6
  132. package/src/common/errors/parameter.ts +9 -6
  133. package/src/common/errors/password-error.ts +6 -6
  134. package/src/common/errors/permission.ts +5 -5
  135. package/src/common/errors/reconnection.ts +6 -6
  136. package/src/common/errors/stats.ts +6 -6
  137. package/src/common/errors/webex-errors.ts +7 -5
  138. package/src/common/errors/webex-meetings-error.ts +1 -1
  139. package/src/common/events/events-scope.ts +5 -1
  140. package/src/common/events/events.ts +5 -1
  141. package/src/common/events/trigger-proxy.ts +8 -3
  142. package/src/common/events/util.ts +1 -2
  143. package/src/common/logs/logger-proxy.ts +21 -10
  144. package/src/common/logs/request.ts +11 -8
  145. package/src/config.ts +11 -11
  146. package/src/constants.ts +1 -1
  147. package/src/index.js +1 -1
  148. package/src/locus-info/controlsUtils.ts +34 -24
  149. package/src/locus-info/fullState.ts +15 -11
  150. package/src/locus-info/hostUtils.ts +4 -3
  151. package/src/locus-info/index.ts +25 -34
  152. package/src/locus-info/infoUtils.ts +12 -4
  153. package/src/locus-info/mediaSharesUtils.ts +4 -4
  154. package/src/locus-info/parser.ts +45 -68
  155. package/src/locus-info/selfUtils.ts +106 -57
  156. package/src/media/index.ts +123 -135
  157. package/src/media/internal-media-core-wrapper.ts +2 -2
  158. package/src/media/properties.ts +30 -20
  159. package/src/media/util.ts +1 -1
  160. package/src/mediaQualityMetrics/config.ts +46 -46
  161. package/src/meeting/effectsState.ts +35 -35
  162. package/src/meeting/in-meeting-actions.ts +7 -3
  163. package/src/meeting/index.ts +1576 -1291
  164. package/src/meeting/muteState.ts +62 -31
  165. package/src/meeting/request.ts +174 -113
  166. package/src/meeting/request.type.ts +11 -0
  167. package/src/meeting/state.ts +45 -30
  168. package/src/meeting/util.ts +101 -70
  169. package/src/meeting-info/collection.ts +2 -1
  170. package/src/meeting-info/index.ts +32 -30
  171. package/src/meeting-info/meeting-info-v2.ts +106 -108
  172. package/src/meeting-info/request.ts +9 -3
  173. package/src/meeting-info/util.ts +54 -46
  174. package/src/meeting-info/utilv2.ts +59 -53
  175. package/src/meetings/collection.ts +1 -1
  176. package/src/meetings/index.ts +512 -440
  177. package/src/meetings/request.ts +26 -24
  178. package/src/meetings/util.ts +29 -29
  179. package/src/member/index.ts +55 -49
  180. package/src/member/util.ts +26 -13
  181. package/src/members/collection.ts +0 -1
  182. package/src/members/index.ts +182 -126
  183. package/src/members/request.ts +46 -14
  184. package/src/members/util.ts +44 -42
  185. package/src/metrics/config.ts +254 -81
  186. package/src/metrics/constants.ts +0 -2
  187. package/src/metrics/index.ts +84 -71
  188. package/src/multistream/multistreamMedia.ts +1 -0
  189. package/src/multistream/receiveSlot.ts +1 -0
  190. package/src/multistream/receiveSlotManager.ts +1 -0
  191. package/src/multistream/remoteMedia.ts +1 -1
  192. package/src/multistream/remoteMediaGroup.ts +2 -1
  193. package/src/multistream/remoteMediaManager.ts +3 -0
  194. package/src/networkQualityMonitor/index.ts +20 -23
  195. package/src/personal-meeting-room/index.ts +12 -16
  196. package/src/personal-meeting-room/request.ts +10 -3
  197. package/src/personal-meeting-room/util.ts +3 -3
  198. package/src/reachability/index.ts +61 -59
  199. package/src/reachability/request.ts +36 -32
  200. package/src/reactions/reactions.ts +4 -4
  201. package/src/reactions/reactions.type.ts +4 -3
  202. package/src/reconnection-manager/index.ts +139 -84
  203. package/src/roap/index.ts +46 -38
  204. package/src/roap/request.ts +44 -31
  205. package/src/roap/turnDiscovery.ts +59 -30
  206. package/src/statsAnalyzer/global.ts +30 -33
  207. package/src/statsAnalyzer/index.ts +432 -175
  208. package/src/statsAnalyzer/mqaUtil.ts +178 -72
  209. package/src/transcription/index.ts +34 -32
  210. package/test/integration/spec/journey.js +663 -462
  211. package/test/integration/spec/space-meeting.js +318 -203
  212. package/test/integration/spec/transcription.js +6 -7
  213. package/test/unit/spec/common/browser-detection.js +9 -28
  214. package/test/unit/spec/fixture/locus.js +92 -90
  215. package/test/unit/spec/locus-info/controlsUtils.js +5 -5
  216. package/test/unit/spec/locus-info/embeddedAppsUtils.js +8 -6
  217. package/test/unit/spec/locus-info/index.js +1 -2
  218. package/test/unit/spec/locus-info/infoUtils.js +26 -33
  219. package/test/unit/spec/locus-info/lib/BasicSeqCmp.json +88 -430
  220. package/test/unit/spec/locus-info/lib/SeqCmp.json +513 -685
  221. package/test/unit/spec/locus-info/parser.js +3 -9
  222. package/test/unit/spec/locus-info/selfConstant.js +72 -103
  223. package/test/unit/spec/locus-info/selfUtils.js +21 -12
  224. package/test/unit/spec/meeting/effectsState.js +36 -46
  225. package/test/unit/spec/meeting/in-meeting-actions.ts +2 -3
  226. package/test/unit/spec/meeting/index.js +1342 -684
  227. package/test/unit/spec/meeting/muteState.js +42 -33
  228. package/test/unit/spec/meeting/request.js +75 -45
  229. package/test/unit/spec/meeting/utils.js +78 -53
  230. package/test/unit/spec/meeting-info/meetinginfov2.js +100 -73
  231. package/test/unit/spec/meeting-info/request.js +7 -9
  232. package/test/unit/spec/meeting-info/util.js +11 -12
  233. package/test/unit/spec/meeting-info/utilv2.js +110 -74
  234. package/test/unit/spec/meetings/collection.js +1 -1
  235. package/test/unit/spec/meetings/index.js +438 -257
  236. package/test/unit/spec/meetings/utils.js +14 -12
  237. package/test/unit/spec/member/index.js +0 -1
  238. package/test/unit/spec/member/util.js +5 -6
  239. package/test/unit/spec/members/index.js +104 -54
  240. package/test/unit/spec/members/request.js +29 -20
  241. package/test/unit/spec/members/utils.js +8 -5
  242. package/test/unit/spec/metrics/index.js +16 -21
  243. package/test/unit/spec/networkQualityMonitor/index.js +21 -15
  244. package/test/unit/spec/personal-meeting-room/personal-meeting-room.js +2 -7
  245. package/test/unit/spec/reachability/index.ts +9 -11
  246. package/test/unit/spec/reconnection-manager/index.js +16 -18
  247. package/test/unit/spec/roap/turnDiscovery.ts +22 -19
  248. package/test/unit/spec/stats-analyzer/index.js +25 -20
  249. package/test/utils/cmr.js +44 -42
  250. package/test/utils/testUtils.js +83 -74
  251. package/test/utils/webex-config.js +18 -18
  252. package/test/utils/webex-test-users.js +53 -50
@@ -1,3 +1,5 @@
1
+ /* eslint-disable prefer-destructuring */
2
+
1
3
  import {mean, max} from 'lodash';
2
4
 
3
5
  import {STATS} from '../constants';
@@ -9,33 +11,58 @@ export const getAudioReceiverMqa = ({audioReceiver, statsResults, lastMqaDataSen
9
11
  audioReceiver.common.common.direction = statsResults[mediaType].direction;
10
12
  audioReceiver.common.transportType = statsResults.connectionType.remote.transport[0];
11
13
  // add rtpPacket info inside common as also for call analyzer
12
- audioReceiver.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastMqaDataSent[mediaType][sendrecvType].totalPacketsReceived || 0;
14
+ audioReceiver.common.rtpPackets =
15
+ statsResults[mediaType][sendrecvType].totalPacketsReceived -
16
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsReceived || 0;
13
17
  // Hop by hop are numbers and not percentage so we compare on what we sent the last min
14
18
  // collect the packets received for the last min
15
19
  audioReceiver.streams[0].common.rtpPackets = audioReceiver.common.rtpPackets;
16
- audioReceiver.common.mediaHopByHopLost = (statsResults[mediaType][sendrecvType].totalPacketsLost - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost) || 0;
17
- audioReceiver.common.rtpHopByHopLost = statsResults[mediaType][sendrecvType].totalPacketsLost - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost || 0;
20
+ audioReceiver.common.mediaHopByHopLost =
21
+ statsResults[mediaType][sendrecvType].totalPacketsLost -
22
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost || 0;
23
+ audioReceiver.common.rtpHopByHopLost =
24
+ statsResults[mediaType][sendrecvType].totalPacketsLost -
25
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost || 0;
18
26
 
19
27
  // @ts-ignore
20
- audioReceiver.streams[0].common.maxRtpJitter = max(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;
21
- audioReceiver.streams[0].common.meanRtpJitter = mean(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;
28
+ audioReceiver.streams[0].common.maxRtpJitter =
29
+ max(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;
30
+ audioReceiver.streams[0].common.meanRtpJitter =
31
+ mean(statsResults[mediaType][sendrecvType].meanRtpJitter) * 1000 || 0;
22
32
  audioReceiver.streams[0].common.rtpJitter = audioReceiver.streams[0].common.maxRtpJitter;
23
33
 
24
34
  // Fec packets do come in as part of the FEC only for audio
25
- const fecRecovered = (statsResults[mediaType][sendrecvType].fecPacketsReceived - lastMqaDataSent[mediaType][sendrecvType].fecPacketsReceived) - (statsResults[mediaType][sendrecvType].fecPacketsDiscarded - lastMqaDataSent[mediaType][sendrecvType].fecPacketsDiscarded);
26
-
27
- audioReceiver.streams[0].common.rtpEndToEndLost = (statsResults[mediaType][sendrecvType].totalPacketsLost - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost) - fecRecovered || 0;
28
-
29
- audioReceiver.streams[0].common.framesDropped = statsResults[mediaType][sendrecvType].totalSamplesDecoded - lastMqaDataSent[mediaType][sendrecvType].totalSamplesDecoded || 0;
30
- audioReceiver.streams[0].common.renderedFrameRate = audioReceiver.streams[0].common.framesDropped * 100 / 60 || 0;
31
- audioReceiver.streams[0].common.framesReceived = statsResults[mediaType][sendrecvType].totalSamplesReceived - lastMqaDataSent[mediaType][sendrecvType].totalSamplesReceived || 0;
32
- audioReceiver.streams[0].common.concealedFrames = statsResults[mediaType][sendrecvType].concealedSamples - lastMqaDataSent[mediaType][sendrecvType].concealedSamples || 0;
33
- audioReceiver.streams[0].common.receivedBitrate = (statsResults[mediaType][sendrecvType].totalBytesReceived - lastMqaDataSent[mediaType][sendrecvType].totalBytesReceived) * 8 / 60 || 0;
35
+ const fecRecovered =
36
+ statsResults[mediaType][sendrecvType].fecPacketsReceived -
37
+ lastMqaDataSent[mediaType][sendrecvType].fecPacketsReceived -
38
+ (statsResults[mediaType][sendrecvType].fecPacketsDiscarded -
39
+ lastMqaDataSent[mediaType][sendrecvType].fecPacketsDiscarded);
40
+
41
+ audioReceiver.streams[0].common.rtpEndToEndLost =
42
+ statsResults[mediaType][sendrecvType].totalPacketsLost -
43
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost -
44
+ fecRecovered || 0;
45
+
46
+ audioReceiver.streams[0].common.framesDropped =
47
+ statsResults[mediaType][sendrecvType].totalSamplesDecoded -
48
+ lastMqaDataSent[mediaType][sendrecvType].totalSamplesDecoded || 0;
49
+ audioReceiver.streams[0].common.renderedFrameRate =
50
+ (audioReceiver.streams[0].common.framesDropped * 100) / 60 || 0;
51
+ audioReceiver.streams[0].common.framesReceived =
52
+ statsResults[mediaType][sendrecvType].totalSamplesReceived -
53
+ lastMqaDataSent[mediaType][sendrecvType].totalSamplesReceived || 0;
54
+ audioReceiver.streams[0].common.concealedFrames =
55
+ statsResults[mediaType][sendrecvType].concealedSamples -
56
+ lastMqaDataSent[mediaType][sendrecvType].concealedSamples || 0;
57
+ audioReceiver.streams[0].common.receivedBitrate =
58
+ ((statsResults[mediaType][sendrecvType].totalBytesReceived -
59
+ lastMqaDataSent[mediaType][sendrecvType].totalBytesReceived) *
60
+ 8) /
61
+ 60 || 0;
34
62
 
35
63
  audioReceiver.common.rtpBitrate = audioReceiver.streams[0].common.receivedBitrate;
36
64
  };
37
65
 
38
-
39
66
  export const getAudioSenderMqa = ({audioSender, statsResults, lastMqaDataSent}) => {
40
67
  const mediaType = STATS.AUDIO_CORRELATE;
41
68
  const sendrecvType = STATS.SEND_DIRECTION;
@@ -44,39 +71,59 @@ export const getAudioSenderMqa = ({audioSender, statsResults, lastMqaDataSent})
44
71
  audioSender.common.transportType = statsResults.connectionType.local.transport[0];
45
72
 
46
73
  // @ts-ignore
47
- audioSender.common.maxRemoteJitter = max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
48
- audioSender.common.meanRemoteJitter = mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
49
-
50
- audioSender.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;
74
+ audioSender.common.maxRemoteJitter =
75
+ max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
76
+ audioSender.common.meanRemoteJitter =
77
+ mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
78
+
79
+ audioSender.common.rtpPackets =
80
+ statsResults[mediaType][sendrecvType].totalPacketsSent -
81
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;
51
82
  audioSender.streams[0].common.rtpPackets = audioSender.common.rtpPackets;
52
83
  // From candidate-pair
53
- audioSender.common.availableBitrate = statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;
84
+ audioSender.common.availableBitrate =
85
+ statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;
54
86
  // Calculate based on how much packets lost of received compated to how to the client sent
55
87
 
56
- const totalpacketsLostForaMin = statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLostOnReceiver;
88
+ const totalpacketsLostForaMin =
89
+ statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver -
90
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsLostOnReceiver;
57
91
 
58
- audioSender.common.remoteLossRate = totalpacketsLostForaMin > 0 ? (totalpacketsLostForaMin * 100 / audioSender.common.rtpPackets) : 0; // This is the packets sent with in last min || 0;
92
+ audioSender.common.remoteLossRate =
93
+ totalpacketsLostForaMin > 0
94
+ ? (totalpacketsLostForaMin * 100) / audioSender.common.rtpPackets
95
+ : 0; // This is the packets sent with in last min || 0;
59
96
 
60
97
  // @ts-ignore
61
- audioSender.common.maxRoundTripTime = max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
62
- audioSender.common.meanRoundTripTime = mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
98
+ audioSender.common.maxRoundTripTime =
99
+ max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
100
+ audioSender.common.meanRoundTripTime =
101
+ mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
63
102
  audioSender.common.roundTripTime = audioSender.common.maxRoundTripTime;
64
103
 
65
-
66
104
  // Calculate the outgoing bitrate
67
- const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastMqaDataSent[mediaType][sendrecvType].totalBytesSent;
105
+ const totalBytesSentInaMin =
106
+ statsResults[mediaType][sendrecvType].totalBytesSent -
107
+ lastMqaDataSent[mediaType][sendrecvType].totalBytesSent;
68
108
 
69
- audioSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin ? (totalBytesSentInaMin) * 8 / 60 : 0;
109
+ audioSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin
110
+ ? (totalBytesSentInaMin * 8) / 60
111
+ : 0;
70
112
  audioSender.common.rtpBitrate = audioSender.streams[0].common.transmittedBitrate;
71
113
 
72
-
73
- audioSender.streams[0].transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastMqaDataSent[mediaType][sendrecvType].totalKeyFramesEncoded || 0;
74
- audioSender.streams[0].requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastMqaDataSent[mediaType][sendrecvType].totalFirCount || 0;
114
+ audioSender.streams[0].transmittedKeyFrames =
115
+ statsResults[mediaType][sendrecvType].totalKeyFramesEncoded -
116
+ lastMqaDataSent[mediaType][sendrecvType].totalKeyFramesEncoded || 0;
117
+ audioSender.streams[0].requestedKeyFrames =
118
+ statsResults[mediaType][sendrecvType].totalFirCount -
119
+ lastMqaDataSent[mediaType][sendrecvType].totalFirCount || 0;
75
120
  };
76
121
 
77
-
78
122
  export const getVideoReceiverMqa = ({
79
- videoReceiver, statsResults, lastMqaDataSent, isShareStream = false
123
+ videoReceiver,
124
+ statsResults,
125
+ lastMqaDataSent,
126
+ isShareStream = false,
80
127
  }) => {
81
128
  const mediaType = isShareStream ? STATS.SHARE_CORRELATE : STATS.VIDEO_CORRELATE;
82
129
  const sendrecvType = STATS.RECEIVE_DIRECTION;
@@ -84,10 +131,14 @@ export const getVideoReceiverMqa = ({
84
131
  videoReceiver.common.common.direction = statsResults[mediaType].direction;
85
132
  videoReceiver.common.transportType = statsResults.connectionType.remote.transport[0];
86
133
  // collect the packets received for the last min
87
- videoReceiver.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsReceived - lastMqaDataSent[mediaType][sendrecvType].totalPacketsReceived || 0;
134
+ videoReceiver.common.rtpPackets =
135
+ statsResults[mediaType][sendrecvType].totalPacketsReceived -
136
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsReceived || 0;
88
137
  videoReceiver.streams[0].common.rtpPackets = videoReceiver.common.rtpPackets;
89
138
 
90
- const totalPacketLoss = (statsResults[mediaType][sendrecvType].totalPacketsLost - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost) || 0;
139
+ const totalPacketLoss =
140
+ statsResults[mediaType][sendrecvType].totalPacketsLost -
141
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsLost || 0;
91
142
 
92
143
  // Hope by hop are numbers and not percentage so we compare on what we sent the last min
93
144
  // this is including packet lost
@@ -100,36 +151,63 @@ export const getVideoReceiverMqa = ({
100
151
  // calculate this values
101
152
 
102
153
  // @ts-ignore
103
- videoReceiver.common.maxRemoteJitter = max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
104
- videoReceiver.common.meanRemoteJitter = mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
154
+ videoReceiver.common.maxRemoteJitter =
155
+ max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
156
+ videoReceiver.common.meanRemoteJitter =
157
+ mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
105
158
 
106
159
  videoReceiver.streams[0].common.rtpJitter = videoReceiver.common.maxRemoteJitter;
107
160
  // videoReceiver.streams[0].common.rtpJitter = (statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay - lastMqaDataSent.resolutions[mediaType][sendrecvType].jitterBufferDelay) / (statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount - lastMqaDataSent.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount) * 1000 || 0;
108
161
 
109
162
  // Calculate the outgoing bitrate
110
- const totalBytesReceivedInaMin = statsResults[mediaType][sendrecvType].totalBytesReceived - lastMqaDataSent[mediaType][sendrecvType].totalBytesReceived;
163
+ const totalBytesReceivedInaMin =
164
+ statsResults[mediaType][sendrecvType].totalBytesReceived -
165
+ lastMqaDataSent[mediaType][sendrecvType].totalBytesReceived;
111
166
 
112
- videoReceiver.streams[0].common.receivedBitrate = totalBytesReceivedInaMin ? (totalBytesReceivedInaMin) * 8 / 60 : 0;
167
+ videoReceiver.streams[0].common.receivedBitrate = totalBytesReceivedInaMin
168
+ ? (totalBytesReceivedInaMin * 8) / 60
169
+ : 0;
113
170
  videoReceiver.common.rtpBitrate = videoReceiver.streams[0].common.receivedBitrate;
114
171
 
115
172
  // From tracks //TODO: calculate a proper one
116
- const totalFrameReceivedInaMin = statsResults.resolutions[mediaType][sendrecvType].framesReceived - lastMqaDataSent.resolutions[mediaType][sendrecvType].framesReceived;
117
- const totalFrameDecodedInaMin = statsResults.resolutions[mediaType][sendrecvType].framesDecoded - lastMqaDataSent.resolutions[mediaType][sendrecvType].framesDecoded;
118
-
119
- videoReceiver.streams[0].common.receivedFrameRate = totalFrameReceivedInaMin ? totalFrameReceivedInaMin * 100 / 60 : 0;
120
- videoReceiver.streams[0].common.renderedFrameRate = totalFrameDecodedInaMin ? totalFrameDecodedInaMin * 100 / 60 : 0;
121
-
122
- videoReceiver.streams[0].common.framesDropped = statsResults.resolutions[mediaType][sendrecvType].framesDropped - lastMqaDataSent.resolutions[mediaType][sendrecvType].framesDropped;
123
- videoReceiver.streams[0].receivedHeight = statsResults.resolutions[mediaType][sendrecvType].height;
173
+ const totalFrameReceivedInaMin =
174
+ statsResults.resolutions[mediaType][sendrecvType].framesReceived -
175
+ lastMqaDataSent.resolutions[mediaType][sendrecvType].framesReceived;
176
+ const totalFrameDecodedInaMin =
177
+ statsResults.resolutions[mediaType][sendrecvType].framesDecoded -
178
+ lastMqaDataSent.resolutions[mediaType][sendrecvType].framesDecoded;
179
+
180
+ videoReceiver.streams[0].common.receivedFrameRate = totalFrameReceivedInaMin
181
+ ? (totalFrameReceivedInaMin * 100) / 60
182
+ : 0;
183
+ videoReceiver.streams[0].common.renderedFrameRate = totalFrameDecodedInaMin
184
+ ? (totalFrameDecodedInaMin * 100) / 60
185
+ : 0;
186
+
187
+ videoReceiver.streams[0].common.framesDropped =
188
+ statsResults.resolutions[mediaType][sendrecvType].framesDropped -
189
+ lastMqaDataSent.resolutions[mediaType][sendrecvType].framesDropped;
190
+ videoReceiver.streams[0].receivedHeight =
191
+ statsResults.resolutions[mediaType][sendrecvType].height;
124
192
  videoReceiver.streams[0].receivedWidth = statsResults.resolutions[mediaType][sendrecvType].width;
125
- videoReceiver.streams[0].receivedFrameSize = statsResults.resolutions[mediaType][sendrecvType].height * statsResults.resolutions[mediaType][sendrecvType].height / 256;
126
-
127
- videoReceiver.streams[0].receivedKeyFrames = statsResults[mediaType][sendrecvType].keyFramesDecoded - lastMqaDataSent[mediaType][sendrecvType].keyFramesDecoded || 0;
128
- videoReceiver.streams[0].requestedKeyFrames = statsResults[mediaType][sendrecvType].totalPliCount - lastMqaDataSent[mediaType][sendrecvType].totalPliCount || 0;
193
+ videoReceiver.streams[0].receivedFrameSize =
194
+ (statsResults.resolutions[mediaType][sendrecvType].height *
195
+ statsResults.resolutions[mediaType][sendrecvType].height) /
196
+ 256;
197
+
198
+ videoReceiver.streams[0].receivedKeyFrames =
199
+ statsResults[mediaType][sendrecvType].keyFramesDecoded -
200
+ lastMqaDataSent[mediaType][sendrecvType].keyFramesDecoded || 0;
201
+ videoReceiver.streams[0].requestedKeyFrames =
202
+ statsResults[mediaType][sendrecvType].totalPliCount -
203
+ lastMqaDataSent[mediaType][sendrecvType].totalPliCount || 0;
129
204
  };
130
205
 
131
206
  export const getVideoSenderMqa = ({
132
- videoSender, statsResults, lastMqaDataSent, isShareStream = false
207
+ videoSender,
208
+ statsResults,
209
+ lastMqaDataSent,
210
+ isShareStream = false,
133
211
  }) => {
134
212
  const mediaType = isShareStream ? STATS.SHARE_CORRELATE : STATS.VIDEO_CORRELATE;
135
213
  const sendrecvType = STATS.SEND_DIRECTION;
@@ -138,41 +216,69 @@ export const getVideoSenderMqa = ({
138
216
  videoSender.common.transportType = statsResults.connectionType.local.transport[0];
139
217
 
140
218
  // @ts-ignore
141
- videoSender.common.maxRemoteJitter = max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
142
- videoSender.common.meanRemoteJitter = mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
143
-
144
-
145
- videoSender.common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;
146
- videoSender.common.availableBitrate = statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;
219
+ videoSender.common.maxRemoteJitter =
220
+ max(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
221
+ videoSender.common.meanRemoteJitter =
222
+ mean(statsResults[mediaType][sendrecvType].meanRemoteJitter) * 1000 || 0;
223
+
224
+ videoSender.common.rtpPackets =
225
+ statsResults[mediaType][sendrecvType].totalPacketsSent -
226
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;
227
+ videoSender.common.availableBitrate =
228
+ statsResults[mediaType][sendrecvType].availableOutgoingBitrate || 0;
147
229
  // Calculate based on how much packets lost of received compated to how to the client sent
148
230
 
149
- const totalpacketsLostForaMin = statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver - lastMqaDataSent[mediaType][sendrecvType].totalPacketsLostOnReceiver;
231
+ const totalpacketsLostForaMin =
232
+ statsResults[mediaType][sendrecvType].totalPacketsLostOnReceiver -
233
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsLostOnReceiver;
150
234
 
151
- videoSender.common.remoteLossRate = totalpacketsLostForaMin > 0 ? (totalpacketsLostForaMin) * 100 / (videoSender.common.rtpPackets + totalpacketsLostForaMin) : 0; // This is the packets sent with in last min || 0;
235
+ videoSender.common.remoteLossRate =
236
+ totalpacketsLostForaMin > 0
237
+ ? (totalpacketsLostForaMin * 100) / (videoSender.common.rtpPackets + totalpacketsLostForaMin)
238
+ : 0; // This is the packets sent with in last min || 0;
152
239
 
153
240
  // @ts-ignore
154
- videoSender.common.maxRoundTripTime = max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
155
- videoSender.common.meanRoundTripTime = mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
241
+ videoSender.common.maxRoundTripTime =
242
+ max(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
243
+ videoSender.common.meanRoundTripTime =
244
+ mean(statsResults[mediaType][sendrecvType].meanRoundTripTime) * 1000 || 0;
156
245
  videoSender.common.roundTripTime = videoSender.common.maxRoundTripTime;
157
246
 
158
- videoSender.streams[0].common.rtpPackets = statsResults[mediaType][sendrecvType].totalPacketsSent - lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;
247
+ videoSender.streams[0].common.rtpPackets =
248
+ statsResults[mediaType][sendrecvType].totalPacketsSent -
249
+ lastMqaDataSent[mediaType][sendrecvType].totalPacketsSent || 0;
159
250
 
160
251
  // Calculate the outgoing bitrate
161
- const totalBytesSentInaMin = statsResults[mediaType][sendrecvType].totalBytesSent - lastMqaDataSent[mediaType][sendrecvType].totalBytesSent;
252
+ const totalBytesSentInaMin =
253
+ statsResults[mediaType][sendrecvType].totalBytesSent -
254
+ lastMqaDataSent[mediaType][sendrecvType].totalBytesSent;
162
255
 
163
- videoSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin ? (totalBytesSentInaMin) * 8 / 60 : 0;
256
+ videoSender.streams[0].common.transmittedBitrate = totalBytesSentInaMin
257
+ ? (totalBytesSentInaMin * 8) / 60
258
+ : 0;
164
259
 
165
260
  videoSender.common.rtpBitrate = videoSender.streams[0].common.transmittedBitrate;
166
261
 
167
-
168
- videoSender.streams[0].transmittedKeyFrames = statsResults[mediaType][sendrecvType].totalKeyFramesEncoded - lastMqaDataSent[mediaType][sendrecvType].totalKeyFramesEncoded || 0;
169
- videoSender.streams[0].requestedKeyFrames = statsResults[mediaType][sendrecvType].totalFirCount - lastMqaDataSent[mediaType][sendrecvType].totalFirCount || 0;
262
+ videoSender.streams[0].transmittedKeyFrames =
263
+ statsResults[mediaType][sendrecvType].totalKeyFramesEncoded -
264
+ lastMqaDataSent[mediaType][sendrecvType].totalKeyFramesEncoded || 0;
265
+ videoSender.streams[0].requestedKeyFrames =
266
+ statsResults[mediaType][sendrecvType].totalFirCount -
267
+ lastMqaDataSent[mediaType][sendrecvType].totalFirCount || 0;
170
268
 
171
269
  // From tracks //TODO: calculate a proper one
172
- const totalFrameSentInaMin = statsResults.resolutions[mediaType][sendrecvType].framesSent - (lastMqaDataSent.resolutions[mediaType][sendrecvType].framesSent || 0);
173
-
174
- videoSender.streams[0].common.transmittedFrameRate = totalFrameSentInaMin ? totalFrameSentInaMin * 100 / 60 : 0;
175
- videoSender.streams[0].transmittedHeight = statsResults.resolutions[mediaType][sendrecvType].height;
270
+ const totalFrameSentInaMin =
271
+ statsResults.resolutions[mediaType][sendrecvType].framesSent -
272
+ (lastMqaDataSent.resolutions[mediaType][sendrecvType].framesSent || 0);
273
+
274
+ videoSender.streams[0].common.transmittedFrameRate = totalFrameSentInaMin
275
+ ? (totalFrameSentInaMin * 100) / 60
276
+ : 0;
277
+ videoSender.streams[0].transmittedHeight =
278
+ statsResults.resolutions[mediaType][sendrecvType].height;
176
279
  videoSender.streams[0].transmittedWidth = statsResults.resolutions[mediaType][sendrecvType].width;
177
- videoSender.streams[0].transmittedFrameSize = statsResults.resolutions[mediaType][sendrecvType].height * statsResults.resolutions[mediaType][sendrecvType].width / 254;
280
+ videoSender.streams[0].transmittedFrameSize =
281
+ (statsResults.resolutions[mediaType][sendrecvType].height *
282
+ statsResults.resolutions[mediaType][sendrecvType].width) /
283
+ 254;
178
284
  };
@@ -40,12 +40,14 @@ export default class Transcription {
40
40
  */
41
41
  connect(token: string) {
42
42
  this.webSocket.onopen = () => {
43
- this.webSocket.send(JSON.stringify({
44
- id: uuidv4(),
45
- type: 'authorization',
46
- data: {token: `Bearer ${token}`},
47
- trackingId: `webex-js-sdk_${this.sessionID}${Date.now.toString()}`
48
- }));
43
+ this.webSocket.send(
44
+ JSON.stringify({
45
+ id: uuidv4(),
46
+ type: 'authorization',
47
+ data: {token: `Bearer ${token}`},
48
+ trackingId: `webex-js-sdk_${this.sessionID}${Date.now.toString()}`,
49
+ })
50
+ );
49
51
  };
50
52
  }
51
53
 
@@ -55,7 +57,7 @@ export default class Transcription {
55
57
  * @param {Function} callback
56
58
  * @returns {void}
57
59
  */
58
- onCloseSocket(callback: Function) {
60
+ onCloseSocket(callback: any) {
59
61
  if (callback) {
60
62
  this.webSocket.onclose = (event) => {
61
63
  callback(event);
@@ -70,7 +72,7 @@ export default class Transcription {
70
72
  * @param {Function} callback
71
73
  * @returns {void}
72
74
  */
73
- onErrorSocket(callback: Function) {
75
+ onErrorSocket(callback: any) {
74
76
  if (callback) {
75
77
  this.webSocket.onerror = (event) => {
76
78
  callback(event);
@@ -94,21 +96,20 @@ export default class Transcription {
94
96
  }
95
97
  }
96
98
 
97
- return Object.values(this.members.membersCollection.members)
98
- .find((member: any) => {
99
- const memberCSIs = member.participant.status.csis;
100
- let selfIsSpeaking = false;
101
-
102
- for (const csi of csis) {
103
- if (memberCSIs.includes(csi)) {
104
- this.memberCSIs[csi] = member;
105
- selfIsSpeaking = true;
106
- break;
107
- }
99
+ return Object.values(this.members.membersCollection.members).find((member: any) => {
100
+ const memberCSIs = member.participant.status.csis;
101
+ let selfIsSpeaking = false;
102
+
103
+ for (const csi of csis) {
104
+ if (memberCSIs.includes(csi)) {
105
+ this.memberCSIs[csi] = member;
106
+ selfIsSpeaking = true;
107
+ break;
108
108
  }
109
+ }
109
110
 
110
- return selfIsSpeaking;
111
- });
111
+ return selfIsSpeaking;
112
+ });
112
113
  }
113
114
 
114
115
  /**
@@ -117,8 +118,11 @@ export default class Transcription {
117
118
  * @param {Function} callback
118
119
  * @returns {void}
119
120
  */
120
- subscribe(callback: Function) {
121
- let data, csis, speaker, transcription;
121
+ subscribe(callback: any) {
122
+ let data;
123
+ let csis;
124
+ let speaker;
125
+ let transcription;
122
126
 
123
127
  this.webSocket.onmessage = (event) => {
124
128
  data = JSON.parse(event.data);
@@ -129,15 +133,13 @@ export default class Transcription {
129
133
  this.webSocket.send(JSON.stringify({messageID: data.id, type: 'ack'}));
130
134
 
131
135
  if (transcription) {
132
- callback(
133
- {
134
- id: data.data?.voiceaPayload?.transcript_id,
135
- personID: speaker?.id,
136
- transcription,
137
- timestamp: data.timestamp,
138
- type: data?.data?.voiceaPayload?.type
139
- }
140
- );
136
+ callback({
137
+ id: data.data?.voiceaPayload?.transcript_id,
138
+ personID: speaker?.id,
139
+ transcription,
140
+ timestamp: data.timestamp,
141
+ type: data?.data?.voiceaPayload?.type,
142
+ });
141
143
  }
142
144
  };
143
145
  }