Skip to content

Commit 50f0997

Browse files
authored
feat: Ignore disabled tracks
1 parent 8627a23 commit 50f0997

File tree

4 files changed

+23
-18
lines changed

4 files changed

+23
-18
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "webrtc-issue-detector",
3-
"version": "1.7.0",
3+
"version": "1.8.0-ignore-disabled-tracks.1",
44
"description": "WebRTC diagnostic tool that detects issues with network or user devices",
55
"repository": "git@github.com:VLprojects/webrtc-issue-detector.git",
66
"author": "Roman Kuzakov <roman.kuzakov@gmail.com>",

src/WebRTCIssueDetector.ts

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,10 @@ class WebRTCIssueDetector {
6767

6868
this.networkScoresCalculator = params.networkScoresCalculator ?? new DefaultNetworkScoresCalculator();
6969
this.compositeStatsParser = params.compositeStatsParser ?? new CompositeRTCStatsParser({
70-
statsParser: new RTCStatsParser({ logger: this.logger }),
70+
statsParser: new RTCStatsParser({
71+
ignoreSSRCList: params.ignoreSSRCList,
72+
logger: this.logger,
73+
}),
7174
});
7275
this.statsReporter = params.statsReporter ?? new PeriodicWebRTCStatsReporter({
7376
compositeStatsParser: this.compositeStatsParser,
@@ -80,7 +83,6 @@ class WebRTCIssueDetector {
8083
this.statsReporter.on(PeriodicWebRTCStatsReporter.STATS_REPORT_READY_EVENT, (report: StatsReportItem) => {
8184
this.detectIssues({
8285
data: report.stats,
83-
ignoreSSRCList: params.ignoreSSRCList,
8486
});
8587

8688
this.calculateNetworkScores(report.stats);
@@ -135,18 +137,8 @@ class WebRTCIssueDetector {
135137
this.eventEmitter.emit(EventType.Issue, issues);
136138
}
137139

138-
private detectIssues({ data, ignoreSSRCList }: DetectIssuesPayload): void {
139-
let issues = this.detectors.reduce<IssuePayload[]>((acc, detector) => [...acc, ...detector.detect(data)], []);
140-
if (ignoreSSRCList?.length) {
141-
issues = issues.filter((issue) => {
142-
if (!issue.ssrc) {
143-
return true;
144-
}
145-
146-
return !ignoreSSRCList.includes(issue.ssrc);
147-
});
148-
}
149-
140+
private detectIssues({ data }: DetectIssuesPayload): void {
141+
const issues = this.detectors.reduce<IssuePayload[]>((acc, detector) => [...acc, ...detector.detect(data)], []);
150142
if (issues.length > 0) {
151143
this.emitIssues(issues);
152144
}

src/parser/RTCStatsParser.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ interface PrevStatsItem {
2424
}
2525

2626
interface WebRTCStatsParserParams {
27+
ignoreSSRCList?: number[];
2728
logger: Logger;
2829
}
2930

@@ -40,9 +41,12 @@ class RTCStatsParser implements StatsParser {
4041
'transport',
4142
]);
4243

44+
private readonly ignoreSSRCList: number[];
45+
4346
private readonly logger: Logger;
4447

4548
constructor(params: WebRTCStatsParserParams) {
49+
this.ignoreSSRCList = params.ignoreSSRCList ?? [];
4650
this.logger = params.logger;
4751
}
4852

@@ -64,8 +68,13 @@ class RTCStatsParser implements StatsParser {
6468

6569
try {
6670
const beforeGetStats = Date.now();
67-
const receiversStats = await Promise.all(pc.getReceivers().map((r) => r.getStats()));
68-
const sendersStats = await Promise.all(pc.getSenders().map((r) => r.getStats()));
71+
72+
const recieversWithActiveTracks = pc.getReceivers().filter((r) => r.track?.enabled);
73+
const sendersWithActiveTracks = pc.getSenders().filter((s) => s.track?.enabled);
74+
75+
const receiversStats = await Promise.all(recieversWithActiveTracks.map((r) => r.getStats()));
76+
const sendersStats = await Promise.all(sendersWithActiveTracks.map((r) => r.getStats()));
77+
6978
const stats = this.mapReportsStats([...receiversStats, ...sendersStats], info);
7079

7180
return {
@@ -150,6 +159,11 @@ class RTCStatsParser implements StatsParser {
150159
return;
151160
}
152161

162+
const ssrc = statsItem.ssrc as number;
163+
if (ssrc && this.ignoreSSRCList.includes(ssrc)) {
164+
return;
165+
}
166+
153167
if (type === 'outbound-rtp') {
154168
const trackInfo = stats.get(statsItem.trackId as string)
155169
|| stats.get(statsItem.mediaSourceId as string) || {};

src/types.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,6 @@ export type IssuePayload = {
9494

9595
export type DetectIssuesPayload = {
9696
data: WebRTCStatsParsed,
97-
ignoreSSRCList?: number[],
9897
};
9998

10099
export type NetworkScore = number;

0 commit comments

Comments
 (0)