Start · Sprachen · JavaScript · Referenz · RTCTransportStats.bytesSent

RTCTransportStats.bytesSent

Eigenschaft

Gibt die Gesamtzahl der Nutzdatenbytes an, die über diesen Transport (<code>RTCIceTransport</code>/<code>RTCDtlsTransport</code>) gesendet wurden.

seit JavaScript Baseline 2023: Chrome, Edge, Firefox, Safari (neue Kategorie: webapi

Signatur

RTCTransportStats.bytesSent

Beschreibung

Die Eigenschaft bytesSent des Wörterbuchs RTCTransportStats enthält eine ganze Zahl. Sie gibt an, wie viele Nutzdatenbytes insgesamt über den Transport einer RTCPeerConnection gesendet wurden. Gezählt wird ab dem Aufbau des Transports. Header, Padding und ICE-Verbindungsprüfungen (STUN) zählen nicht dazu.

Ein Statistik-Objekt vom Typ "transport" erhältst du über RTCPeerConnection.getStats(). Das gelieferte RTCStatsReport ist eine Map-ähnliche Sammlung. Darin suchst du die Einträge, bei denen type === "transport" gilt. Weil ein Transport meist alle Medien- und Datenkanäle bündelt, zeigt bytesSent den gesamten ausgehenden Datenverkehr der Verbindung.

Typische Einsatzfälle sind die Messung der Upload-Bandbreite, Diagnose-Dashboards und Verbindungsqualitäts-Anzeigen in Videokonferenz-Apps. Dafür vergleichst du zwei Messungen und teilst die Byte-Differenz durch die Zeitdifferenz aus timestamp.

Rückgabewert

Typ
number
Beschreibung
Eine nicht negative Ganzzahl (unsigned long long): die Summe aller bisher über diesen Transport gesendeten Nutzdatenbytes. Der Wert kann undefined sein, wenn der Browser die Eigenschaft nicht liefert.

Beispiele

Gesendete Bytes des Transports auslesen

// pc ist eine bestehende, verbundene RTCPeerConnection
const logBytesSent = async (pc) => {
  const report = await pc.getStats();
  report.forEach((stats) => {
    if (stats.type === 'transport') {
      console.log(`Transport ${stats.id}: ${stats.bytesSent} Bytes gesendet`);
    }
  });
};

await logBytesSent(pc);
Transport T01: 1843200 Bytes gesendet

Upload-Bitrate in kbit/s messen

const getTransport = async (pc) => {
  const report = await pc.getStats();
  return [...report.values()].find((s) => s.type === 'transport');
};

let previous = await getTransport(pc);

const timer = setInterval(async () => {
  const current = await getTransport(pc);
  if (!current || !previous) return;

  const bytes = current.bytesSent - previous.bytesSent;
  const seconds = (current.timestamp - previous.timestamp) / 1000;
  const kbps = ((bytes * 8) / seconds / 1000).toFixed(1);
  console.log(`Upload: ${kbps} kbit/s`);

  previous = current;
}, 1000);

// Beim Beenden aufräumen
pc.addEventListener('connectionstatechange', () => {
  if (pc.connectionState === 'closed') clearInterval(timer);
});
Upload: 1250.4 kbit/s Upload: 1302.7 kbit/s

Gesendete und empfangene Bytes vergleichen

const summary = async (pc) => {
  const report = await pc.getStats();
  for (const stats of report.values()) {
    if (stats.type !== 'transport') continue;
    const mb = (n) => ((n ?? 0) / 1024 / 1024).toFixed(2);
    console.log(`Gesendet: ${mb(stats.bytesSent)} MB, empfangen: ${mb(stats.bytesReceived)} MB`);
  }
};

await summary(pc);
Gesendet: 12.45 MB, empfangen: 30.12 MB

// Wichtig · Fallstricke

  • Kumulativer Zähler: bytesSent zählt immer weiter hoch. Für eine Bitrate brauchst du die Differenz zweier Messungen, geteilt durch die Differenz der timestamp-Werte (in Millisekunden).
  • Nur Nutzdaten: Header von IP, UDP, SRTP und DTLS sowie STUN-Prüfungen zählen nicht mit. Die tatsächlich übertragene Datenmenge auf dem Netzwerk ist deshalb größer.
  • Bündelung: Mit bundlePolicy: "max-bundle" (Standard in modernen Browsern) gibt es meist nur einen Transport. Ohne Bündelung können mehrere transport-Einträge vorkommen. Deren Werte musst du bei Bedarf selbst addieren.
  • Kompatibilität: Die Unterstützung ist in aktuellen Versionen von Chromium, Firefox und Safari vorhanden. Ältere Browser liefern den Eintrag vom Typ transport oder die Eigenschaft eventuell nicht. Prüfe den Wert deshalb vorher auf undefined.
  • getStats() ist asynchron und nicht kostenlos. Frage die Statistiken nicht häufiger als etwa einmal pro Sekunde ab.