@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.
@@ -11057,6 +11057,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11057
11057
  metricsBatch: null,
11058
11058
  timer: null,
11059
11059
  batchCount: 0,
11060
+ timerBusy: false,
11060
11061
  start: function () {
11061
11062
  var _start = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
11062
11063
  var error;
@@ -11139,7 +11140,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11139
11140
  _context2.n = 1;
11140
11141
  break;
11141
11142
  }
11142
- statCollector.logger.error(LOG_PREFIX, "Can't update WebRTC metrics sending: no parameters passed");
11143
+ statCollector.logger.error(LOG_PREFIX + "-" + statCollector.id, "Can't update WebRTC metrics sending: no parameters passed");
11143
11144
  return _context2.a(2);
11144
11145
  case 1:
11145
11146
  if (!(description.types || description.compression)) {
@@ -11199,14 +11200,26 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11199
11200
  }(),
11200
11201
  updateHeaders: function () {
11201
11202
  var _updateHeaders = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
11202
- var stats;
11203
+ var stats,
11204
+ currentHeaders,
11205
+ headersChanged,
11206
+ newMetrics,
11207
+ _args3 = arguments;
11203
11208
  return _regenerator().w(function (_context3) {
11204
11209
  while (1) switch (_context3.n) {
11205
11210
  case 0:
11211
+ stats = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : null;
11212
+ currentHeaders = "";
11213
+ headersChanged = false;
11214
+ if (stats) {
11215
+ _context3.n = 2;
11216
+ break;
11217
+ }
11206
11218
  _context3.n = 1;
11207
11219
  return statCollector.mediaConnection.getWebRTCStats();
11208
11220
  case 1:
11209
11221
  stats = _context3.v;
11222
+ case 2:
11210
11223
  Object.keys(statCollector.description.types).forEach(function (type) {
11211
11224
  var typeDescriptor = statCollector.description.types[type];
11212
11225
  var metricsString = "";
@@ -11219,11 +11232,11 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11219
11232
  }
11220
11233
  if (stats[type]) {
11221
11234
  stats[type].forEach(function (report) {
11222
- statCollector.logger.debug(LOG_PREFIX, type + " report: " + JSON.stringify(report));
11235
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, type + " report: " + JSON.stringify(report));
11223
11236
  if (contentFilters) {
11224
11237
  var filtersMatched = true;
11225
11238
  for (var filter in contentFilters) {
11226
- statCollector.logger.debug(LOG_PREFIX, type + " filter by " + filter + ": " + JSON.stringify(contentFilters[filter]));
11239
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, type + " filter by " + filter + ": " + JSON.stringify(contentFilters[filter]));
11227
11240
  var filterMatched = false;
11228
11241
  if (report[filter]) {
11229
11242
  var _iterator = _createForOfIteratorHelper(contentFilters[filter]),
@@ -11231,7 +11244,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11231
11244
  try {
11232
11245
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
11233
11246
  var value = _step.value;
11234
- statCollector.logger.debug(LOG_PREFIX, filter + ": " + value + " <> " + report[filter]);
11247
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, filter + ": " + value + " <> " + report[filter]);
11235
11248
  if (report[filter] === value) {
11236
11249
  filterMatched = true;
11237
11250
  break;
@@ -11249,18 +11262,30 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11249
11262
  }
11250
11263
  }
11251
11264
  if (filtersMatched) {
11252
- statCollector.addHeaders(report, metricsString);
11265
+ currentHeaders = statCollector.addHeaders(currentHeaders, report, metricsString);
11253
11266
  }
11254
11267
  } else {
11255
- statCollector.addHeaders(report, metricsString);
11268
+ currentHeaders = statCollector.addHeaders(currentHeaders, report, metricsString);
11256
11269
  }
11257
11270
  });
11258
11271
  } else {
11259
- statCollector.logger.warn(LOG_PREFIX, "No report type found in RTC stats: '" + type + "'");
11272
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, "No report type found in RTC stats: '" + type + "'");
11260
11273
  }
11261
11274
  });
11262
- case 2:
11263
- return _context3.a(2);
11275
+ if (currentHeaders !== statCollector.headers) {
11276
+ headersChanged = true;
11277
+ newMetrics = [];
11278
+ currentHeaders.split(",").forEach(function (header) {
11279
+ if (statCollector.headers.indexOf(header) === -1) {
11280
+ newMetrics.push(header);
11281
+ }
11282
+ });
11283
+ if (newMetrics.length) {
11284
+ statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "RTC metrics to be collected: " + newMetrics.toString());
11285
+ }
11286
+ statCollector.headers = currentHeaders;
11287
+ }
11288
+ return _context3.a(2, headersChanged);
11264
11289
  }
