当前位置: 首页 > 知识库问答 >
问题:

如何在Cast Receiver Player中续订过期的DRM许可证?

佟翰林
2023-03-14

我基于Google Cast应用程序框架开发定制Cast接收器应用程序接收器应用程序负责播放Widevine加密流。我们的支持解决方案要求在许可证请求中向预授权头添加DRM令牌。我需要执行几个授权请求来检索DRM令牌。我假设检索DRM令牌的最佳位置是使用消息拦截器:

this.playerManager_.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD, (loadRequestData) => {
  var media = loadRequestData.media;
  var customData = media.customData;
  var licenseUrl = customData.licenseUrl || null;
  var contentId = media.contentId;
  var cdn = customData.cdn || null;
  return this.getOriginMediaURL(contentId, cdn, PlayerApiImp)
  .then(playbackURL => {
    loadRequestData.media.contentId = playbackURL;
    loadRequestData.media.customData.contentUrl = contentId;
    return this.getDRMToken(customData);
  })
  .then(drmToken => {
    this.preAuthToken = drmToken
    this.playbackConfig_.licenseUrl = licenseUrl;
    return loadRequestData
  })
  .catch(error => {
    this.log_({'ERROR': error});
    return loadRequestData;
  });;
});

然后CAST Player自动调用licenseRequestHandler,我可以轻松地将所需的DRM令牌添加到许可证请求的标题中:

this.playbackConfig_.licenseRequestHandler = requestInfo => {
  if (this.preAuthToken) {
    requestInfo.headers = {};
    requestInfo.headers['PreAuthorization'] = this.preAuthToken;
  }
};

所以我的问题是:

  1. Cast Receiver API是否支持许可证续订?receiver会触发CAST API中的哪些回调来通知会话已过期?我没有收到任何消息,只收到错误:(播放停止。

共有2个答案

史绍晖
2023-03-14

阅读许可证的属性,并查看其是否可续期。如果此属性未设置为true,则无法续订许可证。

董良策
2023-03-14

我们通过使用PlaybackConfig的manifestHandler方法实现了这一点。它可以返回一个promise,因此我们能够检测令牌是否过期,并相应地续订。

castContext
  .getPlayerManager()
  .setMediaPlaybackInfoHandler(
    (loadRequestData, playbackConfig) => {
      playbackConfig.manifestHandler = manifest =>
        retrieveUpfrontToken(loadRequestData)
          .then(token => {
            playbackConfig.licenseRequestHandler = requestInfo => {
              requestInfo.withCredentials = true;
              requestInfo.headers['x-dt-auth-token'] = token;
            };
          })
          .then(() => manifest);
    };
  );

每次接收方获取清单时(在每个ad中断后或在动态清单的每个更新期间),都会调用manifestHandler方法。

我希望我能帮上忙,要从谷歌获得一些帮助/答案是相当复杂的。。。

最好的,文森特。

 类似资料:
  • 我已使用Azure媒体服务存储加密视频 有人能帮我解决以下问题吗: 我从哪里获得Widevine许可证URL,以便在Exo Player中播放视频 提前感谢。

  • 我有一个视频DASH DRM Widevine的应用程序。在模拟器和某些电视盒中,读取许可证时出错,并且不会播放受保护的内容。我想要实现的是,如果许可证有错误,可以执行其他一些功能。 谢谢

  • 我正在尝试将一个具有DRM保护的MPD dash文件转换为MP4文件。我有DRM许可证的URL。所以,我尝试使用ffmpeg库来实现这一点,但没有选项将许可证URL与ffmpeg命令一起传递以进行解密。

  • 问题内容: 如问题所述,如何确定何时在GoogleCloudMessaging API中注册ID无效?我已经阅读了有关类似主题的几个问题的答案:GCM注册ID是否过期?以及Google Coud Mesaging(GCM)和registration_id到期,我怎么知道?。这些问题的问题在于,答案是使用GCMRegistrar而不是GoogleCloudMessaging API的旧GCMAPI。

  • 但是,在构建DRM会话之后,会引发以下错误: 未能获取脱机DRM许可证com.google.android.exoPlayer2.DRM.drmsession$drmsessionexception:com.google.android.exoPlayer2.upstream.httpdatasource$invalidresponseCodeexception:响应代码:403 at com.g

  • 问题内容: 有没有检查连续日期的功能。我在处理以下问题时遇到问题: 我的表有一个包含以下数据的列: 给定的开始日期为,结束日期为。我想要的结果是: 有人可以建议什么吗? 问题答案: 我认为这是 “连续日期分组岛” 问题的一种变体。可以使用以下方法完成: SQL小提琴 结果 这是SQL Server 2005版本: SQL小提琴