Hi,
Lately, a few users have faced crashes while playing movies with DRM content.
Here is how the app handles the DRM-stream:
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:
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
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.