Is there a way to register a new DRM key system to be recognized by browsers eg. Chrome?

648 Views Asked by At

I'd like to create a new kind of DRM system, as sibbling of org.w3.clearkey, com.widevine.alpha or others. actually Im still figuring out whether it's possible and how to implement it.

The ultimate goal is to have a new DRM system that can lookup for license through blockchain, indeed, the part about key exchange should be hidden from external world. But this assumes I have a smart contract that stores privately these decryption keys related to each media content.

So far, I've been able to only implement clearkey but it doesn't fit my need as decryption keys are exposed in player side. Relying on existing DRM system like Widevine, Playready and others are not an option at all.

I've been searching for another solution unluckily so far, I've asked chatgbt also but the reply is redodant as it suggest to just register the new key with navigator.requestMediaKeySystemAccess('my-key-system', [{initDataTypes: ['cenc']}]) but this will throw an exception DOMException: Unsupported keySystem or supportedConfigurations.

is there any guideline about how to make such an implementation? critical points are:

  • be able to create a new DRM system independant from existing ones, with some specific flows for license acquisition and keys exchange with the media controller
  • be able to run it on any browser (even with some few additional actions from user)
  • media controller should be able to recognize the DRM system form manifest
<ContentProtection schemeIdUri="urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" value="<The DRM Sys Name>">
2

There are 2 best solutions below

4
Mick On

You may already have seen it but as you are targeting browser's the best place to start is likely the HTML5 Encrypted Media Extension spec:

It includes this high level architecture diagram:

enter image description here

The component circled is the Content Decryption Module and this is probably going to be your biggest challenge - each DRM system is usually associated with a particular CDM and that CDM is tightly integrated with the browser.

Browser providers usually have a preferred DRM, generally because a single organisation or company builds both the browser and also a specific DRM system. Integrating a new CDM into an existing browser is not trivial and generally requires cooperation from the browser vendor.

3
Vitaly Ivanov On

TLDR: not gonna happen, especially "be able to run it on any browser".

The best you can do is cram your own DRM/CDM into Chromium and distribute this custom build, but just "navigator.requestMediaKeySystemAccess('org.me.superdrm'..." won't magically work with any existing browser as they won't know anything about your DRM, obviously.

It's all proprietary black boxes (I'm mean WV, PR, FPS) with the absolute minimum of interoperability, namely AES-128 encryption, that's the only thing they have in common. So if you come up with something new, the browser won't even know how to request a license/decryption key 'cause this part is purposefully not standardized in any shape or form