Start · Sprachen · JavaScript · Referenz · new MediaKeyMessageEvent()

new MediaKeyMessageEvent()

Methode

Erzeugt ein neues <code>MediaKeyMessageEvent</code>-Objekt. Es transportiert eine Nachricht des CDM (z. B. eine Lizenzanfrage) an die Anwendung.

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

Signatur

new MediaKeyMessageEvent(type, options)

Beschreibung

Der Konstruktor MediaKeyMessageEvent() gehört zur Encrypted Media Extensions API (EME) und erzeugt ein Ereignisobjekt vom Typ MediaKeyMessageEvent. Normalerweise erzeugt der Browser solche Ereignisse selbst: Das Content Decryption Module (CDM) löst auf einer MediaKeySession ein message-Ereignis aus, sobald es eine Lizenzanfrage, eine Lizenzerneuerung oder eine Freigabebestätigung an den Lizenzserver schicken muss.

Selbst ruft man den Konstruktor vor allem in Unit-Tests, Mocks und beim Simulieren von DRM-Abläufen auf. So lässt sich die Lizenz-Logik eines Players (etwa das Weiterleiten von event.message an den Lizenzserver) prüfen, ohne dass ein echtes CDM oder geschützte Inhalte vorhanden sind.

Das Objekt erbt von Event und hat zusätzlich die schreibgeschützten Eigenschaften messageType und message. Beide werden über das options-Objekt gesetzt, und beide sind Pflichtangaben.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Name des Ereignisses, bei EME üblicherweise "message". Groß- und Kleinschreibung wird beachtet.
$options Pflicht MediaKeyMessageEventInit Objekt mit folgenden Feldern:
  • messageType (Pflicht): "license-request", "license-renewal", "license-release" oder "individualization-request"
  • message (Pflicht): ArrayBuffer mit den Nachrichtendaten des CDM
  • außerdem die üblichen EventInit-Felder bubbles, cancelable und composed (Standard jeweils false)

Rückgabewert

Typ
MediaKeyMessageEvent
Beschreibung
Ein neues Ereignisobjekt, dessen messageType und message aus den übergebenen Optionen stammen.

Beispiele

Ereignis erzeugen und Eigenschaften lesen

const payload = new TextEncoder().encode('{"kids":["abc123"]}').buffer;

const event = new MediaKeyMessageEvent('message', {
  messageType: 'license-request',
  message: payload
});

console.log(event.type);
console.log(event.messageType);
console.log(event.message.byteLength);
message license-request 19

Lizenz-Handler im Test mit einem simulierten Ereignis prüfen

// Handler, wie er in einem Player verwendet wird
const handleMessage = async (event, sendToServer) => {
  if (event.messageType !== 'license-request') return null;
  return sendToServer(event.message);
};

// Attrappe für den Lizenzserver
const fakeServer = async (buffer) => `Anfrage mit ${buffer.byteLength} Bytes erhalten`;

const testEvent = new MediaKeyMessageEvent('message', {
  messageType: 'license-request',
  message: new Uint8Array([1, 2, 3, 4]).buffer
});

const result = await handleMessage(testEvent, fakeServer);
console.log(result);
Anfrage mit 4 Bytes erhalten

Ereignis auf einem EventTarget auslösen

const fakeSession = new EventTarget();

fakeSession.addEventListener('message', (e) => {
  console.log(`Typ: ${e.messageType}, Bytes: ${e.message.byteLength}`);
});

fakeSession.dispatchEvent(new MediaKeyMessageEvent('message', {
  messageType: 'license-renewal',
  message: new ArrayBuffer(16)
}));
Typ: license-renewal, Bytes: 16

// Wichtig · Fallstricke

  • Pflichtfelder: Fehlen messageType oder message, oder ist message kein ArrayBuffer, wirft der Konstruktor einen TypeError. Typisierte Arrays (z. B. Uint8Array) übergibt man über ihre Eigenschaft .buffer.
  • Sicherer Kontext: EME ist nur über HTTPS bzw. localhost verfügbar. In unsicheren Kontexten oder in Node.js existiert MediaKeyMessageEvent nicht. Vorher mit 'MediaKeyMessageEvent' in window prüfen.
  • Ein selbst erzeugtes Ereignis hat isTrusted === false. Das CDM reagiert nicht darauf, echte Lizenzabläufe lassen sich damit also nicht auslösen, sondern nur simulieren.
  • Unter message liegen je nach Schlüsselsystem Binärdaten (z. B. Widevine, PlayReady) oder JSON (Clear Key). Man sollte sie unverändert an den Lizenzserver weiterleiten und nicht selbst auswerten.
  • Der Konstruktor wird in Chrome, Edge, Firefox und Safari unterstützt, die DRM-Systeme dahinter unterscheiden sich aber je nach Browser.