ExoPlayer icon indicating copy to clipboard operation
ExoPlayer copied to clipboard

ERROR_DRM_GENERIC_PLUGIN occurs when playing video

Open ogawa-ma opened this issue 3 years ago • 11 comments

■ Question When I try to play Widevine DASH (L1) on OnePlus 10T 5G, I get ERROR_DRM_GENERIC_PLUGIN. I believe that this is caused by the fact that L1 is not available on the OnePlus 10T 5G. Is my understanding correct?

Non-fatal Exception: com.google.android.exoplayer2.ExoPlaybackException: Unexpected runtime error
       at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:612)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loopOnce(Looper.java:238)
       at android.os.Looper.loop(Looper.java:349)
       at android.os.HandlerThread.run(HandlerThread.java:67)

Caused by android.media.MediaDrm$MediaDrmStateException: Failed to get provision request: ERROR_DRM_GENERIC_PLUGIN
============================== Beginning of DRM Plugin Log ==============================
  10-31 11:09:06.253 I found instance=clearkey [email protected]::IDrmFactory
  10-31 11:09:06.253 I found instance=wfdhdcp [email protected]::IDrmFactory
  10-31 11:09:06.253 I found instance=widevine [email protected]::IDrmFactory
  10-31 11:09:06.623 I [oemcrypto_adapter_dynamic.cpp(834):Initialize] Level 3 Build Info (v16): OEMCrypto Level3 Code 22594 May 28 2021 16:59:07
  10-31 11:09:06.624 I [(0):] Level3 Library 22594 May 28 2021 16:59:07
  10-31 11:09:06.628 I [oemcrypto_adapter_dynamic.cpp(848):Initialize] L3 Initialized. Trying L1.
  10-31 11:09:06.698 W [oemcrypto_adapter_dynamic.cpp(1042):LoadLevel1] Could not load L1 _oecc109.
  10-31 11:09:06.698 W [oemcrypto_adapter_dynamic.cpp(1043):LoadLevel1] Could not load L1 _oecc110.
  10-31 11:09:06.698 W [oemcrypto_adapter_dynamic.cpp(1047):LoadLevel1] Could not load L1 _oecc113.
  10-31 11:09:06.698 W [oemcrypto_adapter_dynamic.cpp(1048):LoadLevel1] Could not load L1 _oecc114.
  10-31 11:09:06.698 I [oemcrypto_adapter_dynamic.cpp(870):Initialize] Level 1 Build Info (v16): Build Information: API_Version: 16.4 LibOEMCrypto_Version: 1.55 TA_Version: 1.103
  10-31 11:09:06.701 I [usage_table_header.cpp(204):RestoreTable] Found usage table to restore: entry_count = 0
  10-31 11:09:06.757 I [cdm_engine.cpp(967):GetProvisioningRequest] cert_type = Widevine
  10-31 11:09:06.773 E [content_key_session.cpp(33):GenerateDerivedKeys] OEMCrypto_GenerateDerivedKeys failed: status = 25
  10-31 11:09:06.773 E [crypto_session.cpp(109):MapOEMCryptoResult] Mapping OEMCrypto result: crypto_session_method = GenerateDerivedKeys, result = 25
  10-31 11:09:06.773 E [certificate_provisioning.cpp(248):GetProvisioningRequestInternal] Failed to prepare provisioning request: status = 342