11265
11290
  }, _callee3);
11266
11291
  }));
@@ -11269,24 +11294,20 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11269
11294
  }
11270
11295
  return updateHeaders;
11271
11296
  }(),
11272
- addHeaders: function addHeaders(report, metricsString) {
11297
+ addHeaders: function addHeaders(currentHeaders, report, metricsString) {
11273
11298
  if (metricsString) {
11274
11299
  var metrics = metricsString.split(",");
11275
11300
  metrics.forEach(function (metric) {
11276
- var metricFound = false;
11277
11301
  for (var _i = 0, _Object$keys = Object.keys(report); _i < _Object$keys.length; _i++) {
11278
11302
  var key = _Object$keys[_i];
11279
11303
  if (metric === key) {
11280
- statCollector.headers = util.addFieldToCsvString(statCollector.headers, report.type + "." + report.id + "." + metric, ",");
11281
- metricFound = true;
11304
+ currentHeaders = util.addFieldToCsvString(currentHeaders, report.type + "." + report.id + "." + metric, ",");
11282
11305
  break;
11283
11306
  }
11284
11307
  }
11285
- if (!metricFound) {
11286
- statCollector.logger.warn(LOG_PREFIX, "No metric found in RTC stats report '" + report.type + "': '" + metric + "'");
11287
- }
11288
11308
  });
11289
11309
  }
11310
+ return currentHeaders;
11290
11311
  },
11291
11312
  updateCompression: function () {
11292
11313
  var _updateCompression = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
@@ -11339,7 +11360,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11339
11360
  case 2:
11340
11361
  _context5.p = 2;
11341
11362
  _t2 = _context5.v;
11342
- statCollector.logger.warn(LOG_PREFIX, "Can't compress metrics data using " + compression + ": " + _t2);
11363
+ statCollector.logger.warn(LOG_PREFIX + "-" + statCollector.id, "Can't compress metrics data using " + compression + ": " + _t2);
11343
11364
  statCollector.compression = "none";
11344
11365
  case 3:
11345
11366
  return _context5.a(2);
@@ -11360,7 +11381,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11360
11381
  statCollector.send("webRTCMetricsClientDescription", data);
11361
11382
  },
11362
11383
  send: function send(message, data) {
11363
- statCollector.logger.debug(LOG_PREFIX, data);
11384
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, data);
11364
11385
  if (statCollector.wsConnection.readyState === WebSocket.OPEN) {
11365
11386
  statCollector.wsConnection.send(JSON.stringify({
11366
11387
  message: message,
@@ -11383,14 +11404,17 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11383
11404
  },
11384
11405
  collectMetrics: function () {
11385
11406
  var _collectMetrics = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6() {
11386
- var stats, metrics;
11407
+ var stats, metrics, lostMetrics;
11387
11408
  return _regenerator().w(function (_context6) {
11388
11409
  while (1) switch (_context6.n) {
11389
11410
  case 0:
11390
- if (!statCollector.timer) {
11391
- _context6.n = 2;
11411
+ if (!(statCollector.timer && !statCollector.timerBusy)) {
11412
+ _context6.n = 6;
11392
11413
  break;
11393
11414
  }
11415
+ // Unfortunately there are no real atomics in JS unless SharedArrayBuffer is used
11416
+ // So we guard the timer callback with a dumb boolean
11417
+ statCollector.timerBusy = true;
11394
11418
  _context6.n = 1;
11395
11419
  return statCollector.mediaConnection.getWebRTCStats();
11396
11420
  case 1:
@@ -11399,6 +11423,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11399
11423
  statCollector.metricsBatch = [];
11400
11424
  }
11401
11425
  metrics = [];
11426
+ lostMetrics = [];
11402
11427
  statCollector.headers.split(",").forEach(function (header) {
11403
11428
  var components = header.split(".");
11404
11429
  var descriptor = {
@@ -11406,7 +11431,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11406
11431
  id: components[1],
11407
11432
  name: components[2]
11408
11433
  };
11409
- var value = "undefined";
11434
+ var value = "NO";
11410
11435
  if (stats[descriptor.type]) {
11411
11436
  var _iterator2 = _createForOfIteratorHelper(stats[descriptor.type]),
11412
11437
  _step2;
@@ -11425,7 +11450,13 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11425
11450
  }
11426
11451
  }
11427
11452
  metrics.push(value);
11453
+ if (value == "NO") {
11454
+ lostMetrics.push(descriptor);
11455
+ }
11428
11456
  });
11457
+ if (lostMetrics.length) {
11458
+ statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "Missing metrics: " + JSON.stringify(lostMetrics));
11459
+ }
11429
11460
  statCollector.metricsBatch.push(metrics);
11430
11461
  statCollector.batchCount--;
11431
11462
  if (!(statCollector.batchCount === 0)) {
@@ -11435,6 +11466,21 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11435
11466
  _context6.n = 2;
11436
11467
  return statCollector.sendMetrics();
11437
11468
  case 2:
11469
+ _context6.n = 3;
11470
+ return statCollector.updateHeaders(stats);
11471
+ case 3:
11472
+ if (!_context6.v) {
11473
+ _context6.n = 5;
11474
+ break;
11475
+ }
11476
+ statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "RTC metrics list has changed, sending a new metrics description");
11477
+ _context6.n = 4;
11478
+ return statCollector.sendMetrics();
11479
+ case 4:
11480
+ statCollector.sendHeaders();
11481
+ case 5:
11482
+ statCollector.timerBusy = false;
11483
+ case 6:
11438
11484
  return _context6.a(2);
11439
11485
  }
11440
11486
  }, _callee6);
@@ -11446,7 +11492,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11446
11492
  }(),
11447
11493
  sendMetrics: function () {
11448
11494
  var _sendMetrics = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7() {
11449
- var previous, metricsToSend, metricsData, i, metricsString, j, valueString, previousString, separator, data, _t3;
11495
+ var previous, metricsToSend, metricsData, i, metricsString, j, valueString, previousString, delimiter, data, _t3;
11450
11496
  return _regenerator().w(function (_context7) {
11451
11497
  while (1) switch (_context7.p = _context7.n) {
11452
11498
  case 0:
@@ -11456,14 +11502,17 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11456
11502
  for (j = 0; j < statCollector.metricsBatch[i].length; j++) {
11457
11503
  valueString = valueToString(statCollector.metricsBatch[i][j]);
11458
11504
  previousString = "";
11459
- separator = ";";
11505
+ delimiter = ";";
11460
11506
  if (previous) {
11461
11507
  previousString = valueToString(previous[j]);
11462
11508
  }
11463
11509
  if (valueString === previousString) {
11464
11510
  valueString = "";
11465
11511
  }
11466
- metricsString = util.addFieldToCsvString(metricsString, valueString, separator);
11512
+ metricsString = util.addFieldToCsvString(metricsString, valueString, delimiter);
11513
+ if (j > 0 && metricsString === "") {
11514
+ metricsString = delimiter;
11515
+ }
11467
11516
  }
11468
11517
  previous = statCollector.metricsBatch[i];
11469
11518
  metricsToSend.push(metricsString);
@@ -11482,7 +11531,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11482
11531
  case 3:
11483
11532
  _context7.p = 3;
11484
11533
  _t3 = _context7.v;
11485
- statCollector.logger.warn(LOG_PREFIX, "Can't send metrics data using" + statCollector.compression + ": " + _t3);
11534
+ statCollector.logger.warn(LOG_PREFIX + "-" + statCollector.id, "Can't send metrics data using" + statCollector.compression + ": " + _t3);
11486
11535
  metricsData = null;
11487
11536
  case 4:
11488
11537
  _context7.n = 6;
@@ -12034,14 +12083,14 @@ var setPublishingBitrate = function setPublishingBitrate(sdp, mediaConnection, m
12034
12083
  }
12035
12084
  return sdp;
12036
12085
  };
12037
- var addFieldToCsvString = function addFieldToCsvString(csvString, field, separator) {
12038
- if (field !== "" && field.indexOf(separator) >= 0) {
12086
+ var addFieldToCsvString = function addFieldToCsvString(csvString, field, delimiter) {
12087
+ if (field !== "" && field.indexOf(delimiter) >= 0) {
12039
12088
  field = '"' + field + '"';
12040
12089
  }
12041
- if (csvString === "" && field !== "") {
12090
+ if (csvString === "") {
12042
12091
  csvString = field;
12043
12092
  } else {
12044
- csvString = csvString + separator + field;
12093
+ csvString = csvString + delimiter + field;
12045
12094
  }
12046
12095
  return csvString;
12047
12096
  };