Skip to content

Commit 2530064

Browse files
author
退之
authored
Merge pull request #1 from orangebook/feat/rtpCount
rtp count
2 parents 13438a5 + d00c144 commit 2530064

8 files changed

+1709
-11
lines changed

Gruntfile.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ module.exports = function(grunt) {
5151
'dev/remote-candidate.js',
5252
'dev/dataSentReceived.js',
5353
'dev/ssrc.js',
54-
'dev/tail.js'
54+
'dev/bound-rtp.js',
55+
'dev/tail.js',
5556
],
5657
dest: 'getStats.js',
5758
},

dev/bound-rtp.js

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* statistical pliCount,nackCount,firCount adapter for `Android Webrtc SDK`
3+
* {
4+
* googPlisSent(googPlisReceived): pliCount,
5+
* googNacksSent(googNacksSent): nackCount,
6+
* googFirsSent(googFirsSent): firCount
7+
* }
8+
* @param {*} result
9+
*/
10+
getStatsParser.boundRtp = function(result) {
11+
12+
if (result.type == 'inbound-rtp') {
13+
creatVideoCounter(result, 'nackCount', 'recv', '+', 1, 'googNacksReceived');
14+
creatVideoCounter(result, 'pliCount', 'recv', '+', 1, 'googPlisReceived');
15+
creatVideoCounter(result, 'firCount', 'recv', '+', 1, 'googFirsReceived');
16+
}
17+
18+
if (result.type == 'outbound-rtp') {
19+
creatVideoCounter(result, 'nackCount', 'send', '+', 1, 'googNacksSent');
20+
creatVideoCounter(result, 'pliCount', 'send', '+', 1, 'googPlisSent');
21+
creatVideoCounter(result, 'firCount', 'send', '+', 1, 'googFirsSent');
22+
}
23+
}

dev/globals.js

+34-2
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,19 @@ var getStatsResult = {
2929
tracks: [],
3030
codecs: [],
3131
availableBandwidth: 0,
32-
streams: 0
32+
streams: 0,
33+
googNacksSent: 0,
34+
googPlisSent: 0,
35+
googFirsReceived: 0
3336
},
3437
recv: {
3538
tracks: [],
3639
codecs: [],
3740
availableBandwidth: 0,
38-
streams: 0
41+
streams: 0,
42+
googNacksReceived: 0,
43+
googPlisReceived: 0,
44+
googFirsReceived: 0
3945
},
4046
bytesSent: 0,
4147
bytesReceived: 0
@@ -113,3 +119,29 @@ var getStatsParser = {
113119
}
114120
}
115121
};
122+
123+
/**
124+
* Video Counter helper function
125+
* @param {*} paramName
126+
* @param {*} op - default `+`
127+
* @param {*} scale - default 1
128+
* @param {*} userFiled - default paramName
129+
* @returns {NULL}
130+
*/
131+
function creatVideoCounter(result, paramName, type, op, scale, userFiled) {
132+
// 当参数合并后,根据 googNacksSent 来判断recv/send Kb Mb Gb
133+
if (!!result[paramName] && result[paramName] !== '0') {
134+
var Count = 0;
135+
if (!getStatsResult.internal.video[type]['prev' + paramName] || getStatsResult.internal.video[type]['prev' + paramName] > result[paramName]) {
136+
getStatsResult.internal.video[type]['prev' + paramName] = result[paramName];
137+
}
138+
if ((op || '+') === '+') {
139+
Count = result[paramName] + getStatsResult.internal.video[type]['prev' + paramName];
140+
} else {
141+
Count = result[paramName] - getStatsResult.internal.video[type]['prev' + paramName];
142+
}
143+
getStatsResult.internal.video[type]['prev' + paramName] = result[paramName];
144+
return getStatsResult.video[type][userFiled || paramName] = Count * (scale || 1);
145+
}
146+
return;
147+
}

dev/ssrc.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ getStatsParser.ssrc = function(result) {
2020
if (SSRC[result.mediaType][sendrecvType].indexOf(result.ssrc) === -1) {
2121
SSRC[result.mediaType][sendrecvType].push(result.ssrc)
2222
}
23-
23+
creatVideoCounter(result, 'googNacksSent', 'send');
24+
creatVideoCounter(result, 'googPlisSent', 'send');
25+
creatVideoCounter(result, 'googFirsSent', 'send');
26+
creatVideoCounter(result, 'googNacksReceived', 'recv');
27+
creatVideoCounter(result, 'googPlisReceived', 'recv');
28+
creatVideoCounter(result, 'googFirsReceived', 'recv');
2429
getStatsResult[result.mediaType][sendrecvType].streams = SSRC[result.mediaType][sendrecvType].length;
2530
};

