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

Lar*_*rsH 14 android drm

android DRM软件包文档说"DRM API的常见用途包括......确定在设备上安装了哪些DRM插件(代理)".

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

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

例子:

运行Android 7的HTC Desire 550:

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

运行Android 5.1.1的三星SM-G870A:

  • getAvailableDrmEngines():
    • Widevine DRM插件
    • OMA V1前进锁定
    • (空白插件名称)
    • Playready插件
    • TZ Playready插件
  • isCryptoSchemeSupported():
    • 常见的PSSH/CENC
    • Widevine的

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

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

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

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

为澄清主要问题,相关问题在于提出这个问题:

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