Signatur
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
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();
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);
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');
};
// Wichtig · Fallstricke
- Bezugspunkt: Der Wert bezieht sich auf die Unix-Epoche, nicht auf
performance.timeOrigin. Für Vergleiche daherDate.now()nutzen, nichtperformance.now(). Ältere Chrome-Versionen lieferten teils abweichende Bezugspunkte – bei plattformübergreifender Auswertung prüfen. - Keine Ratenberechnung: Anders als bei
RTCInboundRtpStreamStatsgibt es bei Codec-Statistiken keine Zähler; Differenzen zwischen zweitimestamp-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:
RTCCodecStatswird in allen aktuellen Browsern unterstützt; Firefox liefert Codec-Statistiken erst seit neueren Versionen (ca. 112+).