@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.
- package/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/constants.js +4 -2
- package/dist/constants.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/mediaQualityMetrics/config.js +10 -10
- package/dist/mediaQualityMetrics/config.js.map +1 -1
- package/dist/meeting/index.js +21 -8
- package/dist/meeting/index.js.map +1 -1
- package/dist/meetings/index.js +6 -1
- package/dist/meetings/index.js.map +1 -1
- package/dist/reachability/index.js +82 -9
- package/dist/reachability/index.js.map +1 -1
- package/dist/statsAnalyzer/index.js +4 -2
- package/dist/statsAnalyzer/index.js.map +1 -1
- package/dist/statsAnalyzer/mqaUtil.js +14 -0
- package/dist/statsAnalyzer/mqaUtil.js.map +1 -1
- package/dist/types/constants.d.ts +2 -1
- package/dist/types/mediaQualityMetrics/config.d.ts +8 -2
- package/dist/types/meeting/index.d.ts +8 -0
- package/dist/types/reachability/index.d.ts +11 -0
- package/dist/webinar/index.js +1 -1
- package/package.json +22 -22
- package/src/constants.ts +2 -1
- package/src/mediaQualityMetrics/config.ts +13 -7
- package/src/meeting/index.ts +23 -9
- package/src/meetings/index.ts +7 -2
- package/src/reachability/index.ts +57 -0
- package/src/statsAnalyzer/index.ts +6 -3
- package/src/statsAnalyzer/mqaUtil.ts +18 -0
- package/test/unit/spec/meeting/index.js +28 -8
- package/test/unit/spec/meetings/index.js +38 -15
- package/test/unit/spec/reachability/index.ts +266 -0
- 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['
|
|
104
|
-
|
|
138
|
+
statsAnalyzer.statsResults['video-send'].send.totalRtxPacketsSent,
|
|
139
|
+
10
|
|
105
140
|
);
|
|
106
141
|
assert.strictEqual(
|
|
107
|
-
statsAnalyzer.statsResults['
|
|
108
|
-
|
|
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);
|