Android端末のDRM情報を取得する

特定のDRMがサポートされているか

MediaCrypto.isCryptoSchemeSupported(uuid)

uuid には以下の値を指定する

val WIDEVIDE_UUID = UUID.fromString("edef8ba9-79d6-4ace-a3c8-27dcd51d21ed")
val PLAYREADY_UUID = UUID.fromString("9a04f079-9840-4286-ab92-e65be0885f95")
val CLEAR_KEY_UUID = UUID.fromString("e2719d58-a985-b3c9-781a-b030af78d30e")

DRMのバージョンやセキュリティレベルを取得

val mediaDrm = MediaDrm(WIDEVIDE_UUID)
mediaDrm.getPropertyString(propertyname)

propertyName には MediaDrm.PROPERTY_XXX を指定する

コード例

コード

val propertyNames = listOf(
    MediaDrm.PROPERTY_ALGORITHMS,
    MediaDrm.PROPERTY_DESCRIPTION,
    MediaDrm.PROPERTY_VENDOR,
    MediaDrm.PROPERTY_VERSION,
    MediaDrm.PROPERTY_DEVICE_UNIQUE_ID,
    "securityLevel"
)

val WIDEVIDE_UUID = UUID(0xEDEF8BA979D64ACEu.toLong(), 0xA3C827DCD51D21EDu.toLong())
val isWidevineSupported = MediaCrypto.isCryptoSchemeSupported(WIDEVIDE_UUID)
if (isWidevineSupported) {
    val widevineMediaDrm = MediaDrm(WIDEVIDE_UUID)
    propertyNames
        .map { name ->
            name to widevineMediaDrm.getPropertyStringOrNull(name)
        }
        .forEach { (name, property) ->
            Log.d("DrmInfo", "$name: $property")
        }
}

fun MediaDrm.getPropertyStringOrNull(propertyName: String): String? {
    return try {
        getPropertyString(propertyName)
    } catch (e: Exception) {
        null
    }
}

出力

D/DrmInfo: algorithms: AES/CBC/NoPadding,HmacSHA256
D/DrmInfo: description: Widevine CDM
D/DrmInfo: vendor: Google
D/DrmInfo: version: 1.0
D/DrmInfo: deviceUniqueId: null
D/DrmInfo: securityLevel: L1

参考

MediaDrm  |  Android Developers

ExoPlayer/FrameworkMediaDrm.java at c75f3f77ffc9d5cf8c2973fa02d1c43071ede76e · google/ExoPlayer · GitHub