Signatur
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
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);
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);
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');
// Wichtig · Fallstricke
- Einheit Sekunden, nicht Millisekunden – für Anzeigen mit 1000 multiplizieren.
- Immer zusammen mit
roundTripTimeMeasurementsauswerten; 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 aufundefinedabsichern.