getStats.js

+56-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
// Last time updated: 2018-11-26 6:19:49 AM UTC
3+
// Last time updated: 2018-12-10 9:49:44 AM UTC
44

55
// _______________
66
// getStats v1.0.10
@@ -45,13 +45,19 @@ window.getStats = function(mediaStreamTrack, callback, interval) {
4545
tracks: [],
4646
codecs: [],
4747
availableBandwidth: 0,
48-
streams: 0
48+
streams: 0,
49+
googNacksSent: 0,
50+
googPlisSent: 0,
51+
googFirsReceived: 0
4952
},
5053
recv: {
5154
tracks: [],
5255
codecs: [],
5356
availableBandwidth: 0,
54-
streams: 0
57+
streams: 0,
58+
googNacksReceived: 0,
59+
googPlisReceived: 0,
60+
googFirsReceived: 0
5561
},
5662
bytesSent: 0,
5763
bytesReceived: 0
@@ -130,6 +136,32 @@ window.getStats = function(mediaStreamTrack, callback, interval) {
130136
}
131137
};
132138

139+
/**
140+
* Video Counter helper function
141+
* @param {*} paramName
142+
* @param {*} op - default `+`
143+
* @param {*} scale - default 1
144+
* @param {*} userFiled - default paramName
145+
* @returns {NULL}
146+
*/
147+
function creatVideoCounter(result, paramName, type, op, scale, userFiled) {
148+
// 当参数合并后,根据 googNacksSent 来判断recv/send Kb Mb Gb
149+
if (!!result[paramName] && result[paramName] !== '0') {
150+
var Count = 0;
151+
if (!getStatsResult.internal.video[type]['prev' + paramName] || getStatsResult.internal.video[type]['prev' + paramName] > result[paramName]) {
152+
getStatsResult.internal.video[type]['prev' + paramName] = result[paramName];
153+
}
154+
if ((op || '+') === '+') {
155+
Count = result[paramName] + getStatsResult.internal.video[type]['prev' + paramName];
156+
} else {
157+
Count = result[paramName] - getStatsResult.internal.video[type]['prev' + paramName];
158+
}
159+
getStatsResult.internal.video[type]['prev' + paramName] = result[paramName];
160+
return getStatsResult.video[type][userFiled || paramName] = Count * (scale || 1);
161+
}
162+
return;
163+
}
164+
133165
function preHandler(result) {
134166
// 根据codeId\trackId映射 - 处理关联关系
135167
var idMap = result.reduce(function(map, item) {
@@ -649,10 +681,30 @@ window.getStats = function(mediaStreamTrack, callback, interval) {
649681
if (SSRC[result.mediaType][sendrecvType].indexOf(result.ssrc) === -1) {
650682
SSRC[result.mediaType][sendrecvType].push(result.ssrc)
651683
}
652-
684+
creatVideoCounter(result, 'googNacksSent', 'send');
685+
creatVideoCounter(result, 'googPlisSent', 'send');
686+
creatVideoCounter(result, 'googFirsSent', 'send');
687+
creatVideoCounter(result, 'googNacksReceived', 'recv');
688+
creatVideoCounter(result, 'googPlisReceived', 'recv');
689+
creatVideoCounter(result, 'googFirsReceived', 'recv');
653690
getStatsResult[result.mediaType][sendrecvType].streams = SSRC[result.mediaType][sendrecvType].length;
654691
};
655692

693+
getStatsParser.boundRtp = function(result) {
694+
695+
if (result.type == 'inbound-rtp') {
696+
creatVideoCounter(result, 'nackCount', 'recv', '+', 1, 'googNacksReceived');
697+
creatVideoCounter(result, 'pliCount', 'recv', '+', 1, 'googPlisReceived');
698+
creatVideoCounter(result, 'firCount', 'recv', '+', 1, 'googFirsReceived');
699+
}
700+
701+
if (result.type == 'outbound-rtp') {
702+
creatVideoCounter(result, 'nackCount', 'send', '+', 1, 'googNacksSent');
703+
creatVideoCounter(result, 'pliCount', 'send', '+', 1, 'googPlisSent');
704+
creatVideoCounter(result, 'firCount', 'send', '+', 1, 'googFirsSent');
705+
}
706+
}
707+
656708
getStatsLooper();
657709

658710
};

getStats.min.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)