Start · Sprachen · JavaScript · Referenz · MediaKeySystemAccess.keySystem

MediaKeySystemAccess.keySystem

Eigenschaft

Schreibgeschützte Zeichenkette, die das Schlüsselsystem (DRM/CDM) angibt, auf das ein <code>MediaKeySystemAccess</code>-Objekt Zugriff gewährt, z. B. <code>"com.widevine.alpha"</code>.

seit JavaScript Baseline: alle modernen Browser (EME, sicherer Kon Kategorie: webapi

Signatur

MediaKeySystemAccess.keySystem

Beschreibung

Die Eigenschaft keySystem gehört zur Schnittstelle MediaKeySystemAccess der Encrypted Media Extensions (EME). Sie ist schreibgeschützt und liefert den Bezeichner des Schlüsselsystems, also des Content Decryption Module (CDM). Das ist genau das System, das beim Aufruf von navigator.requestMediaKeySystemAccess() angefragt und vom Browser erfolgreich bereitgestellt wurde.

Typische Werte sind in umgekehrter Domain-Schreibweise angegeben:

  • "org.w3.clearkey": Clear Key, das von der Spezifikation vorgeschriebene Referenzsystem ohne echten Kopierschutz
  • "com.widevine.alpha": Google Widevine (Chrome, Firefox, Edge, Android)
  • "com.microsoft.playready" bzw. "com.microsoft.playready.recommendation": Microsoft PlayReady (Edge, Windows)
  • "com.apple.fps" bzw. "com.apple.fps.1_0": Apple FairPlay Streaming (Safari)

In der Praxis braucht man keySystem vor allem, wenn ein Player nacheinander mehrere Schlüsselsysteme ausprobiert. Die Eigenschaft zeigt dann, welches System tatsächlich verfügbar war. Davon hängt ab, welcher Lizenzserver angesprochen wird, welches Initialisierungsdaten-Format (PSSH-Box) gilt und wie die Lizenzanfrage aufgebaut sein muss.

Rückgabewert

Typ
string
Beschreibung
Der Bezeichner des Schlüsselsystems, z. B. "com.widevine.alpha". Er entspricht dem Wert, der an navigator.requestMediaKeySystemAccess() übergeben wurde.

Beispiele

Unterstütztes Schlüsselsystem abfragen

const config = [{
  initDataTypes: ['cenc'],
  videoCapabilities: [{ contentType: 'video/mp4; codecs="avc1.42E01E"' }]
}];

const access = await navigator.requestMediaKeySystemAccess('org.w3.clearkey', config);
console.log(access.keySystem);
org.w3.clearkey

Erstes verfügbares DRM-System ermitteln und Lizenzserver wählen

const licenseServers = {
  'com.widevine.alpha': 'https://drm.example.com/widevine',
  'com.microsoft.playready': 'https://drm.example.com/playready',
  'org.w3.clearkey': 'https://drm.example.com/clearkey'
};

const config = [{
  initDataTypes: ['cenc'],
  videoCapabilities: [{ contentType: 'video/mp4; codecs="avc1.640028"' }],
  audioCapabilities: [{ contentType: 'audio/mp4; codecs="mp4a.40.2"' }]
}];

const findKeySystem = async () => {
  for (const system of Object.keys(licenseServers)) {
    try {
      return await navigator.requestMediaKeySystemAccess(system, config);
    } catch {
      // System nicht verfügbar, nächstes probieren
    }
  }
  throw new Error('Kein unterstütztes Schlüsselsystem gefunden');
};

const access = await findKeySystem();
const licenseUrl = licenseServers[access.keySystem];
console.log(`Nutze ${access.keySystem} mit ${licenseUrl}`);
Nutze com.widevine.alpha mit https://drm.example.com/widevine

Schlüsselsystem mit Konfiguration protokollieren und MediaKeys erzeugen

const video = document.querySelector('video');

const access = await navigator.requestMediaKeySystemAccess('org.w3.clearkey', [{
  initDataTypes: ['keyids'],
  videoCapabilities: [{ contentType: 'video/webm; codecs="vp9"' }]
}]);

console.log('System:', access.keySystem);
console.log('Konfiguration:', access.getConfiguration());

const mediaKeys = await access.createMediaKeys();
await video.setMediaKeys(mediaKeys);
System: org.w3.clearkey Konfiguration: { initDataTypes: ['keyids'], videoCapabilities: [...], ... }

// Wichtig · Fallstricke

  • Nur lesbar: Wenn man keySystem zuweist, hat das keine Wirkung (im Strict Mode gibt es einen TypeError). Um ein anderes System zu nutzen, muss man requestMediaKeySystemAccess() erneut aufrufen.
  • Sicherer Kontext: EME steht nur über HTTPS (oder localhost) zur Verfügung. In unsicheren Kontexten fehlt navigator.requestMediaKeySystemAccess oder wirft einen Fehler.
  • Browser-Unterschiede: Welche Schlüsselsysteme verfügbar sind, hängt von Browser, Betriebssystem und Hardware ab. Widevine fehlt in Safari, FairPlay gibt es nur bei Apple, PlayReady vor allem in Edge unter Windows. Nur Clear Key ist laut Spezifikation Pflicht.
  • Varianten-Bezeichner: Manche Systeme haben mehrere Bezeichner (z. B. com.microsoft.playready.recommendation mit Hardware-Sicherheitsstufen). Der zurückgegebene Wert entspricht exakt dem angefragten String. Vergleiche daher genau oder mit startsWith().
  • Datenschutz: Welche Schlüsselsysteme verfügbar sind, kann zum Fingerprinting genutzt werden. Manche Browser verlangen deshalb eine Nutzerzustimmung oder zeigen einen Hinweis an, wenn DRM aktiviert wird.
  • Iframes: In Iframes muss die Permissions Policy encrypted-media erlaubt sein (allow="encrypted-media").