Signatur
Beschreibung
Die Eigenschaft corruptedVideoFrames gehört zu einem VideoPlaybackQuality-Objekt. Ein solches Objekt bekommt man über HTMLVideoElement.prototype.getVideoPlaybackQuality(). Der Wert ist eine nicht negative Ganzzahl. Er gibt an, wie viele Frames beschädigt beim Dekoder ankamen, zum Beispiel wegen Übertragungsfehlern oder fehlerhafter Kodierung. Solche Frames können trotzdem angezeigt werden, etwa mit Bildfehlern, oder sie werden verworfen.
Das Objekt ist eine Momentaufnahme: Die Werte werden beim Aufruf von getVideoPlaybackQuality() festgehalten und danach nicht mehr aktualisiert. Wer den Verlauf beobachten will, muss die Methode regelmäßig neu aufrufen und die Werte vergleichen. Der Zähler beginnt wieder bei 0, wenn das Medium neu geladen wird, zum Beispiel durch load() oder eine neue src.
Die Eigenschaft eignet sich für Diagnose und Telemetrie, etwa um die Qualität eines Streams im Player zu überwachen. Zusammen mit totalVideoFrames kann man eine Fehlerquote berechnen. Für Entscheidungen beim adaptiven Streaming ist droppedVideoFrames meist das aussagekräftigere Signal.
Rückgabewert
unsigned long): die Zahl der beschädigten Frames seit dem letzten Laden. Der Wert ist schreibgeschützt.Beispiele
Beschädigte Frames einmalig auslesen
const video = document.querySelector('video');
video.addEventListener('ended', () => {
const quality = video.getVideoPlaybackQuality();
console.log(`Beschädigte Frames: ${quality.corruptedVideoFrames}`);
console.log(`Frames gesamt: ${quality.totalVideoFrames}`);
});
Fehlerquote regelmäßig überwachen
const video = document.querySelector('video');
let last = { corrupted: 0, total: 0 };
const checkQuality = () => {
// Jeder Aufruf liefert eine neue Momentaufnahme
const q = video.getVideoPlaybackQuality();
const corrupted = q.corruptedVideoFrames - last.corrupted;
const total = q.totalVideoFrames - last.total;
last = { corrupted: q.corruptedVideoFrames, total: q.totalVideoFrames };
if (total > 0) {
const rate = (corrupted / total) * 100;
console.log(`Fehlerquote im Intervall: ${rate.toFixed(2)} %`);
if (rate > 5) console.warn('Stream-Qualität schlecht – Quelle prüfen');
}
};
const timer = setInterval(checkQuality, 5000);
video.addEventListener('emptied', () => {
// Nach Neuladen beginnen die Zähler wieder bei 0
last = { corrupted: 0, total: 0 };
});
video.addEventListener('ended', () => clearInterval(timer));
Telemetrie mit Feature-Erkennung
const reportQuality = (video) => {
if (typeof video.getVideoPlaybackQuality !== 'function') {
return null; // API nicht verfügbar
}
const { corruptedVideoFrames, droppedVideoFrames, totalVideoFrames, creationTime } =
video.getVideoPlaybackQuality();
return { corruptedVideoFrames, droppedVideoFrames, totalVideoFrames, creationTime };
};
const data = reportQuality(document.querySelector('video'));
if (data) navigator.sendBeacon('/api/video-stats', JSON.stringify(data));
console.log(data);
// Wichtig · Fallstricke
- Veraltet: Die Spezifikation Media Playback Quality führt
corruptedVideoFramesals veraltet. Manche Browser (z. B. Chromium-basierte) liefern hier praktisch immer0. Deshalb sollte keine wichtige Logik von diesem Wert abhängen. Besser istdroppedVideoFrames. - Momentaufnahme: Das zurückgegebene Objekt ändert sich nicht mehr. Es wird nicht live aktualisiert. Für aktuelle Werte muss man
getVideoPlaybackQuality()erneut aufrufen. - Zurücksetzen: Beim Neuladen des Mediums, z. B. mit
load(), einer neuensrcoder einem Quellenwechsel über MSE, beginnen die Zähler wieder bei 0. Bei Differenzrechnungen muss man das berücksichtigen. - Kompatibilität:
getVideoPlaybackQuality()gibt es in aktuellen Versionen von Chrome, Edge, Firefox und Safari. NurHTMLVideoElementhat diese Methode,HTMLAudioElementnicht. Vor der Nutzung sollte man prüfen, ob die Methode vorhanden ist.