3

我目前正在使用 Dash/Widevine DRM 切换到 ExoPlayer。通过测试,我遇到了很大比例的设备没有启用 HDCP 保护。由于合同协议,这是一个问题。我必须在允许播放之前检测到并记录它。

我从 App DRM Info中得到灵感,这甚至是一种可能性 WideVineScreenShot

我的第一个想法是使用DrmManagerClient

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

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")

哪个有效!惊人的问题解决了!

...除了你可以看到它只适用于 Pie 及以上...这是不行的。DrmInfo 将适用于我尝试过的每个 Android 版本。我只是不知道如何使用DrmManagerClient,而且文档几乎不存在。

任何信息都会被重视,谢谢。

4

1 回答 1

4

好的,所以在这一整天的努力之后,我开始认为这是不可能的。我最好的尝试都失败了,甚至与该主题远程相关的一篇StackOverflow帖子都有提示,但它没有用。

val algorithms = mediaDrm.getPropertyString("maxHdcpLevel")

但是正如你在这里看到的,这不会通过编译器,需要一个MediaDrm.Property* 编译器错误

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"]}")

或者,如果您只想得到一件事,您可以...

@SupressLint("WrongConstant")

这行得通!

我不太确定为什么可以这样利用该方法,但是,它可以完成工作!

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

  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")
于 2019-09-12T04:17:30.913 回答