@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.
@@ -11619,6 +11619,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11619
11619
  metricsBatch: null,
11620
11620
  timer: null,
11621
11621
  batchCount: 0,
11622
+ timerBusy: false,
11622
11623
  start: function () {
11623
11624
  var _start = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
11624
11625
  var error;
@@ -11701,7 +11702,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11701
11702
  _context2.n = 1;
11702
11703
  break;
11703
11704
  }
11704
- statCollector.logger.error(LOG_PREFIX, "Can't update WebRTC metrics sending: no parameters passed");
11705
+ statCollector.logger.error(LOG_PREFIX + "-" + statCollector.id, "Can't update WebRTC metrics sending: no parameters passed");
11705
11706
  return _context2.a(2);
11706
11707
  case 1:
11707
11708
  if (!(description.types || description.compression)) {
@@ -11761,14 +11762,26 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11761
11762
  }(),
11762
11763
  updateHeaders: function () {
11763
11764
  var _updateHeaders = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
11764
- var stats;
11765
+ var stats,
11766
+ currentHeaders,
11767
+ headersChanged,
11768
+ newMetrics,
11769
+ _args3 = arguments;
11765
11770
  return _regenerator().w(function (_context3) {
11766
11771
  while (1) switch (_context3.n) {
11767
11772
  case 0:
11773
+ stats = _args3.length > 0 && _args3[0] !== undefined ? _args3[0] : null;
11774
+ currentHeaders = "";
11775
+ headersChanged = false;
11776
+ if (stats) {
11777
+ _context3.n = 2;
11778
+ break;
11779
+ }
11768
11780
  _context3.n = 1;
11769
11781
  return statCollector.mediaConnection.getWebRTCStats();
11770
11782
  case 1:
11771
11783
  stats = _context3.v;
11784
+ case 2:
11772
11785
  Object.keys(statCollector.description.types).forEach(function (type) {
11773
11786
  var typeDescriptor = statCollector.description.types[type];
11774
11787
  var metricsString = "";
@@ -11781,11 +11794,11 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11781
11794
  }
11782
11795
  if (stats[type]) {
11783
11796
  stats[type].forEach(function (report) {
11784
- statCollector.logger.debug(LOG_PREFIX, type + " report: " + JSON.stringify(report));
11797
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, type + " report: " + JSON.stringify(report));
11785
11798
  if (contentFilters) {
11786
11799
  var filtersMatched = true;
11787
11800
  for (var filter in contentFilters) {
11788
- statCollector.logger.debug(LOG_PREFIX, type + " filter by " + filter + ": " + JSON.stringify(contentFilters[filter]));
11801
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, type + " filter by " + filter + ": " + JSON.stringify(contentFilters[filter]));
11789
11802
  var filterMatched = false;
11790
11803
  if (report[filter]) {
11791
11804
  var _iterator = _createForOfIteratorHelper(contentFilters[filter]),
@@ -11793,7 +11806,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11793
11806
  try {
11794
11807
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
11795
11808
  var value = _step.value;
11796
- statCollector.logger.debug(LOG_PREFIX, filter + ": " + value + " <> " + report[filter]);
11809
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, filter + ": " + value + " <> " + report[filter]);
11797
11810
  if (report[filter] === value) {
11798
11811
  filterMatched = true;
11799
11812
  break;
@@ -11811,18 +11824,30 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11811
11824
  }
11812
11825
  }
11813
11826
  if (filtersMatched) {
11814
- statCollector.addHeaders(report, metricsString);
11827
+ currentHeaders = statCollector.addHeaders(currentHeaders, report, metricsString);
11815
11828
  }
11816
11829
  } else {
11817
- statCollector.addHeaders(report, metricsString);
11830
+ currentHeaders = statCollector.addHeaders(currentHeaders, report, metricsString);
11818
11831
  }
11819
11832
  });
11820
11833
  } else {
11821
- statCollector.logger.warn(LOG_PREFIX, "No report type found in RTC stats: '" + type + "'");
11834
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, "No report type found in RTC stats: '" + type + "'");
11822
11835
  }
11823
11836
  });
11824
- case 2:
11825
- return _context3.a(2);
11837
+ if (currentHeaders !== statCollector.headers) {
11838
+ headersChanged = true;
11839
+ newMetrics = [];
11840
+ currentHeaders.split(",").forEach(function (header) {
11841
+ if (statCollector.headers.indexOf(header) === -1) {
11842
+ newMetrics.push(header);
11843
+ }
11844
+ });
11845
+ if (newMetrics.length) {
11846
+ statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "RTC metrics to be collected: " + newMetrics.toString());
11847
+ }
11848
+ statCollector.headers = currentHeaders;
11849
+ }
11850
+ return _context3.a(2, headersChanged);
11826
11851
  }
