@flashphoner/websdk 2.0.262 → 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/flashphoner.js CHANGED
@@ -11885,6 +11885,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11885
11885
  metricsBatch: null,
11886
11886
  timer: null,
11887
11887
  batchCount: 0,
11888
+ timerBusy: false,
11888
11889
  start: function () {
11889
11890
  var _start = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
11890
11891
  var error;
@@ -11967,7 +11968,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11967
11968
  _context2.n = 1;
11968
11969
  break;
11969
11970
  }
11970
- statCollector.logger.error(LOG_PREFIX, "Can't update WebRTC metrics sending: no parameters passed");
11971
+ statCollector.logger.error(LOG_PREFIX + "-" + statCollector.id, "Can't update WebRTC metrics sending: no parameters passed");
11971
11972
  return _context2.a(2);
11972
11973
  case 1:
11973
11974
  if (!(description.types || description.compression)) {
@@ -12027,14 +12028,26 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
12027
12028
  }(),
12028
12029
  updateHeaders: function () {
12029
12030
  var _updateHeaders = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
12030
- var stats;
12031
+ var stats,
12032
+ currentHeaders,
12033
+ headersChanged,
12034
+ newMetrics,
12035
+ _args3 = arguments;
12031
12036
  return _regenerator().w(function (_context3) {
12032
12037
  while (1) switch (_context3.n) {
12033
12038
  case 0:
12039
+ stats = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : null;
12040
+ currentHeaders = "";
12041
+ headersChanged = false;
12042
+ if (stats) {
12043
+ _context3.n = 2;
12044
+ break;
12045
+ }
12034
12046
  _context3.n = 1;
12035
12047
  return statCollector.mediaConnection.getWebRTCStats();
12036
12048
  case 1:
12037
12049
  stats = _context3.v;
12050
+ case 2:
12038
12051
  Object.keys(statCollector.description.types).forEach(function (type) {
12039
12052
  var typeDescriptor = statCollector.description.types[type];
12040
12053
  var metricsString = "";
@@ -12047,11 +12060,11 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
12047
12060
  }
12048
12061
  if (stats[type]) {
12049
12062
  stats[type].forEach(function (report) {
12050
- statCollector.logger.debug(LOG_PREFIX, type + " report: " + JSON.stringify(report));
12063
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, type + " report: " + JSON.stringify(report));
12051
12064
  if (contentFilters) {
12052
12065
  var filtersMatched = true;
12053
12066
  for (var filter in contentFilters) {
12054
- statCollector.logger.debug(LOG_PREFIX, type + " filter by " + filter + ": " + JSON.stringify(contentFilters[filter]));
12067
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, type + " filter by " + filter + ": " + JSON.stringify(contentFilters[filter]));
12055
12068
  var filterMatched = false;
12056
12069
  if (report[filter]) {
12057
12070
  var _iterator = _createForOfIteratorHelper(contentFilters[filter]),
@@ -12059,7 +12072,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
12059
12072
  try {
12060
12073
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
12061
12074
  var value = _step.value;
12062
- statCollector.logger.debug(LOG_PREFIX, filter + ": " + value + " <> " + report[filter]);
12075
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, filter + ": " + value + " <> " + report[filter]);
12063
12076
  if (report[filter] === value) {
12064
12077
  filterMatched = true;
12065
12078
  break;
@@ -12077,18 +12090,30 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
12077
12090
  }
12078
12091
  }
12079
12092
  if (filtersMatched) {
12080
- statCollector.addHeaders(report, metricsString);
12093
+ currentHeaders = statCollector.addHeaders(currentHeaders, report, metricsString);
12081
12094
  }
12082
12095
  } else {
12083
- statCollector.addHeaders(report, metricsString);
12096
+ currentHeaders = statCollector.addHeaders(currentHeaders, report, metricsString);
12084
12097
  }
12085
12098
  });
12086
12099
  } else {
12087
- statCollector.logger.warn(LOG_PREFIX, "No report type found in RTC stats: '" + type + "'");
12100
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, "No report type found in RTC stats: '" + type + "'");
12088
12101
  }
12089
12102
  });
12090
- case 2:
12091
- return _context3.a(2);
12103
+ if (currentHeaders !== statCollector.headers) {
12104
+ headersChanged = true;
12105
+ newMetrics = [];
12106
+ currentHeaders.split(",").forEach(function (header) {
12107
+ if (statCollector.headers.indexOf(header) === -1) {
12108
+ newMetrics.push(header);
12109
+ }
12110
+ });
12111
+ if (newMetrics.length) {
12112
+ statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "RTC metrics to be collected: " + newMetrics.toString());
12113
+ }
12114
+ statCollector.headers = currentHeaders;
12115
+ }
12116
+ return _context3.a(2, headersChanged);
12092
12117
  }
12093
12118
  }, _callee3);
12094
12119
  }));
@@ -12097,24 +12122,20 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
12097
12122
  }
12098
12123
  return updateHeaders;
12099
12124
  }(),
