如何获得设备上安装的DRM插件(代理)列表?

时间:2018-01-31 16:43:55

标签: android drm

documentation for the android DRM package说“DRM API的常见用途包括......确定设备上安装了哪些DRM插件(代理)”。

我可以在DRM包中找到的唯一方法DrmManagerClient.getAvailableDrmEngines()。此方法确实有效,因为它返回一个包含DRM代理名称的字符串数组。这就是上面关于确定安装哪些插件的说法是什么?

但是,该列表(至少在某些情况下)与android.Media包中的新方法MediaDrm.isCryptoSchemeSupported()的结果完全相矛盾。

示例:

运行Android 7的HTC Desire 550:

  • getAvailableDrmEngines()
    • Playready DRM插件
    • DriveActivator插件
    • MirrorLink插件
    • OMA HTC
  • isCryptoSchemeSupported()
    • Common PSSH / CENC
    • 的Widevine

运行Android 5.1.1的三星SM-G870A:

  • getAvailableDrmEngines()
    • Widevine DRM插件
    • OMA V1 Forward Lock
    • (空白插件名称)
    • Playready插件
    • TZ Playready插件
  • isCryptoSchemeSupported()
    • Common PSSH / CENC
    • 的Widevine

一位在Google Play商店中拥有非常受欢迎的DRM相关工具的开发人员告诉我,他会认为DrmManagerClient方法已经过时/不常用。

在这种情况下,在可能的情况下使用MediaDrm.isCryptoSchemeSupported()是有意义的,即API级别18或更高级别。但是MediaDrm没有提供获得支持的加密方案/代理/插件列表的方法;你只需要尝试你感兴趣的那些。你可以尝试将the DASHIF list中已知的加密方案UUID放入你的代码中,并尝试所有这些。但这份名单可能会在过去几年中发生变化。

这让我们回到原来的问题:

如何获得设备上安装的(准确)DRM插件列表?

为澄清主要问题而提出相关问题:

  • original claim in the documentation about this是指DrmManagerClient.getAvailableDrmEngines()还是其他什么?
  • 如果它指的是DrmManagerClient.getAvailableDrmEngines(),但后者在较新的设备上给出了错误的结果,为什么它不被弃用?它是制造商实施Android的一个普遍存在的错误吗?
    • 或者是否有可能通过“支持的加密方案”,它们确实意味着与已安装的DRM引擎/代理不同(并且独立于)?当然,DRM插件和加密方案的概念在技术上是截然不同的,但答案似乎涵盖了相同的领域。 (并且MediaDrm docs表明“DRM方案”和“加密方案”可以互换使用:“它通常从内容中的元数据访问 DRM方案识别 UUID,并且使用此UUID构造MediaDrm对象的实例,该对象能够支持内容所需的 DRM方案加密方案被分配了16个字节的UUID。方法isCryptoSchemeSupported( UUID)可用于查询设备是否支持给定的方案。“)如果这两种方法确实给出了正确的独立信息,那么HTC如何支持WideVine加密方案而无需可以使用WideVine DRM插件吗?
  • 如果DrmManagerClient.getAvailableDrmEngines()不可靠,除了尝试你能找到的所有UUID之外,还有另一种获取列表的方法吗?

0 个答案:

没有答案