Start · Sprachen · JavaScript · Referenz · RTCRemoteInboundRtpStreamStats.totalRoundTripTime

RTCRemoteInboundRtpStreamStats.totalRoundTripTime

Eigenschaft

Kumulative Summe aller RTT-Messungen (in Sekunden) eines gesendeten RTP-Streams seit Sitzungsbeginn, ermittelt aus RTCP Receiver Reports der Gegenstelle.

seit JavaScript Chrome 87+, Firefox 90+, Safari 15.4+ (WebRTC Stat Kategorie: webapi

Signatur

RTCRemoteInboundRtpStreamStats.totalRoundTripTime

Beschreibung

Die Eigenschaft totalRoundTripTime eines RTCRemoteInboundRtpStreamStats-Objekts (Statistiktyp "remote-inbound-rtp") enthält die Summe aller Round-Trip-Time-Messungen in Sekunden, die seit Beginn der Sitzung für diesen Stream vorgenommen wurden. Die Messwerte stammen aus den RTCP Receiver Reports (RR), die die Gegenstelle für einen von uns gesendeten Stream zurückschickt.

Allein ist der Wert wenig aussagekräftig. Zusammen mit roundTripTimeMeasurements (Anzahl der Messungen) lässt sich daraus die durchschnittliche RTT berechnen: totalRoundTripTime / roundTripTimeMeasurements. Vergleicht man zwei Snapshots, erhält man die mittlere RTT innerhalb eines Zeitfensters – oft aussagekräftiger als der Momentanwert roundTripTime.

Typische Anwendungsfälle sind Qualitätsmonitoring in Videokonferenzen, adaptive Bitratensteuerung und Diagnose-Dashboards. Die Statistiken holt man über RTCPeerConnection.getStats() oder RTCRtpSender.getStats().

Rückgabewert

Typ
number | undefined
Beschreibung
Gleitkommazahl mit der kumulierten RTT in Sekunden. undefined, solange noch kein RTCP Receiver Report empfangen wurde oder der Browser die Eigenschaft nicht unterstützt.

Beispiele

Durchschnittliche RTT über die gesamte Sitzung

const logAverageRtt = async (pc) => {
  const report = await pc.getStats();
  report.forEach((stats) => {
    if (stats.type === 'remote-inbound-rtp' && stats.roundTripTimeMeasurements > 0) {
      const avgMs = (stats.totalRoundTripTime / stats.roundTripTimeMeasurements) * 1000;
      console.log(`${stats.kind}: Ø RTT ${avgMs.toFixed(1)} ms`);
    }
  });
};

await logAverageRtt(peerConnection);
audio: Ø RTT 42.3 ms video: Ø RTT 44.1 ms

Mittlere RTT pro Intervall aus zwei Snapshots

const previous = new Map();

const sampleRtt = async (pc) => {
  const report = await pc.getStats();
  for (const stats of report.values()) {
    if (stats.type !== 'remote-inbound-rtp') continue;
    const prev = previous.get(stats.id);
    if (prev) {
      const deltaTime = stats.totalRoundTripTime - prev.totalRoundTripTime;
      const deltaCount = stats.roundTripTimeMeasurements - prev.roundTripTimeMeasurements;
      if (deltaCount > 0) {
        console.log(`RTT (letzte 5 s): ${((deltaTime / deltaCount) * 1000).toFixed(1)} ms`);
      }
    }
    previous.set(stats.id, stats);
  }
};

setInterval(() => sampleRtt(peerConnection), 5000);
RTT (letzte 5 s): 38.7 ms

Nur für einen bestimmten Sender abfragen

const [videoSender] = peerConnection.getSenders()
  .filter((s) => s.track?.kind === 'video');

const report = await videoSender.getStats();
const remote = [...report.values()].find((s) => s.type === 'remote-inbound-rtp');

console.log(remote?.totalRoundTripTime ?? 'noch keine Messung');
12.874

// Wichtig · Fallstricke

  • Einheit Sekunden, nicht Millisekunden – für Anzeigen mit 1000 multiplizieren.
  • Immer zusammen mit roundTripTimeMeasurements auswerten; eine Division durch 0 vermeiden, solange noch keine Messung vorliegt.
  • Der Wert steht erst zur Verfügung, nachdem der erste RTCP Receiver Report eingetroffen ist (typischerweise nach einigen Sekunden). Vorher fehlt der remote-inbound-rtp-Eintrag meist ganz.
  • Nicht verwechseln mit RTCIceCandidatePairStats.totalRoundTripTime, das die RTT auf ICE-/STUN-Ebene misst, nicht auf RTCP-Ebene.
  • Browser-Kompatibilität: in aktuellen Chromium-Versionen, Firefox und Safari unterstützt; ältere Versionen liefern nur roundTripTime. Mit optionaler Verkettung bzw. Prüfung auf undefined absichern.