12100
- addHeaders: function addHeaders(report, metricsString) {
12125
+ addHeaders: function addHeaders(currentHeaders, report, metricsString) {
12101
12126
  if (metricsString) {
12102
12127
  var metrics = metricsString.split(",");
12103
12128
  metrics.forEach(function (metric) {
12104
- var metricFound = false;
12105
12129
  for (var _i = 0, _Object$keys = Object.keys(report); _i < _Object$keys.length; _i++) {
12106
12130
  var key = _Object$keys[_i];
12107
12131
  if (metric === key) {
12108
- statCollector.headers = util.addFieldToCsvString(statCollector.headers, report.type + "." + report.id + "." + metric, ",");
12109
- metricFound = true;
12132
+ currentHeaders = util.addFieldToCsvString(currentHeaders, report.type + "." + report.id + "." + metric, ",");
12110
12133
  break;
12111
12134
  }
12112
12135
  }
12113
- if (!metricFound) {
12114
- statCollector.logger.warn(LOG_PREFIX, "No metric found in RTC stats report '" + report.type + "': '" + metric + "'");
12115
- }
12116
12136
  });
12117
12137
  }
12138
+ return currentHeaders;
12118
12139
  },
12119
12140
  updateCompression: function () {
12120
12141
  var _updateCompression = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
@@ -12167,7 +12188,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
12167
12188
  case 2:
12168
12189
  _context5.p = 2;
12169
12190
  _t2 = _context5.v;
12170
- statCollector.logger.warn(LOG_PREFIX, "Can't compress metrics data using " + compression + ": " + _t2);
12191
+ statCollector.logger.warn(LOG_PREFIX + "-" + statCollector.id, "Can't compress metrics data using " + compression + ": " + _t2);
12171
12192
  statCollector.compression = "none";
12172
12193
  case 3:
12173
12194
  return _context5.a(2);
@@ -12188,7 +12209,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
12188
12209
  statCollector.send("webRTCMetricsClientDescription", data);
12189
12210
  },
12190
12211
  send: function send(message, data) {
12191
- statCollector.logger.debug(LOG_PREFIX, data);
12212
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, data);
12192
12213
  if (statCollector.wsConnection.readyState === WebSocket.OPEN) {
12193
12214
  statCollector.wsConnection.send(JSON.stringify({
12194
12215
  message: message,
@@ -12211,14 +12232,17 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
12211
12232
  },
12212
12233
  collectMetrics: function () {
12213
12234
  var _collectMetrics = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6() {
12214
- var stats, metrics;
12235
+ var stats, metrics, lostMetrics;
12215
12236
  return _regenerator().w(function (_context6) {
12216
12237
  while (1) switch (_context6.n) {
12217
12238
  case 0:
12218
- if (!statCollector.timer) {
12219
- _context6.n = 2;
12239
+ if (!(statCollector.timer && !statCollector.timerBusy)) {
12240
+ _context6.n = 6;
12220
12241
  break;
12221
12242
  }
12243
+ // Unfortunately there are no real atomics in JS unless SharedArrayBuffer is used
12244
+ // So we guard the timer callback with a dumb boolean
12245
+ statCollector.timerBusy = true;
12222
12246
  _context6.n = 1;
12223
12247
  return statCollector.mediaConnection.getWebRTCStats();
12224
12248
  case 1:
@@ -12227,6 +12251,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
12227
12251
  statCollector.metricsBatch = [];
12228
12252
  }
12229
12253
  metrics = [];
12254
+ lostMetrics = [];
12230
12255
  statCollector.headers.split(",").forEach(function (header) {
12231
12256
  var components = header.split(".");
12232
12257
  var descriptor = {
@@ -12234,7 +12259,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
12234
12259
  id: components[1],
12235
12260
  name: components[2]
12236
12261
  };
12237
- var value = "undefined";
12262
+ var value = "NO";
12238
12263
  if (stats[descriptor.type]) {
12239
12264
  var _iterator2 = _createForOfIteratorHelper(stats[descriptor.type]),
12240
12265
  _step2;
@@ -12253,7 +12278,13 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
12253
12278
  }
12254
12279
  }
12255
12280
  metrics.push(value);
12281
+ if (value == "NO") {
12282
+ lostMetrics.push(descriptor);
12283
+ }
12256
12284
  });
12285
+ if (lostMetrics.length) {
12286
+ statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "Missing metrics: " + JSON.stringify(lostMetrics));
12287
+ }
12257
12288
  statCollector.metricsBatch.push(metrics);
12258
12289
  statCollector.batchCount--;
12259
12290
  if (!(statCollector.batchCount === 0)) {
@@ -12263,6 +12294,21 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
12263
12294
  _context6.n = 2;
12264
12295
  return statCollector.sendMetrics();
12265
12296
  case 2:
12297
+ _context6.n = 3;
12298
+ return statCollector.updateHeaders(stats);
12299
+ case 3:
12300
+ if (!_context6.v) {
12301
+ _context6.n = 5;
12302
+ break;
12303
+ }
12304
+ statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "RTC metrics list has changed, sending a new metrics description");
12305
+ _context6.n = 4;
12306
+ return statCollector.sendMetrics();
12307
+ case 4:
12308
+ statCollector.sendHeaders();
12309
+ case 5:
12310
+ statCollector.timerBusy = false;
12311
+ case 6:
12266
12312
  return _context6.a(2);
12267
12313
  }
12268
12314
  }, _callee6);
@@ -12313,7 +12359,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
12313
12359
  case 3:
12314
12360
  _context7.p = 3;
12315
12361
  _t3 = _context7.v;
12316
- statCollector.logger.warn(LOG_PREFIX, "Can't send metrics data using" + statCollector.compression + ": " + _t3);
12362
+ statCollector.logger.warn(LOG_PREFIX + "-" + statCollector.id, "Can't send metrics data using" + statCollector.compression + ": " + _t3);
12317
12363
  metricsData = null;
12318
12364
  case 4:
12319
12365
  _context7.n = 6;