@webex/plugin-meetings 2.59.8-next.2 → 2.60.0

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 (172) hide show
  1. package/dist/common/browser-detection.d.ts +9 -0
  2. package/dist/common/browser-detection.js +2 -2
  3. package/dist/common/browser-detection.js.map +1 -1
  4. package/dist/common/collection.d.ts +48 -0
  5. package/dist/common/collection.js +2 -2
  6. package/dist/common/collection.js.map +1 -1
  7. package/dist/common/config.d.ts +2 -0
  8. package/dist/common/errors/captcha-error.d.ts +15 -0
  9. package/dist/common/errors/intent-to-join.d.ts +16 -0
  10. package/dist/common/errors/join-meeting.d.ts +17 -0
  11. package/dist/common/errors/media.d.ts +15 -0
  12. package/dist/common/errors/parameter.d.ts +15 -0
  13. package/dist/common/errors/password-error.d.ts +15 -0
  14. package/dist/common/errors/permission.d.ts +14 -0
  15. package/dist/common/errors/reclaim-host-role-error.d.ts +60 -0
  16. package/dist/common/errors/reclaim-host-role-error.js +158 -0
  17. package/dist/common/errors/reclaim-host-role-error.js.map +1 -0
  18. package/dist/common/errors/reconnection-in-progress.d.ts +9 -0
  19. package/dist/common/errors/reconnection.d.ts +15 -0
  20. package/dist/common/errors/stats.d.ts +15 -0
  21. package/dist/common/errors/webex-errors.d.ts +81 -0
  22. package/dist/common/errors/webex-meetings-error.d.ts +20 -0
  23. package/dist/common/events/events-scope.d.ts +17 -0
  24. package/dist/common/events/events.d.ts +12 -0
  25. package/dist/common/events/trigger-proxy.d.ts +2 -0
  26. package/dist/common/events/util.d.ts +2 -0
  27. package/dist/common/logs/logger-config.d.ts +2 -0
  28. package/dist/common/logs/logger-proxy.d.ts +2 -0
  29. package/dist/common/logs/request.d.ts +34 -0
  30. package/dist/common/queue.d.ts +32 -0
  31. package/dist/config.d.ts +73 -0
  32. package/dist/config.js +2 -2
  33. package/dist/config.js.map +1 -1
  34. package/dist/constants.d.ts +952 -0
  35. package/dist/constants.js +31 -2
  36. package/dist/constants.js.map +1 -1
  37. package/dist/controls-options-manager/constants.d.ts +4 -0
  38. package/dist/controls-options-manager/enums.d.ts +5 -0
  39. package/dist/controls-options-manager/index.d.ts +120 -0
  40. package/dist/controls-options-manager/index.js +2 -2
  41. package/dist/controls-options-manager/index.js.map +1 -1
  42. package/dist/controls-options-manager/util.d.ts +7 -0
  43. package/dist/index.d.ts +4 -0
  44. package/dist/locus-info/controlsUtils.d.ts +2 -0
  45. package/dist/locus-info/controlsUtils.js +6 -6
  46. package/dist/locus-info/controlsUtils.js.map +1 -1
  47. package/dist/locus-info/embeddedAppsUtils.d.ts +2 -0
  48. package/dist/locus-info/fullState.d.ts +2 -0
  49. package/dist/locus-info/hostUtils.d.ts +2 -0
  50. package/dist/locus-info/index.d.ts +269 -0
  51. package/dist/locus-info/index.js +18 -18
  52. package/dist/locus-info/index.js.map +1 -1
  53. package/dist/locus-info/infoUtils.d.ts +2 -0
  54. package/dist/locus-info/mediaSharesUtils.d.ts +2 -0
  55. package/dist/locus-info/parser.d.ts +212 -0
  56. package/dist/locus-info/parser.js +2 -2
  57. package/dist/locus-info/parser.js.map +1 -1
  58. package/dist/locus-info/selfUtils.d.ts +2 -0
  59. package/dist/media/index.d.ts +32 -0
  60. package/dist/media/properties.d.ts +108 -0
  61. package/dist/media/util.d.ts +2 -0
  62. package/dist/mediaQualityMetrics/config.d.ts +233 -0
  63. package/dist/meeting/effectsState.d.ts +42 -0
  64. package/dist/meeting/in-meeting-actions.d.ts +79 -0
  65. package/dist/meeting/index.d.ts +1622 -0
  66. package/dist/meeting/index.js +51 -28
  67. package/dist/meeting/index.js.map +1 -1
  68. package/dist/meeting/muteState.d.ts +116 -0
  69. package/dist/meeting/request.d.ts +255 -0
  70. package/dist/meeting/request.js +2 -2
  71. package/dist/meeting/request.js.map +1 -1
  72. package/dist/meeting/state.d.ts +9 -0
  73. package/dist/meeting/util.d.ts +2 -0
  74. package/dist/meeting/util.js +4 -4
  75. package/dist/meeting/util.js.map +1 -1
  76. package/dist/meeting-info/collection.d.ts +20 -0
  77. package/dist/meeting-info/collection.js +2 -2
  78. package/dist/meeting-info/collection.js.map +1 -1
  79. package/dist/meeting-info/index.d.ts +57 -0
  80. package/dist/meeting-info/meeting-info-v2.d.ts +93 -0
  81. package/dist/meeting-info/request.d.ts +22 -0
  82. package/dist/meeting-info/util.d.ts +2 -0
  83. package/dist/meeting-info/utilv2.d.ts +2 -0
  84. package/dist/meetings/collection.d.ts +23 -0
  85. package/dist/meetings/collection.js +2 -2
  86. package/dist/meetings/collection.js.map +1 -1
  87. package/dist/meetings/index.d.ts +296 -0
  88. package/dist/meetings/request.d.ts +27 -0
  89. package/dist/meetings/util.d.ts +18 -0
  90. package/dist/member/index.d.ts +148 -0
  91. package/dist/member/index.js +9 -0
  92. package/dist/member/index.js.map +1 -1
  93. package/dist/member/member.types.d.ts +11 -0
  94. package/dist/member/util.d.ts +2 -0
  95. package/dist/member/util.js +11 -0
  96. package/dist/member/util.js.map +1 -1
  97. package/dist/members/collection.d.ts +24 -0
  98. package/dist/members/index.d.ts +308 -0
  99. package/dist/members/index.js +39 -2
  100. package/dist/members/index.js.map +1 -1
  101. package/dist/members/request.d.ts +58 -0
  102. package/dist/members/request.js +19 -0
  103. package/dist/members/request.js.map +1 -1
  104. package/dist/members/types.d.ts +25 -0
  105. package/dist/members/types.js +15 -0
  106. package/dist/members/types.js.map +1 -0
  107. package/dist/members/util.d.ts +2 -0
  108. package/dist/members/util.js +50 -0
  109. package/dist/members/util.js.map +1 -1
  110. package/dist/metrics/config.d.ts +169 -0
  111. package/dist/metrics/constants.d.ts +59 -0
  112. package/dist/metrics/constants.js +2 -0
  113. package/dist/metrics/constants.js.map +1 -1
  114. package/dist/metrics/index.d.ts +152 -0
  115. package/dist/metrics/index.js +2 -2
  116. package/dist/metrics/index.js.map +1 -1
  117. package/dist/networkQualityMonitor/index.d.ts +70 -0
  118. package/dist/peer-connection-manager/index.d.ts +6 -0
  119. package/dist/peer-connection-manager/util.d.ts +6 -0
  120. package/dist/personal-meeting-room/index.d.ts +47 -0
  121. package/dist/personal-meeting-room/request.d.ts +14 -0
  122. package/dist/personal-meeting-room/util.d.ts +2 -0
  123. package/dist/reachability/index.d.ts +139 -0
  124. package/dist/reachability/index.js +2 -9
  125. package/dist/reachability/index.js.map +1 -1
  126. package/dist/reachability/request.d.ts +35 -0
  127. package/dist/reactions/reactions.d.ts +4 -0
  128. package/dist/reactions/reactions.type.d.ts +32 -0
  129. package/dist/reconnection-manager/index.d.ts +112 -0
  130. package/dist/recording-controller/enums.d.ts +7 -0
  131. package/dist/recording-controller/index.d.ts +193 -0
  132. package/dist/recording-controller/util.d.ts +13 -0
  133. package/dist/roap/collection.d.ts +10 -0
  134. package/dist/roap/handler.d.ts +47 -0
  135. package/dist/roap/index.d.ts +116 -0
  136. package/dist/roap/index.js.map +1 -1
  137. package/dist/roap/request.d.ts +35 -0
  138. package/dist/roap/state.d.ts +9 -0
  139. package/dist/roap/turnDiscovery.d.ts +81 -0
  140. package/dist/roap/util.d.ts +2 -0
  141. package/dist/statsAnalyzer/global.d.ts +118 -0
  142. package/dist/statsAnalyzer/global.js +4 -12
  143. package/dist/statsAnalyzer/global.js.map +1 -1
  144. package/dist/statsAnalyzer/index.d.ts +193 -0
  145. package/dist/statsAnalyzer/index.js +56 -14
  146. package/dist/statsAnalyzer/index.js.map +1 -1
  147. package/dist/statsAnalyzer/mqaUtil.d.ts +22 -0
  148. package/dist/statsAnalyzer/mqaUtil.js +15 -15
  149. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  150. package/dist/transcription/index.d.ts +64 -0
  151. package/package.json +21 -22
  152. package/src/common/errors/reclaim-host-role-error.ts +134 -0
  153. package/src/config.ts +2 -2
  154. package/src/constants.ts +33 -0
  155. package/src/meeting/index.ts +35 -0
  156. package/src/member/index.ts +9 -0
  157. package/src/member/util.ts +14 -0
  158. package/src/members/index.ts +55 -1
  159. package/src/members/request.ts +20 -0
  160. package/src/members/types.ts +29 -0
  161. package/src/members/util.ts +52 -0
  162. package/src/metrics/constants.ts +2 -0
  163. package/src/roap/index.ts +1 -0
  164. package/src/statsAnalyzer/global.ts +2 -10
  165. package/src/statsAnalyzer/index.ts +80 -17
  166. package/test/unit/spec/meeting/index.js +77 -6
  167. package/test/unit/spec/member/index.js +7 -0
  168. package/test/unit/spec/member/util.js +32 -0
  169. package/test/unit/spec/members/index.js +205 -0
  170. package/test/unit/spec/members/utils.js +75 -0
  171. package/test/unit/spec/roap/index.ts +0 -1
  172. package/test/unit/spec/stats-analyzer/index.js +151 -0
@@ -0,0 +1,118 @@
1
+ declare const STATS_DEFAULT: {
2
+ encryption: string;
3
+ audio: {
4
+ send: {
5
+ maxPacketLossRatio: number;
6
+ availableBandwidth: number;
7
+ bytesSent: number;
8
+ meanRemoteJitter: any[];
9
+ meanRoundTripTime: any[];
10
+ };
11
+ recv: {
12
+ availableBandwidth: number;
13
+ bytesReceived: number;
14
+ meanRtpJitter: any[];
15
+ meanRoundTripTime: any[];
16
+ };
17
+ };
18
+ video: {
19
+ send: {
20
+ maxPacketLossRatio: number;
21
+ availableBandwidth: number;
22
+ meanRemoteJitter: any[];
23
+ meanRoundTripTime: any[];
24
+ };
25
+ recv: {
26
+ availableBandwidth: number;
27
+ totalPacketsLost: number;
28
+ meanRtpJitter: any[];
29
+ meanRoundTripTime: any[];
30
+ };
31
+ latency: number;
32
+ packetsLost: number;
33
+ };
34
+ share: {
35
+ send: {
36
+ maxPacketLossRatio: number;
37
+ availableBandwidth: number;
38
+ totalPacketsLost: number;
39
+ meanRemoteJitter: any[];
40
+ meanRoundTripTime: any[];
41
+ };
42
+ recv: {
43
+ availableBandwidth: number;
44
+ meanRtpJitter: any[];
45
+ meanRoundTripTime: any[];
46
+ };
47
+ latency: number;
48
+ packetsLost: number;
49
+ };
50
+ bandwidth: {
51
+ systemBandwidth: number;
52
+ sentPerSecond: number;
53
+ encodedPerSecond: number;
54
+ helper: {
55
+ audioBytesSent: number;
56
+ videoBytestSent: number;
57
+ };
58
+ speed: number;
59
+ };
60
+ results: {};
61
+ connectionType: {
62
+ systemNetworkType: string;
63
+ systemIpAddress: string;
64
+ local: {
65
+ candidateType: any[];
66
+ transport: any[];
67
+ ipAddress: any[];
68
+ networkType: any[];
69
+ };
70
+ remote: {
71
+ candidateType: any[];
72
+ transport: any[];
73
+ ipAddress: any[];
74
+ networkType: any[];
75
+ };
76
+ };
77
+ resolutions: {
78
+ video: {
79
+ send: {
80
+ width: number;
81
+ height: number;
82
+ framesSent: number;
83
+ };
84
+ recv: {
85
+ width: number;
86
+ height: number;
87
+ };
88
+ };
89
+ share: {
90
+ send: {
91
+ width: number;
92
+ height: number;
93
+ framesSent: number;
94
+ };
95
+ recv: {
96
+ width: number;
97
+ height: number;
98
+ };
99
+ };
100
+ };
101
+ internal: {
102
+ audio: {
103
+ send: {};
104
+ recv: {};
105
+ };
106
+ video: {
107
+ send: {};
108
+ recv: {};
109
+ };
110
+ share: {
111
+ send: {};
112
+ recv: {};
113
+ };
114
+ remote: {};
115
+ candidates: {};
116
+ };
117
+ };
118
+ export default STATS_DEFAULT;
@@ -82,20 +82,11 @@ var STATS_DEFAULT = {
82
82
  }
