gpt4 book ai didi

android - 使用 exoplayer 从 azure 媒体服务获取 Widevine 离线许可证

转载 作者:行者123 更新时间:2023-12-03 00:58:14 25 4
gpt4 key购买 nike

我正在尝试使用 exoplayer 为我的 Android 应用程序实现离线播放,我正在使用 azure 媒体服务来执行此操作。

我可以毫无问题地播放、下载、获取离线 Widevine 许可证并离线播放。

当我需要授权 token 时,我的问题就出现了,当我添加 token 时,我的内容按预期播放,但当我想下载它时,它无法获取脱机 DRM 许可证。

我在 exoplayer 中使用此函数来执行此操作

    OfflineLicenseHelper offlineLicenseHelper = OfflineLicenseHelper.newWidevineInstance(
null,
false,
httpDataSourceFactory,
requestHeaders,
new DrmSessionEventListener.EventDispatcher());

请记住,我根据文档设置了 null 和 false,因为 azure 媒体服务在 list 中提供了自己的许可证服务器。

这是离线许可证帮助程序中的函数文档

 /**
* 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)

我确信我的 header 传递得很好,因为我正在记录所有内容。

这是我请求的结果:

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)

这是一个授权问题,但我不确定是因为我传递了错误的数据还是因为azure媒体服务?

如果它来自azure,那么我如何能够使用完全相同的 token 播放流(如果我更改 token ,则不起作用)并且不会收到具有完全相同 token 的离线许可证?

任何回复都会有帮助,谢谢。

最佳答案

好吧,对于遇到同样问题的任何人,我通过将 header 直接设置到 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);

不确定为什么请求 header 对我不起作用,但我很想知道为什么。

关于android - 使用 exoplayer 从 azure 媒体服务获取 Widevine 离线许可证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64332283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com