# Failed to instantiate drm object

**URL:** <https://community.bitmovin.com/t/failed-to-instantiate-drm-object/2759>\
**Category:** Support\
**Tags:** bitmovin-player, drm, android, bitmovin\
**Created:** [March 29, 2024, 9:17am UTC](https://community.bitmovin.com/t/failed-to-instantiate-drm-object/2759 "2024-03-29T09:17:26Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![puthea.mam](https://sea1.discourse-cdn.com/flex015/user_avatar/community.bitmovin.com/puthea.mam/32/877_2.png) [@puthea.mam](https://community.bitmovin.com/u/puthea.mam)\
**Post date:** [March 29, 2024, 9:17am UTC](https://community.bitmovin.com/t/failed-to-instantiate-drm-object/2759/1 "2024-03-29T09:17:26Z")

</div>

Hi,

Lately, a few users have faced crashes while playing movies with DRM content.  
Here is how the app handles the DRM-stream:

```auto
fun createSourceConfig(mainStreamUrl: String, drmUrl: String): : SourceConfig {
       return SourceConfig(mainStreamUrl, SourceType.Dash).apply {
            val widevineDrm = WidevineConfig(drmUrl)
            val header: MutableMap<String?, String?> = HashMap()
            header["utoken-drm"] = "wv"
            widevineDrm.httpHeaders = header
            this.drmConfig = widevineDrm
        }
}

```

It works fine so far and only a few users experienced the crash.  
Bitmovin player version 3.55.0 → 3.60.0  
Impacted devices:

| Brand | Model | Android Version |
| --- | --- | --- |
| (TV) D9 Manufacture Diyomate | D9 PRO 5G | Android 11.1 |
| (TV) Google TV | Chromecast Google TV (HD) | Android 12 |
| Samsung | Galaxy Note10+ 5G, Galaxy S21 Ultra 5G | Android 9 |
| Huawei | P30 Pro | Android 9 |
| Asus | ROG Phone | Android 9 |

This is the full crash logs:

```auto
com.bitmovin.player.core.y.d.acquireExoMediaDrm
Fatal Exception: androidx.media3.exoplayer.drm.UnsupportedDrmException
android.media.UnsupportedSchemeException: Failed to instantiate drm object.

Caused by android.media.UnsupportedSchemeException: Failed to instantiate drm object.
       at android.media.MediaDrm.native_setup(MediaDrm.java)
       at android.media.MediaDrm.<init>(MediaDrm.java:223)
       at androidx.media3.exoplayer.drm.FrameworkMediaDrm.<init>(FrameworkMediaDrm.java:117)
       at androidx.media3.exoplayer.drm.FrameworkMediaDrm.newInstance(FrameworkMediaDrm.java:105)
       at com.bitmovin.player.core.b0.d.acquireExoMediaDrm(SourceFile:1)
       at androidx.media3.exoplayer.drm.DefaultDrmSessionManager.prepare(DefaultDrmSessionManager.java:402)
       at androidx.media3.exoplayer.dash.DashMediaSource.prepareSourceInternal(DashMediaSource.java:572)
       at androidx.media3.exoplayer.source.BaseMediaSource.prepareSource(BaseMediaSource.java:249)
       at com.bitmovin.player.core.i0.m.prepareSource(SourceFile:8)
       at androidx.media3.exoplayer.source.CompositeMediaSource.prepareChildSource(CompositeMediaSource.java:122)
       at androidx.media3.exoplayer.source.WrappingMediaSource.prepareChildSource(WrappingMediaSource.java:240)
       at androidx.media3.exoplayer.source.MaskingMediaSource.createPeriod(MaskingMediaSource.java:127)
       at androidx.media3.exoplayer.MediaSourceList.createPeriod(MediaSourceList.java:338)
       at androidx.media3.exoplayer.MediaPeriodHolder.createMediaPeriod(MediaPeriodHolder.java:451)
       at androidx.media3.exoplayer.MediaPeriodHolder.<init>(MediaPeriodHolder.java:116)
       at androidx.media3.exoplayer.MediaPeriodQueue.enqueueNextMediaPeriodHolder(MediaPeriodQueue.java:193)
       at androidx.media3.exoplayer.ExoPlayerImplInternal.maybeUpdateLoadingPeriod(ExoPlayerImplInternal.java:2125)
       at androidx.media3.exoplayer.ExoPlayerImplInternal.updatePeriods(ExoPlayerImplInternal.java:2112)
       at androidx.media3.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:1056)
       at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:539)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:193)
       at android.os.HandlerThread.run(HandlerThread.java:65)

Caused by android.media.UnsupportedSchemeException
Failed to instantiate drm object.
Caused by android.media.UnsupportedSchemeException: Failed to instantiate drm object.
       at android.media.MediaDrm.native_setup(MediaDrm.java)
       at android.media.MediaDrm.<init>(MediaDrm.java:223)
       at androidx.media3.exoplayer.drm.FrameworkMediaDrm.<init>(FrameworkMediaDrm.java:117)
       at androidx.media3.exoplayer.drm.FrameworkMediaDrm.newInstance(FrameworkMediaDrm.java:105)
       at com.bitmovin.player.core.b0.d.acquireExoMediaDrm(SourceFile:1)
       at androidx.media3.exoplayer.drm.DefaultDrmSessionManager.prepare(DefaultDrmSessionManager.java:402)
       at androidx.media3.exoplayer.dash.DashMediaSource.prepareSourceInternal(DashMediaSource.java:572)
       at androidx.media3.exoplayer.source.BaseMediaSource.prepareSource(BaseMediaSource.java:249)
       at com.bitmovin.player.core.i0.m.prepareSource(SourceFile:8)
       at androidx.media3.exoplayer.source.CompositeMediaSource.prepareChildSource(CompositeMediaSource.java:122)
       at androidx.media3.exoplayer.source.WrappingMediaSource.prepareChildSource(WrappingMediaSource.java:240)
       at androidx.media3.exoplayer.source.MaskingMediaSource.createPeriod(MaskingMediaSource.java:127)
       at androidx.media3.exoplayer.MediaSourceList.createPeriod(MediaSourceList.java:338)
       at androidx.media3.exoplayer.MediaPeriodHolder.createMediaPeriod(MediaPeriodHolder.java:451)
       at androidx.media3.exoplayer.MediaPeriodHolder.<init>(MediaPeriodHolder.java:116)
       at androidx.media3.exoplayer.MediaPeriodQueue.enqueueNextMediaPeriodHolder(MediaPeriodQueue.java:193)
       at androidx.media3.exoplayer.ExoPlayerImplInternal.maybeUpdateLoadingPeriod(ExoPlayerImplInternal.java:2125)
       at androidx.media3.exoplayer.ExoPlayerImplInternal.updatePeriods(ExoPlayerImplInternal.java:2112)
       at androidx.media3.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:1056)
       at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:539)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:193)
       at android.os.HandlerThread.run(HandlerThread.java:65)

```

Crash logs on **Chromecast Google TV**

```auto
Fatal Exception: androidx.media3.exoplayer.drm.UnsupportedDrmException: android.media.UnsupportedSchemeException: Failed to instantiate drm object: NO_INIT
============================== Beginning of DRM Plugin Log ==============================
  02-20 21:41:31.207 I found instance=castkey version=android.hardware.drm@1.3::IDrmFactory
  02-20 21:41:31.207 I found instance=clearkey version=android.hardware.drm@1.4::IDrmFactory
  02-20 21:41:31.207 I found instance=netflix version=android.hardware.drm@1.4::IDrmFactory
  02-20 21:41:31.207 I found instance=playready version=android.hardware.drm@1.4::IDrmFactory
  02-20 21:41:31.207 I found instance=widevine version=android.hardware.drm@1.4::IDrmFactory
  02-20 21:41:51.645 W Cannot cast android.hardware.drm@1.0::IDrmPlugin obj to android.hardware.drm@1.4::IDrmPlugin plugin
  02-20 21:41:51.787 W Cannot cast android.hardware.drm@1.0::IDrmPlugin obj to android.hardware.drm@1.4::IDrmPlugin plugin
  02-20 21:42:36.983 E uuid=[79d64ace edef8ba9] No supported hal instance found
============================== End of DRM Plugin Log ==============================
       at androidx.media3.exoplayer.drm.FrameworkMediaDrm.newInstance(FrameworkMediaDrm.java:107)
       at com.bitmovin.player.core.y.d.acquireExoMediaDrm(SourceFile:1)
       at androidx.media3.exoplayer.drm.DefaultDrmSessionManager.prepare(DefaultDrmSessionManager.java:396)
       at androidx.media3.exoplayer.dash.DashMediaSource.prepareSourceInternal(DashMediaSource.java:507)
       at androidx.media3.exoplayer.source.BaseMediaSource.prepareSource(BaseMediaSource.java:232)
       at com.bitmovin.player.core.f0.m.prepareSource(SourceFile:8)
       at androidx.media3.exoplayer.source.CompositeMediaSource.prepareChildSource(CompositeMediaSource.java:122)
       at androidx.media3.exoplayer.source.WrappingMediaSource.prepareChildSource(WrappingMediaSource.java:214)
       at androidx.media3.exoplayer.source.MaskingMediaSource.prepareSourceInternal(MaskingMediaSource.java:84)
       at androidx.media3.exoplayer.source.WrappingMediaSource.prepareSourceInternal(WrappingMediaSource.java:67)
       at androidx.media3.exoplayer.source.BaseMediaSource.prepareSource(BaseMediaSource.java:232)
       at androidx.media3.exoplayer.MediaSourceList.prepareChildSource(MediaSourceList.java:452)
       at androidx.media3.exoplayer.MediaSourceList.prepare(MediaSourceList.java:293)
       at androidx.media3.exoplayer.ExoPlayerImplInternal.prepareInternal(ExoPlayerImplInternal.java:757)
       at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:516)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loopOnce(Looper.java:201)
       at android.os.Looper.loop(Looper.java:288)
       at android.os.HandlerThread.run(HandlerThread.java:67)

```

I can not identify which movie triggered this issue. Could I prevent the crash using **try catch**? so I can silently send the crash report to the Firebase log for further investigation. Please let me know if you need more information.

---

<div class="post-metadata">

**Author:** ![Lukas](https://sea1.discourse-cdn.com/flex015/user_avatar/community.bitmovin.com/lukas/32/393_2.png) [@Lukas](https://community.bitmovin.com/u/Lukas)\
**Post date:** [April 2, 2024, 11:16am UTC](https://community.bitmovin.com/t/failed-to-instantiate-drm-object/2759/2 "2024-04-02T11:16:06Z")

</div>

Hi @puthea.mam,

thanks for reaching out. As far as I can see it at the moment there is no way of catching the mentioned exception.

We are tracking the issue internally and will update here once we have additional information available.

In the mean time you can try checking for supported DRM scheme using code similar to the following in order to prevent the crash.

```auto
MediaDrm.isCryptoSchemeSupported(/* DRM scheme, e.g. widevine */)

```

Sorry that I don’t have any better news as of now.

Best,  
Lukas
