@webex/plugin-meetings 3.3.0 → 3.3.1

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 (35) hide show
  1. package/dist/breakouts/breakout.js +1 -1
  2. package/dist/breakouts/index.js +1 -1
  3. package/dist/constants.js +4 -2
  4. package/dist/constants.js.map +1 -1
  5. package/dist/interpretation/index.js +1 -1
  6. package/dist/interpretation/siLanguage.js +1 -1
  7. package/dist/mediaQualityMetrics/config.js +10 -10
  8. package/dist/mediaQualityMetrics/config.js.map +1 -1
  9. package/dist/meeting/index.js +21 -8
  10. package/dist/meeting/index.js.map +1 -1
  11. package/dist/meetings/index.js +6 -1
  12. package/dist/meetings/index.js.map +1 -1
  13. package/dist/reachability/index.js +82 -9
  14. package/dist/reachability/index.js.map +1 -1
  15. package/dist/statsAnalyzer/index.js +4 -2
  16. package/dist/statsAnalyzer/index.js.map +1 -1
  17. package/dist/statsAnalyzer/mqaUtil.js +14 -0
  18. package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
  19. package/dist/types/constants.d.ts +2 -1
  20. package/dist/types/mediaQualityMetrics/config.d.ts +8 -2
  21. package/dist/types/meeting/index.d.ts +8 -0
  22. package/dist/types/reachability/index.d.ts +11 -0
  23. package/dist/webinar/index.js +1 -1
  24. package/package.json +22 -22
  25. package/src/constants.ts +2 -1
  26. package/src/mediaQualityMetrics/config.ts +13 -7
  27. package/src/meeting/index.ts +23 -9
  28. package/src/meetings/index.ts +7 -2
  29. package/src/reachability/index.ts +57 -0
  30. package/src/statsAnalyzer/index.ts +6 -3
  31. package/src/statsAnalyzer/mqaUtil.ts +18 -0
  32. package/test/unit/spec/meeting/index.js +28 -8
  33. package/test/unit/spec/meetings/index.js +38 -15
  34. package/test/unit/spec/reachability/index.ts +266 -0
  35. package/test/unit/spec/stats-analyzer/index.js +89 -8
@@ -64,7 +64,7 @@ describe('plugin-meetings', () => {
64
64
  assert(calledSpy.calledOnce);
65
65
  });
66
66
 
67
- it('processOutboundRTPResult should create the correct stats results', () => {
67
+ it('processOutboundRTPResult should create the correct stats results for audio', () => {
68
68
  // establish the `statsResults` object.
69
69
  statsAnalyzer.parseGetStatsResult({type: 'none'}, 'audio-send', true);
70
70
 
@@ -80,8 +80,6 @@ describe('plugin-meetings', () => {
80
80
  nackCount: 1,
81
81
  packetsSent: 3600,
82
82
  remoteId: 'RTCRemoteInboundRtpAudioStream_123456789',
83
- retransmittedBytesSent: 100,
84
- retransmittedPacketsSent: 2,
85
83
  ssrc: 123456789,
86
84
  targetBitrate: 256000,
87
85
  timestamp: 1707341489336,
@@ -99,17 +97,54 @@ describe('plugin-meetings', () => {
99
97
  assert.strictEqual(statsAnalyzer.statsResults['audio-send'].send.totalNackCount, 1);
100
98
  assert.strictEqual(statsAnalyzer.statsResults['audio-send'].send.totalPacketsSent, 3600);
101
99
  assert.strictEqual(statsAnalyzer.statsResults['audio-send'].send.requestedBitrate, 10000);
100
+ });
101
+
102
+ it('processOutboundRTPResult should create the correct stats results for video', () => {
103
+ // establish the `statsResults` object for video.
104
+ statsAnalyzer.parseGetStatsResult({type: 'none'}, 'video-send', true);
105
+
106
+ statsAnalyzer.processOutboundRTPResult(
107
+ {
108
+ bytesSent: 250000,
109
+ codecId: 'RTCCodec_1_Outbound_107',
110
+ headerBytesSent: 50000,
111
+ id: 'RTCOutboundRTPVideoStream_987654321',
112
+ kind: 'video',
113
+ mediaSourceId: 'RTCVideoSource_3',
114
+ mediaType: 'video',
115
+ nackCount: 5,
116
+ packetsSent: 15000,
117
+ remoteId: 'RTCRemoteInboundRtpVideoStream_987654321',
118
+ retransmittedBytesSent: 500,
119
+ retransmittedPacketsSent: 10,
120
+ ssrc: 987654321,
121
+ targetBitrate: 1024000,
122
+ timestamp: 1707341489336,
123
+ trackId: 'RTCMediaStreamTrack_sender_3',
124
+ transportId: 'RTCTransport_0_2',
125
+ type: 'outbound-rtp',
126
+ requestedBitrate: 50000,
127
+ },
128
+ 'video-send',
129
+ true
130
+ );
131
+
132
+ assert.strictEqual(statsAnalyzer.statsResults['video-send'].send.headerBytesSent, 50000);
133
+ assert.strictEqual(statsAnalyzer.statsResults['video-send'].send.totalBytesSent, 250000);
134
+ assert.strictEqual(statsAnalyzer.statsResults['video-send'].send.totalNackCount, 5);
135
+ assert.strictEqual(statsAnalyzer.statsResults['video-send'].send.totalPacketsSent, 15000);
136
+ assert.strictEqual(statsAnalyzer.statsResults['video-send'].send.requestedBitrate, 50000);
102
137
  assert.strictEqual(
103
- statsAnalyzer.statsResults['audio-send'].send.retransmittedPacketsSent,
104
- 2
138
+ statsAnalyzer.statsResults['video-send'].send.totalRtxPacketsSent,
139
+ 10
105
140
  );
106
141
  assert.strictEqual(
107
- statsAnalyzer.statsResults['audio-send'].send.retransmittedBytesSent,
108
- 100
142
+ statsAnalyzer.statsResults['video-send'].send.totalRtxBytesSent,
143
+ 500
109
144
  );
110
145
  });
111
146
 
112
- it('processInboundRTPResult should create the correct stats results', () => {
147
+ it('processInboundRTPResult should create the correct stats results for audio', () => {
113
148
  // establish the `statsResults` object.
114
149
  statsAnalyzer.parseGetStatsResult({type: 'none'}, 'audio-recv-1', false);
115
150
 
@@ -176,6 +211,52 @@ describe('plugin-meetings', () => {
176
211
  );
177
212
  });
178
213
 
214
+ it('processInboundRTPResult should create the correct stats results for video', () => {
215
+ // establish the `statsResults` object for video.
216
+ statsAnalyzer.parseGetStatsResult({type: 'none'}, 'video-recv', false);
217
+
218
+ statsAnalyzer.processInboundRTPResult(
219
+ {
220
+ bytesReceived: 100000,
221
+ codecId: 'RTCCodec_6_Inbound_107',
222
+ fecPacketsDiscarded: 2,
223
+ fecPacketsReceived: 2,
224
+ headerBytesReceived: 10000,
225
+ id: 'RTCInboundRTPVideoStream_987654321',
226
+ jitter: 0.05,
227
+ jitterBufferDelay: 5000,
228
+ jitterBufferEmittedCount: 50000,
229
+ kind: 'video',
230
+ lastPacketReceivedTimestamp: 1707341488529,
231
+ mediaType: 'video',
232
+ packetsDiscarded: 5,
233
+ packetsLost: 10,
234
+ packetsReceived: 1500,
235
+ remoteId: 'RTCRemoteOutboundRTPVideoStream_987654321',
236
+ ssrc: 987654321,
237
+ timestamp: 1707341489419,
238
+ trackId: 'RTCMediaStreamTrack_receiver_3',
239
+ transportId: 'RTCTransport_0_2',
240
+ type: 'inbound-rtp',
241
+ requestedBitrate: 50000,
242
+ retransmittedBytesReceived: 500,
243
+ retransmittedPacketsReceived: 10,
244
+ },
245
+ 'video-recv',
246
+ false
247
+ );
248
+
249
+ assert.strictEqual(statsAnalyzer.statsResults['video-recv'].recv.totalPacketsReceived, 1500);
250
+ assert.strictEqual(statsAnalyzer.statsResults['video-recv'].recv.fecPacketsDiscarded, 2);
251
+ assert.strictEqual(statsAnalyzer.statsResults['video-recv'].recv.fecPacketsReceived, 2);
252
+ assert.strictEqual(statsAnalyzer.statsResults['video-recv'].recv.totalBytesReceived, 100000);
253
+ assert.strictEqual(statsAnalyzer.statsResults['video-recv'].recv.requestedBitrate, 50000);
254
+ assert.strictEqual(statsAnalyzer.statsResults['video-recv'].recv.headerBytesReceived, 10000);
255
+ assert.strictEqual(statsAnalyzer.statsResults['video-recv'].recv.totalRtxBytesReceived, 500);
256
+ assert.strictEqual(statsAnalyzer.statsResults['video-recv'].recv.totalRtxPacketsReceived, 10);
257
+ });
258
+
259
+
179
260
  it('parseAudioSource should create the correct stats results', () => {
180
261
  // establish the `statsResults` object.
181
262
  statsAnalyzer.parseGetStatsResult({type: 'none'}, 'audio-send', true);