7.4 KiB
7.4 KiB
DRMInfo 使用示例
概述
DRMInfo类提供了获取设备支持的DRM(数字版权管理)方案的详细信息,包括Widevine、PlayReady等。
主要功能
- 获取所有支持的DRM方案列表
- 获取指定DRM方案的详细信息(类型、供应商、版本、算法、设备ID、安全级别、最高HDCP级别等)
- 获取所有DRM方案的详细信息
使用方法
1. 初始化AndInfo
import com.xyzshell.andinfo.AndInfo
// 在Application或Activity中初始化
AndInfo.init(applicationContext)
2. 获取DRMInfo实例
val drmInfo = AndInfo.instance.drm
3. 获取所有支持的DRM方案
// 获取所有支持的DRM UUID列表
val supportedDrmSchemes = drmInfo.getSupportedDrmSchemes()
supportedDrmSchemes.forEach { uuid ->
println("支持的DRM方案: $uuid")
}
4. 获取指定DRM方案的详细信息
import com.xyzshell.andinfo.libs.DRMInfo
// 获取Widevine DRM详细信息
val widevineDrmDetail = drmInfo.getDrmDetail(DRMInfo.WIDEVINE_UUID)
widevineDrmDetail?.let { detail ->
println("DRM名称: ${detail.name}")
println("UUID: ${detail.uuid}")
println("供应商: ${detail.vendor}")
println("版本: ${detail.version}")
println("描述: ${detail.description}")
println("支持的算法: ${detail.algorithms?.joinToString(", ")}")
println("设备唯一ID: ${detail.deviceUniqueId}")
println("安全级别: ${detail.securityLevel}") // L1, L3等
println("系统ID: ${detail.systemId}")
println("当前打开的会话数: ${detail.openSessionCount}")
println("最大会话数: ${detail.maxSessionCount}")
println("当前连接的HDCP级别: ${detail.connectedHdcpLevel}")
println("最高支持的HDCP级别: ${detail.maxHdcpLevel}")
// 获取HDCP级别描述
detail.maxHdcpLevel?.let { level ->
val hdcpDescription = drmInfo.getHdcpLevelDescription(level)
println("最高HDCP级别描述: $hdcpDescription")
}
}
5. 获取所有DRM方案的详细信息
val allDrmDetails = drmInfo.getAllDrmDetails()
allDrmDetails.forEach { detail ->
println("=== ${detail.name} ===")
println("UUID: ${detail.uuid}")
println("供应商: ${detail.vendor}")
println("版本: ${detail.version}")
println("安全级别: ${detail.securityLevel}")
println("最高HDCP级别: ${detail.maxHdcpLevel?.let { drmInfo.getHdcpLevelDescription(it) }}")
println()
}
6. 在Android UI中显示DRM信息
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.xyzshell.andinfo.AndInfo
import com.xyzshell.andinfo.libs.DRMInfo
class DRMInfoActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 获取DRMInfo实例
val drmInfo = AndInfo.instance.drm
// 获取所有支持的DRM方案
val allDrmDetails = drmInfo.getAllDrmDetails()
// 显示每个DRM方案的信息
allDrmDetails.forEach { detail ->
displayDrmInfo(detail)
}
}
private fun displayDrmInfo(detail: DRMInfo.DRMDetail) {
// 在UI中显示DRM信息
val info = buildString {
appendLine("DRM名称: ${detail.name}")
appendLine("UUID: ${detail.uuid}")
appendLine("供应商: ${detail.vendor ?: "未知"}")
appendLine("版本: ${detail.version ?: "未知"}")
appendLine("描述: ${detail.description ?: "无"}")
appendLine("支持的算法: ${detail.algorithms?.joinToString(", ") ?: "无"}")
appendLine("设备唯一ID: ${detail.deviceUniqueId ?: "不可用"}")
appendLine("安全级别: ${detail.securityLevel ?: "未知"}")
appendLine("系统ID: ${detail.systemId ?: "未知"}")
detail.openSessionCount?.let {
appendLine("当前打开的会话数: $it")
}
detail.maxSessionCount?.let {
appendLine("最大会话数: $it")
}
detail.connectedHdcpLevel?.let {
appendLine("当前HDCP级别: ${AndInfo.instance.drm.getHdcpLevelDescription(it)}")
}
detail.maxHdcpLevel?.let {
appendLine("最高HDCP级别: ${AndInfo.instance.drm.getHdcpLevelDescription(it)}")
}
}
println(info)
}
}
DRMDetail 数据类说明
data class DRMDetail(
val uuid: String, // DRM方案的UUID
val name: String, // DRM方案名称(如"Widevine Content Protection")
val vendor: String?, // 供应商(如"Google")
val version: String?, // 版本号
val description: String?, // 描述信息
val algorithms: List<String>?, // 支持的加密算法列表(如["AES/CBC/NoPadding"])
val deviceUniqueId: String?, // 设备唯一ID(十六进制字符串)
val securityLevel: String?, // 安全级别(如"L1"、"L3")
val systemId: String?, // 系统ID
val openSessionCount: Int?, // 当前打开的会话数(Android 9及以上)
val maxSessionCount: Int?, // 最大会话数(Android 9及以上)
val connectedHdcpLevel: Int?, // 当前连接的HDCP级别(Android 9及以上)
val maxHdcpLevel: Int?, // 最高支持的HDCP级别(Android 9及以上)
)
HDCP级别说明
HDCP (High-bandwidth Digital Content Protection) 高带宽数字内容保护
| 级别 | 名称 | 说明 |
|---|---|---|
| 0 | HDCP_NONE | 无HDCP保护 |
| 1 | HDCP_V1 | HDCP 1.x |
| 2 | HDCP_V2 | HDCP 2.0 |
| 3 | HDCP_V2_1 | HDCP 2.1 |
| 4 | HDCP_V2_2 | HDCP 2.2 |
| 5 | HDCP_V2_3 | HDCP 2.3 |
| 255 | HDCP_NO_DIGITAL_OUTPUT | 无数字输出 |
常用DRM方案UUID
// Widevine DRM (Google)
DRMInfo.WIDEVINE_UUID = "edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
// Microsoft PlayReady
DRMInfo.PLAYREADY_UUID = "9a04f079-9840-4286-ab92-e65be0885f95"
// ClearKey DASH-IF
DRMInfo.CLEARKEY_UUID = "e2719d58-a985-b3c9-781a-b030af78d30e"
支持的DRM方案
DRMInfo支持以下29种DRM方案的识别:
- ABV DRM (MoDRM)
- Adobe Primetime DRM v4
- Alticast
- Apple FairPlay
- Arris Titanium
- ChinaDRM
- ClearKey (多种变体)
- CMLA (OMA DRM)
- Commscope Titanium V3
- CoreCrypt
- DigiCAP SmartXess
- DivX DRM Series 5
- Irdeto Content Protection
- Marlin Adaptive Streaming
- Microsoft PlayReady
- MobiTV DRM
- Nagra MediaAccess PRM 3.0
- SecureMedia
- Synamedia/Cisco/NDS VideoGuard DRM
- Unitend DRM (UDRM)
- Verimatrix VCAS
- Viaccess-Orca DRM (VODRM)
- VisionCrypt
- W3C Common PSSH box
- Widevine Content Protection
注意事项
- 不同设备支持的DRM方案可能不同
- 某些DRM信息可能需要特定权限才能访问
- Android 9 (API 28) 以下版本不支持会话数和HDCP级别信息
- 设备唯一ID可能在某些设备上不可用
- Widevine安全级别:
- L1: 最高安全级别,支持硬件级别的内容保护
- L3: 软件级别的内容保护
示例输出
=== Widevine Content Protection ===
UUID: edef8ba9-79d6-4ace-a3c8-27dcd51d21ed
供应商: Google
版本: 16.1.0
安全级别: L1
最高HDCP级别: HDCP_V2_2 (2.2)
支持的算法: AES/CBC/NoPadding
设备唯一ID: a1b2c3d4e5f6...