Don't treat 0 as false (avoid a warning when the receivedPackets or

sentPackets stat is 0, and possibly fixes misinterpreting a remove
stream as a local).
pull/350/head^2
Boris Grozev 10 years ago
parent ff199a4d78
commit 47bb9439db
  1. 58
      modules/statistics/RTPStatsCollector.js

@ -514,34 +514,33 @@ StatsCollector.prototype.processStatsReport = function () {
var isDownloadStream = true; var isDownloadStream = true;
var key = 'packetsReceived'; var key = 'packetsReceived';
if (!getStatValue(now, key)) var packetsNow = getStatValue(now, key);
{ if (typeof packetsNow === 'undefined' || packetsNow === null) {
isDownloadStream = false; isDownloadStream = false;
key = 'packetsSent'; key = 'packetsSent';
if (!getStatValue(now, key)) packetsNow = getStatValue(now, key);
{ if (typeof packetsNow === 'undefined' || packetsNow === null) {
console.warn("No packetsReceived nor packetSent stat found"); console.warn("No packetsReceived nor packetsSent stat found");
continue; continue;
} }
} }
var packetsNow = getStatValue(now, key); if (!packetsNow || packetsNow < 0)
if(!packetsNow || packetsNow < 0)
packetsNow = 0; packetsNow = 0;
var packetsBefore = getStatValue(before, key); var packetsBefore = getStatValue(before, key);
if(!packetsBefore || packetsBefore < 0) if (!packetsBefore || packetsBefore < 0)
packetsBefore = 0; packetsBefore = 0;
var packetRate = packetsNow - packetsBefore; var packetRate = packetsNow - packetsBefore;
if(!packetRate || packetRate < 0) if (!packetRate || packetRate < 0)
packetRate = 0; packetRate = 0;
var currentLoss = getStatValue(now, 'packetsLost'); var currentLoss = getStatValue(now, 'packetsLost');
if(!currentLoss || currentLoss < 0) if (!currentLoss || currentLoss < 0)
currentLoss = 0; currentLoss = 0;
var previousLoss = getStatValue(before, 'packetsLost'); var previousLoss = getStatValue(before, 'packetsLost');
if(!previousLoss || previousLoss < 0) if (!previousLoss || previousLoss < 0)
previousLoss = 0; previousLoss = 0;
var lossRate = currentLoss - previousLoss; var lossRate = currentLoss - previousLoss;
if(!lossRate || lossRate < 0) if (!lossRate || lossRate < 0)
lossRate = 0; lossRate = 0;
var packetsTotal = (packetRate + lossRate); var packetsTotal = (packetRate + lossRate);
@ -552,34 +551,26 @@ StatsCollector.prototype.processStatsReport = function () {
var bytesReceived = 0, bytesSent = 0; var bytesReceived = 0, bytesSent = 0;
if(getStatValue(now, "bytesReceived")) if(getStatValue(now, "bytesReceived")) {
{
bytesReceived = getStatValue(now, "bytesReceived") - bytesReceived = getStatValue(now, "bytesReceived") -
getStatValue(before, "bytesReceived"); getStatValue(before, "bytesReceived");
} }
if(getStatValue(now, "bytesSent")) if(getStatValue(now, "bytesSent")) {
{
bytesSent = getStatValue(now, "bytesSent") - bytesSent = getStatValue(now, "bytesSent") -
getStatValue(before, "bytesSent"); getStatValue(before, "bytesSent");
} }
var time = Math.round((now.timestamp - before.timestamp) / 1000); var time = Math.round((now.timestamp - before.timestamp) / 1000);
if(bytesReceived <= 0 || time <= 0) if(bytesReceived <= 0 || time <= 0) {
{
bytesReceived = 0; bytesReceived = 0;
} } else {
else
{
bytesReceived = Math.round(((bytesReceived * 8) / time) / 1000); bytesReceived = Math.round(((bytesReceived * 8) / time) / 1000);
} }
if(bytesSent <= 0 || time <= 0) if(bytesSent <= 0 || time <= 0) {
{
bytesSent = 0; bytesSent = 0;
} } else {
else
{
bytesSent = Math.round(((bytesSent * 8) / time) / 1000); bytesSent = Math.round(((bytesSent * 8) / time) / 1000);
} }
@ -602,16 +593,11 @@ StatsCollector.prototype.processStatsReport = function () {
} }
catch(e){/*not supported*/} catch(e){/*not supported*/}
if(resolution.height && resolution.width) if(resolution.height && resolution.width) {
{
jidStats.setSsrcResolution(ssrc, resolution); jidStats.setSsrcResolution(ssrc, resolution);
} } else {
else
{
jidStats.setSsrcResolution(ssrc, null); jidStats.setSsrcResolution(ssrc, null);
} }
} }
var self = this; var self = this;
@ -622,11 +608,9 @@ StatsCollector.prototype.processStatsReport = function () {
var bitrateUpload = 0; var bitrateUpload = 0;
var resolutions = {}; var resolutions = {};
Object.keys(this.jid2stats).forEach( Object.keys(this.jid2stats).forEach(
function (jid) function (jid) {
{
Object.keys(self.jid2stats[jid].ssrc2Loss).forEach( Object.keys(self.jid2stats[jid].ssrc2Loss).forEach(
function (ssrc) function (ssrc) {
{
var type = "upload"; var type = "upload";
if(self.jid2stats[jid].ssrc2Loss[ssrc].isDownloadStream) if(self.jid2stats[jid].ssrc2Loss[ssrc].isDownloadStream)
type = "download"; type = "download";

Loading…
Cancel
Save