@flashphoner/websdk 2.0.261 → 2.0.263
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/docTemplate/README.md +1 -1
- package/flashphoner-no-flash.js +80 -31
- package/flashphoner-no-flash.min.js +1 -1
- package/flashphoner-no-webrtc.js +80 -31
- package/flashphoner-no-webrtc.min.js +1 -1
- package/flashphoner-no-wsplayer.js +80 -31
- package/flashphoner-no-wsplayer.min.js +1 -1
- package/flashphoner-room-api-webrtc-only.js +80 -31
- package/flashphoner-room-api-webrtc-only.min.js +1 -1
- package/flashphoner-room-api.js +62 -27
- package/flashphoner-room-api.min.js +1 -1
- package/flashphoner-temasys-flash-websocket-without-adapterjs.js +80 -31
- package/flashphoner-temasys-flash-websocket.js +80 -31
- package/flashphoner-temasys-flash-websocket.min.js +1 -1
- package/flashphoner-webrtc-only.js +80 -31
- package/flashphoner-webrtc-only.min.js +1 -1
- package/flashphoner.js +80 -31
- package/flashphoner.min.js +1 -1
- package/package.json +1 -1
- package/src/stats-collector.js +58 -23
- package/src/util.js +4 -4
|
@@ -12946,6 +12946,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
12946
12946
|
metricsBatch: null,
|
|
12947
12947
|
timer: null,
|
|
12948
12948
|
batchCount: 0,
|
|
12949
|
+
timerBusy: false,
|
|
12949
12950
|
start: function () {
|
|
12950
12951
|
var _start = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
12951
12952
|
var error;
|
|
@@ -13028,7 +13029,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13028
13029
|
_context2.n = 1;
|
|
13029
13030
|
break;
|
|
13030
13031
|
}
|
|
13031
|
-
statCollector.logger.error(LOG_PREFIX, "Can't update WebRTC metrics sending: no parameters passed");
|
|
13032
|
+
statCollector.logger.error(LOG_PREFIX + "-" + statCollector.id, "Can't update WebRTC metrics sending: no parameters passed");
|
|
13032
13033
|
return _context2.a(2);
|
|
13033
13034
|
case 1:
|
|
13034
13035
|
if (!(description.types || description.compression)) {
|
|
@@ -13088,14 +13089,26 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13088
13089
|
}(),
|
|
13089
13090
|
updateHeaders: function () {
|
|
13090
13091
|
var _updateHeaders = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
|
|
13091
|
-
var stats
|
|
13092
|
+
var stats,
|
|
13093
|
+
currentHeaders,
|
|
13094
|
+
headersChanged,
|
|
13095
|
+
newMetrics,
|
|
13096
|
+
_args3 = arguments;
|
|
13092
13097
|
return _regenerator().w(function (_context3) {
|
|
13093
13098
|
while (1) switch (_context3.n) {
|
|
13094
13099
|
case 0:
|
|
13100
|
+
stats = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : null;
|
|
13101
|
+
currentHeaders = "";
|
|
13102
|
+
headersChanged = false;
|
|
13103
|
+
if (stats) {
|
|
13104
|
+
_context3.n = 2;
|
|
13105
|
+
break;
|
|
13106
|
+
}
|
|
13095
13107
|
_context3.n = 1;
|
|
13096
13108
|
return statCollector.mediaConnection.getWebRTCStats();
|
|
13097
13109
|
case 1:
|
|
13098
13110
|
stats = _context3.v;
|
|
13111
|
+
case 2:
|
|
13099
13112
|
Object.keys(statCollector.description.types).forEach(function (type) {
|
|
13100
13113
|
var typeDescriptor = statCollector.description.types[type];
|
|
13101
13114
|
var metricsString = "";
|
|
@@ -13108,11 +13121,11 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13108
13121
|
}
|
|
13109
13122
|
if (stats[type]) {
|
|
13110
13123
|
stats[type].forEach(function (report) {
|
|
13111
|
-
statCollector.logger.debug(LOG_PREFIX, type + " report: " + JSON.stringify(report));
|
|
13124
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, type + " report: " + JSON.stringify(report));
|
|
13112
13125
|
if (contentFilters) {
|
|
13113
13126
|
var filtersMatched = true;
|
|
13114
13127
|
for (var filter in contentFilters) {
|
|
13115
|
-
statCollector.logger.debug(LOG_PREFIX, type + " filter by " + filter + ": " + JSON.stringify(contentFilters[filter]));
|
|
13128
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, type + " filter by " + filter + ": " + JSON.stringify(contentFilters[filter]));
|
|
13116
13129
|
var filterMatched = false;
|
|
13117
13130
|
if (report[filter]) {
|
|
13118
13131
|
var _iterator = _createForOfIteratorHelper(contentFilters[filter]),
|
|
@@ -13120,7 +13133,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13120
13133
|
try {
|
|
13121
13134
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
13122
13135
|
var value = _step.value;
|
|
13123
|
-
statCollector.logger.debug(LOG_PREFIX, filter + ": " + value + " <> " + report[filter]);
|
|
13136
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, filter + ": " + value + " <> " + report[filter]);
|
|
13124
13137
|
if (report[filter] === value) {
|
|
13125
13138
|
filterMatched = true;
|
|
13126
13139
|
break;
|
|
@@ -13138,18 +13151,30 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13138
13151
|
}
|
|
13139
13152
|
}
|
|
13140
13153
|
if (filtersMatched) {
|
|
13141
|
-
statCollector.addHeaders(report, metricsString);
|
|
13154
|
+
currentHeaders = statCollector.addHeaders(currentHeaders, report, metricsString);
|
|
13142
13155
|
}
|
|
13143
13156
|
} else {
|
|
13144
|
-
statCollector.addHeaders(report, metricsString);
|
|
13157
|
+
currentHeaders = statCollector.addHeaders(currentHeaders, report, metricsString);
|
|
13145
13158
|
}
|
|
13146
13159
|
});
|
|
13147
13160
|
} else {
|
|
13148
|
-
statCollector.logger.
|
|
13161
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, "No report type found in RTC stats: '" + type + "'");
|
|
13149
13162
|
}
|
|
13150
13163
|
});
|
|
13151
|
-
|
|
13152
|
-
|
|
13164
|
+
if (currentHeaders !== statCollector.headers) {
|
|
13165
|
+
headersChanged = true;
|
|
13166
|
+
newMetrics = [];
|
|
13167
|
+
currentHeaders.split(",").forEach(function (header) {
|
|
13168
|
+
if (statCollector.headers.indexOf(header) === -1) {
|
|
13169
|
+
newMetrics.push(header);
|
|
13170
|
+
}
|
|
13171
|
+
});
|
|
13172
|
+
if (newMetrics.length) {
|
|
13173
|
+
statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "RTC metrics to be collected: " + newMetrics.toString());
|
|
13174
|
+
}
|
|
13175
|
+
statCollector.headers = currentHeaders;
|
|
13176
|
+
}
|
|
13177
|
+
return _context3.a(2, headersChanged);
|
|
13153
13178
|
}
|
|
13154
13179
|
}, _callee3);
|
|
13155
13180
|
}));
|
|
@@ -13158,24 +13183,20 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13158
13183
|
}
|
|
13159
13184
|
return updateHeaders;
|
|
13160
13185
|
}(),
|
|
13161
|
-
addHeaders: function addHeaders(report, metricsString) {
|
|
13186
|
+
addHeaders: function addHeaders(currentHeaders, report, metricsString) {
|
|
13162
13187
|
if (metricsString) {
|
|
13163
13188
|
var metrics = metricsString.split(",");
|
|
13164
13189
|
metrics.forEach(function (metric) {
|
|
13165
|
-
var metricFound = false;
|
|
13166
13190
|
for (var _i = 0, _Object$keys = Object.keys(report); _i < _Object$keys.length; _i++) {
|
|
13167
13191
|
var key = _Object$keys[_i];
|
|
13168
13192
|
if (metric === key) {
|
|
13169
|
-
|
|
13170
|
-
metricFound = true;
|
|
13193
|
+
currentHeaders = util.addFieldToCsvString(currentHeaders, report.type + "." + report.id + "." + metric, ",");
|
|
13171
13194
|
break;
|
|
13172
13195
|
}
|
|
13173
13196
|
}
|
|
13174
|
-
if (!metricFound) {
|
|
13175
|
-
statCollector.logger.warn(LOG_PREFIX, "No metric found in RTC stats report '" + report.type + "': '" + metric + "'");
|
|
13176
|
-
}
|
|
13177
13197
|
});
|
|
13178
13198
|
}
|
|
13199
|
+
return currentHeaders;
|
|
13179
13200
|
},
|
|
13180
13201
|
updateCompression: function () {
|
|
13181
13202
|
var _updateCompression = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
|
|
@@ -13228,7 +13249,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13228
13249
|
case 2:
|
|
13229
13250
|
_context5.p = 2;
|
|
13230
13251
|
_t2 = _context5.v;
|
|
13231
|
-
statCollector.logger.warn(LOG_PREFIX, "Can't compress metrics data using " + compression + ": " + _t2);
|
|
13252
|
+
statCollector.logger.warn(LOG_PREFIX + "-" + statCollector.id, "Can't compress metrics data using " + compression + ": " + _t2);
|
|
13232
13253
|
statCollector.compression = "none";
|
|
13233
13254
|
case 3:
|
|
13234
13255
|
return _context5.a(2);
|
|
@@ -13249,7 +13270,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13249
13270
|
statCollector.send("webRTCMetricsClientDescription", data);
|
|
13250
13271
|
},
|
|
13251
13272
|
send: function send(message, data) {
|
|
13252
|
-
statCollector.logger.debug(LOG_PREFIX, data);
|
|
13273
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, data);
|
|
13253
13274
|
if (statCollector.wsConnection.readyState === WebSocket.OPEN) {
|
|
13254
13275
|
statCollector.wsConnection.send(JSON.stringify({
|
|
13255
13276
|
message: message,
|
|
@@ -13272,14 +13293,17 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13272
13293
|
},
|
|
13273
13294
|
collectMetrics: function () {
|
|
13274
13295
|
var _collectMetrics = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6() {
|
|
13275
|
-
var stats, metrics;
|
|
13296
|
+
var stats, metrics, lostMetrics;
|
|
13276
13297
|
return _regenerator().w(function (_context6) {
|
|
13277
13298
|
while (1) switch (_context6.n) {
|
|
13278
13299
|
case 0:
|
|
13279
|
-
if (!statCollector.timer) {
|
|
13280
|
-
_context6.n =
|
|
13300
|
+
if (!(statCollector.timer && !statCollector.timerBusy)) {
|
|
13301
|
+
_context6.n = 6;
|
|
13281
13302
|
break;
|
|
13282
13303
|
}
|
|
13304
|
+
// Unfortunately there are no real atomics in JS unless SharedArrayBuffer is used
|
|
13305
|
+
// So we guard the timer callback with a dumb boolean
|
|
13306
|
+
statCollector.timerBusy = true;
|
|
13283
13307
|
_context6.n = 1;
|
|
13284
13308
|
return statCollector.mediaConnection.getWebRTCStats();
|
|
13285
13309
|
case 1:
|
|
@@ -13288,6 +13312,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13288
13312
|
statCollector.metricsBatch = [];
|
|
13289
13313
|
}
|
|
13290
13314
|
metrics = [];
|
|
13315
|
+
lostMetrics = [];
|
|
13291
13316
|
statCollector.headers.split(",").forEach(function (header) {
|
|
13292
13317
|
var components = header.split(".");
|
|
13293
13318
|
var descriptor = {
|
|
@@ -13295,7 +13320,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13295
13320
|
id: components[1],
|
|
13296
13321
|
name: components[2]
|
|
13297
13322
|
};
|
|
13298
|
-
var value = "
|
|
13323
|
+
var value = "NO";
|
|
13299
13324
|
if (stats[descriptor.type]) {
|
|
13300
13325
|
var _iterator2 = _createForOfIteratorHelper(stats[descriptor.type]),
|
|
13301
13326
|
_step2;
|
|
@@ -13314,7 +13339,13 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13314
13339
|
}
|
|
13315
13340
|
}
|
|
13316
13341
|
metrics.push(value);
|
|
13342
|
+
if (value == "NO") {
|
|
13343
|
+
lostMetrics.push(descriptor);
|
|
13344
|
+
}
|
|
13317
13345
|
});
|
|
13346
|
+
if (lostMetrics.length) {
|
|
13347
|
+
statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "Missing metrics: " + JSON.stringify(lostMetrics));
|
|
13348
|
+
}
|
|
13318
13349
|
statCollector.metricsBatch.push(metrics);
|
|
13319
13350
|
statCollector.batchCount--;
|
|
13320
13351
|
if (!(statCollector.batchCount === 0)) {
|
|
@@ -13324,6 +13355,21 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13324
13355
|
_context6.n = 2;
|
|
13325
13356
|
return statCollector.sendMetrics();
|
|
13326
13357
|
case 2:
|
|
13358
|
+
_context6.n = 3;
|
|
13359
|
+
return statCollector.updateHeaders(stats);
|
|
13360
|
+
case 3:
|
|
13361
|
+
if (!_context6.v) {
|
|
13362
|
+
_context6.n = 5;
|
|
13363
|
+
break;
|
|
13364
|
+
}
|
|
13365
|
+
statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "RTC metrics list has changed, sending a new metrics description");
|
|
13366
|
+
_context6.n = 4;
|
|
13367
|
+
return statCollector.sendMetrics();
|
|
13368
|
+
case 4:
|
|
13369
|
+
statCollector.sendHeaders();
|
|
13370
|
+
case 5:
|
|
13371
|
+
statCollector.timerBusy = false;
|
|
13372
|
+
case 6:
|
|
13327
13373
|
return _context6.a(2);
|
|
13328
13374
|
}
|
|
13329
13375
|
}, _callee6);
|
|
@@ -13335,7 +13381,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13335
13381
|
}(),
|
|
13336
13382
|
sendMetrics: function () {
|
|
13337
13383
|
var _sendMetrics = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7() {
|
|
13338
|
-
var previous, metricsToSend, metricsData, i, metricsString, j, valueString, previousString,
|
|
13384
|
+
var previous, metricsToSend, metricsData, i, metricsString, j, valueString, previousString, delimiter, data, _t3;
|
|
13339
13385
|
return _regenerator().w(function (_context7) {
|
|
13340
13386
|
while (1) switch (_context7.p = _context7.n) {
|
|
13341
13387
|
case 0:
|
|
@@ -13345,14 +13391,17 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13345
13391
|
for (j = 0; j < statCollector.metricsBatch[i].length; j++) {
|
|
13346
13392
|
valueString = valueToString(statCollector.metricsBatch[i][j]);
|
|
13347
13393
|
previousString = "";
|
|
13348
|
-
|
|
13394
|
+
delimiter = ";";
|
|
13349
13395
|
if (previous) {
|
|
13350
13396
|
previousString = valueToString(previous[j]);
|
|
13351
13397
|
}
|
|
13352
13398
|
if (valueString === previousString) {
|
|
13353
13399
|
valueString = "";
|
|
13354
13400
|
}
|
|
13355
|
-
metricsString = util.addFieldToCsvString(metricsString, valueString,
|
|
13401
|
+
metricsString = util.addFieldToCsvString(metricsString, valueString, delimiter);
|
|
13402
|
+
if (j > 0 && metricsString === "") {
|
|
13403
|
+
metricsString = delimiter;
|
|
13404
|
+
}
|
|
13356
13405
|
}
|
|
13357
13406
|
previous = statCollector.metricsBatch[i];
|
|
13358
13407
|
metricsToSend.push(metricsString);
|
|
@@ -13371,7 +13420,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
13371
13420
|
case 3:
|
|
13372
13421
|
_context7.p = 3;
|
|
13373
13422
|
_t3 = _context7.v;
|
|
13374
|
-
statCollector.logger.warn(LOG_PREFIX, "Can't send metrics data using" + statCollector.compression + ": " + _t3);
|
|
13423
|
+
statCollector.logger.warn(LOG_PREFIX + "-" + statCollector.id, "Can't send metrics data using" + statCollector.compression + ": " + _t3);
|
|
13375
13424
|
metricsData = null;
|
|
13376
13425
|
case 4:
|
|
13377
13426
|
_context7.n = 6;
|
|
@@ -14497,14 +14546,14 @@ var setPublishingBitrate = function setPublishingBitrate(sdp, mediaConnection, m
|
|
|
14497
14546
|
}
|
|
14498
14547
|
return sdp;
|
|
14499
14548
|
};
|
|
14500
|
-
var addFieldToCsvString = function addFieldToCsvString(csvString, field,
|
|
14501
|
-
if (field !== "" && field.indexOf(
|
|
14549
|
+
var addFieldToCsvString = function addFieldToCsvString(csvString, field, delimiter) {
|
|
14550
|
+
if (field !== "" && field.indexOf(delimiter) >= 0) {
|
|
14502
14551
|
field = '"' + field + '"';
|
|
14503
14552
|
}
|
|
14504
|
-
if (csvString === ""
|
|
14553
|
+
if (csvString === "") {
|
|
14505
14554
|
csvString = field;
|
|
14506
14555
|
} else {
|
|
14507
|
-
csvString = csvString +
|
|
14556
|
+
csvString = csvString + delimiter + field;
|
|
14508
14557
|
}
|
|
14509
14558
|
return csvString;
|
|
14510
14559
|
};
|
|
@@ -19701,6 +19701,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
19701
19701
|
metricsBatch: null,
|
|
19702
19702
|
timer: null,
|
|
19703
19703
|
batchCount: 0,
|
|
19704
|
+
timerBusy: false,
|
|
19704
19705
|
start: function () {
|
|
19705
19706
|
var _start = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
19706
19707
|
var error;
|
|
@@ -19783,7 +19784,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
19783
19784
|
_context2.n = 1;
|
|
19784
19785
|
break;
|
|
19785
19786
|
}
|
|
19786
|
-
statCollector.logger.error(LOG_PREFIX, "Can't update WebRTC metrics sending: no parameters passed");
|
|
19787
|
+
statCollector.logger.error(LOG_PREFIX + "-" + statCollector.id, "Can't update WebRTC metrics sending: no parameters passed");
|
|
19787
19788
|
return _context2.a(2);
|
|
19788
19789
|
case 1:
|
|
19789
19790
|
if (!(description.types || description.compression)) {
|
|
@@ -19843,14 +19844,26 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
19843
19844
|
}(),
|
|
19844
19845
|
updateHeaders: function () {
|
|
19845
19846
|
var _updateHeaders = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
|
|
19846
|
-
var stats
|
|
19847
|
+
var stats,
|
|
19848
|
+
currentHeaders,
|
|
19849
|
+
headersChanged,
|
|
19850
|
+
newMetrics,
|
|
19851
|
+
_args3 = arguments;
|
|
19847
19852
|
return _regenerator().w(function (_context3) {
|
|
19848
19853
|
while (1) switch (_context3.n) {
|
|
19849
19854
|
case 0:
|
|
19855
|
+
stats = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : null;
|
|
19856
|
+
currentHeaders = "";
|
|
19857
|
+
headersChanged = false;
|
|
19858
|
+
if (stats) {
|
|
19859
|
+
_context3.n = 2;
|
|
19860
|
+
break;
|
|
19861
|
+
}
|
|
19850
19862
|
_context3.n = 1;
|
|
19851
19863
|
return statCollector.mediaConnection.getWebRTCStats();
|
|
19852
19864
|
case 1:
|
|
19853
19865
|
stats = _context3.v;
|
|
19866
|
+
case 2:
|
|
19854
19867
|
Object.keys(statCollector.description.types).forEach(function (type) {
|
|
19855
19868
|
var typeDescriptor = statCollector.description.types[type];
|
|
19856
19869
|
var metricsString = "";
|
|
@@ -19863,11 +19876,11 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
19863
19876
|
}
|
|
19864
19877
|
if (stats[type]) {
|
|
19865
19878
|
stats[type].forEach(function (report) {
|
|
19866
|
-
statCollector.logger.debug(LOG_PREFIX, type + " report: " + JSON.stringify(report));
|
|
19879
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, type + " report: " + JSON.stringify(report));
|
|
19867
19880
|
if (contentFilters) {
|
|
19868
19881
|
var filtersMatched = true;
|
|
19869
19882
|
for (var filter in contentFilters) {
|
|
19870
|
-
statCollector.logger.debug(LOG_PREFIX, type + " filter by " + filter + ": " + JSON.stringify(contentFilters[filter]));
|
|
19883
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, type + " filter by " + filter + ": " + JSON.stringify(contentFilters[filter]));
|
|
19871
19884
|
var filterMatched = false;
|
|
19872
19885
|
if (report[filter]) {
|
|
19873
19886
|
var _iterator = _createForOfIteratorHelper(contentFilters[filter]),
|
|
@@ -19875,7 +19888,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
19875
19888
|
try {
|
|
19876
19889
|
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
19877
19890
|
var value = _step.value;
|
|
19878
|
-
statCollector.logger.debug(LOG_PREFIX, filter + ": " + value + " <> " + report[filter]);
|
|
19891
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, filter + ": " + value + " <> " + report[filter]);
|
|
19879
19892
|
if (report[filter] === value) {
|
|
19880
19893
|
filterMatched = true;
|
|
19881
19894
|
break;
|
|
@@ -19893,18 +19906,30 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
19893
19906
|
}
|
|
19894
19907
|
}
|
|
19895
19908
|
if (filtersMatched) {
|
|
19896
|
-
statCollector.addHeaders(report, metricsString);
|
|
19909
|
+
currentHeaders = statCollector.addHeaders(currentHeaders, report, metricsString);
|
|
19897
19910
|
}
|
|
19898
19911
|
} else {
|
|
19899
|
-
statCollector.addHeaders(report, metricsString);
|
|
19912
|
+
currentHeaders = statCollector.addHeaders(currentHeaders, report, metricsString);
|
|
19900
19913
|
}
|
|
19901
19914
|
});
|
|
19902
19915
|
} else {
|
|
19903
|
-
statCollector.logger.
|
|
19916
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, "No report type found in RTC stats: '" + type + "'");
|
|
19904
19917
|
}
|
|
19905
19918
|
});
|
|
19906
|
-
|
|
19907
|
-
|
|
19919
|
+
if (currentHeaders !== statCollector.headers) {
|
|
19920
|
+
headersChanged = true;
|
|
19921
|
+
newMetrics = [];
|
|
19922
|
+
currentHeaders.split(",").forEach(function (header) {
|
|
19923
|
+
if (statCollector.headers.indexOf(header) === -1) {
|
|
19924
|
+
newMetrics.push(header);
|
|
19925
|
+
}
|
|
19926
|
+
});
|
|
19927
|
+
if (newMetrics.length) {
|
|
19928
|
+
statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "RTC metrics to be collected: " + newMetrics.toString());
|
|
19929
|
+
}
|
|
19930
|
+
statCollector.headers = currentHeaders;
|
|
19931
|
+
}
|
|
19932
|
+
return _context3.a(2, headersChanged);
|
|
19908
19933
|
}
|
|
19909
19934
|
}, _callee3);
|
|
19910
19935
|
}));
|
|
@@ -19913,24 +19938,20 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
19913
19938
|
}
|
|
19914
19939
|
return updateHeaders;
|
|
19915
19940
|
}(),
|
|
19916
|
-
addHeaders: function addHeaders(report, metricsString) {
|
|
19941
|
+
addHeaders: function addHeaders(currentHeaders, report, metricsString) {
|
|
19917
19942
|
if (metricsString) {
|
|
19918
19943
|
var metrics = metricsString.split(",");
|
|
19919
19944
|
metrics.forEach(function (metric) {
|
|
19920
|
-
var metricFound = false;
|
|
19921
19945
|
for (var _i = 0, _Object$keys = Object.keys(report); _i < _Object$keys.length; _i++) {
|
|
19922
19946
|
var key = _Object$keys[_i];
|
|
19923
19947
|
if (metric === key) {
|
|
19924
|
-
|
|
19925
|
-
metricFound = true;
|
|
19948
|
+
currentHeaders = util.addFieldToCsvString(currentHeaders, report.type + "." + report.id + "." + metric, ",");
|
|
19926
19949
|
break;
|
|
19927
19950
|
}
|
|
19928
19951
|
}
|
|
19929
|
-
if (!metricFound) {
|
|
19930
|
-
statCollector.logger.warn(LOG_PREFIX, "No metric found in RTC stats report '" + report.type + "': '" + metric + "'");
|
|
19931
|
-
}
|
|
19932
19952
|
});
|
|
19933
19953
|
}
|
|
19954
|
+
return currentHeaders;
|
|
19934
19955
|
},
|
|
19935
19956
|
updateCompression: function () {
|
|
19936
19957
|
var _updateCompression = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
|
|
@@ -19983,7 +20004,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
19983
20004
|
case 2:
|
|
19984
20005
|
_context5.p = 2;
|
|
19985
20006
|
_t2 = _context5.v;
|
|
19986
|
-
statCollector.logger.warn(LOG_PREFIX, "Can't compress metrics data using " + compression + ": " + _t2);
|
|
20007
|
+
statCollector.logger.warn(LOG_PREFIX + "-" + statCollector.id, "Can't compress metrics data using " + compression + ": " + _t2);
|
|
19987
20008
|
statCollector.compression = "none";
|
|
19988
20009
|
case 3:
|
|
19989
20010
|
return _context5.a(2);
|
|
@@ -20004,7 +20025,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
20004
20025
|
statCollector.send("webRTCMetricsClientDescription", data);
|
|
20005
20026
|
},
|
|
20006
20027
|
send: function send(message, data) {
|
|
20007
|
-
statCollector.logger.debug(LOG_PREFIX, data);
|
|
20028
|
+
statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, data);
|
|
20008
20029
|
if (statCollector.wsConnection.readyState === WebSocket.OPEN) {
|
|
20009
20030
|
statCollector.wsConnection.send(JSON.stringify({
|
|
20010
20031
|
message: message,
|
|
@@ -20027,14 +20048,17 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
20027
20048
|
},
|
|
20028
20049
|
collectMetrics: function () {
|
|
20029
20050
|
var _collectMetrics = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6() {
|
|
20030
|
-
var stats, metrics;
|
|
20051
|
+
var stats, metrics, lostMetrics;
|
|
20031
20052
|
return _regenerator().w(function (_context6) {
|
|
20032
20053
|
while (1) switch (_context6.n) {
|
|
20033
20054
|
case 0:
|
|
20034
|
-
if (!statCollector.timer) {
|
|
20035
|
-
_context6.n =
|
|
20055
|
+
if (!(statCollector.timer && !statCollector.timerBusy)) {
|
|
20056
|
+
_context6.n = 6;
|
|
20036
20057
|
break;
|
|
20037
20058
|
}
|
|
20059
|
+
// Unfortunately there are no real atomics in JS unless SharedArrayBuffer is used
|
|
20060
|
+
// So we guard the timer callback with a dumb boolean
|
|
20061
|
+
statCollector.timerBusy = true;
|
|
20038
20062
|
_context6.n = 1;
|
|
20039
20063
|
return statCollector.mediaConnection.getWebRTCStats();
|
|
20040
20064
|
case 1:
|
|
@@ -20043,6 +20067,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
20043
20067
|
statCollector.metricsBatch = [];
|
|
20044
20068
|
}
|
|
20045
20069
|
metrics = [];
|
|
20070
|
+
lostMetrics = [];
|
|
20046
20071
|
statCollector.headers.split(",").forEach(function (header) {
|
|
20047
20072
|
var components = header.split(".");
|
|
20048
20073
|
var descriptor = {
|
|
@@ -20050,7 +20075,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
20050
20075
|
id: components[1],
|
|
20051
20076
|
name: components[2]
|
|
20052
20077
|
};
|
|
20053
|
-
var value = "
|
|
20078
|
+
var value = "NO";
|
|
20054
20079
|
if (stats[descriptor.type]) {
|
|
20055
20080
|
var _iterator2 = _createForOfIteratorHelper(stats[descriptor.type]),
|
|
20056
20081
|
_step2;
|
|
@@ -20069,7 +20094,13 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
20069
20094
|
}
|
|
20070
20095
|
}
|
|
20071
20096
|
metrics.push(value);
|
|
20097
|
+
if (value == "NO") {
|
|
20098
|
+
lostMetrics.push(descriptor);
|
|
20099
|
+
}
|
|
20072
20100
|
});
|
|
20101
|
+
if (lostMetrics.length) {
|
|
20102
|
+
statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "Missing metrics: " + JSON.stringify(lostMetrics));
|
|
20103
|
+
}
|
|
20073
20104
|
statCollector.metricsBatch.push(metrics);
|
|
20074
20105
|
statCollector.batchCount--;
|
|
20075
20106
|
if (!(statCollector.batchCount === 0)) {
|
|
@@ -20079,6 +20110,21 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
20079
20110
|
_context6.n = 2;
|
|
20080
20111
|
return statCollector.sendMetrics();
|
|
20081
20112
|
case 2:
|
|
20113
|
+
_context6.n = 3;
|
|
20114
|
+
return statCollector.updateHeaders(stats);
|
|
20115
|
+
case 3:
|
|
20116
|
+
if (!_context6.v) {
|
|
20117
|
+
_context6.n = 5;
|
|
20118
|
+
break;
|
|
20119
|
+
}
|
|
20120
|
+
statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "RTC metrics list has changed, sending a new metrics description");
|
|
20121
|
+
_context6.n = 4;
|
|
20122
|
+
return statCollector.sendMetrics();
|
|
20123
|
+
case 4:
|
|
20124
|
+
statCollector.sendHeaders();
|
|
20125
|
+
case 5:
|
|
20126
|
+
statCollector.timerBusy = false;
|
|
20127
|
+
case 6:
|
|
20082
20128
|
return _context6.a(2);
|
|
20083
20129
|
}
|
|
20084
20130
|
}, _callee6);
|
|
@@ -20090,7 +20136,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
20090
20136
|
}(),
|
|
20091
20137
|
sendMetrics: function () {
|
|
20092
20138
|
var _sendMetrics = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7() {
|
|
20093
|
-
var previous, metricsToSend, metricsData, i, metricsString, j, valueString, previousString,
|
|
20139
|
+
var previous, metricsToSend, metricsData, i, metricsString, j, valueString, previousString, delimiter, data, _t3;
|
|
20094
20140
|
return _regenerator().w(function (_context7) {
|
|
20095
20141
|
while (1) switch (_context7.p = _context7.n) {
|
|
20096
20142
|
case 0:
|
|
@@ -20100,14 +20146,17 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
20100
20146
|
for (j = 0; j < statCollector.metricsBatch[i].length; j++) {
|
|
20101
20147
|
valueString = valueToString(statCollector.metricsBatch[i][j]);
|
|
20102
20148
|
previousString = "";
|
|
20103
|
-
|
|
20149
|
+
delimiter = ";";
|
|
20104
20150
|
if (previous) {
|
|
20105
20151
|
previousString = valueToString(previous[j]);
|
|
20106
20152
|
}
|
|
20107
20153
|
if (valueString === previousString) {
|
|
20108
20154
|
valueString = "";
|
|
20109
20155
|
}
|
|
20110
|
-
metricsString = util.addFieldToCsvString(metricsString, valueString,
|
|
20156
|
+
metricsString = util.addFieldToCsvString(metricsString, valueString, delimiter);
|
|
20157
|
+
if (j > 0 && metricsString === "") {
|
|
20158
|
+
metricsString = delimiter;
|
|
20159
|
+
}
|
|
20111
20160
|
}
|
|
20112
20161
|
previous = statCollector.metricsBatch[i];
|
|
20113
20162
|
metricsToSend.push(metricsString);
|
|
@@ -20126,7 +20175,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
|
|
|
20126
20175
|
case 3:
|
|
20127
20176
|
_context7.p = 3;
|
|
20128
20177
|
_t3 = _context7.v;
|
|
20129
|
-
statCollector.logger.warn(LOG_PREFIX, "Can't send metrics data using" + statCollector.compression + ": " + _t3);
|
|
20178
|
+
statCollector.logger.warn(LOG_PREFIX + "-" + statCollector.id, "Can't send metrics data using" + statCollector.compression + ": " + _t3);
|
|
20130
20179
|
metricsData = null;
|
|
20131
20180
|
case 4:
|
|
20132
20181
|
_context7.n = 6;
|
|
@@ -21252,14 +21301,14 @@ var setPublishingBitrate = function setPublishingBitrate(sdp, mediaConnection, m
|
|
|
21252
21301
|
}
|
|
21253
21302
|
return sdp;
|
|
21254
21303
|
};
|
|
21255
|
-
var addFieldToCsvString = function addFieldToCsvString(csvString, field,
|
|
21256
|
-
if (field !== "" && field.indexOf(
|
|
21304
|
+
var addFieldToCsvString = function addFieldToCsvString(csvString, field, delimiter) {
|
|
21305
|
+
if (field !== "" && field.indexOf(delimiter) >= 0) {
|
|
21257
21306
|
field = '"' + field + '"';
|
|
21258
21307
|
}
|
|
21259
|
-
if (csvString === ""
|
|
21308
|
+
if (csvString === "") {
|
|
21260
21309
|
csvString = field;
|
|
21261
21310
|
} else {
|
|
21262
|
-
csvString = csvString +
|
|
21311
|
+
csvString = csvString + delimiter + field;
|
|
21263
21312
|
}
|
|
21264
21313
|
return csvString;
|
|
21265
21314
|
};
|