83
83
  },
84
84
  resolutions: {
85
- audio: {
86
- send: {
87
- width: 0,
88
- height: 0
89
- },
90
- recv: {
91
- width: 0,
92
- height: 0
93
- }
94
- },
95
85
  video: {
96
86
  send: {
97
87
  width: 0,
98
- height: 0
88
+ height: 0,
89
+ framesSent: 0
99
90
  },
100
91
  recv: {
101
92
  width: 0,
@@ -105,7 +96,8 @@ var STATS_DEFAULT = {
105
96
  share: {
106
97
  send: {
107
98
  width: 0,
108
- height: 0
99
+ height: 0,
100
+ framesSent: 0
109
101
  },
110
102
  recv: {
111
103
  width: 0,
@@ -1 +1 @@
1
- {"version":3,"names":["STATS_DEFAULT","encryption","audio","send","maxPacketLossRatio","availableBandwidth","bytesSent","meanRemoteJitter","meanRoundTripTime","recv","bytesReceived","meanRtpJitter","video","totalPacketsLost","latency","packetsLost","share","bandwidth","systemBandwidth","sentPerSecond","encodedPerSecond","helper","audioBytesSent","videoBytestSent","speed","results","connectionType","systemNetworkType","systemIpAddress","local","candidateType","transport","ipAddress","networkType","remote","resolutions","width","height","internal","candidates","_default","exports","default"],"sources":["global.ts"],"sourcesContent":["const STATS_DEFAULT = {\n encryption: 'sha-256',\n audio: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n bytesSent: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n },\n recv: {\n availableBandwidth: 0,\n bytesReceived: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n },\n },\n video: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n },\n recv: {\n availableBandwidth: 0,\n totalPacketsLost: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n },\n latency: 0,\n packetsLost: 0,\n },\n share: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n totalPacketsLost: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n },\n recv: {\n availableBandwidth: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n },\n\n latency: 0,\n packetsLost: 0,\n },\n bandwidth: {\n systemBandwidth: 0,\n sentPerSecond: 0,\n encodedPerSecond: 0,\n helper: {\n audioBytesSent: 0,\n videoBytestSent: 0,\n },\n speed: 0,\n },\n results: {},\n connectionType: {\n systemNetworkType: 'unknown',\n systemIpAddress: '0.0.0.0',\n local: {\n candidateType: [],\n transport: [],\n ipAddress: [],\n networkType: [],\n },\n remote: {\n candidateType: [],\n transport: [],\n ipAddress: [],\n networkType: [],\n },\n },\n resolutions: {\n audio: {\n send: {\n width: 0,\n height: 0,\n },\n recv: {\n width: 0,\n height: 0,\n },\n },\n video: {\n send: {\n width: 0,\n height: 0,\n },\n recv: {\n width: 0,\n height: 0,\n },\n },\n share: {\n send: {\n width: 0,\n height: 0,\n },\n recv: {\n width: 0,\n height: 0,\n },\n },\n },\n internal: {\n audio: {\n send: {},\n recv: {},\n },\n video: {\n send: {},\n recv: {},\n },\n share: {\n send: {},\n recv: {},\n },\n remote: {},\n candidates: {},\n },\n};\n\nexport default STATS_DEFAULT;\n"],"mappings":"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"}
1
+ {"version":3,"names":["STATS_DEFAULT","encryption","audio","send","maxPacketLossRatio","availableBandwidth","bytesSent","meanRemoteJitter","meanRoundTripTime","recv","bytesReceived","meanRtpJitter","video","totalPacketsLost","latency","packetsLost","share","bandwidth","systemBandwidth","sentPerSecond","encodedPerSecond","helper","audioBytesSent","videoBytestSent","speed","results","connectionType","systemNetworkType","systemIpAddress","local","candidateType","transport","ipAddress","networkType","remote","resolutions","width","height","framesSent","internal","candidates","_default","exports","default"],"sources":["global.ts"],"sourcesContent":["const STATS_DEFAULT = {\n encryption: 'sha-256',\n audio: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n bytesSent: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n },\n recv: {\n availableBandwidth: 0,\n bytesReceived: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n },\n },\n video: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n },\n recv: {\n availableBandwidth: 0,\n totalPacketsLost: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n },\n latency: 0,\n packetsLost: 0,\n },\n share: {\n send: {\n maxPacketLossRatio: 0,\n availableBandwidth: 0,\n totalPacketsLost: 0,\n meanRemoteJitter: [],\n meanRoundTripTime: [],\n },\n recv: {\n availableBandwidth: 0,\n meanRtpJitter: [],\n meanRoundTripTime: [],\n },\n\n latency: 0,\n packetsLost: 0,\n },\n bandwidth: {\n systemBandwidth: 0,\n sentPerSecond: 0,\n encodedPerSecond: 0,\n helper: {\n audioBytesSent: 0,\n videoBytestSent: 0,\n },\n speed: 0,\n },\n results: {},\n connectionType: {\n systemNetworkType: 'unknown',\n systemIpAddress: '0.0.0.0',\n local: {\n candidateType: [],\n transport: [],\n ipAddress: [],\n networkType: [],\n },\n remote: {\n candidateType: [],\n transport: [],\n ipAddress: [],\n networkType: [],\n },\n },\n resolutions: {\n video: {\n send: {\n width: 0,\n height: 0,\n framesSent: 0,\n },\n recv: {\n width: 0,\n height: 0,\n },\n },\n share: {\n send: {\n width: 0,\n height: 0,\n framesSent: 0,\n },\n recv: {\n width: 0,\n height: 0,\n },\n },\n },\n internal: {\n audio: {\n send: {},\n recv: {},\n },\n video: {\n send: {},\n recv: {},\n },\n share: {\n send: {},\n recv: {},\n },\n remote: {},\n candidates: {},\n },\n};\n\nexport default STATS_DEFAULT;\n"],"mappings":"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"}
@@ -0,0 +1,193 @@
1
+ /// <reference types="node" />
2
+ import EventsScope from '../common/events/events-scope';
3
+ export declare const EVENTS: {
4
+ MEDIA_QUALITY: string;
5
+ NO_FRAMES_SENT: string;
6
+ NO_VIDEO_ENCODED: string;
7
+ LOCAL_MEDIA_STARTED: string;
8
+ LOCAL_MEDIA_STOPPED: string;
9
+ REMOTE_MEDIA_STARTED: string;
10
+ REMOTE_MEDIA_STOPPED: string;
11
+ };
12
+ /**
13
+ * Stats Analyzer class that will emit events based on detected quality
14
+ *
15
+ * @export
16
+ * @class StatsAnalyzer
17
+ * @extends {EventsScope}
18
+ */
19
+ export declare class StatsAnalyzer extends EventsScope {
20
+ config: any;
21
+ correlationId: any;
22
+ lastEmittedStartStopEvent: any;
23
+ lastMqaDataSent: any;
24
+ lastStatsResults: any;
25
+ localMQEStats: any;
26
+ meetingMediaStatus: any;
27
+ mqaInterval: NodeJS.Timeout;
28
+ mqaSentCount: any;
29
+ networkQualityMonitor: any;
30
+ peerConnection: any;
31
+ statsInterval: NodeJS.Timeout;
32
+ statsResults: any;
33
+ statsStarted: any;
34
+ /**
35
+ * Creates a new instance of StatsAnalyzer
36
+ * @constructor
37
+ * @public
38
+ * @param {Object} config SDK Configuration Object
39
+ * @param {Object} networkQualityMonitor class for assessing network characteristics (jitter, packetLoss, latency)
40
+ * @param {Object} statsResults Default properties for stats
41
+ */
42
+ constructor(config: any, networkQualityMonitor?: object, statsResults?: object);
43
+ populateResults(lastMqa: any): void;
44
+ resetStatsResults(): void;
45
+ /**
46
+ * sets mediaStatus status for analyzing metrics
47
+ *
48
+ * @public
49
+ * @param {Object} status for the audio and video
50
+ * @memberof StatsAnalyzer
51
+ * @returns {void}
52
+ */
53
+ updateMediaStatus(status: object): void;
54
+ /**
55
+ * captures MQA data from peerconnection
56
+ *
57
+ * @public
58
+ * @memberof StatsAnalyzer
59
+ * @returns {void}
60
+ */
61
+ sendMqaData(): void;
62
+ /**
63
+ * updated the peerconnection when changed
64
+ *
65
+ * @private
66
+ * @memberof updatePeerconnection
67
+ * @param {PeerConnection} peerConnection
68
+ * @returns {void}
69
+ */
70
+ updatePeerconnection(peerConnection: any): void;
71
+ /**
72
+ * Starts the stats analyzer on interval
73
+ *
74
+ * @public
75
+ * @memberof StatsAnalyzer
76
+ * @param {PeerConnection} peerConnection
77
+ * @returns {Promise}
78
+ */
79
+ startAnalyzer(peerConnection: any): Promise<void>;
80
+ /**
81
+ * Cleans up the analyzer when done
82
+ *
83
+ * @public
84
+ * @memberof StatsAnalyzer
85
+ * @returns {void}
86
+ */
87
+ stopAnalyzer(): Promise<void>;
88
+ /**
89
+ * Parse a single result of get stats
90
+ *
91
+ * @private
92
+ * @param {*} getStatsResult
93
+ * @param {String} type
94
+ * @param {boolean} isSender
95
+ * @returns {void}
96
+ * @memberof StatsAnalyzer
97
+ */
98
+ private parseGetStatsResult;
99
+ /**
100
+ * Filters the get stats results for types
101
+ * @private
102
+ * @param {Array} getStatsResults
103
+ * @param {String} type
104
+ * @param {boolean} isSender
105
+ * @returns {void}
106
+ */
107
+ private filterAndParseGetStatsResults;
108
+ /**
109
+ * parse the audio
110
+ * @param {String} result
111
+ * @param {boolean} type
112
+ * @returns {void}
113
+ */
114
+ parseAudioSource(result: any, type: any): void;
115
+ /**
116
+ * emits started/stopped events for local/remote media by checking
117
+ * if given values are increasing or not. The previousValue, currentValue
118
+ * params can be any numerical value like number of receive packets or
119
+ * decoded frames, etc.
120
+ *
121
+ * @private
122
+ * @param {string} mediaType
123
+ * @param {number} previousValue - value to compare
124
+ * @param {number} currentValue - value to compare (must be same type of value as previousValue)
125
+ * @param {boolean} isLocal - true if stats are for local media being sent out, false for remote media being received
126
+ * @memberof StatsAnalyzer
127
+ * @returns {void}
128
+ */
129
+ emitStartStopEvents: (mediaType: string, previousValue: number, currentValue: number, isLocal: boolean) => void;
130
+ /**
131
+ * compares current and previous stats to check if packets are not sent
132
+ *
133
+ * @private
134
+ * @memberof StatsAnalyzer
135
+ * @returns {void}
136
+ */
137
+ private compareLastStatsResult;
138
+ /**
139
+ * Does a `getStats` on all the transceivers and parses the results
140
+ *
141
+ * @private
142
+ * @memberof StatsAnalyzer
143
+ * @returns {Promise}
144
+ */
145
+ private getStatsAndParse;
146
+ /**
147
+ * Processes OutboundRTP stats result and stores
148
+ * @private
149
+ * @param {*} result
150
+ * @param {*} type
151
+ * @returns {void}
152
+ */
153
+ private processOutboundRTPResult;
154
+ /**
155
+ * Processes InboundRTP stats result and stores
156
+ * @private
157
+ * @param {*} result
158
+ * @param {*} type
159
+ * @returns {void}
160
+ */
161
+ private processInboundRTPResult;
162
+ /**
163
+ * Processes remote and local candidate result and stores
164
+ * @private
165
+ * @param {*} result
166
+ * @param {*} type
167
+ * @param {boolean} isSender
168
+ * @param {boolean} isRemote
169
+ *
170
+ * @returns {void}
171
+ */
172
+ parseCandidate: (result: any, type: any, isSender: boolean, isRemote: boolean) => void;
173
+ /**
174
+ * Process Track results
175
+ *
176
+ * @private
177
+ * @param {*} result
178
+ * @param {*} mediaType
179
+ * @param {*} sendrecvType
180
+ * @returns {void}
181
+ * @memberof StatsAnalyzer
182
+ */
183
+ private processTrackResult;
184
+ /**
185
+ *
186
+ * @private
187
+ * @param {*} result
188
+ * @param {*} type
189
+ * @returns {void}
190
+ * @memberof StatsAnalyzer
191
+ */
192
+ private compareSentAndReceived;
193
+ }
@@ -16,7 +16,7 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/
16
16
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
17
17
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
18
18
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
19
- var _lodash = require("lodash");
19
+ var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
20
20
  var _eventsScope = _interopRequireDefault(require("../common/events/events-scope"));
21
21
  var _constants = require("../constants");
22
22
  var _config = _interopRequireDefault(require("../mediaQualityMetrics/config"));
@@ -27,6 +27,8 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
27
27
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
28
28
  var EVENTS = {
29
29
  MEDIA_QUALITY: 'MEDIA_QUALITY',
30
+ NO_FRAMES_SENT: 'NO_FRAMES_SENT',
31
+ NO_VIDEO_ENCODED: 'NO_VIDEO_ENCODED',
30
32
  LOCAL_MEDIA_STARTED: 'LOCAL_MEDIA_STARTED',
31
33
  LOCAL_MEDIA_STOPPED: 'LOCAL_MEDIA_STOPPED',
32
34
  REMOTE_MEDIA_STARTED: 'REMOTE_MEDIA_STARTED',
@@ -99,7 +101,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
99
101
  var newEvent;
100
102
  if (currentValue - previousValue > 0) {
101
103
  newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STARTED : EVENTS.REMOTE_MEDIA_STARTED;
102
- } else if (currentValue === previousValue && currentValue > 0) {
104
+ } else if (currentValue === previousValue && currentValue >= 0) {
103
105
  newEvent = isLocal ? EVENTS.LOCAL_MEDIA_STOPPED : EVENTS.REMOTE_MEDIA_STOPPED;
104
106
  }
105
107
  if (newEvent && lastEmittedEvent !== newEvent) {
@@ -412,7 +414,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
412
414
  _config.default.intervals[0].intervalNumber = this.mqaSentCount;
413
415
 
414
416
  // DO Deep copy, for some reason it takes the reference all the time rather then old value set
415
- this.lastMqaDataSent = (0, _lodash.cloneDeep)(this.statsResults);
417
+ this.lastMqaDataSent = (0, _cloneDeep2.default)(this.statsResults);
416
418
  this.populateResults(_config.default.intervals[0]);
417
419
  this.resetStatsResults();
418
420
  this.emit({
@@ -520,9 +522,6 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
520
522
  case 'inbound-rtp':
521
523
  this.processInboundRTPResult(getStatsResult, type);
522
524
  break;
523
- case 'track':
524
- this.processTrackResult(getStatsResult, type);
525
- break;
526
525
  case 'remote-inbound-rtp':
527
526
  case 'remote-outbound-rtp':
528
527
  // @ts-ignore
@@ -630,13 +629,32 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
630
629
  previousStats = this.lastStatsResults[mediaType].send;
631
630
  if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
632
631
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets sent"));
633
- } else {
632
+ } else if (this.lastEmittedStartStopEvent[mediaType].local !== EVENTS.LOCAL_MEDIA_STOPPED) {
634
633
  if (currentStats.framesEncoded === previousStats.framesEncoded || currentStats.framesEncoded === 0) {
634
+ this.lastEmittedStartStopEvent[mediaType].local = EVENTS.NO_VIDEO_ENCODED;
635
635
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " Frames Encoded"));
636
+ this.emit({
637
+ file: 'statsAnalyzer',
638
+ function: 'compareLastStatsResult'
639
+ }, EVENTS.NO_VIDEO_ENCODED, {
640
+ mediaType: mediaType
641
+ });
636
642
  }
637
643
  if (this.statsResults.resolutions[mediaType].send.framesSent === this.lastStatsResults.resolutions[mediaType].send.framesSent || this.statsResults.resolutions[mediaType].send.framesSent === 0) {
638
644
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " Frames sent"));
639
645
  }
646
+
647
+ // Video is encoded but frames are not sent
648
+ if (currentStats.framesEncoded !== previousStats.framesEncoded && (currentStats.framesSent === previousStats.framesSent || currentStats.framesSent === 0)) {
649
+ this.lastEmittedStartStopEvent[mediaType].local = EVENTS.NO_FRAMES_SENT;
650
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames sent even though frames are encoded"));
651
+ this.emit({
652
+ file: 'statsAnalyzer',
653
+ function: 'compareLastStatsResult'
654
+ }, EVENTS.NO_FRAMES_SENT, {
655
+ mediaType: mediaType
656
+ });
657
+ }
640
658
  }
641
659
  this.emitStartStopEvents(mediaType, previousStats.framesSent, currentStats.framesSent, true);
642
660
  }
@@ -668,13 +686,32 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
668
686
  previousStats = this.lastStatsResults[mediaType].send;
669
687
  if (currentStats.totalPacketsSent === previousStats.totalPacketsSent || currentStats.totalPacketsSent === 0) {
670
688
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " RTP packets sent"));
671
- } else {
689
+ } else if (this.lastEmittedStartStopEvent[mediaType].local !== EVENTS.LOCAL_MEDIA_STOPPED) {
672
690
  if (currentStats.framesEncoded === previousStats.framesEncoded || currentStats.framesEncoded === 0) {
691
+ this.lastEmittedStartStopEvent[mediaType].local = EVENTS.NO_VIDEO_ENCODED;
673
692
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames getting encoded"));
693
+ this.emit({
694
+ file: 'statsAnalyzer',
695
+ function: 'compareLastStatsResult'
696
+ }, EVENTS.NO_VIDEO_ENCODED, {
697
+ mediaType: mediaType
698
+ });
674
699
  }
675
700
  if (this.statsResults.resolutions[mediaType].send.framesSent === this.lastStatsResults.resolutions[mediaType].send.framesSent || this.statsResults.resolutions[mediaType].send.framesSent === 0) {
676
701
  _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " frames sent"));
677
702
  }
703
+
704
+ // Share video is encoded but frames are not sent
705
+ if (currentStats.framesEncoded !== previousStats.framesEncoded && (currentStats.framesSent === previousStats.framesSent || currentStats.framesSent === 0)) {
706
+ this.lastEmittedStartStopEvent[mediaType].local = EVENTS.NO_FRAMES_SENT;
707
+ _loggerProxy.default.logger.info("StatsAnalyzer:index#compareLastStatsResult --> No ".concat(mediaType, " Frames sent even though frames are being encoded"));
708
+ this.emit({
709
+ file: 'statsAnalyzer',
710
+ function: 'compareLastStatsResult'
711
+ }, EVENTS.NO_FRAMES_SENT, {
712
+ mediaType: mediaType
713
+ });
714
+ }
678
715
  }
