Start · Sprachen · JavaScript · Referenz · RTCCodecStats.timestamp

RTCCodecStats.timestamp

Eigenschaft

Liefert als <code>DOMHighResTimeStamp</code> den Zeitpunkt in Millisekunden, zu dem die Codec-Statistikdaten im <code>RTCCodecStats</code>-Objekt erfasst wurden.

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

Signatur

RTCCodecStats.timestamp

Beschreibung

Die schreibgeschützte Eigenschaft timestamp eines RTCCodecStats-Wörterbuchs gibt an, wann der Browser die im Objekt enthaltenen Werte erfasst hat. Der Wert ist ein DOMHighResTimeStamp, also eine Zahl in Millisekunden (mit Nachkommastellen), gemessen ab der Unix-Epoche (1. Januar 1970, UTC).

RTCCodecStats-Einträge erhält man über RTCPeerConnection.getStats(), RTCRtpSender.getStats() oder RTCRtpReceiver.getStats(). Im zurückgegebenen RTCStatsReport haben sie den type "codec". Sie beschreiben einen Codec (z. B. video/VP8 oder audio/opus), der gerade von einem RTP-Stream genutzt wird.

Da Codec-Statistiken überwiegend statische Werte wie mimeType, clockRate oder payloadType enthalten, dient timestamp vor allem dazu, Schnappschüsse zeitlich einzuordnen, mit anderen Statistiken desselben Berichts abzugleichen oder festzustellen, wann ein Codec-Wechsel beobachtet wurde. Alle Einträge eines Berichts tragen in der Regel denselben oder einen sehr ähnlichen Zeitstempel.

Rückgabewert

Typ
DOMHighResTimeStamp (number)
Beschreibung
Zeitpunkt der Erfassung in Millisekunden seit der Unix-Epoche. Lässt sich direkt an new Date() übergeben.

Beispiele

Codec-Statistiken mit Erfassungszeitpunkt ausgeben

const pc = new RTCPeerConnection();
// ... Verbindung aufbauen, Tracks hinzufügen ...

const logCodecStats = async () => {
  const report = await pc.getStats();
  report.forEach((stats) => {
    if (stats.type === 'codec') {
      const zeit = new Date(stats.timestamp).toLocaleTimeString('de-DE');
      console.log(`${zeit}: ${stats.mimeType} (${stats.clockRate} Hz, PT ${stats.payloadType})`);
    }
  });
};

logCodecStats();
14:32:07: audio/opus (48000 Hz, PT 111) 14:32:07: video/VP8 (90000 Hz, PT 96)

Codec-Wechsel mit Zeitpunkt erkennen

const beobachteCodecWechsel = (sender, intervallMs = 2000) => {
  let letzterCodec = null;

  return setInterval(async () => {
    const report = await sender.getStats();
    for (const stats of report.values()) {
      if (stats.type !== 'codec') continue;
      if (stats.mimeType !== letzterCodec) {
        console.log(
          `Codec ${stats.mimeType} aktiv seit ${new Date(stats.timestamp).toISOString()}`
        );
        letzterCodec = stats.mimeType;
      }
    }
  }, intervallMs);
};

// Verwendung mit einem Video-Sender:
// const [videoSender] = pc.getSenders().filter((s) => s.track?.kind === 'video');
// const id = beobachteCodecWechsel(videoSender);
Codec video/VP8 aktiv seit 2024-05-14T12:32:07.412Z

Alter eines Statistik-Schnappschusses berechnen

const pruefeAktualitaet = async (pc, maxAlterMs = 5000) => {
  const report = await pc.getStats();
  const codec = [...report.values()].find((s) => s.type === 'codec');
  if (!codec) return console.log('Keine Codec-Statistik vorhanden');

  const alter = Date.now() - codec.timestamp;
  console.log(`Schnappschuss ist ${alter.toFixed(1)} ms alt`);
  if (alter > maxAlterMs) console.warn('Statistik veraltet');
};
Schnappschuss ist 0.8 ms alt

// Wichtig · Fallstricke

  • Bezugspunkt: Der Wert bezieht sich auf die Unix-Epoche, nicht auf performance.timeOrigin. Für Vergleiche daher Date.now() nutzen, nicht performance.now(). Ältere Chrome-Versionen lieferten teils abweichende Bezugspunkte – bei plattformübergreifender Auswertung prüfen.
  • Keine Ratenberechnung: Anders als bei RTCInboundRtpStreamStats gibt es bei Codec-Statistiken keine Zähler; Differenzen zwischen zwei timestamp-Werten sind hier nur für Zeitangaben sinnvoll.
  • Nur für genutzte Codecs: Codec-Einträge erscheinen erst, wenn ein RTP-Stream den Codec tatsächlich verwendet – vor dem Verbindungsaufbau fehlen sie.
  • Genauigkeit: Browser können die Auflösung zum Schutz vor Timing-Angriffen und Fingerprinting reduzieren.
  • Kompatibilität: RTCCodecStats wird in allen aktuellen Browsern unterstützt; Firefox liefert Codec-Statistiken erst seit neueren Versionen (ca. 112+).