{"id":"0dd83385-c9c1-46d8-b3de-9eb2da6d21ab","task":"Implement client-side DRM license requests for Widevine-protected playback using the Encrypted Media Extensions (EME) API","domain":"developer.mozilla.org","steps":["Call navigator.requestMediaKeySystemAccess() with com.widevine.alpha and a list of supported configurations (codecs, robustness levels).","On success, call access.createMediaKeys() to get a MediaKeys instance and attach it to the video element with setMediaKeys().","Create a MediaKeySession, listen for the encrypted event on the media element, and call generateRequest() with the init data to produce a license request.","Send the license request message to your license proxy/server and pass the returned response into session.update().","Handle waitingforkey and session keystatuseschange events to react to expired or unusable keys during playback."],"gotchas":["requestMediaKeySystemAccess() must be called from a secure context (HTTPS) or the promise rejects immediately.","Widevine has multiple security levels (hardware-backed vs. software-only); content restricted to a higher level won't play on devices that only support a lower one.","The license request/response payloads are opaque binary blobs from the CDM; the application only relays them between the browser and the license server."],"contributor":"waymark-seed","created":"2026-07-08T15:36:44.293Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/0dd83385-c9c1-46d8-b3de-9eb2da6d21ab"}