Widevine — 是 Google 开发的一种 DRM 技术,用于保护移动设备、智能电视和网络平台上的视频内容免受未经授权的复制。内容加密通过 CDM 模块 执行,该模块在全球 40 亿台设备上得到支持。Widevine 技术 确保与 Android、iOS、Chrome 和 Smart TV 的兼容性,允许流媒体服务在任何平台上保护优质内容。
要点
Widevine — 是 Google 于 2010 年收购的专有 DRM 技术,已成为 Android 生态系统中视频内容保护的事实标准。最大的流媒体服务,包括 Netflix、Amazon Prime Video、Disney+ 和 Hulu,都使用它来防止未经授权复制和分发内容。
Widevine 支持根据 AES-128 CBC 标准使用 内容密钥 进行加密,这些密钥仅通过安全的许可通道传输给授权设备。该系统提供从服务器加密到用户设备解码的端到端保护。
Widevine Technologies 公司成立于 1999 年,最初为有线电视平台开发内容保护解决方案。2010 年被 Google 收购后,该技术被适配用于 移动平台,并从 Android 4.4 KitKat 版本开始集成到操作系统中。自 2015 年起,Widevine 成为 Google Mobile Services 认证的强制性组件。
2018 年,Google 推出了 Widevine Modular DRM,使设备制造商能够在不更改操作系统代码的情况下以硬件方式实现不同级别的保护。如今,Widevine Modular 在超过 40 亿台设备上得到支持,是 Android 上的主要 DRM 机制。
Widevine 架构由三个关键组件组成:内容解密模块(CDM)、许可证服务器和内容加密工具。CDM 在客户端执行解密,并与硬件可信执行环境(TEE)交互以安全存储密钥。
Google 许可证服务器根据内容提供商定义的政策管理密钥的颁发,这些政策规定了时间限制、设备数量和播放质量。加密工具 在提供商端准备内容,将其打包为 MPEG-DASH 或 HLS 格式,使用 CENC 加密。
保护过程 从内容打包阶段开始,当媒体文件在提供商服务器上使用内容密钥进行加密时。加密流通过 CDN 传输到用户设备,CDM 向许可证服务器请求许可证。
许可证服务器验证设备的真实性和访问内容的权限。如果验证成功,服务器颁发 带密钥的许可证,CDM 使用该密钥进行解密。许可证可能包含观看时间和分辨率的限制。
Widevine 中的许可证交换通过浏览器中的 EME(加密媒体扩展)协议或移动平台上的 SDK 实现。许可证请求 由 CDM 生成并通过 HTTPS 发送到许可证服务器,确保密钥在传输过程中不被拦截。
服务器处理请求并返回同样加密且只能由设备 CDM 解密的许可证。密钥的硬件绑定 到特定设备可防止其传输到其他平台。
Widevine 使用 ISO/IEC 23001-7 中定义的通用加密(CENC)标准,确保与 MPEG-DASH 和 HLS 格式的兼容性。AES-128 加密 以 CTR 或 CBC 模式应用于保护媒体流。
密钥派生使用 HKDF(基于 HMAC 的密钥派生函数),可以为每个内容段生成唯一密钥。Widevine 中的 HLS 支持 从 Modular 2.0 版本开始添加,扩展了与 Apple 平台的兼容性。
@Throws
fun requestLicense(): ByteArray {
val drmSessionManager = mediaDrm.createSession(
sessionId,
List("keyRequestType", "init")
)
val request = mediaDrm.getKeyRequest(
sessionId,
schemeData.get("mimeType"),
KeyType.STREAMING,
mutableMapOf()
)
return licenseService.acquire(request.data)
}
Widevine 定义了 三个安全级别,它们在加密操作的执行方式和内容处理方面有所不同。L1 级别提供最大保护,L3 级别提供最小保护,L2 级别处于中间位置。
| 级别 | 保护类型 | 设备要求 | 最大分辨率 |
|---|---|---|---|
| L1 | 硬件 | SoC 级别的 TEE | 4K 超高清 |
| L2 | 混合 | 用于密钥的 TEE,用于视频的软件 | 1080p |
| L3 | 软件 | 仅软件 CDM | 720p |
L1 级别 要求在硬件级别存在可信执行环境(TEE),所有加密操作都在其中执行。内容密钥永远不会离开 TEE,即使在主操作系统被攻破的情况下也无法提取。
具有 L1 认证的设备可以以 4K 质量 和 HDR 播放内容,因为解密的视频流直接传输到受保护的视频输出,用户进程无法访问。
L3 级别 在普通用户空间中通过软件执行所有加密操作。这是最不安全的模式,密钥可以从设备的 RAM 中提取。
Widevine L3 将播放质量限制为 720p,使其适合在低级设备或没有硬件保护的桌面浏览器上观看。
fun getSecurityLevel(): String {
val mediaDrm = MediaDrm(UUID.fromString(
"edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
))
val level = mediaDrm.getPropertyString(
"securityLevel"
)
return level.ifEmpty { "L3" }
}
在移动应用中集成 Widevine 通过标准 API MediaDrm(Android)和 AVContentKeySession(iOS)进行。大多数情况下,开发人员无需直接使用 DRM — 播放器库(如 ExoPlayer 和 AVPlayer)会自动处理许可。
在 Android 上,Widevine 通过 MediaDrm 类 集成,该类提供对 CDM 的直接访问。对于流媒体应用,建议使用带有 DrmSessionManager 模块的 ExoPlayer,该模块自动管理许可证请求。
初始化播放器时,需要指定 Widevine 方案的 UUID(`edef8ba9-79d6-4ace-a3c8-27dcd51d21ed`)和内容提供商提供的 许可证服务器 URL。ExoPlayer 自动处理许可证请求和续订周期。
val drmLicenseUrl = "https://license.service.com/wv"
val mediaItem = MediaItem.Builder()
.setUri(Uri.parse(streamUrl))
.setDrmKeyRequestUrl(drmLicenseUrl)
.setDrmKeyRequestHeaders(
mapOf("Authorization" to token)
)
.build()
val exoPlayer = ExoPlayer.Builder(context)
.build()
exoPlayer.setMediaItem(mediaItem)
exoPlayer.prepare()
在网络平台上,Widevine 通过 媒体源扩展(MSE) 和加密媒体扩展(EME)工作。基于 Chromium 的浏览器内置支持 Widevine CDM,开发人员只需使用正确的配置初始化 EME 会话。
要在浏览器中使用 Widevine,需要指定 keySystem 类型 为 `com.widevine.alpha` 的许可证初始化器。创建 MediaKeys 实例后,浏览器会自动处理许可证请求。
集成 Widevine 时,正确处理因缺少访问权限、订阅过期或设备不兼容而发生的许可错误非常重要。TYPE_EXPIRED_LICENSE 错误 需要通过向服务器重新请求来更新许可证,而 TYPE_OUTPUT_NOT_ALLOWED 表示视频输出与 DRM 策略不兼容。
建议为临时网络错误实现具有指数退避的重试机制,并在永久拒绝许可时向用户显示可理解的消息。DRM 会话的错误日志记录 帮助内容提供商识别设备问题并优化策略。
Widevine 与 Apple 的 FairPlay 和 Microsoft 的 PlayReady 竞争,形成移动平台市场上的三个主要 DRM 解决方案。每种技术都有其与平台生态系统相关的优势和局限性。
| 特性 | Widevine | FairPlay | PlayReady |
|---|---|---|---|
| 开发人员 | Apple | Microsoft | |
| 主要平台 | Android、Chrome | iOS、tvOS、Safari | Windows、Xbox、UWP |
| 最高级别 | L1(4K) | 相当于 L1(4K) | SL3000(4K) |
| 硬件保护 | TEE | 安全隔区 | TPM + TEE |
DRM 的选择 取决于应用的目标平台。对于 Android-first 项目,Widevine 是自然的选择,因为它预装在所有经过 Google Mobile Services 认证的设备上,并且不需要额外的许可费用。
对于跨平台项目,通常使用 多 DRM 方法,使用许可证聚合器(如 Axinom、EZDRM 和 Vualto),它们为所有三个 DRM 系统提供统一的 API。这降低了集成复杂性并集中了许可管理。
常见问题
Widevine — 是 Google 的一种 DRM 技术,旨在保护数字视频内容免受未经授权的复制。流媒体服务使用它通过许可系统加密视频并管理对其的访问。
Widevine 支持 三个安全级别:L1(TEE 中的硬件加密)、L2(混合方法)和 L3(完全软件实现)。L1 允许以 4K 播放内容,L3 限制为 720p 质量。
可以通过 MediaDrm 类,请求 securityLevel 属性来检查 Android 上的 Widevine 级别。为此,使用 Widevine UUID 创建 MediaDrm 实例并调用 getPropertyString,或使用第三方应用程序(如 DRM Info)。
Widevine 由 Google 为 Android 和 Chrome 开发,而 FairPlay 为 iOS、tvOS 和 Safari 开发。两者都支持硬件加密和 4K,但 Widevine 在 Android 设备上更广泛,而 FairPlay 是 Apple 生态系统中的事实标准。
在移动应用中使用 Widevine 不需要单独许可证 — 该技术内置于经过认证的 Android 设备和 Chrome 中。仅向内容提供商收取使用许可证服务器的费用。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。