@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,8 +1,17 @@
1
+ /* eslint-disable prefer-destructuring */
2
+
1
3
  import {cloneDeep} from 'lodash';
2
4
  import {MediaConnection as MC} from '@webex/internal-media-core';
3
5
 
4
6
  import EventsScope from '../common/events/events-scope';
5
- import {DEFAULT_GET_STATS_FILTER, STATS, MQA_INTEVAL, NETWORK_TYPE, MEDIA_DEVICES, _UNKNOWN_} from '../constants';
7
+ import {
8
+ DEFAULT_GET_STATS_FILTER,
9
+ STATS,
10
+ MQA_INTEVAL,
11
+ NETWORK_TYPE,
12
+ MEDIA_DEVICES,
13
+ _UNKNOWN_,
14
+ } from '../constants';
6
15
  import mqaData from '../mediaQualityMetrics/config';
7
16
  import LoggerProxy from '../common/logs/logger-proxy';
8
17
 
@@ -11,7 +20,7 @@ import {
11
20
  getAudioSenderMqa,
12
21
  getAudioReceiverMqa,
13
22
  getVideoSenderMqa,
14
- getVideoReceiverMqa
23
+ getVideoReceiverMqa,
15
24
  } from './mqaUtil';
16
25
 
17
26
  export const EVENTS = {
@@ -53,7 +62,11 @@ export class StatsAnalyzer extends EventsScope {
53
62
  * @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)
54
63
  * @param {Object} statsResults Default properties for stats
55
64
  */
56
- constructor(config: any, networkQualityMonitor: object = {}, statsResults: object = defaultStats) {
65
+ constructor(
66
+ config: any,
67
+ networkQualityMonitor: object = {},
68
+ statsResults: object = defaultStats
69
+ ) {
57
70
  super();
58
71
  this.statsStarted = false;
59
72
  this.statsResults = statsResults;
@@ -63,10 +76,14 @@ export class StatsAnalyzer extends EventsScope {
63
76
  this.correlationId = config.correlationId;
64
77
  this.mqaSentCount = -1;
65
78
  this.lastMqaDataSent = {
66
- resolutions: {video: {send: {}, recv: {}}, audio: {send: {}, recv: {}}, share: {send: {}, recv: {}}},
79
+ resolutions: {
80
+ video: {send: {}, recv: {}},
81
+ audio: {send: {}, recv: {}},
82
+ share: {send: {}, recv: {}},
83
+ },
67
84
  video: {send: {}, recv: {}},
68
85
  audio: {send: {}, recv: {}},
69
- share: {send: {}, recv: {}}
86
+ share: {send: {}, recv: {}},
70
87
  };
71
88
  this.localMQEStats = {
72
89
  audio: {
@@ -74,14 +91,14 @@ export class StatsAnalyzer extends EventsScope {
74
91
  packetsLost: [],
75
92
  jitter: [],
76
93
  latency: [],
77
- bitRate: []
94
+ bitRate: [],
78
95
  },
79
96
  TX: {
80
97
  packetsLost: [],
81
98
  jitter: [],
82
99
  latency: [],
83
- bitRate: []
84
- }
100
+ bitRate: [],
101
+ },
85
102
  },
86
103
  video: {
87
104
  RX: {
@@ -93,7 +110,7 @@ export class StatsAnalyzer extends EventsScope {
93
110
  resolutionWidth: [],
94
111
  resolutionHeight: [],
95
112
  requestedKeyFrame: [],
96
- receivedKeyFrame: []
113
+ receivedKeyFrame: [],
97
114
  },
98
115
  TX: {
99
116
  packetsLost: [],
@@ -104,9 +121,9 @@ export class StatsAnalyzer extends EventsScope {
104
121
  resolutionWidth: [],
105
122
  resolutionHeight: [],
106
123
  requestedKeyFrame: [],
107
- receivedKeyFrame: []
108
- }
109
- }
124
+ receivedKeyFrame: [],
125
+ },
126
+ },
110
127
  };
111
128
  this.lastEmittedStartStopEvent = {
112
129
  audio: {
@@ -130,37 +147,60 @@ export class StatsAnalyzer extends EventsScope {
130
147
  this.localMQEStats.audio.RX.packetsLost.push(lastMqa.audioReceive[0].common.mediaHopByHopLost);
131
148
  this.localMQEStats.audio.RX.jitter.push(lastMqa.audioReceive[0].streams[0].common.rtpJitter);
132
149
  this.localMQEStats.audio.RX.latency.push(lastMqa.audioReceive[0].common.roundTripTime);
133
- this.localMQEStats.audio.RX.bitRate.push(lastMqa.audioReceive[0].streams[0].common.receivedBitrate);
150
+ this.localMQEStats.audio.RX.bitRate.push(
151
+ lastMqa.audioReceive[0].streams[0].common.receivedBitrate
152
+ );
134
153
 
135
154
  this.localMQEStats.audio.TX.packetsLost.push(lastMqa.audioTransmit[0].common.remoteLossRate);
136
155
  this.localMQEStats.audio.TX.jitter.push(lastMqa.audioTransmit[0].common.remoteJitter);
137
156
  this.localMQEStats.audio.TX.latency.push(lastMqa.audioTransmit[0].common.roundTripTime);
138
- this.localMQEStats.audio.TX.bitRate.push(lastMqa.audioTransmit[0].streams[0].common.transmittedBitrate);
157
+ this.localMQEStats.audio.TX.bitRate.push(
158
+ lastMqa.audioTransmit[0].streams[0].common.transmittedBitrate
159
+ );
139
160
 
140
161
  // Video
141
162
 
142
163
  this.localMQEStats.video.RX.packetsLost.push(lastMqa.videoReceive[0].common.mediaHopByHopLost);
143
164
  this.localMQEStats.video.RX.jitter.push(lastMqa.videoReceive[0].streams[0].common.rtpJitter);
144
- this.localMQEStats.video.RX.latency.push(lastMqa.videoReceive[0].streams[0].common.roundTripTime);
145
- this.localMQEStats.video.RX.bitRate.push(lastMqa.videoReceive[0].streams[0].common.receivedBitrate);
146
- this.localMQEStats.video.RX.frameRate.push(lastMqa.videoReceive[0].streams[0].common.receivedFrameRate);
147
- this.localMQEStats.video.RX.resolutionWidth.push(lastMqa.videoReceive[0].streams[0].receivedWidth);
148
- this.localMQEStats.video.RX.resolutionHeight.push(lastMqa.videoReceive[0].streams[0].receivedHeight);
165
+ this.localMQEStats.video.RX.latency.push(
166
+ lastMqa.videoReceive[0].streams[0].common.roundTripTime
167
+ );
168
+ this.localMQEStats.video.RX.bitRate.push(
169
+ lastMqa.videoReceive[0].streams[0].common.receivedBitrate
170
+ );
171
+ this.localMQEStats.video.RX.frameRate.push(
172
+ lastMqa.videoReceive[0].streams[0].common.receivedFrameRate
173
+ );
174
+ this.localMQEStats.video.RX.resolutionWidth.push(
175
+ lastMqa.videoReceive[0].streams[0].receivedWidth
176
+ );
177
+ this.localMQEStats.video.RX.resolutionHeight.push(
178
+ lastMqa.videoReceive[0].streams[0].receivedHeight
179
+ );
149
180
  this.localMQEStats.video.RX.requestedKeyFrame.push();
150
181
  this.localMQEStats.video.RX.receivedKeyFrame.push();
151
182
 
152
183
  this.localMQEStats.video.TX.packetsLost.push(lastMqa.videoTransmit[0].common.remoteLossRate);
153
184
  this.localMQEStats.video.TX.jitter.push(lastMqa.videoTransmit[0].common.remoteJitter);
154
185
  this.localMQEStats.video.TX.latency.push(lastMqa.videoTransmit[0].common.roundTripTime);
155
- this.localMQEStats.video.TX.bitRate.push(lastMqa.videoTransmit[0].streams[0].common.transmittedBitrate);
156
- this.localMQEStats.video.TX.frameRate.push(lastMqa.videoTransmit[0].streams[0].common.transmittedFrameRate);
157
- this.localMQEStats.video.TX.resolutionWidth.push(lastMqa.videoTransmit[0].streams[0].transmittedWidth);
158
- this.localMQEStats.video.TX.resolutionHeight.push(lastMqa.videoTransmit[0].streams[0].transmittedHeight);
159
- this.localMQEStats.video.TX.requestedKeyFrame.push(lastMqa.videoTransmit[0].streams[0].requestedKeyFrames);
186
+ this.localMQEStats.video.TX.bitRate.push(
187
+ lastMqa.videoTransmit[0].streams[0].common.transmittedBitrate
188
+ );
189
+ this.localMQEStats.video.TX.frameRate.push(
190
+ lastMqa.videoTransmit[0].streams[0].common.transmittedFrameRate
191
+ );
192
+ this.localMQEStats.video.TX.resolutionWidth.push(
193
+ lastMqa.videoTransmit[0].streams[0].transmittedWidth
194
+ );
195
+ this.localMQEStats.video.TX.resolutionHeight.push(
196
+ lastMqa.videoTransmit[0].streams[0].transmittedHeight
197
+ );
198
+ this.localMQEStats.video.TX.requestedKeyFrame.push(
199
+ lastMqa.videoTransmit[0].streams[0].requestedKeyFrames
200
+ );
160
201
  this.localMQEStats.video.TX.receivedKeyFrame.push();
161
202
  }
162
203
 
163
-
164
204
  resetStatsResults() {
165
205
  this.statsResults.audio.send.meanRemoteJitter = [];
166
206
  this.statsResults.video.send.meanRemoteJitter = [];
@@ -208,23 +248,23 @@ export class StatsAnalyzer extends EventsScope {
208
248
  getAudioSenderMqa({
209
249
  audioSender,
210
250
  statsResults: this.statsResults,
211
- lastMqaDataSent: this.lastMqaDataSent
251
+ lastMqaDataSent: this.lastMqaDataSent,
212
252
  });
213
253
  getAudioReceiverMqa({
214
254
  audioReceiver,
215
255
  statsResults: this.statsResults,
216
- lastMqaDataSent: this.lastMqaDataSent
256
+ lastMqaDataSent: this.lastMqaDataSent,
217
257
  });
218
258
 
219
259
  getVideoReceiverMqa({
220
260
  videoReceiver,
221
261
  statsResults: this.statsResults,
222
- lastMqaDataSent: this.lastMqaDataSent
262
+ lastMqaDataSent: this.lastMqaDataSent,
223
263
  });
224
264
  getVideoSenderMqa({
225
265
  videoSender,
226
266
  statsResults: this.statsResults,
227
- lastMqaDataSent: this.lastMqaDataSent
267
+ lastMqaDataSent: this.lastMqaDataSent,
228
268
  });
229
269
 
230
270
  // Capture mqa for share scenario
@@ -233,24 +273,34 @@ export class StatsAnalyzer extends EventsScope {
233
273
  videoSender: shareSender,
234
274
  statsResults: this.statsResults,
235
275
  lastMqaDataSent: this.lastMqaDataSent,
236
- isShareStream: true
276
+ isShareStream: true,
237
277
  });
238
278
 
239
279
  getVideoReceiverMqa({
240
280
  videoReceiver: shareReceiver,
241
281
  statsResults: this.statsResults,
242
282
  lastMqaDataSent: this.lastMqaDataSent,
243
- isShareStream: true
283
+ isShareStream: true,
244
284
  });
245
-
246
- mqaData.intervals[0].intervalMetadata.peerReflexiveIP = this.statsResults.connectionType.local.ipAddress[0];
285
+ mqaData.intervals[0].intervalMetadata.peerReflexiveIP =
286
+ this.statsResults.connectionType.local.ipAddress[0];
247
287
 
248
288
  // Adding peripheral information
249
289
  mqaData.intervals[0].intervalMetadata.peripherals = [];
250
- mqaData.intervals[0].intervalMetadata.peripherals.push({information: _UNKNOWN_, name: MEDIA_DEVICES.SPEAKER});
251
- mqaData.intervals[0].intervalMetadata.peripherals.push({information: this.statsResults[STATS.AUDIO_CORRELATE][STATS.SEND_DIRECTION].trackLabel || _UNKNOWN_, name: MEDIA_DEVICES.MICROPHONE});
252
- mqaData.intervals[0].intervalMetadata.peripherals.push({information: this.statsResults[STATS.VIDEO_CORRELATE][STATS.SEND_DIRECTION].trackLabel || _UNKNOWN_, name: MEDIA_DEVICES.CAMERA});
253
-
290
+ mqaData.intervals[0].intervalMetadata.peripherals.push({
291
+ information: _UNKNOWN_,
292
+ name: MEDIA_DEVICES.SPEAKER,
293
+ });
294
+ mqaData.intervals[0].intervalMetadata.peripherals.push({
295
+ information:
296
+ this.statsResults[STATS.AUDIO_CORRELATE][STATS.SEND_DIRECTION].trackLabel || _UNKNOWN_,
297
+ name: MEDIA_DEVICES.MICROPHONE,
298
+ });
299
+ mqaData.intervals[0].intervalMetadata.peripherals.push({
300
+ information:
301
+ this.statsResults[STATS.VIDEO_CORRELATE][STATS.SEND_DIRECTION].trackLabel || _UNKNOWN_,
302
+ name: MEDIA_DEVICES.CAMERA,
303
+ });
254
304
 
255
305
  // @ts-ignore
256
306
  mqaData.networkType = this.statsResults.connectionType.local.networkType;
@@ -269,13 +319,13 @@ export class StatsAnalyzer extends EventsScope {
269
319
  this.emit(
270
320
  {
271
321
  file: 'statsAnalyzer',
272
- function: 'sendMqaData'
322
+ function: 'sendMqaData',
273
323
  },
274
324
  EVENTS.MEDIA_QUALITY,
275
325
  {
276
326
  data: mqaData.intervals[0],
277
327
  // @ts-ignore
278
- networkType: mqaData.networkType
328
+ networkType: mqaData.networkType,
279
329
  }
280
330
  );
281
331
  }
@@ -305,17 +355,16 @@ export class StatsAnalyzer extends EventsScope {
305
355
  this.statsStarted = true;
306
356
  this.mediaConnection = mediaConnection;
307
357
 
308
- return this.getStatsAndParse()
309
- .then(() => {
310
- this.statsInterval = setInterval(() => {
311
- this.getStatsAndParse();
312
- }, this.config.analyzerInterval);
313
- // Trigger initial fetch
358
+ return this.getStatsAndParse().then(() => {
359
+ this.statsInterval = setInterval(() => {
360
+ this.getStatsAndParse();
361
+ }, this.config.analyzerInterval);
362
+ // Trigger initial fetch
363
+ this.sendMqaData();
364
+ this.mqaInterval = setInterval(() => {
314
365
  this.sendMqaData();
315
- this.mqaInterval = setInterval(() => {
316
- this.sendMqaData();
317
- }, MQA_INTEVAL);
318
- });
366
+ }, MQA_INTEVAL);
367
+ });
319
368
  }
320
369
 
321
370
  return Promise.resolve();
@@ -406,7 +455,11 @@ export class StatsAnalyzer extends EventsScope {
406
455
  * @param {boolean} isSender
407
456
  * @returns {void}
408
457
  */
409
- private filterAndParseGetStatsResults(getStatsResults: Array<any>, type: string, isSender: boolean) {
458
+ private filterAndParseGetStatsResults(
459
+ getStatsResults: Array<any>,
460
+ type: string,
461
+ isSender: boolean
462
+ ) {
410
463
  const {types} = DEFAULT_GET_STATS_FILTER;
411
464
 
412
465
  getStatsResults.forEach((result) => {
@@ -447,7 +500,12 @@ export class StatsAnalyzer extends EventsScope {
447
500
  * @memberof StatsAnalyzer
448
501
  * @returns {void}
449
502
  */
450
- emitStartStopEvents = (mediaType: string, previousValue: number, currentValue: number, isLocal: boolean) => {
503
+ emitStartStopEvents = (
504
+ mediaType: string,
505
+ previousValue: number,
506
+ currentValue: number,
507
+ isLocal: boolean
508
+ ) => {
451
509
  if (mediaType !== 'audio' && mediaType !== 'video' && mediaType !== 'share') {
452
510
  throw new Error(`Unsupported mediaType: ${mediaType}`);
453
511
  }
@@ -457,32 +515,32 @@ export class StatsAnalyzer extends EventsScope {
457
515
  // eslint-disable-next-line no-param-reassign
458
516
  if (currentValue === undefined) currentValue = 0;
459
517
 
460
- const lastEmittedEvent = isLocal ? this.lastEmittedStartStopEvent[mediaType].local : this.lastEmittedStartStopEvent[mediaType].remote;
518
+ const lastEmittedEvent = isLocal
519
+ ? this.lastEmittedStartStopEvent[mediaType].local
520
+ : this.lastEmittedStartStopEvent[mediaType].remote;
461
521
 
462
522
  let newEvent;
463
523
 
464
- if ((currentValue - previousValue) > 0) {
524
+ if (currentValue - previousValue > 0) {
465
525
  newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STARTED : EVENTS.REMOTE_MEDIA_STARTED;
466
- }
467
- else if ((currentValue === previousValue) && currentValue > 0) {
526
+ } else if (currentValue === previousValue && currentValue > 0) {
468
527
  newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STOPPED : EVENTS.REMOTE_MEDIA_STOPPED;
469
528
  }
470
529
 
471
530
  if (newEvent && lastEmittedEvent !== newEvent) {
472
531
  if (isLocal) {
473
532
  this.lastEmittedStartStopEvent[mediaType].local = newEvent;
474
- }
475
- else {
533
+ } else {
476
534
  this.lastEmittedStartStopEvent[mediaType].remote = newEvent;
477
535
  }
478
536
  this.emit(
479
537
  {
480
538
  file: 'statsAnalyzer/index',
481
- function: 'compareLastStatsResult'
539
+ function: 'compareLastStatsResult',
482
540
  },
483
541
  newEvent,
484
542
  {
485
- type: mediaType
543
+ type: mediaType,
486
544
  }
487
545
  );
488
546
  }
@@ -506,54 +564,98 @@ export class StatsAnalyzer extends EventsScope {
506
564
  currentStats = this.statsResults[mediaType].send;
507
565
  previousStats = this.lastStatsResults[mediaType].send;
508
566
 
509
- if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
510
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets sent`);
511
- }
512
- else {
513
- if (currentStats.totalAudioEnergy === previousStats.totalAudioEnergy || currentStats.totalAudioEnergy === 0) {
514
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} Energy present`);
567
+ if (
568
+ currentStats.totalPacketsSent === previousStats.totalPacketsSent ||
569
+ currentStats.totalPacketsSent === 0
570
+ ) {
571
+ LoggerProxy.logger.info(
572
+ `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets sent`
573
+ );
574
+ } else {
575
+ if (
576
+ currentStats.totalAudioEnergy === previousStats.totalAudioEnergy ||
577
+ currentStats.totalAudioEnergy === 0
578
+ ) {
579
+ LoggerProxy.logger.info(
580
+ `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} Energy present`
581
+ );
515
582
  }
516
583
 
517
584
  if (currentStats.audioLevel === 0) {
518
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> ${mediaType} level is 0 for the user`);
585
+ LoggerProxy.logger.info(
586
+ `StatsAnalyzer:index#compareLastStatsResult --> ${mediaType} level is 0 for the user`
587
+ );
519
588
  }
520
589
  }
521
590
 
522
- this.emitStartStopEvents(mediaType, previousStats.totalPacketsSent, currentStats.totalPacketsSent, true);
591
+ this.emitStartStopEvents(
592
+ mediaType,
593
+ previousStats.totalPacketsSent,
594
+ currentStats.totalPacketsSent,
595
+ true
596
+ );
523
597
  }
524
598
 
525
599
  if (this.meetingMediaStatus.expected.receiveAudio) {
526
- // compare audio stats received
600
+ // compare audio stats received
527
601
  currentStats = this.statsResults[mediaType].recv;
528
602
  previousStats = this.lastStatsResults[mediaType].recv;
529
603
 
530
- if (currentStats.totalPacketsReceived === previousStats.totalPacketsReceived || currentStats.totalPacketsReceived === 0) {
531
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets received`);
532
- }
533
- else if (currentStats.totalSamplesReceived === previousStats.totalSamplesReceived ||
534
- currentStats.totalSamplesReceived === 0) {
535
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} samples received`);
604
+ if (
605
+ currentStats.totalPacketsReceived === previousStats.totalPacketsReceived ||
606
+ currentStats.totalPacketsReceived === 0
607
+ ) {
608
+ LoggerProxy.logger.info(
609
+ `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets received`
610
+ );
611
+ } else if (
612
+ currentStats.totalSamplesReceived === previousStats.totalSamplesReceived ||
613
+ currentStats.totalSamplesReceived === 0
614
+ ) {
615
+ LoggerProxy.logger.info(
616
+ `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} samples received`
617
+ );
536
618
  }
537
619
 
538
- this.emitStartStopEvents(mediaType, previousStats.totalPacketsReceived, currentStats.totalPacketsReceived, false);
620
+ this.emitStartStopEvents(
621
+ mediaType,
622
+ previousStats.totalPacketsReceived,
623
+ currentStats.totalPacketsReceived,
624
+ false
625
+ );
539
626
  }
540
627
 
541
628
  mediaType = STATS.VIDEO_CORRELATE;
542
629
  if (this.meetingMediaStatus.expected.sendVideo) {
543
- // compare video stats sent
630
+ // compare video stats sent
544
631
  currentStats = this.statsResults[mediaType].send;
545
632
  previousStats = this.lastStatsResults[mediaType].send;
546
633
 
547
- if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
548
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets sent`);
549
- }
550
- else {
551
- if (currentStats.framesEncoded === previousStats.framesEncoded || currentStats.framesEncoded === 0) {
552
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} Frames Encoded`);
634
+ if (
635
+ currentStats.totalPacketsSent === previousStats.totalPacketsSent ||
636
+ currentStats.totalPacketsSent === 0
637
+ ) {
638
+ LoggerProxy.logger.info(
639
+ `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets sent`
640
+ );
641
+ } else {
642
+ if (
643
+ currentStats.framesEncoded === previousStats.framesEncoded ||
644
+ currentStats.framesEncoded === 0
645
+ ) {
646
+ LoggerProxy.logger.info(
647
+ `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} Frames Encoded`
648
+ );
553
649
  }
554
650
 
555
- if (this.statsResults.resolutions[mediaType].send.framesSent === this.lastStatsResults.resolutions[mediaType].send.framesSent || this.statsResults.resolutions[mediaType].send.framesSent === 0) {
556
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} Frames sent`);
651
+ if (
652
+ this.statsResults.resolutions[mediaType].send.framesSent ===
653
+ this.lastStatsResults.resolutions[mediaType].send.framesSent ||
654
+ this.statsResults.resolutions[mediaType].send.framesSent === 0
655
+ ) {
656
+ LoggerProxy.logger.info(
657
+ `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} Frames sent`
658
+ );
557
659
  }
558
660
  }
559
661
 
@@ -565,27 +667,48 @@ export class StatsAnalyzer extends EventsScope {
565
667
  );
566
668
  }
567
669
 
568
-
569
670
  if (this.meetingMediaStatus.expected.receiveVideo) {
570
- // compare video stats reveived
671
+ // compare video stats reveived
571
672
 
572
673
  currentStats = this.statsResults[mediaType].recv;
573
674
  previousStats = this.lastStatsResults[mediaType].recv;
574
675
 
575
- if (currentStats.totalPacketsReceived === previousStats.totalPacketsReceived || currentStats.totalPacketsReceived === 0) {
576
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets received`);
577
- }
578
- else {
579
- if (this.statsResults.resolutions[mediaType].recv.framesReceived === this.lastStatsResults.resolutions[mediaType].recv.framesReceived || this.statsResults.resolutions[mediaType].recv.framesReceived === 0) {
580
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames received`);
676
+ if (
677
+ currentStats.totalPacketsReceived === previousStats.totalPacketsReceived ||
678
+ currentStats.totalPacketsReceived === 0
679
+ ) {
680
+ LoggerProxy.logger.info(
681
+ `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets received`
682
+ );
683
+ } else {
684
+ if (
685
+ this.statsResults.resolutions[mediaType].recv.framesReceived ===
686
+ this.lastStatsResults.resolutions[mediaType].recv.framesReceived ||
687
+ this.statsResults.resolutions[mediaType].recv.framesReceived === 0
688
+ ) {
689
+ LoggerProxy.logger.info(
690
+ `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames received`
691
+ );
581
692
  }
582
693
 
583
- if (this.statsResults[mediaType].recv.framesDecoded === this.lastStatsResults[mediaType].recv.framesDecoded || this.statsResults.resolutions[mediaType].send.framesDecoded === 0) {
584
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames decoded`);
694
+ if (
695
+ this.statsResults[mediaType].recv.framesDecoded ===
696
+ this.lastStatsResults[mediaType].recv.framesDecoded ||
697
+ this.statsResults.resolutions[mediaType].send.framesDecoded === 0
698
+ ) {
699
+ LoggerProxy.logger.info(
700
+ `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames decoded`
701
+ );
585
702
  }
586
703
 
587
- if (this.statsResults.resolutions[mediaType].recv.framesDropped - this.lastStatsResults.resolutions[mediaType].recv.framesDropped > 10) {
588
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> ${mediaType} frames are getting dropped`);
704
+ if (
705
+ this.statsResults.resolutions[mediaType].recv.framesDropped -
706
+ this.lastStatsResults.resolutions[mediaType].recv.framesDropped >
707
+ 10
708
+ ) {
709
+ LoggerProxy.logger.info(
710
+ `StatsAnalyzer:index#compareLastStatsResult --> ${mediaType} frames are getting dropped`
711
+ );
589
712
  }
590
713
  }
591
714
 
@@ -599,21 +722,36 @@ export class StatsAnalyzer extends EventsScope {
599
722
 
600
723
  mediaType = STATS.SHARE_CORRELATE;
601
724
  if (this.meetingMediaStatus.expected.sendShare) {
602
- // compare share stats sent
725
+ // compare share stats sent
603
726
 
604
727
  currentStats = this.statsResults[mediaType].send;
605
728
  previousStats = this.lastStatsResults[mediaType].send;
606
729
 
607
- if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
608
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets sent`);
609
- }
610
- else {
611
- if (currentStats.framesEncoded === previousStats.framesEncoded || currentStats.framesEncoded === 0) {
612
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames getting encoded`);
730
+ if (
731
+ currentStats.totalPacketsSent === previousStats.totalPacketsSent ||
732
+ currentStats.totalPacketsSent === 0
733
+ ) {
734
+ LoggerProxy.logger.info(
735
+ `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets sent`
736
+ );
737
+ } else {
738
+ if (
739
+ currentStats.framesEncoded === previousStats.framesEncoded ||
740
+ currentStats.framesEncoded === 0
741
+ ) {
742
+ LoggerProxy.logger.info(
743
+ `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames getting encoded`
744
+ );
613
745
  }
614
746
 
615
- if (this.statsResults.resolutions[mediaType].send.framesSent === this.lastStatsResults.resolutions[mediaType].send.framesSent || this.statsResults.resolutions[mediaType].send.framesSent === 0) {
616
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames sent`);
747
+ if (
748
+ this.statsResults.resolutions[mediaType].send.framesSent ===
749
+ this.lastStatsResults.resolutions[mediaType].send.framesSent ||
750
+ this.statsResults.resolutions[mediaType].send.framesSent === 0
751
+ ) {
752
+ LoggerProxy.logger.info(
753
+ `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames sent`
754
+ );
617
755
  }
618
756
  }
619
757
 
@@ -622,20 +760,42 @@ export class StatsAnalyzer extends EventsScope {
622
760
  currentStats = this.statsResults[mediaType].recv;
623
761
  previousStats = this.lastStatsResults[mediaType].recv;
624
762
 
625
- if (currentStats.totalPacketsReceived === previousStats.totalPacketsReceived || currentStats.totalPacketsSent === 0) {
626
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets received`);
627
- }
628
- else {
629
- if (this.statsResults.resolutions[mediaType].recv.framesReceived === this.lastStatsResults.resolutions[mediaType].recv.framesReceived || this.statsResults.resolutions[mediaType].recv.framesReceived === 0) {
630
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames received`);
763
+ if (
764
+ currentStats.totalPacketsReceived === previousStats.totalPacketsReceived ||
765
+ currentStats.totalPacketsSent === 0
766
+ ) {
767
+ LoggerProxy.logger.info(
768
+ `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} RTP packets received`
769
+ );
770
+ } else {
771
+ if (
772
+ this.statsResults.resolutions[mediaType].recv.framesReceived ===
773
+ this.lastStatsResults.resolutions[mediaType].recv.framesReceived ||
774
+ this.statsResults.resolutions[mediaType].recv.framesReceived === 0
775
+ ) {
776
+ LoggerProxy.logger.info(
777
+ `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames received`
778
+ );
631
779
  }
632
780
 
633
- if (this.statsResults[mediaType].recv.framesDecoded === this.lastStatsResults[mediaType].recv.framesDecoded || this.statsResults.resolutions[mediaType].send.framesDecoded === 0) {
634
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames decoded`);
781
+ if (
782
+ this.statsResults[mediaType].recv.framesDecoded ===
783
+ this.lastStatsResults[mediaType].recv.framesDecoded ||
784
+ this.statsResults.resolutions[mediaType].send.framesDecoded === 0
785
+ ) {
786
+ LoggerProxy.logger.info(
787
+ `StatsAnalyzer:index#compareLastStatsResult --> No ${mediaType} frames decoded`
788
+ );
635
789
  }
636
790
 
637
- if (this.statsResults.resolutions[mediaType].recv.framesDropped - this.lastStatsResults.resolutions[mediaType].recv.framesDropped > 10) {
638
- LoggerProxy.logger.info(`StatsAnalyzer:index#compareLastStatsResult --> ${mediaType} frames are getting dropped`);
791
+ if (
792
+ this.statsResults.resolutions[mediaType].recv.framesDropped -
793
+ this.lastStatsResults.resolutions[mediaType].recv.framesDropped >
794
+ 10
795
+ ) {
796
+ LoggerProxy.logger.info(
797
+ `StatsAnalyzer:index#compareLastStatsResult --> ${mediaType} frames are getting dropped`
798
+ );
639
799
  }
640
800
  }
641
801
 
@@ -658,8 +818,13 @@ export class StatsAnalyzer extends EventsScope {
658
818
  return Promise.resolve();
659
819
  }
660
820
 
661
- if (this.mediaConnection && this.mediaConnection.getConnectionState() === MC.ConnectionState.Failed) {
662
- LoggerProxy.logger.trace('StatsAnalyzer:index#getStatsAndParse --> media connection is in failed state');
821
+ if (
822
+ this.mediaConnection &&
823
+ this.mediaConnection.getConnectionState() === MC.ConnectionState.Failed
824
+ ) {
825
+ LoggerProxy.logger.trace(
826
+ 'StatsAnalyzer:index#getStatsAndParse --> media connection is in failed state'
827
+ );
663
828
 
664
829
  return Promise.resolve();
665
830
  }
@@ -667,20 +832,47 @@ export class StatsAnalyzer extends EventsScope {
667
832
  LoggerProxy.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Collecting Stats');
668
833
 
669
834
  return this.mediaConnection.getTransceiverStats().then((transceiverStats) => {
670
- this.filterAndParseGetStatsResults(transceiverStats.video.sender, STATS.VIDEO_CORRELATE, true);
671
- this.filterAndParseGetStatsResults(transceiverStats.video.receiver, STATS.VIDEO_CORRELATE, false);
672
- this.filterAndParseGetStatsResults(transceiverStats.audio.sender, STATS.AUDIO_CORRELATE, true);
673
- this.filterAndParseGetStatsResults(transceiverStats.audio.receiver, STATS.AUDIO_CORRELATE, false);
674
- this.filterAndParseGetStatsResults(transceiverStats.screenShareVideo.sender, STATS.SHARE_CORRELATE, true);
675
- this.filterAndParseGetStatsResults(transceiverStats.screenShareVideo.receiver, STATS.SHARE_CORRELATE, false);
835
+ this.filterAndParseGetStatsResults(
836
+ transceiverStats.video.sender,
837
+ STATS.VIDEO_CORRELATE,
838
+ true
839
+ );
840
+ this.filterAndParseGetStatsResults(
841
+ transceiverStats.video.receiver,
842
+ STATS.VIDEO_CORRELATE,
843
+ false
844
+ );
845
+ this.filterAndParseGetStatsResults(
846
+ transceiverStats.audio.sender,
847
+ STATS.AUDIO_CORRELATE,
848
+ true
849
+ );
850
+ this.filterAndParseGetStatsResults(
851
+ transceiverStats.audio.receiver,
852
+ STATS.AUDIO_CORRELATE,
853
+ false
854
+ );
855
+ this.filterAndParseGetStatsResults(
856
+ transceiverStats.screenShareVideo.sender,
857
+ STATS.SHARE_CORRELATE,
858
+ true
859
+ );
860
+ this.filterAndParseGetStatsResults(
861
+ transceiverStats.screenShareVideo.receiver,
862
+ STATS.SHARE_CORRELATE,
863
+ false
864
+ );
676
865
 
677
866
  // updates the current direction of media
678
867
  this.statsResults[STATS.AUDIO_CORRELATE].direction = transceiverStats.audio.currentDirection;
679
868
  this.statsResults[STATS.VIDEO_CORRELATE].direction = transceiverStats.video.currentDirection;
680
- this.statsResults[STATS.SHARE_CORRELATE].direction = transceiverStats.screenShareVideo.currentDirection;
869
+ this.statsResults[STATS.SHARE_CORRELATE].direction =
870
+ transceiverStats.screenShareVideo.currentDirection;
681
871
 
682
- this.statsResults[STATS.AUDIO_CORRELATE][STATS.SEND_DIRECTION].trackLabel = transceiverStats.audio.localTrackLabel;
683
- this.statsResults[STATS.VIDEO_CORRELATE][STATS.SEND_DIRECTION].trackLabel = transceiverStats.video.localTrackLabel;
872
+ this.statsResults[STATS.AUDIO_CORRELATE][STATS.SEND_DIRECTION].trackLabel =
873
+ transceiverStats.audio.localTrackLabel;
874
+ this.statsResults[STATS.VIDEO_CORRELATE][STATS.SEND_DIRECTION].trackLabel =
875
+ transceiverStats.video.localTrackLabel;
684
876
 
685
877
  this.compareLastStatsResult();
686
878
 
@@ -688,7 +880,9 @@ export class StatsAnalyzer extends EventsScope {
688
880
  // DO Deep copy, for some reason it takes the reference all the time rather then old value set
689
881
  this.lastStatsResults = JSON.parse(JSON.stringify(this.statsResults));
690
882
 
691
- LoggerProxy.logger.trace('StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats');
883
+ LoggerProxy.logger.trace(
884
+ 'StatsAnalyzer:index#getStatsAndParse --> Finished Collecting Stats'
885
+ );
692
886
  });
693
887
  }
694
888
 
@@ -713,10 +907,12 @@ export class StatsAnalyzer extends EventsScope {
713
907
  this.statsResults.internal[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
714
908
  }
715
909
  if (!this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded) {
716
- this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded;
910
+ this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded =
911
+ result.keyFramesEncoded;
717
912
  }
718
913
 
719
- const bytes = result.bytesSent - this.statsResults.internal[mediaType][sendrecvType].prevBytesSent;
914
+ const bytes =
915
+ result.bytesSent - this.statsResults.internal[mediaType][sendrecvType].prevBytesSent;
720
916
 
721
917
  this.statsResults.internal[mediaType][sendrecvType].prevBytesSent = result.bytesSent;
722
918
 
@@ -725,15 +921,19 @@ export class StatsAnalyzer extends EventsScope {
725
921
  this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
726
922
  this.statsResults[mediaType].bytesSent = kilobytes;
727
923
 
728
- this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded - this.statsResults.internal[mediaType][sendrecvType].framesEncoded;
729
- this.statsResults[mediaType][sendrecvType].keyFramesEncoded = result.keyFramesEncoded - this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded;
924
+ this.statsResults[mediaType][sendrecvType].framesEncoded =
925
+ result.framesEncoded - this.statsResults.internal[mediaType][sendrecvType].framesEncoded;
926
+ this.statsResults[mediaType][sendrecvType].keyFramesEncoded =
927
+ result.keyFramesEncoded -
928
+ this.statsResults.internal[mediaType][sendrecvType].keyFramesEncoded;
730
929
  this.statsResults.internal[mediaType].outboundRtpId = result.id;
731
930
 
732
931
  if (!this.statsResults.internal[mediaType][sendrecvType].packetsSent) {
733
932
  this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
734
933
  }
735
934
 
736
- this.statsResults[mediaType][sendrecvType].packetsSent = result.packetsSent - this.statsResults.internal[mediaType][sendrecvType].packetsSent;
935
+ this.statsResults[mediaType][sendrecvType].packetsSent =
936
+ result.packetsSent - this.statsResults.internal[mediaType][sendrecvType].packetsSent;
737
937
  this.statsResults.internal[mediaType][sendrecvType].packetsSent = result.packetsSent;
738
938
 
739
939
  // Data saved to send MQA metrics
@@ -745,17 +945,21 @@ export class StatsAnalyzer extends EventsScope {
745
945
  this.statsResults[mediaType][sendrecvType].totalFirCount = result.firCount;
746
946
  this.statsResults[mediaType][sendrecvType].framesSent = result.framesSent;
747
947
  this.statsResults[mediaType][sendrecvType].framesEncoded = result.framesEncoded;
748
- this.statsResults[mediaType][sendrecvType].encoderImplementation = result.encoderImplementation;
749
- this.statsResults[mediaType][sendrecvType].qualityLimitationReason = result.qualityLimitationReason;
750
- this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges = result.qualityLimitationResolutionChanges;
751
- this.statsResults[mediaType][sendrecvType].retransmittedPacketsSent = result.retransmittedPacketsSent;
948
+ this.statsResults[mediaType][sendrecvType].encoderImplementation =
949
+ result.encoderImplementation;
950
+ this.statsResults[mediaType][sendrecvType].qualityLimitationReason =
951
+ result.qualityLimitationReason;
952
+ this.statsResults[mediaType][sendrecvType].qualityLimitationResolutionChanges =
953
+ result.qualityLimitationResolutionChanges;
954
+ this.statsResults[mediaType][sendrecvType].retransmittedPacketsSent =
955
+ result.retransmittedPacketsSent;
752
956
  this.statsResults[mediaType][sendrecvType].totalBytesSent = result.bytesSent;
753
957
  this.statsResults[mediaType][sendrecvType].headerBytesSent = result.headerBytesSent;
754
- this.statsResults[mediaType][sendrecvType].retransmittedBytesSent = result.retransmittedBytesSent;
958
+ this.statsResults[mediaType][sendrecvType].retransmittedBytesSent =
959
+ result.retransmittedBytesSent;
755
960
  }
756
961
  }
757
962
 
758
-
759
963
  /**
760
964
  * Processes InboundRTP stats result and stores
761
965
  * @private
@@ -771,7 +975,8 @@ export class StatsAnalyzer extends EventsScope {
771
975
  let kilobytes = 0;
772
976
 
773
977
  if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {
774
- this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
978
+ this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived =
979
+ result.bytesReceived;
775
980
  }
776
981
 
777
982
  if (!this.statsResults.internal[mediaType][sendrecvType].pliCount) {
@@ -783,14 +988,18 @@ export class StatsAnalyzer extends EventsScope {
783
988
  }
784
989
 
785
990
  if (!this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived) {
786
- this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
991
+ this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived =
992
+ result.packetsReceived;
787
993
  }
788
994
 
789
995
  if (!this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp) {
790
- this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
996
+ this.statsResults.internal[mediaType][sendrecvType].lastPacketReceivedTimestamp =
997
+ result.lastPacketReceivedTimestamp;
791
998
  }
792
999
 
793
- const bytes = result.bytesReceived - (this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived);
1000
+ const bytes =
1001
+ result.bytesReceived -
1002
+ this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived;
794
1003
 
795
1004
  this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived = result.bytesReceived;
796
1005
 
@@ -798,35 +1007,52 @@ export class StatsAnalyzer extends EventsScope {
798
1007
  this.statsResults[mediaType][sendrecvType].availableBandwidth = kilobytes.toFixed(1);
799
1008
  this.statsResults[mediaType].bytesReceived = kilobytes.toFixed(1);
800
1009
 
801
- this.statsResults[mediaType][sendrecvType].pliCount = result.pliCount - this.statsResults.internal[mediaType][sendrecvType].pliCount;
802
- this.statsResults[mediaType][sendrecvType].currentPacketsLost = result.packetsLost - this.statsResults.internal[mediaType][sendrecvType].packetsLost;
1010
+ this.statsResults[mediaType][sendrecvType].pliCount =
1011
+ result.pliCount - this.statsResults.internal[mediaType][sendrecvType].pliCount;
1012
+ this.statsResults[mediaType][sendrecvType].currentPacketsLost =
1013
+ result.packetsLost - this.statsResults.internal[mediaType][sendrecvType].packetsLost;
803
1014
  if (this.statsResults[mediaType][sendrecvType].currentPacketsLost < 0) {
804
1015
  this.statsResults[mediaType][sendrecvType].currentPacketsLost = 0;
805
1016
  }
806
1017
 
807
- this.statsResults[mediaType][sendrecvType].packetsReceived = result.packetsReceived - this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived;
808
- this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
1018
+ this.statsResults[mediaType][sendrecvType].packetsReceived =
1019
+ result.packetsReceived -
1020
+ this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived;
1021
+ this.statsResults.internal[mediaType][sendrecvType].totalPacketsReceived =
1022
+ result.packetsReceived;
809
1023
 
810
1024
  if (this.statsResults[mediaType][sendrecvType].packetsReceived === 0) {
811
- LoggerProxy.logger.info(`StatsAnalyzer:index#processInboundRTPResult --> No packets received for ${mediaType} `, this.statsResults[mediaType][sendrecvType].packetsReceived);
1025
+ LoggerProxy.logger.info(
1026
+ `StatsAnalyzer:index#processInboundRTPResult --> No packets received for ${mediaType} `,
1027
+ this.statsResults[mediaType][sendrecvType].packetsReceived
1028
+ );
812
1029
  }
813
1030
 
814
1031
  // Check the over all packet Lost ratio
815
- 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;
1032
+ this.statsResults[mediaType][sendrecvType].currentPacketLossRatio =
1033
+ this.statsResults[mediaType][sendrecvType].currentPacketsLost > 0
1034
+ ? this.statsResults[mediaType][sendrecvType].currentPacketsLost /
1035
+ (this.statsResults[mediaType][sendrecvType].packetsReceived +
1036
+ this.statsResults[mediaType][sendrecvType].currentPacketsLost)
1037
+ : 0;
816
1038
  if (this.statsResults[mediaType][sendrecvType].currentPacketLossRatio > 3) {
817
- LoggerProxy.logger.info('StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver ', this.statsResults[mediaType][sendrecvType].currentPacketLossRatio);
1039
+ LoggerProxy.logger.info(
1040
+ 'StatsAnalyzer:index#processInboundRTPResult --> Packets getting lost from the receiver ',
1041
+ this.statsResults[mediaType][sendrecvType].currentPacketLossRatio
1042
+ );
818
1043
  }
819
1044
 
820
1045
  // TODO: check the packet loss value is negative values here
821
1046
 
822
1047
  if (result.packetsLost) {
823
- this.statsResults[mediaType][sendrecvType].totalPacketsLost = result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;
824
- }
825
- else {
1048
+ this.statsResults[mediaType][sendrecvType].totalPacketsLost =
1049
+ result.packetsLost > 0 ? result.packetsLost : -result.packetsLost;
1050
+ } else {
826
1051
  this.statsResults[mediaType][sendrecvType].totalPacketsLost = 0;
827
1052
  }
828
1053
 
829
- this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp = result.lastPacketReceivedTimestamp;
1054
+ this.statsResults[mediaType][sendrecvType].lastPacketReceivedTimestamp =
1055
+ result.lastPacketReceivedTimestamp;
830
1056
 
831
1057
  // From Thin
832
1058
  this.statsResults[mediaType][sendrecvType].totalNackCount = result.nackCount;
@@ -834,10 +1060,10 @@ export class StatsAnalyzer extends EventsScope {
834
1060
  this.statsResults[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
835
1061
  this.statsResults[mediaType][sendrecvType].keyFramesDecoded = result.keyFramesDecoded;
836
1062
 
837
- this.statsResults[mediaType][sendrecvType].decoderImplementation = result.decoderImplementation;
1063
+ this.statsResults[mediaType][sendrecvType].decoderImplementation =
1064
+ result.decoderImplementation;
838
1065
  this.statsResults[mediaType][sendrecvType].totalPacketsReceived = result.packetsReceived;
839
1066
 
840
-
841
1067
  this.statsResults[mediaType][sendrecvType].fecPacketsDiscarded = result.fecPacketsDiscarded;
842
1068
  this.statsResults[mediaType][sendrecvType].fecPacketsReceived = result.fecPacketsReceived;
843
1069
  this.statsResults[mediaType][sendrecvType].totalBytesReceived = result.bytesReceived;
@@ -849,8 +1075,10 @@ export class StatsAnalyzer extends EventsScope {
849
1075
 
850
1076
  this.statsResults[mediaType][sendrecvType].audioLevel = result.audioLevel;
851
1077
  this.statsResults[mediaType][sendrecvType].totalAudioEnergy = result.totalAudioEnergy;
852
- this.statsResults[mediaType][sendrecvType].totalSamplesReceived = result.totalSamplesReceived || 0;
853
- this.statsResults[mediaType][sendrecvType].totalSamplesDecoded = result.totalSamplesDecoded || 0;
1078
+ this.statsResults[mediaType][sendrecvType].totalSamplesReceived =
1079
+ result.totalSamplesReceived || 0;
1080
+ this.statsResults[mediaType][sendrecvType].totalSamplesDecoded =
1081
+ result.totalSamplesDecoded || 0;
854
1082
  this.statsResults[mediaType][sendrecvType].concealedSamples = result.concealedSamples || 0;
855
1083
  }
856
1084
  }
@@ -894,7 +1122,10 @@ export class StatsAnalyzer extends EventsScope {
894
1122
  RemoteNetworkType[result.id] = [];
895
1123
  }
896
1124
 
897
- if (result.candidateType && RemoteCandidateType[result.id].indexOf(result.candidateType) === -1) {
1125
+ if (
1126
+ result.candidateType &&
1127
+ RemoteCandidateType[result.id].indexOf(result.candidateType) === -1
1128
+ ) {
898
1129
  RemoteCandidateType[result.id].push(result.candidateType);
899
1130
  }
900
1131
 
@@ -902,7 +1133,10 @@ export class StatsAnalyzer extends EventsScope {
902
1133
  RemoteTransport[result.id].push(result.protocol.toUpperCase());
903
1134
  }
904
1135
 
905
- if (result.ip && RemoteIpAddress[result.id].indexOf(`${result.ip}:${result.portNumber}`) === -1) {
1136
+ if (
1137
+ result.ip &&
1138
+ RemoteIpAddress[result.id].indexOf(`${result.ip}:${result.portNumber}`) === -1
1139
+ ) {
906
1140
  RemoteIpAddress[result.id].push(`${result.ip}`); // TODO: Add ports
907
1141
  }
908
1142
 
@@ -919,13 +1153,16 @@ export class StatsAnalyzer extends EventsScope {
919
1153
  transport: RemoteTransport[result.id],
920
1154
  timestamp: result.time,
921
1155
  id: result.id,
922
- type: result.type
1156
+ type: result.type,
923
1157
  };
924
1158
 
925
1159
  this.statsResults.connectionType[ipType].candidateType = RemoteCandidateType[result.id];
926
1160
  this.statsResults.connectionType[ipType].ipAddress = RemoteIpAddress[result.id];
927
1161
 
928
- this.statsResults.connectionType[ipType].networkType = RemoteNetworkType[result.id][0] === NETWORK_TYPE.VPN ? NETWORK_TYPE.UNKNOWN : RemoteNetworkType[result.id][0];
1162
+ this.statsResults.connectionType[ipType].networkType =
1163
+ RemoteNetworkType[result.id][0] === NETWORK_TYPE.VPN
1164
+ ? NETWORK_TYPE.UNKNOWN
1165
+ : RemoteNetworkType[result.id][0];
929
1166
  this.statsResults.connectionType[ipType].transport = RemoteTransport[result.id];
930
1167
 
931
1168
  this.statsResults[type][sendRecvType].totalRoundTripTime = result.totalRoundTripTime;
@@ -946,7 +1183,8 @@ export class StatsAnalyzer extends EventsScope {
946
1183
  }
947
1184
  if (result.type !== 'track') return;
948
1185
 
949
- const sendrecvType = result.remoteSource === true ? STATS.RECEIVE_DIRECTION : STATS.SEND_DIRECTION;
1186
+ const sendrecvType =
1187
+ result.remoteSource === true ? STATS.RECEIVE_DIRECTION : STATS.SEND_DIRECTION;
950
1188
 
951
1189
  if (result.frameWidth && result.frameHeight) {
952
1190
  this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
@@ -961,18 +1199,21 @@ export class StatsAnalyzer extends EventsScope {
961
1199
  this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;
962
1200
  }
963
1201
 
964
-
965
1202
  if (result.trackIdentifier && mediaType !== STATS.AUDIO_CORRELATE) {
966
- this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier = result.trackIdentifier;
1203
+ this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier =
1204
+ result.trackIdentifier;
967
1205
 
968
1206
  const jitterBufferDelay = result && result.jitterBufferDelay;
969
1207
  const jitterBufferEmittedCount = result && result.jitterBufferEmittedCount;
970
1208
 
971
- this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay = jitterBufferEmittedCount && (+jitterBufferDelay / +jitterBufferEmittedCount);
1209
+ this.statsResults.resolutions[mediaType][sendrecvType].avgJitterDelay =
1210
+ jitterBufferEmittedCount && +jitterBufferDelay / +jitterBufferEmittedCount;
972
1211
 
973
1212
  // Used to calculate the jitter
974
- this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay = result.jitterBufferDelay;
975
- this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount = result.jitterBufferEmittedCount;
1213
+ this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferDelay =
1214
+ result.jitterBufferDelay;
1215
+ this.statsResults.resolutions[mediaType][sendrecvType].jitterBufferEmittedCount =
1216
+ result.jitterBufferEmittedCount;
976
1217
  }
977
1218
  }
978
1219
 
@@ -991,9 +1232,12 @@ export class StatsAnalyzer extends EventsScope {
991
1232
 
992
1233
  const mediaType = type;
993
1234
 
994
- if (!this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver) { this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost; }
1235
+ if (!this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver) {
1236
+ this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
1237
+ }
995
1238
 
996
- const currentPacketLoss = result.packetsLost - this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver;
1239
+ const currentPacketLoss =
1240
+ result.packetsLost - this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver;
997
1241
 
998
1242
  this.statsResults.internal[mediaType].send.totalPacketsLostOnReceiver = result.packetsLost;
999
1243
  this.statsResults[mediaType].send.packetsLostOnReceiver = currentPacketLoss;
@@ -1007,18 +1251,31 @@ export class StatsAnalyzer extends EventsScope {
1007
1251
  this.statsResults[mediaType].send.reportsReceived = result.reportsReceived;
1008
1252
 
1009
1253
  // Total packloss ratio on this video section of the call
1010
- this.statsResults[mediaType].send.overAllPacketLossRatio = this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0 ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver / this.statsResults[mediaType].send.totalPacketsSent : 0;
1011
- 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;
1012
-
1013
- if (this.statsResults[mediaType].send.maxPacketLossRatio < this.statsResults[mediaType].send.currentPacketLossRatio) {
1014
- this.statsResults[mediaType].send.maxPacketLossRatio = this.statsResults[mediaType].send.currentPacketLossRatio;
1254
+ this.statsResults[mediaType].send.overAllPacketLossRatio =
1255
+ this.statsResults[mediaType].send.totalPacketsLostOnReceiver > 0
1256
+ ? this.statsResults[mediaType].send.totalPacketsLostOnReceiver /
1257
+ this.statsResults[mediaType].send.totalPacketsSent
1258
+ : 0;
1259
+ this.statsResults[mediaType].send.currentPacketLossRatio =
1260
+ this.statsResults[mediaType].send.packetsLostOnReceiver > 0
1261
+ ? (this.statsResults[mediaType].send.packetsLostOnReceiver * 100) /
1262
+ (this.statsResults[mediaType].send.packetsSent +
1263
+ this.statsResults[mediaType].send.packetsLostOnReceiver)
1264
+ : 0;
1265
+
1266
+ if (
1267
+ this.statsResults[mediaType].send.maxPacketLossRatio <
1268
+ this.statsResults[mediaType].send.currentPacketLossRatio
1269
+ ) {
1270
+ this.statsResults[mediaType].send.maxPacketLossRatio =
1271
+ this.statsResults[mediaType].send.currentPacketLossRatio;
1015
1272
  }
1016
1273
 
1017
1274
  if (result.type === 'remote-inbound-rtp') {
1018
1275
  this.networkQualityMonitor.determineUplinkNetworkQuality({
1019
1276
  mediaType,
1020
1277
  remoteRtpResults: result,
1021
- statsAnalyzerCurrentStats: this.statsResults
1278
+ statsAnalyzerCurrentStats: this.statsResults,
1022
1279
  });
1023
1280
  }
1024
1281
  }