============================== End of DRM Plugin Log ==============================
       at android.media.MediaDrm.getProvisionRequestNative(MediaDrm.java)
       at android.media.MediaDrm.getProvisionRequest(MediaDrm.java:1742)
       at com.google.android.exoplayer2.drm.FrameworkMediaDrm.getProvisionRequest(FrameworkMediaDrm.java:237)
       at com.google.android.exoplayer2.drm.DefaultDrmSession.provision(DefaultDrmSession.java:228)
       at com.google.android.exoplayer2.drm.DefaultDrmSessionManager$ProvisioningManagerImpl.provisionRequired(DefaultDrmSessionManager.java:867)
       at com.google.android.exoplayer2.drm.DefaultDrmSession.openInternal(DefaultDrmSession.java:381)
       at com.google.android.exoplayer2.drm.DefaultDrmSession.acquire(DefaultDrmSession.java:311)
       at com.google.android.exoplayer2.drm.DefaultDrmSessionManager.createAndAcquireSession(DefaultDrmSessionManager.java:782)
       at com.google.android.exoplayer2.drm.DefaultDrmSessionManager.createAndAcquireSessionWithRetry(DefaultDrmSessionManager.java:683)
       at com.google.android.exoplayer2.drm.DefaultDrmSessionManager.acquireSession(DefaultDrmSessionManager.java:565)
       at com.google.android.exoplayer2.drm.DefaultDrmSessionManager.acquireSession(DefaultDrmSessionManager.java:511)
       at com.google.android.exoplayer2.source.SampleQueue.onFormatResult(SampleQueue.java:917)
       at com.google.android.exoplayer2.source.SampleQueue.peekSampleMetadata(SampleQueue.java:686)
       at com.google.android.exoplayer2.source.SampleQueue.read(SampleQueue.java:412)
       at com.google.android.exoplayer2.source.chunk.ChunkSampleStream.readData(ChunkSampleStream.java:397)
       at com.google.android.exoplayer2.BaseRenderer.readSource(BaseRenderer.java:406)
       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readSourceOmittingSampleData(MediaCodecRenderer.java:934)
       at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:765)
       at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:982)
       at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:486)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loopOnce(Looper.java:238)
       at android.os.Looper.loop(Looper.java:349)
       at android.os.HandlerThread.run(HandlerThread.java:67)

ExoPlayer version used:2.16.1 Device:OnePlus 10T 5G Android version:12

ogawa-ma avatar Oct 31 '22 09:10 ogawa-ma

The device loads L1 OEMCrypto successfully. It just has a failure when trying to provision. Will follow up with LGE as to why this is happening.

How reproducible is this? Can you quantify (as a %) how many LG 10T 5G devices experience this failure? On those devices, is it always reproducible or occasionally(Can you quantify as a %)? Also do let us know if you are able to repro on a local device.

Internal ref: 257073407

rrfrias avatar Nov 02 '22 18:11 rrfrias

@rrfrias Thanks for the confirmation. First, as a premise, we have published an application that uses ExoPlayer. A user using that application inquired about an error and could not play the video, so we checked the logs and found the error described in this issue.

How reproducible is this? Can you quantify (as a %) how many LG 10T 5G devices experience this failure? On those devices, is it always reproducible or occasionally(Can you quantify as a %)? Also do let us know if you are able to repro on a local device.

Reproducibility was 100% and no improvement was made after trying to restart the device. We do not know if this occurs on all OnePlus 10T 5Gs as we have one user using this device. Also we do not have this device and therefore cannot confirm.

ogawa-ma avatar Nov 04 '22 02:11 ogawa-ma

Thanks. Will follow up with OnePlus. Might it be possible to get bugreport from the user? This is in case they are unable to reproduce.

rrfrias avatar Nov 04 '22 07:11 rrfrias

@rrfrias I have contacted you to get bug reports from users, so please be patient.

ogawa-ma avatar Nov 04 '22 07:11 ogawa-ma

Might it be possible to share your app with us so that OnePlus can test/reproduce? Mail [email protected] with Issue #10732 in the subject line, with repro steps and a test URL if appropriate.

Also device build information will be helpful.

Internal ref: 257073407, 259303911

rrfrias avatar Nov 15 '22 22:11 rrfrias

@rrfrias Sorry for the late reply. Please wait a little while as we prepare the application and video.

Also, we requested a bug report from the user who inquired about it, but since we have not received a response, we may not be able to provide a bug report.

ogawa-ma avatar Nov 21 '22 08:11 ogawa-ma

@rrfrias Sorry I made you wait. I have sent the app to [email protected].

ogawa-ma avatar Nov 22 '22 03:11 ogawa-ma

Thanks for the app. I have shared this information with OnePlus and am waiting on them to try and reproduce.

rrfrias avatar Nov 30 '22 02:11 rrfrias

Still waiting on OnePlus to investigate.

rrfrias avatar Feb 08 '23 01:02 rrfrias

Still waiting on OnePlus. Investigating with Qualcomm as well.

Internal ref: http://b/272122718

rrfrias avatar Mar 07 '23 23:03 rrfrias

We are still investigating failure causes internally.

rrfrias avatar Apr 18 '23 21:04 rrfrias