首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测广域DRM HDCP保护级别

检测广域DRM HDCP保护级别
EN

Stack Overflow用户
提问于 2019-09-12 04:58:06
回答 1查看 2K关注 0票数 3

我目前正在使用Dash/Widevine数字版权管理切换到ExoPlayer。通过测试,我发现有很高比例的设备没有启用HDCP保护。由于合同协议,这是一个问题。在允许播放之前,我必须检测到这一点并将其记录下来。

我从应用程序DRM Info中获得了灵感,这甚至是一种可能性

我的第一个想法是使用DrmManagerClient

我放弃了它,因为我没有得到结果,并尝试使用MediaDrm

代码语言:javascript
复制
val mediaDrm = MediaDrm(WIDEVINE_UUID)

val vendor = mediaDrm.getPropertyString(MediaDrm.PROPERTY_VENDOR)
val version = mediaDrm.getPropertyString(MediaDrm.PROPERTY_VERSION)
val description = mediaDrm.getPropertyString(MediaDrm.PROPERTY_DESCRIPTION)
val algorithms = mediaDrm.getPropertyString(MediaDrm.PROPERTY_ALGORITHMS)

var hdcp: String? = null

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
   hdcp = mediaDrm.connectedHdcpLevel.toString()
}

Log.i("WideVine", "$vendor $version $description $algorithms $hdcp")

这是可行的!令人惊讶的问题解决了!

正如你所看到的,...Except只能在Pie和up上工作。这是不可能的。DrmInfo可以在我尝试过的每一个安卓版本上运行。我只是不知道如何使用DrmManagerClient,而且这些文档几乎是不存在的。

任何信息都将受到重视,谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-09-12 12:17:31

好的,在经历了一整天之后,我开始认为这是不可能的。我的最大努力都失败了,有一篇StackOverflow帖子甚至与这个话题有一点关系,但它没有起作用。

代码语言:javascript
复制
val algorithms = mediaDrm.getPropertyString("maxHdcpLevel")

但是正如您在这里看到的那样,这不会通过编译器,并且需要一个MediaDrm.Property*

代码语言:javascript
复制
val stringProperties = arrayOf(
                MediaDrm.PROPERTY_VENDOR,
                MediaDrm.PROPERTY_VERSION,
                MediaDrm.PROPERTY_DESCRIPTION,
                MediaDrm.PROPERTY_ALGORITHMS,
                "maxHdcpLevel")

val widevinePropertiesMap = mutableMapOf<String, String>()

for (prop in stringProperties) {
     widevinePropertiesMap[prop] = mediaDrm.getPropertyString(prop)
     Log.i(prop, mediaDrm.getPropertyString(prop))
     }

Log.i("maxHdcpLevel:", "${widevinePropertiesMap["maxHdcpLevel"]}")

或者,如果你只想得到一样东西,你可以...

代码语言:javascript
复制
@SupressLint("WrongConstant")

这行得通!

我真的不确定为什么你可以用这种方式利用这个方法,但是,它已经完成了工作!

以下是我们可以获得的一些附加属性:

代码语言:javascript
复制
  val securityLevel = mediaDrm.getPropertyString("securityLevel")
  val systemId = mediaDrm.getPropertyString("systemId")
  val hdcpLevel = mediaDrm.getPropertyString("hdcpLevel")
  val maxHdcpLevel = mediaDrm.getPropertyString("maxHdcpLevel")
  val usageReportingSupport = mediaDrm.getPropertyString("usageReportingSupport")
  val maxNumberOfSessions = mediaDrm.getPropertyString("maxNumberOfSessions")
  val numberOfOpenSessions = mediaDrm.getPropertyString("numberOfOpenSessions")
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57896720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档