Signatur
Beschreibung
Die Methode values() der Schnittstelle MediaKeyStatusMap gibt ein neues Iterator-Objekt zurück. Es liefert den Status jedes Eintrags in der Statusliste, und zwar in der Reihenfolge, in der die Einträge vorliegen. Eine MediaKeyStatusMap bekommst du über die schreibgeschützte Eigenschaft MediaKeySession.keyStatuses einer Sitzung der Encrypted Media Extensions (EME).
Jeder Wert ist ein String aus dem Enum MediaKeyStatus: "usable", "expired", "released", "output-restricted", "output-downscaled", "usable-in-future", "status-pending" oder "internal-error". Die zugehörigen Schlüssel-IDs (als BufferSource) liefert values() nicht. Brauchst du sie, nimm keys() oder entries().
values() ist sinnvoll, wenn du nur den Gesamtzustand der Lizenz prüfen willst, ohne die einzelnen Schlüssel zu kennen. Beispiele: „Ist mindestens ein Schlüssel abspielbar?“ oder „Ist ein Schlüssel abgelaufen?“. Solche Prüfungen macht man typischerweise im Handler des Events keystatuseschange.
Rückgabewert
MediaKeyStatus-String) liefert.Beispiele
Alle Statuswerte bei einer Statusänderung protokollieren
// session ist eine MediaKeySession aus mediaKeys.createSession()
session.addEventListener('keystatuseschange', () => {
for (const status of session.keyStatuses.values()) {
console.log('Schlüsselstatus:', status);
}
});
Prüfen, ob die Wiedergabe möglich ist
const istAbspielbar = (session) =>
[...session.keyStatuses.values()].some((s) => s === 'usable');
session.addEventListener('keystatuseschange', () => {
if (!istAbspielbar(session)) {
console.warn('Kein nutzbarer Schlüssel – Lizenz erneuern');
}
});
Abgelaufene Lizenz erkennen und Sitzung schließen
session.addEventListener('keystatuseschange', async () => {
const statuswerte = Array.from(session.keyStatuses.values());
if (statuswerte.includes('expired')) {
console.log('Lizenz abgelaufen, Sitzung wird geschlossen');
await session.close();
}
});
// Wichtig · Fallstricke
- Direkt nach
createSession()ist die Liste leer. Sie füllt sich erst, nachdem die Lizenz mitsession.update()verarbeitet wurde. Werte deshalb im Eventkeystatuseschangeaus. - Der Iterator ist ein Schnappschuss des Zustands beim Aufruf. Frage die Werte nach jeder Statusänderung neu ab und speichere keine alten Iteratoren.
- Ein Iterator lässt sich nur einmal durchlaufen. Wenn du die Werte mehrfach brauchst, wandle sie mit
Array.from()oder dem Spread-Operator in ein Array um. - EME gibt es nur in sicheren Kontexten (HTTPS). Welche Statuswerte tatsächlich vorkommen, hängt vom Key-System ab (z. B. Widevine, FairPlay, PlayReady). Ältere Browser kennen
"usable-in-future"unter Umständen nicht.