Signatur
Beschreibung
RTCStatsReport ist ein schreibgeschütztes, Map-ähnliches Objekt. Es enthält die Statistiken einer WebRTC-Verbindung, die man über RTCPeerConnection.getStats(), RTCRtpSender.getStats() oder RTCRtpReceiver.getStats() abfragt. Jeder Eintrag verknüpft eine eindeutige ID (string) mit einem Statistik-Objekt, zum Beispiel vom Typ inbound-rtp, outbound-rtp, candidate-pair oder transport.
Die Eigenschaft size gibt an, wie viele solcher Einträge der Bericht enthält. Sie funktioniert genauso wie Map.prototype.size. Es ist ein reiner Getter, einen Setter gibt es nicht.
In der Praxis nutzt man size vor allem zur schnellen Diagnose. Man kann damit prüfen, ob überhaupt Statistiken vorliegen, zum Beispiel direkt nach dem Aufbau der Verbindung. Außerdem lässt sich beobachten, wie sich die Zahl der Einträge ändert, etwa wenn Tracks oder ICE-Kandidaten hinzukommen. Auch Log-Ausgaben lassen sich damit kompakt halten.
Rückgabewert
Beispiele
Anzahl der Statistik-Einträge einer Verbindung ausgeben
const pc = new RTCPeerConnection();
pc.createDataChannel('chat');
const report = await pc.getStats();
console.log(`Bericht enthält ${report.size} Einträge`);
Einträge nach Typ gruppieren und mit size vergleichen
const summarizeStats = async (pc) => {
const report = await pc.getStats();
const byType = {};
report.forEach((stat) => {
byType[stat.type] = (byType[stat.type] ?? 0) + 1;
});
console.log('Gesamt:', report.size, byType);
return byType;
};
const pc = new RTCPeerConnection();
pc.createDataChannel('test');
await summarizeStats(pc);
Warten, bis Statistiken zu einem Sender verfügbar sind
const waitForSenderStats = async (sender, timeoutMs = 5000) => {
const start = performance.now();
while (performance.now() - start < timeoutMs) {
const report = await sender.getStats();
if (report.size > 0) return report;
await new Promise((r) => setTimeout(r, 500));
}
throw new Error('Keine Statistiken innerhalb des Zeitlimits');
};
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const pc = new RTCPeerConnection();
const sender = pc.addTrack(stream.getAudioTracks()[0], stream);
const report = await waitForSenderStats(sender);
console.log('Sender-Statistiken:', report.size);
// Wichtig · Fallstricke
- Nur ein Momentaufnahme-Wert: Ein
RTCStatsReportist ein Schnappschuss und wird später nicht aktualisiert. Wer eine aktuelle Anzahl braucht, mussgetStats()erneut aufrufen. - Die Zahl ist nicht vorhersagbar: Welche Einträge ein Bericht enthält, hängt vom Browser, vom Verbindungszustand, von den ICE-Kandidaten und von den Codecs ab. Chrome, Firefox und Safari liefern deshalb bei identischem Aufbau oft unterschiedlich viele Einträge. Verlasse dich also nie auf einen festen Wert.
- Keine Funktion:
sizeist eine Eigenschaft.report.size()wirft einenTypeError. - Kein Array: Eine Eigenschaft
lengthgibt es nicht. Wer Array-Methoden braucht, wandelt den Bericht um, zum Beispiel mit[...report.values()]oderArray.from(report). - Nur in sicheren Kontexten: Die WebRTC-API steht nur über HTTPS oder auf
localhostzur Verfügung. Ältere Browser mit der veralteten, auf Callbacks basierenden Variante vongetStats()liefern kein Map-ähnliches Objekt.