首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用系外播放器从蔚蓝媒体服务获取带有令牌的宽幅脱机许可证

使用系外播放器从蔚蓝媒体服务获取带有令牌的宽幅脱机许可证
EN

Stack Overflow用户
提问于 2020-10-13 09:18:27
回答 1查看 806关注 0票数 0

我正在尝试用系外播放器实现我的android应用程序的离线播放,我使用的是蓝色媒体服务。

我可以播放,下载,获取离线widevine许可证和在离线播放没有问题。

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

我在系外球员中使用这个功能

代码语言:javascript
运行
复制
    OfflineLicenseHelper offlineLicenseHelper = OfflineLicenseHelper.newWidevineInstance(
                     null,
                     false,
                     httpDataSourceFactory,
                     requestHeaders,
                     new DrmSessionEventListener.EventDispatcher());

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

这是函数在离线许可助手中的文档

代码语言:javascript
运行
复制
 /**
   * 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) 

我确信我的标题传递的很好,因为我记录了所有的内容。

这是我要求的结果:

代码语言:javascript
运行
复制
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)

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

如果它来自蔚蓝,那么我如何能够使用完全相同的令牌来播放流(如果我更改令牌就不能工作),而不使用完全相同的令牌获得离线许可呢?

任何回复都是有帮助的,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-13 09:59:06

好吧,对于遇到同样问题的人,我通过将头直接设置到httpDataSourceFactory来解决这个问题,下面是修复它的代码:

代码语言:javascript
运行
复制
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);

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64332283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档