Skip to content

ClearKey Decryption Error #4075

@adamhewitt627

Description

@adamhewitt627

Issue description

When attempting to play a protected file with DRM encryption, I get the a decryption error. I am able to play successfully except when the base64 key contains a /. I have tried all of the following in my offline key:

  • "...\"k\":\"sqvlkIJdgicc/AYGBjyBmQ\"..."
  • "...\"k\":\"sqvlkIJdgicc\\/AYGBjyBmQ\"..."
  • "...\"k\":\"sqvlkIJdgicc_AYGBjyBmQ\"..."

All three produce the following error: ('+'/'-' seems to work fine)

E/ExoPlayerImplInternal: Renderer error.
    com.google.android.exoplayer2.ExoPlaybackException
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.feedInputBuffer(MediaCodecRenderer.java:765)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:568)
        at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:518)
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:301)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:154)
        at android.os.HandlerThread.run(HandlerThread.java:61)
    Caused by: android.media.MediaCodec$CryptoException: Decryption Error
        at android.media.MediaCodec.native_queueSecureInputBuffer(Native Method)
        at android.media.MediaCodec.queueSecureInputBuffer(MediaCodec.java:2480)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.feedInputBuffer(MediaCodecRenderer.java:756)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:568) 
        at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:518) 
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:301) 
        at android.os.Handler.dispatchMessage(Handler.java:98) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.os.HandlerThread.run(HandlerThread.java:61) 

Reproduction steps

final byte[] keyResponse = "{\"type\":\"temporary\",\"keys\":[{\"kid\":\"nrQFDeRLSAKTLifXUIPiZg\",\"k\":\"sqvlkIJdgicc\\/AYGBjyBmQ\",\"kty\":\"oct\"}]}".getBytes("UTF-8");

DrmSessionManager<FrameworkMediaCrypto> drmSessionManager = DefaultDrmSessionManager.newFrameworkInstance(C.CLEARKEY_UUID, new LocalMediaDrmCallback(keyResponse), new HashMap<String, String>(), null, null);

Version of ExoPlayer being used

ExoPlayer 2.7.0

Device(s) and version(s) of Android being used

6.0.0 Visual Studio Emulator
7.1.1 Nexus 6

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions