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 GTS" section. These assets test various configurations of the Key Control Block (KCB) with various protections and expirations: WV: HDCP not specified (KCB: Observe_HDCP=false) WV: HDCP not required (KCB: Observe_HDCP=true && HDCP=not required && DataPath=normal) WV: HDCP required (KCB: Observe_HDCP=true && HDCP=required && DataPath=normal) WV: Secure video path required (KCB: Observe_HDCP=true && HDCP=not required && DataPath=secure) WV: HDCP + secure video path required (KCB: Observe_HDCP=true && HDCP=required && DataPath=secure) WV: 30s license duration (KCB: test timer expiration) Notes: - The demo app shows up in the launcher as "ExoPlayer" - The demo app contains a crude adaptive algorithm. It starts at 144p 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, 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. - If your device is running KLP, the player will attempt to hook into the new AudioTrack.getTimestamp API to do A/V sync. It will fall back to how it used to do things if the API isn't available. - Exoplayer will retrieve a new license when playing "WV: 30s license duration", after the license duration has expired. Integrators should verify by means other than visual inspection that license duration is being enforced.