Start · Sprachen · JavaScript · Referenz · VideoPlaybackQuality.corruptedVideoFrames

VideoPlaybackQuality.corruptedVideoFrames

Eigenschaft

Schreibgeschützte Zahl der beschädigten Videoframes, die seit dem letzten Laden oder Neuladen des <code>&lt;video&gt;</code>-Elements empfangen wurden.

seit JavaScript Media Playback Quality API; in allen modernen Brow deprecated seit ja Kategorie: webapi

Signatur

VideoPlaybackQuality.corruptedVideoFrames

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

Typ
number
Beschreibung
Nicht negative Ganzzahl (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}`);
});
Beschädigte Frames: 0 Frames gesamt: 1440

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));
Fehlerquote im Intervall: 0.00 %

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);
{ corruptedVideoFrames: 0, droppedVideoFrames: 12, totalVideoFrames: 3000, creationTime: 51234.5 }

// Wichtig · Fallstricke

  • Veraltet: Die Spezifikation Media Playback Quality führt corruptedVideoFrames als veraltet. Manche Browser (z. B. Chromium-basierte) liefern hier praktisch immer 0. Deshalb sollte keine wichtige Logik von diesem Wert abhängen. Besser ist droppedVideoFrames.
  • 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 neuen src oder 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. Nur HTMLVideoElement hat diese Methode, HTMLAudioElement nicht. Vor der Nutzung sollte man prüfen, ob die Methode vorhanden ist.