Android Exoplayer DownloadTracker:无法获取离线 DRM 许可证

问题描述

我需要离线播放受 DRM 保护的内容

但是,在建立 DRM 会话后,抛出以下错误

无法获取离线 DRM 许可证 com.google.android.exoplayer2.drm.DrmSession$DrmSessionException: com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException:响应代码:403 在 com.google.android.exoplayer2.drm.DefaultDrmSession.onError(DefaultDrmSession.java:524) 在 com.google.android.exoplayer2.drm.DefaultDrmSession.onKeysError(DefaultDrmSession.java:519) 在 com.google.android.exoplayer2.drm.DefaultDrmSession.onKeyResponse(DefaultDrmSession.java:482) 在 com.google.android.exoplayer2.drm.DefaultDrmSession.access$100(DefaultDrmSession.java:58) 在 com.google.android.exoplayer2.drm.DefaultDrmSession$ResponseHandler.handleMessage(DefaultDrmSession.java:563) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:164) 在 android.os.HandlerThread.run(HandlerThread.java:65) 引起:com.google.android.exoplayer2.drm.MediaDrmCallbackException:com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException:响应代码:403 在 com.google.android.exoplayer2.drm.HttpMediaDrmCallback.executePost(HttpMediaDrmCallback.java:194) 在 com.google.android.exoplayer2.drm.HttpMediaDrmCallback.executeKeyRequest(HttpMediaDrmCallback.java:153) 在 com.google.android.exoplayer2.drm.DefaultDrmSession$RequestHandler.handleMessage(DefaultDrmSession.java:602) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:164) 在 android.os.HandlerThread.run(HandlerThread.java:65) 引起:com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException:响应代码:403 在 com.google.android.exoplayer2.ext.cronet.cronetDataSource.open(cronetDataSource.java:588) 在 com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:84) 在 com.google.android.exoplayer2.upstream.DataSourceInputStream.checkOpened(DataSourceInputStream.java:101) 在 com.google.android.exoplayer2.upstream.DataSourceInputStream.read(DataSourceInputStream.java:81) 在 com.google.android.exoplayer2.upstream.DataSourceInputStream.read(DataSourceInputStream.java:75) 在 com.google.android.exoplayer2.util.Util.toByteArray(Util.java:174) 在 com.google.android.exoplayer2.drm.HttpMediaDrmCallback.executePost(HttpMediaDrmCallback.java:177) 在 com.google.android.exoplayer2.drm.HttpMediaDrmCallback.executeKeyRequest(HttpMediaDrmCallback.java:153) 在 com.google.android.exoplayer2.drm.DefaultDrmSession$RequestHandler.handleMessage(DefaultDrmSession.java:602) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:164) 在 android.os.HandlerThread.run(HandlerThread.java:65)

解决方法

此错误表明 DRM 服务器以 403 响应进行响应。

此响应代码的意思是:

6.5.3。 403禁止

403 (Forbidden) 状态码表示服务器理解 请求,但拒绝授权。希望的服务器 公开请求被禁止的原因可以描述 响应负载中的原因(如果有)。

(https://tools.ietf.org/html/rfc7231#page-59)

因此,您的请求已正确发送到 DRM 服务器并且 DRM 服务器理解它,但它没有向您发送许可证作为响应。通常,DRM 服务器不会提供拒绝请求的详细信息,以尽量减少信息收集攻击。

DRM 服务器 403 响应的常见原因是请求中缺少身份验证信息,或者包含的身份验证信息不允许该用户查看该特定内容。

此时最好的方法通常是与您的 DRM 服务器提供商交谈,并与他们分享详细的请求和响应。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...