Start · Sprachen · JavaScript · Referenz · RTCRemoteInboundRtpStreamStats.roundTripTime

RTCRemoteInboundRtpStreamStats.roundTripTime

Eigenschaft

Liefert die zuletzt gemessene Paketumlaufzeit (RTT) für diese Synchronisationsquelle (SSRC) in Sekunden, ermittelt über RTCP-Empfängerberichte der Gegenstelle.

seit JavaScript Baseline: Chrome, Edge, Firefox, Safari (neuere Ve Kategorie: webapi

Signatur

RTCRemoteInboundRtpStreamStats.roundTripTime

Beschreibung

Die Eigenschaft roundTripTime gehört zu Statistikobjekten vom Typ "remote-inbound-rtp", die RTCPeerConnection.getStats() bzw. RTCRtpSender.getStats() liefern. Sie beschreibt, wie lange ein Paket vom lokalen Sender zur Gegenstelle und zurück braucht. Der Wert ist eine Gleitkommazahl in Sekunden, z. B. 0.045 für 45 ms.

Die RTT wird aus RTCP-Empfängerberichten (Receiver Reports) berechnet, die die Gegenstelle für einen von uns gesendeten Stream zurückschickt. Dafür werden die Felder LSR (Last Sender Report) und DLSR (Delay since Last SR) ausgewertet. Die Eigenschaft enthält immer den zuletzt gemessenen Wert, keinen Durchschnitt.

Einsatzgebiete sind Verbindungsqualitäts-Anzeigen, adaptive Bitraten-Logik, Diagnose-Dashboards und die Erkennung von Netzproblemen während eines Anrufs. Für einen Durchschnitt über die Zeit kombiniert man totalRoundTripTime mit roundTripTimeMeasurements.

Rückgabewert

Typ
number | undefined
Beschreibung
Die zuletzt gemessene Umlaufzeit in Sekunden (Gleitkommazahl). undefined, solange noch kein RTCP-Empfängerbericht mit gültigen LSR/DLSR-Daten eingetroffen ist.

Beispiele

Aktuelle RTT aller gesendeten Streams auslesen

// pc ist eine verbundene RTCPeerConnection
const logRtt = async (pc) => {
  const report = await pc.getStats();
  report.forEach((stats) => {
    if (stats.type === 'remote-inbound-rtp' && stats.roundTripTime !== undefined) {
      const ms = (stats.roundTripTime * 1000).toFixed(1);
      console.log(`${stats.kind} (SSRC ${stats.ssrc}): RTT ${ms} ms`);
    }
  });
};

await logRtt(pc);
audio (SSRC 12345678): RTT 42.0 ms video (SSRC 87654321): RTT 43.5 ms

Verbindungsqualität periodisch anzeigen

const qualityLabel = (rttSeconds) => {
  if (rttSeconds < 0.15) return 'gut';
  if (rttSeconds < 0.3) return 'mittel';
  return 'schlecht';
};

const startMonitor = (sender, intervalMs = 2000) => {
  const timer = setInterval(async () => {
    const report = await sender.getStats();
    for (const stats of report.values()) {
      if (stats.type === 'remote-inbound-rtp' && typeof stats.roundTripTime === 'number') {
        console.log(`RTT: ${Math.round(stats.roundTripTime * 1000)} ms – Qualität: ${qualityLabel(stats.roundTripTime)}`);
      }
    }
  }, intervalMs);
  return () => clearInterval(timer);
};

const [videoSender] = pc.getSenders().filter((s) => s.track?.kind === 'video');
const stopMonitor = startMonitor(videoSender);
RTT: 48 ms – Qualität: gut

Aktuelle RTT mit Durchschnitt vergleichen

const compareRtt = async (pc) => {
  const report = await pc.getStats();
  for (const s of report.values()) {
    if (s.type !== 'remote-inbound-rtp' || !s.roundTripTimeMeasurements) continue;
    const avg = s.totalRoundTripTime / s.roundTripTimeMeasurements;
    console.log({
      aktuellMs: Math.round(s.roundTripTime * 1000),
      durchschnittMs: Math.round(avg * 1000),
      messungen: s.roundTripTimeMeasurements
    });
  }
};

await compareRtt(pc);
{ aktuellMs: 61, durchschnittMs: 47, messungen: 24 }

// Wichtig · Fallstricke

  • Einheit: Der Wert steht in Sekunden, nicht in Millisekunden. Für die Anzeige mit 1000 multiplizieren.
  • Anfangs nicht vorhanden: Direkt nach dem Verbindungsaufbau fehlt die Eigenschaft oft, weil noch kein RTCP-Empfängerbericht eingetroffen ist. Deshalb immer auf undefined prüfen.
  • Nur für gesendete Streams: remote-inbound-rtp beschreibt, wie die Gegenstelle unsere Pakete empfängt. Für empfangene Streams gibt es remote-outbound-rtp. Dort ist die RTT nur verfügbar, wenn RTCP-XR/DLRR unterstützt wird.
  • Nicht mit ICE-RTT verwechseln: RTCIceCandidatePairStats.currentRoundTripTime misst die RTT über STUN-Anfragen auf Transportebene und kann leicht abweichen.
  • Kompatibilität: Ältere Browser (insbesondere ältere Safari- und Firefox-Versionen) lieferten remote-inbound-rtp gar nicht oder unvollständig. Chrome nutzte früher das nicht standardisierte, Callback-basierte getStats(). Verwende die Promise-Variante und prüfe die Eigenschaft vor dem Zugriff.
  • Die Messung wird nur so oft aktualisiert, wie RTCP-Berichte eintreffen (typisch etwa jede Sekunde). Sehr kurze Abfrageintervalle bringen daher nichts.