Signatur
Beschreibung
Die Eigenschaft creationTime eines VideoPlaybackQuality-Objekts gibt an, wann die Momentaufnahme der Wiedergabequalität erstellt wurde. Das Objekt bekommst du über HTMLVideoElement.prototype.getVideoPlaybackQuality(). Der Wert ist ein DOMHighResTimeStamp, also eine Zahl in Millisekunden, oft mit Nachkommastellen. Er bezieht sich auf dieselbe Zeitbasis wie performance.now(), nämlich den Start des Browsing-Kontexts (performance.timeOrigin).
Jeder Aufruf von getVideoPlaybackQuality() liefert ein neues, unveränderliches Objekt. Die Zähler darin (totalVideoFrames, droppedVideoFrames) sind kumulativ. Mit creationTime kannst du deshalb zwei Proben zeitlich einordnen und daraus Raten berechnen, etwa verworfene Bilder pro Sekunde oder die tatsächliche Bildrate in einem Zeitfenster.
Typische Einsatzfälle sind Überwachung der Wiedergabequalität (Quality of Experience), adaptives Streaming, z. B. auf eine niedrigere Auflösung wechseln, wenn zu viele Bilder verworfen werden, und das Senden von Telemetriedaten an einen Analyse-Server.
Rückgabewert
performance.timeOrigin zum Zeitpunkt, an dem die Qualitätsprobe erstellt wurde. Schreibgeschützt.Beispiele
Zeitstempel einer Qualitätsprobe auslesen
const video = document.querySelector('video');
const quality = video.getVideoPlaybackQuality();
console.log(`Probe erstellt nach ${quality.creationTime.toFixed(1)} ms`);
console.log(`Frames gesamt: ${quality.totalVideoFrames}`);
console.log(`Verworfen: ${quality.droppedVideoFrames}`);
Verworfene Frames pro Sekunde zwischen zwei Proben
const video = document.querySelector('video');
let previous = video.getVideoPlaybackQuality();
setInterval(() => {
const current = video.getVideoPlaybackQuality();
const seconds = (current.creationTime - previous.creationTime) / 1000;
const dropped = current.droppedVideoFrames - previous.droppedVideoFrames;
const rendered = current.totalVideoFrames - previous.totalVideoFrames;
if (seconds > 0) {
console.log(`Drop-Rate: ${(dropped / seconds).toFixed(2)}/s, FPS: ${(rendered / seconds).toFixed(1)}`);
}
previous = current;
}, 2000);
Qualitätsprobe mit absolutem Zeitstempel an Telemetrie senden
const reportQuality = (video) => {
const q = video.getVideoPlaybackQuality();
// Relative Zeit in eine Unix-Zeit (ms) umrechnen
const timestamp = Math.round(performance.timeOrigin + q.creationTime);
const payload = {
timestamp,
iso: new Date(timestamp).toISOString(),
total: q.totalVideoFrames,
dropped: q.droppedVideoFrames
};
navigator.sendBeacon('/api/video-qoe', JSON.stringify(payload));
return payload;
};
const video = document.querySelector('video');
video.addEventListener('pause', () => console.log(reportQuality(video)));
// Wichtig · Fallstricke
- Relative Zeitbasis:
creationTimeist kein Unix-Zeitstempel. Für eine absolute Zeit musst duperformance.timeOrigin + creationTimerechnen. Werte aus verschiedenen Tabs oder Workern kannst du nicht direkt vergleichen. - Reduzierte Genauigkeit: Zum Schutz vor Timing-Angriffen und Fingerprinting (Spectre) runden Browser hochauflösende Zeitstempel. Firefox rundet z. B. abhängig von
privacy.reduceTimerPrecisionbzw. Cross-Origin-Isolation. Für Millisekunden-genaue Messungen ist die Eigenschaft deshalb nur bedingt geeignet. - Momentaufnahme: Das Objekt aktualisiert sich nicht von selbst. Für neue Werte rufst du
getVideoPlaybackQuality()erneut auf. - Kompatibilität: Wird von allen modernen Browsern unterstützt, nur auf
HTMLVideoElement(nicht auf<audio>). Die veraltete EigenschaftcorruptedVideoFramesund die präfixierten Zähler wiewebkitDroppedFrameCountsolltest du nicht mehr verwenden.