Signatur
Beschreibung
Die schreibgeschützte Eigenschaft totalVideoFrames eines VideoPlaybackQuality-Objekts gibt an, wie viele Video-Frames seit dem Laden des Mediums insgesamt verarbeitet wurden. Mitgezählt werden sowohl angezeigte als auch verworfene Frames. Das Objekt bekommst du über HTMLVideoElement.prototype.getVideoPlaybackQuality().
Allein ist der Wert wenig aussagekräftig. Richtig nützlich wird er zusammen mit droppedVideoFrames: Das Verhältnis droppedVideoFrames / totalVideoFrames ist ein guter Messwert für die Wiedergabequalität. Adaptive Player (etwa für Media Source Extensions) nutzen diesen Wert, um bei zu vielen verworfenen Frames auf eine niedrigere Auflösung oder Bitrate umzuschalten.
Wichtig: Ein VideoPlaybackQuality-Objekt ist eine Momentaufnahme. Die Werte werden danach nicht mehr aktualisiert. Für eine laufende Überwachung musst du getVideoPlaybackQuality() also regelmäßig neu aufrufen.
Rückgabewert
unsigned long): Gesamtzahl der angezeigten und verworfenen Frames seit dem Laden des Mediums. Vor dem Start der Wiedergabe ist der Wert 0.Beispiele
Verworfene Frames in Prozent berechnen
const video = document.querySelector('video');
const quality = video.getVideoPlaybackQuality();
const { totalVideoFrames, droppedVideoFrames } = quality;
// Division durch 0 vermeiden, falls noch nichts abgespielt wurde
const dropRate = totalVideoFrames > 0
? (droppedVideoFrames / totalVideoFrames) * 100
: 0;
console.log(`Frames gesamt: ${totalVideoFrames}`);
console.log(`Verworfen: ${dropRate.toFixed(2)} %`);
Wiedergabequalität laufend überwachen und Qualität reduzieren
const video = document.querySelector('video');
let last = { total: 0, dropped: 0 };
const checkQuality = () => {
const q = video.getVideoPlaybackQuality(); // neue Momentaufnahme
const deltaTotal = q.totalVideoFrames - last.total;
const deltaDropped = q.droppedVideoFrames - last.dropped;
last = { total: q.totalVideoFrames, dropped: q.droppedVideoFrames };
if (deltaTotal > 0 && deltaDropped / deltaTotal > 0.1) {
console.warn('Über 10 % verworfene Frames – niedrigere Qualität wählen');
// z. B. player.setQuality('480p');
}
};
const intervalId = setInterval(checkQuality, 2000);
video.addEventListener('ended', () => clearInterval(intervalId));
Feature-Erkennung mit Fallback
const getTotalFrames = (video) => {
if (typeof video.getVideoPlaybackQuality === 'function') {
return video.getVideoPlaybackQuality().totalVideoFrames;
}
// Veralteter WebKit-Fallback
return video.webkitDecodedFrameCount ?? null;
};
console.log(getTotalFrames(document.querySelector('video')));
// Wichtig · Fallstricke
- Momentaufnahme: Die Werte ändern sich nach dem Aufruf von
getVideoPlaybackQuality()nicht mehr. Wer ein zwischengespeichertes Objekt immer wieder abfragt, bekommt jedes Mal dieselbe Zahl. - Division durch 0: Vor dem Start der Wiedergabe ist
totalVideoFramesgleich0. Prüfe das, bevor du eine Quote berechnest, sonst erhältst duNaN. - Kumulativ: Der Zähler zählt seit dem Laden des Mediums immer weiter. Aussagen über die aktuelle Qualität liefern deshalb eher Differenzen zwischen zwei Messungen. Wird
srcneu gesetzt, beginnt der Zähler in der Regel wieder bei null. - Browser-Unterschiede: Wie genau gezählt wird, hängt von der Implementierung ab, z. B. bei pausierten Videos, Hardware-Dekodierung oder Hintergrund-Tabs. Die Werte sind daher nur eingeschränkt zwischen Browsern vergleichbar.
- Kompatibilität: Wird in allen modernen Browsern unterstützt. Die Eigenschaft
corruptedVideoFramesdesselben Interfaces gilt als veraltet. Ältere WebKit-Browser boten stattdessenwebkitDecodedFrameCountan.