Search code examples
html5-videodrmshaka

Can Shaka Player DRM be configured without license server for ClearKey?


I am trying to configure shaka player with ClearKeys Like

player.configure({
  drm: {
    clearKeys: {
      'deadbeefdeadbeefdeadbeefdeadbeef': '18675309186753091867530918675309'
    }
  }
});

As specified in the documentation. However, I don't have a valid license server for this.

If I configure without "servers" object in DRM

drm: {
    servers: {
      'org.w3.clearkey': 'http://foo.bar/drm/clearkey'
    }
  }

The shaka player gives error code 6012

Error code 6012 object I {severity: 2, category: 6, code: 6012, data: Array(1), handled: false}

So is it possible to configure shaka player to play DASH with clearkeys without a licesne server?

Linked Github issue - https://github.com/google/shaka-player/issues/2434


Solution

  • Clearkeys can be used in two ways:

    • You can explicitly specify the keys in your player configuration
    • you can provide a server URL for a server which recognises and will server clearkefs in response to a license request

    The first case does not require a license server.

    In the example you show above from the Shaka documentation, the first entry is the key_id and the second the key itself in case that is not clear:

    player.configure({
      drm: {
        // First value is the key-id, second value is the encryption key
        clearKeys: {
          'deadbeefdeadbeefdeadbeefdeadbeef': '18675309186753091867530918675309'
        }
      }
    });
    

    The content needs to be actually encrypted with this encryption key itself for the decryption and playback to work.

    As an aside, while Clearkeys was created to help with testing and debugging DRM, as it is not used in 'real' scenarios it maybe does not get the same attention as other DRM's. It also is obviously not using the same code path as the actual DRM's in the devices. If your main purpose is testing for a system which will use a 'real' DRM eventually then you may find it is easier to test and debug with a test Widevine, Playready etc stream where you have the URL and manifest information.