我正在尝试实现一个流系统,其中 DASH 内容使用多个密钥进行加密:一个用于 SD 和音频再现,一个用于 HD。我想限制对支持更高安全级别的客户端(L1 用于 Widevine,SL3000 用于 PlayReady)的高清再现
根据DASH 实施指南(以及PlayReady 文档等),我的理解是推荐的设置应如下所示:
- 所有客户端都提供了一个 MPD 清单,包括 SD 和 HD 再现,以及 PSSH 标头,包括两者的内容密钥 ID。
- 客户端从 DRM 服务器请求这两个许可证。
- DRM 服务器:
- 返回两个许可证,为每个许可证指定所需的安全级别;或者:
- 标识客户端安全级别,并且只返回它应该能够使用的密钥。
- 在任何一种情况下,客户端都会确定它可以使用哪些密钥,并仅使用它具有有效且可用的许可证密钥的那些再现开始播放,并忽略它没有有效许可证密钥的再现。
Q1:我对最佳实践实施的理解是否正确?
假设是:我试图根据上述内容创建一个概念验证,但它似乎不起作用。我用过:
- Google Chrome(仅支持 Widevine L3 - 最低安全级别)
- DASH 参考播放器、JWPlayer 流测试器和 Shaka 播放器演示
- 使用两个密钥加密的资产
- 我可以修改的 Widevine 许可证服务器代理
根据我配置 Widevine 代理返回的内容,我看到了以下内容:
- L3 SD & HD 键:播放成功。
- L3 上的 SD 键且没有 HD 键:播放失败并出现以下错误:
{
"hasAppRestrictions": false,
"missingKeys": [
"6d76f25cb17f5e16b8eaef6bbf582d8e"
],
"restrictedKeyStatuses": []
}
- L3 的 SD 键和 L1 的 HD 键:播放失败并出现以下错误:
{
"hasAppRestrictions": false,
"missingKeys": [],
"restrictedKeyStatuses": [
"internal-error"
]
}
- L3 的两个键,但 HDCP_V2 的 HD 键:播放失败并出现错误:
{
"hasAppRestrictions": false,
"missingKeys": [],
"restrictedKeyStatuses": [
"output-restricted"
]
}
Q2:以上是因为我测试过的播放器没有完全实现DASH规范吗?还是我的设置或假设有问题?