Start · Sprachen · JavaScript · Referenz · RTCStatsReport.size

RTCStatsReport.size

Eigenschaft

Liefert die Anzahl der Statistik-Einträge (<code>RTCStats</code>-Objekte) in einem <code>RTCStatsReport</code>.

seit JavaScript Baseline: alle modernen Browser (Chrome 58+, Firef Kategorie: webapi

Signatur

get RTCStatsReport.prototype.size

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

Typ
number
Beschreibung
Eine nicht-negative Ganzzahl: die Anzahl der Schlüssel-Wert-Paare (Statistik-Objekte) im Bericht.

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`);
Bericht enthält 1 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);
Gesamt: 2 { 'peer-connection': 1, 'data-channel': 1 }

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 RTCStatsReport ist ein Schnappschuss und wird später nicht aktualisiert. Wer eine aktuelle Anzahl braucht, muss getStats() 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: size ist eine Eigenschaft. report.size() wirft einen TypeError.
  • Kein Array: Eine Eigenschaft length gibt es nicht. Wer Array-Methoden braucht, wandelt den Bericht um, zum Beispiel mit [...report.values()] oder Array.from(report).
  • Nur in sicheren Kontexten: Die WebRTC-API steht nur über HTTPS oder auf localhost zur Verfügung. Ältere Browser mit der veralteten, auf Callbacks basierenden Variante von getStats() liefern kein Map-ähnliches Objekt.