我正在尝试用系外播放器实现我的android应用程序的离线播放,我使用的是蓝色媒体服务。
我可以播放,下载,获取离线widevine许可证和在离线播放没有问题。
当我需要授权令牌时,我的问题就出现了,当我添加令牌时,我的内容会按预期播放,但是当我想下载它时,它无法获取离线DRM许可证。
我在系外球员中使用这个功能
OfflineLicenseHelper offlineLicenseHelper = OfflineLicenseHelper.newWidevineInstance(
null,
false,
httpDataSourceFactory,
requestHeaders,
new DrmSessionEventListener.EventDispatcher());请记住,我根据文档设置null和false,因为azure媒体服务在清单中提供了自己的许可服务器。
这是函数在离线许可助手中的文档
/**
* Instantiates a new instance which uses Widevine CDM. Call {@link #release()} when the instance
* is no longer required.
*
* @param defaultLicenseUrl The default license URL. Used for key requests that do not specify
* their own license URL.
* @param forceDefaultLicenseUrl Whether to use {@code defaultLicenseUrl} for key requests that
* include their own license URL.
* @param optionalKeyRequestParameters An optional map of parameters to pass as the last argument
* to {@link MediaDrm#getKeyRequest}. May be null.
* @param eventDispatcher A {@link DrmSessionEventListener.EventDispatcher} used to distribute
* DRM-related events.
* @return A new instance which uses Widevine CDM.
* @see DefaultDrmSessionManager.Builder
*/
public static OfflineLicenseHelper newWidevineInstance(
String defaultLicenseUrl,
boolean forceDefaultLicenseUrl,
HttpDataSource.Factory httpDataSourceFactory,
@Nullable Map<String, String> optionalKeyRequestParameters,
DrmSessionEventListener.EventDispatcher eventDispatcher) 我确信我的标题传递的很好,因为我记录了所有的内容。
这是我要求的结果:
2020-10-13 09:44:19.143 29964-29964/com.videoplayer E/DownloadTracker: Failed to fetch offline DRM license
com.google.android.exoplayer2.drm.DrmSession$DrmSessionException: com.google.android.exoplayer2.drm.MediaDrmCallbackException: com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException: Response code: 401
at com.google.android.exoplayer2.drm.DefaultDrmSession.onError(DefaultDrmSession.java:518)
at com.google.android.exoplayer2.drm.DefaultDrmSession.onKeysError(DefaultDrmSession.java:513)
at com.google.android.exoplayer2.drm.DefaultDrmSession.onKeyResponse(DefaultDrmSession.java:476)
at com.google.android.exoplayer2.drm.DefaultDrmSession.access$100(DefaultDrmSession.java:57)
at com.google.android.exoplayer2.drm.DefaultDrmSession$ResponseHandler.handleMessage(DefaultDrmSession.java:557)这是一个授权问题,但我不确定是因为我传递了错误的数据还是因为蔚蓝的媒体服务?
如果它来自蔚蓝,那么我如何能够使用完全相同的令牌来播放流(如果我更改令牌就不能工作),而不使用完全相同的令牌获得离线许可呢?
任何回复都是有帮助的,谢谢。
发布于 2020-10-13 09:59:06
好吧,对于遇到同样问题的人,我通过将头直接设置到httpDataSourceFactory来解决这个问题,下面是修复它的代码:
httpDataSourceFactory.getDefaultRequestProperties().set("Authorization","Bearer=yourtokenhere");
OfflineLicenseHelper offlineLicenseHelper = OfflineLicenseHelper.newWidevineInstance(
null,
false,
httpDataSourceFactory,
requestHeaders,
new DrmSessionEventListener.EventDispatcher());
android.util.Log.d(TAG, "doInBackground rh : "+requestHeaders);不知道为什么请求头对我不起作用,但我很想知道为什么。
https://stackoverflow.com/questions/64332283
复制相似问题