679
716
 
680
717
  // TODO:need to check receive share value
@@ -761,6 +798,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
761
798
  value: function processOutboundRTPResult(result, type) {
762
799
  var mediaType = type || _constants.STATS.AUDIO_CORRELATE;
763
800
  var sendrecvType = _constants.STATS.SEND_DIRECTION;
801
+ this.processTrackResult(result, type, sendrecvType);
764
802
  if (result.bytesSent) {
765
803
  var kilobytes = 0;
766
804
  if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesSent) {
@@ -817,6 +855,7 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
817
855
  value: function processInboundRTPResult(result, type) {
818
856
  var mediaType = type || _constants.STATS.AUDIO_CORRELATE;
819
857
  var sendrecvType = _constants.STATS.RECEIVE_DIRECTION;
858
+ this.processTrackResult(result, type, sendrecvType);
820
859
  if (result.bytesReceived) {
821
860
  var kilobytes = 0;
822
861
  if (!this.statsResults.internal[mediaType][sendrecvType].prevBytesReceived) {
@@ -896,25 +935,28 @@ var StatsAnalyzer = /*#__PURE__*/function (_EventsScope) {
896
935
  * @private
897
936
  * @param {*} result
898
937
  * @param {*} mediaType
938
+ * @param {*} sendrecvType
899
939
  * @returns {void}
900
940
  * @memberof StatsAnalyzer
901
941
  */
902
- function processTrackResult(result, mediaType) {
903
- if (!result || result.type !== 'track') {
942
+ function processTrackResult(result, mediaType, sendrecvType) {
943
+ if (!result || mediaType === _constants.STATS.AUDIO_CORRELATE) {
944
+ return;
945
+ }
946
+ if (result.type !== 'inbound-rtp' && result.type !== 'outbound-rtp') {
904
947
  return;
905
948
  }
906
- if (result.type !== 'track') return;
907
- var sendrecvType = result.remoteSource === true ? _constants.STATS.RECEIVE_DIRECTION : _constants.STATS.SEND_DIRECTION;
908
949
  if (result.frameWidth && result.frameHeight) {
909
950
  this.statsResults.resolutions[mediaType][sendrecvType].width = result.frameWidth;
910
951
  this.statsResults.resolutions[mediaType][sendrecvType].height = result.frameHeight;
911
- this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
912
- this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
913
952
  }
914
953
  if (sendrecvType === _constants.STATS.RECEIVE_DIRECTION) {
915
954
  this.statsResults.resolutions[mediaType][sendrecvType].framesReceived = result.framesReceived;
916
955
  this.statsResults.resolutions[mediaType][sendrecvType].framesDecoded = result.framesDecoded;
917
956
  this.statsResults.resolutions[mediaType][sendrecvType].framesDropped = result.framesDropped;
957
+ } else if (sendrecvType === _constants.STATS.SEND_DIRECTION) {
958
+ this.statsResults.resolutions[mediaType][sendrecvType].framesSent = result.framesSent;
959
+ this.statsResults.resolutions[mediaType][sendrecvType].hugeFramesSent = result.hugeFramesSent;
918
960
  }
919
961
  if (result.trackIdentifier && mediaType !== _constants.STATS.AUDIO_CORRELATE) {
920
962
  this.statsResults.resolutions[mediaType][sendrecvType].trackIdentifier = result.trackIdentifier;