11827
11852
  }, _callee3);
11828
11853
  }));
@@ -11831,24 +11856,20 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11831
11856
  }
11832
11857
  return updateHeaders;
11833
11858
  }(),
11834
- addHeaders: function addHeaders(report, metricsString) {
11859
+ addHeaders: function addHeaders(currentHeaders, report, metricsString) {
11835
11860
  if (metricsString) {
11836
11861
  var metrics = metricsString.split(",");
11837
11862
  metrics.forEach(function (metric) {
11838
- var metricFound = false;
11839
11863
  for (var _i = 0, _Object$keys = Object.keys(report); _i < _Object$keys.length; _i++) {
11840
11864
  var key = _Object$keys[_i];
11841
11865
  if (metric === key) {
11842
- statCollector.headers = util.addFieldToCsvString(statCollector.headers, report.type + "." + report.id + "." + metric, ",");
11843
- metricFound = true;
11866
+ currentHeaders = util.addFieldToCsvString(currentHeaders, report.type + "." + report.id + "." + metric, ",");
11844
11867
  break;
11845
11868
  }
11846
11869
  }
11847
- if (!metricFound) {
11848
- statCollector.logger.warn(LOG_PREFIX, "No metric found in RTC stats report '" + report.type + "': '" + metric + "'");
11849
- }
11850
11870
  });
11851
11871
  }
11872
+ return currentHeaders;
11852
11873
  },
11853
11874
  updateCompression: function () {
11854
11875
  var _updateCompression = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
@@ -11901,7 +11922,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11901
11922
  case 2:
11902
11923
  _context5.p = 2;
11903
11924
  _t2 = _context5.v;
11904
- statCollector.logger.warn(LOG_PREFIX, "Can't compress metrics data using " + compression + ": " + _t2);
11925
+ statCollector.logger.warn(LOG_PREFIX + "-" + statCollector.id, "Can't compress metrics data using " + compression + ": " + _t2);
11905
11926
  statCollector.compression = "none";
11906
11927
  case 3:
11907
11928
  return _context5.a(2);
@@ -11922,7 +11943,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11922
11943
  statCollector.send("webRTCMetricsClientDescription", data);
11923
11944
  },
11924
11945
  send: function send(message, data) {
11925
- statCollector.logger.debug(LOG_PREFIX, data);
11946
+ statCollector.logger.debug(LOG_PREFIX + "-" + statCollector.id, data);
11926
11947
  if (statCollector.wsConnection.readyState === WebSocket.OPEN) {
11927
11948
  statCollector.wsConnection.send(JSON.stringify({
11928
11949
  message: message,
@@ -11945,14 +11966,17 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11945
11966
  },
11946
11967
  collectMetrics: function () {
11947
11968
  var _collectMetrics = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6() {
11948
- var stats, metrics;
11969
+ var stats, metrics, lostMetrics;
11949
11970
  return _regenerator().w(function (_context6) {
11950
11971
  while (1) switch (_context6.n) {
11951
11972
  case 0:
11952
- if (!statCollector.timer) {
11953
- _context6.n = 2;
11973
+ if (!(statCollector.timer && !statCollector.timerBusy)) {
11974
+ _context6.n = 6;
11954
11975
  break;
11955
11976
  }
11977
+ // Unfortunately there are no real atomics in JS unless SharedArrayBuffer is used
11978
+ // So we guard the timer callback with a dumb boolean
11979
+ statCollector.timerBusy = true;
11956
11980
  _context6.n = 1;
11957
11981
  return statCollector.mediaConnection.getWebRTCStats();
11958
11982
  case 1:
@@ -11961,6 +11985,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11961
11985
  statCollector.metricsBatch = [];
11962
11986
  }
11963
11987
  metrics = [];
11988
+ lostMetrics = [];
11964
11989
  statCollector.headers.split(",").forEach(function (header) {
11965
11990
  var components = header.split(".");
11966
11991
  var descriptor = {
@@ -11968,7 +11993,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11968
11993
  id: components[1],
11969
11994
  name: components[2]
11970
11995
  };
11971
- var value = "undefined";
11996
+ var value = "NO";
11972
11997
  if (stats[descriptor.type]) {
11973
11998
  var _iterator2 = _createForOfIteratorHelper(stats[descriptor.type]),
11974
11999
  _step2;
@@ -11987,7 +12012,13 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11987
12012
  }
11988
12013
  }
11989
12014
  metrics.push(value);
12015
+ if (value == "NO") {
12016
+ lostMetrics.push(descriptor);
12017
+ }
11990
12018
  });
12019
+ if (lostMetrics.length) {
12020
+ statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "Missing metrics: " + JSON.stringify(lostMetrics));
12021
+ }
11991
12022
  statCollector.metricsBatch.push(metrics);
11992
12023
  statCollector.batchCount--;
11993
12024
  if (!(statCollector.batchCount === 0)) {
@@ -11997,6 +12028,21 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
11997
12028
  _context6.n = 2;
11998
12029
  return statCollector.sendMetrics();
11999
12030
  case 2:
12031
+ _context6.n = 3;
12032
+ return statCollector.updateHeaders(stats);
12033
+ case 3:
12034
+ if (!_context6.v) {
12035
+ _context6.n = 5;
12036
+ break;
12037
+ }
12038
+ statCollector.logger.info(LOG_PREFIX + "-" + statCollector.id, "RTC metrics list has changed, sending a new metrics description");
12039
+ _context6.n = 4;
12040
+ return statCollector.sendMetrics();
12041
+ case 4:
12042
+ statCollector.sendHeaders();
12043
+ case 5:
12044
+ statCollector.timerBusy = false;
12045
+ case 6:
12000
12046
  return _context6.a(2);
12001
12047
  }
12002
12048
  }, _callee6);
@@ -12008,7 +12054,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
12008
12054
  }(),
12009
12055
  sendMetrics: function () {
12010
12056
  var _sendMetrics = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7() {
12011
- var previous, metricsToSend, metricsData, i, metricsString, j, valueString, previousString, separator, data, _t3;
12057
+ var previous, metricsToSend, metricsData, i, metricsString, j, valueString, previousString, delimiter, data, _t3;
12012
12058
  return _regenerator().w(function (_context7) {
12013
12059
  while (1) switch (_context7.p = _context7.n) {
12014
12060
  case 0:
@@ -12018,14 +12064,17 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
12018
12064
  for (j = 0; j < statCollector.metricsBatch[i].length; j++) {
12019
12065
  valueString = valueToString(statCollector.metricsBatch[i][j]);
12020
12066
  previousString = "";
12021
- separator = ";";
12067
+ delimiter = ";";
12022
12068
  if (previous) {
12023
12069
  previousString = valueToString(previous[j]);
12024
12070
  }
12025
12071
  if (valueString === previousString) {
12026
12072
  valueString = "";
12027
12073
  }
12028
- metricsString = util.addFieldToCsvString(metricsString, valueString, separator);
12074
+ metricsString = util.addFieldToCsvString(metricsString, valueString, delimiter);
12075
+ if (j > 0 && metricsString === "") {
12076
+ metricsString = delimiter;
12077
+ }
12029
12078
  }
12030
12079
  previous = statCollector.metricsBatch[i];
12031
12080
  metricsToSend.push(metricsString);
@@ -12044,7 +12093,7 @@ var StreamStatsCollector = function StreamStatsCollector(description, id, mediaC
12044
12093
  case 3:
12045
12094
  _context7.p = 3;
12046
12095
  _t3 = _context7.v;
12047
- statCollector.logger.warn(LOG_PREFIX, "Can't send metrics data using" + statCollector.compression + ": " + _t3);
12096
+ statCollector.logger.warn(LOG_PREFIX + "-" + statCollector.id, "Can't send metrics data using" + statCollector.compression + ": " + _t3);
12048
12097
  metricsData = null;
12049
12098
  case 4:
12050
12099
  _context7.n = 6;
@@ -12596,14 +12645,14 @@ var setPublishingBitrate = function setPublishingBitrate(sdp, mediaConnection, m
12596
12645
  }
12597
12646
  return sdp;
12598
12647
  };
12599
- var addFieldToCsvString = function addFieldToCsvString(csvString, field, separator) {
12600
- if (field !== "" && field.indexOf(separator) >= 0) {
12648
+ var addFieldToCsvString = function addFieldToCsvString(csvString, field, delimiter) {
12649
+ if (field !== "" && field.indexOf(delimiter) >= 0) {
12601
12650
  field = '"' + field + '"';
12602
12651
  }
12603
- if (csvString === "" && field !== "") {
12652
+ if (csvString === "") {
12604
12653
  csvString = field;
12605
12654
  } else {
12606
- csvString = csvString + separator + field;
12655
+ csvString = csvString + delimiter + field;
12607
12656
  }
12608
12657
  return csvString;
12609
12658
  };