我目前正在使用Dash/Widevine DRM切换到ExoPlayer。通过测试,我遇到了很多没有启用HDCP保护的设备。由于合同协议,这是一个问题。在允许播放之前,我必须检测并记录它。
我的第一个想法是使用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")
成功了!惊人的问题解决了!
。。。除非你能看到它只会在馅饼上起作用。。。这是不可能的。DrmInfo将在我尝试的每个Android版本上工作。我只是不知道如何使用DrmManagerClient,而这些文档实际上是不存在的。
任何信息都将受到重视,谢谢。
好吧,在一整天都在抱怨这件事之后,我开始认为这是不可能的。我最好的尝试都失败了,其中一篇StackOverflow帖子甚至有一点关于这个主题的提示,但没有奏效。
val algorithms = mediaDrm.getPropertyString("maxHdcpLevel")
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")