Embed a WRMHEADER (PlayReady Object) in the DASH MPD or HLS manifest so the player knows the license acquisition URL
On the 'message' event from MediaKeys, extract the challenge bytes; the client sends these as the body of a POST request to your license server with Content-Type text/xml; charset=utf-8 and the SOAPAction header set to the PlayReady AcquireLicense action URI
Your license server validates the challenge, applies business rules (rental window, play count), and returns a SOAP envelope containing the license
Pass the binary license response back to the EME session via update() to load the decryption keys
Test with the Microsoft PlayReady test server before wiring to production to confirm header and challenge format
Known gotchas
PlayReady license requests are SOAP-wrapped XML, not raw binary like Widevine — a license proxy must preserve the Content-Type and SOAPAction headers exactly or the server will reject the request
PlayReady 4.x introduces non-persistent licenses for browser use; ensure your license server returns a license with the correct right type to match your content protection policy
The PSSH box version and system ID (9a04f079-9840-4286-ab92-e65be0885f95) must be present in the init segment or the CDM will not fire a license request
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp