ExoPlayerDemo.apk can be used to do end-to-end verification of Modular DRM. To install, side load ExoPlayerDemo.apk app to your device: adb install ExoPlayerDemo.apk To run, launch ExoPlayer, then choose the clip to play. The Widevine-encrypted DASH CENC assets are in the "WIDEVINE DASH (policy tests)" section. These assets test various configurations of the Key Control Block (KCB) with various protections and expirations: Security Level Checks: SW secure crypto (SW crypto required) SW secure decode (SW crypto and decode required) HW secure crypto (HW crypto required) HW secure decode (HW crypto and decode required) HW secure all (HW secure video path required (L1)) License Timer Policy: 30s license (timer stops at 30 seconds, playback should stop) HDCP Policies HDCP not required (KCB: Observe_HDCP=true && HDCP=not required && DataPath=normal) HDCP 1.0 required (KCB: Observe_HDCP=true && HDCP=required && DataPath=normal) HDCP 2.0 required (Requires HDCP 2.0+ to play) HDCP 2.1 required (Requires HDCP 2.1+ to play) HDCP 2.2 required (Requires HDCP 2.2+ to play) HDCP no digital output (Output to connected devices not allowed) There are also Widevine-encrypted DASH CENC assets for various container formats as well. Widevine DASH (MP4, H264): Contains cenc and cbcs encryption samples Widevine DASH (WebM, VP9): Contains full-sample and sub-sample cenc samples Widevine DASH (MP4, H265): Contains cenc samples only Notes: - The demo app shows up in the launcher as "ExoPlayer" - The demo app contains a crude adaptive algorithm. It starts at 480p and will not switch up for 15 seconds. This is expected (and has the benefit of more or less guaranteeing there's at least one switch during any playback beyond this length). - If your device is running KLP or later, and the decoder claims to support adaptive, then ExoPlayer will do seamless resolution switching. If the decoder doesn't claim this then you'll still get the old nearly-seamless-switch (codec release/re-acquire) behavior. - The player will attempt to hook into the AudioTrack.getTimestamp API to do A/V sync. It will fall back to a legacy approach if the API isn't available.