Widevine DRM

You can use the features of the Primetime Digital Rights Management (DRM) system to provide secure access to your video content. Alternatively, you can use third-party DRM solutions as an alternative to Adobe’s integrated solution.

Contact your Adobe representative for the most up-to-date information on the availability of third-party DRM solutions.

You can use the Android native Widevine DRM with HLS CMAF streams.


Widevine CENC CTR Scheme requires minimum Android version 4.4 (API Level 19).

Widevine CBCS Scheme requires minimum Android version 7.1 (API Level 25).

Set license server details

Call the following com.adobe.mediacore.drm.DRMManager API before loading MediaPlayer resource:

public static void setProtectionData(
String drm,
String licenseServerURL,
Map<String, String> requestProperties)


  • drm - "com.widevine.alpha" for Widevine.

  • licenseServerURL - The URL of the Widevine license server that receives license requests.

  • requestProperties - Contains extra headers to include in the outgoing license request.

For example, when using content packaged for Expressplay DRM, use the following code before playing:


Provide custom callback

Call the following com.adobe.mediacore.drm.DRMManager API before loading MediaPlayer resource.

public static void setMediaDrmCallback(
MediaDrmCallback callback)


  • callback - custom implementation of MediaDrmCallback to use instead of the default com.adobe.mediacore.drm.WidevineMediaDrmCallback.

For details, see Android TVSDK 3.11 API documentation.

Fetch PSSH Box of current loaded MediaPlayer resource

Call the following com.adobe.mediacore.drm.DRMManager API, preferably in custom callback implementation.

public static byte[] getPSSH()

API returns the Protection System Specific Header Box associated with the loaded Widevine media resource.

A valid box is available for short duration (between DRM instance creation and loading of keys). MediaDrmCallback callback executeKeyRequest() can use it to customize fetching license keys.


getPSSH() API is supported with single player instance only. Multiple players or Instant On feature should initialize serially to receive the correct box.

On this page