javascript - 如何在 Cast Receiver Player 中更新过期的 DRM 许可证?
问题描述
我基于Google Cast 应用程序框架开发自定义 Cast Receiver 应用程序接收器应用程序负责播放 Widevine 加密流。我们支持的解决方案需要在许可请求的标头中添加DRM 令牌。PreAuthorization
我需要执行几个授权请求来检索DRM 令牌。我假设检索 DRM 令牌的最佳位置是使用Message Interceptor:
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;
}
};
播放工作正常,但直到许可证密钥过期为止。在我们的后端许可证上大约有 30 分钟。在那之后,接收播放器产生错误[cast.framework.media.ShakaPlayer] category: 6 code: 6014
并停止播放。我发现这个错误意味着
所以我的问题是:
- Cast Receiver API 是否支持续订许可证?接收方会触发 CAST API 中的哪些回调来通知会话已过期?我没有收到任何消息,我只收到错误:(并且播放停止。
- 如何向播放器提供新许可证以防止其失败?
解决方案
阅读许可证的属性,看看它是否可以更新。如果此属性未设置为 true,则无法续订许可证。
推荐阅读
- r - prop.table 中的折叠列
- postgresql - Wal-e:无法推送备份 - 权限错误
- webpack - webpack 问题“可下载字体被 sanitizer 拒绝”或“无法解码下载的字体”
- java - java.lang.InternalError:在 PATH 上运行带有 Java14 的 EXE4J .exe 时未初始化平台编码
- kdb - kdb - 如何以动态/快速的方式增加缺少日期的表
- swift - 应用程序在 Xcode 模拟器上运行,但在连接我的手机时显示错误
- c# - C# TimeSpan 给出的结果与预期不同
- django - 如何显示 EmailMultiAlternatives 邮件对象的 html 内容
- java - 如何从 recyclerview 中获取价值并将其相加以获得 android studio 中的总价值
- python - 如何在 SQLAlchment 查询语句中调用函数?