无需登录 数据私有 本地保存

加密媒体扩展演示 - EME 播放 DRM 内容示意

13
0
0
0

🔐 加密媒体扩展 (EME) 演示

模拟 DRM 保护内容的解密播放流程 — Encrypted Media Extensions Demo

DRM 状态:等待检测
DRM 加密内容
需要许可证才能播放
12:34 / 38:15
H.264 / AAC 1920×1080 ~8 Mbps
🌐
Widevine
Google
🪟
PlayReady
Microsoft
🍎
FairPlay
Apple
1
检测 DRM 支持 检查浏览器密钥系统兼容性
2
请求 MediaKeySystemAccess 获取密钥系统访问权限
3
创建 MediaKeys 生成媒体密钥对象
4
创建 MediaKeySession 建立密钥会话通道
5
生成许可证请求 生成挑战并发送至许可证服务器
6
更新会话 & 开始解密 接收许可证,解密并播放内容
💡 提示:点击"自动演示"将自动按顺序执行全部6个步骤
--:--:--EME 演示工具已就绪。请选择 DRM 系统并开始演示。
--:--:--💡 可点击"检测浏览器DRM"查看当前浏览器支持情况。
EME 常见问题与知识点

Encrypted Media Extensions (EME) 是 W3C 制定的 Web 标准,允许浏览器通过 JavaScript API 播放加密的媒体内容(如视频、音频)。EME 本身不进行解密,而是作为桥梁,连接浏览器与内容解密模块(CDM),实现 DRM(数字版权管理)保护内容的合法播放。

EME 的核心工作流程包括:检测 DRM 系统支持 → 请求密钥系统访问 → 创建 MediaKeys → 建立密钥会话 → 向许可证服务器请求许可证 → 解密并播放内容。

📌 EME 标准使得 Netflix、Hulu、Spotify 等流媒体平台能够在浏览器中安全地提供受版权保护的内容。

  • Google Widevine:最广泛使用的 DRM 系统,Chrome、Firefox、Edge、Android 等均支持。提供三个安全级别(L1/L2/L3),L1 为硬件级安全。
  • Microsoft PlayReady:微软开发的 DRM 系统,在 Edge 浏览器和 Windows 平台上有原生支持。广泛用于 Xbox 和 Windows 生态。
  • Apple FairPlay:苹果专有的 DRM 系统,Safari 浏览器原生支持。主要用于 HLS 流媒体,在 iOS/macOS 设备上广泛使用。
  • 其他:如 Adobe Primetime、Marlin 等,使用较少。

📌 大多数流媒体服务会同时支持多种 DRM 系统,以确保跨平台的兼容性。

MSE (Media Source Extensions) 允许 JavaScript 动态构建媒体流并传递给 HTML 视频/音频元素播放。而 EME 负责处理这些媒体流的解密。

两者通常配合使用:MSE 负责将加密的媒体数据分段传递给播放器,EME 则确保这些加密数据能够被 CDM 解密后再进行解码渲染。现代流媒体平台(如 YouTube、Netflix)几乎都同时使用 MSE + EME。

📌 简单理解:MSE 管理"数据流",EME 管理"解密密钥"。

EME 的安全性依赖于 CDM (Content Decryption Module) 的实现。CDM 是闭源的二进制模块,运行在浏览器沙箱中,负责实际的解密工作。

安全层级:

  • 软件级安全 (SW_SECURE_CRYPTO/SW_SECURE_DECODE):解密在软件中进行,安全性较低,理论上可被内存dump攻击。
  • 硬件级安全 (HW_SECURE_ALL):解密在受信任的执行环境(TEE)中进行,如 ARM TrustZone、Intel SGX,安全性极高。

📌 完全绕过 DRM 极其困难,尤其是在硬件安全级别下。但没有任何 DRM 系统是100%安全的。

许可证服务器 (License Server) 是 DRM 体系中的核心后端服务。当浏览器需要播放加密内容时,CDM 会生成一个许可证请求(包含设备信息、内容ID等),发送到许可证服务器。

许可证服务器验证用户权限(如订阅状态、播放次数、过期时间等)后,返回包含解密密钥的许可证响应。CDM 使用这些密钥来解密内容。

📌 常见的许可证服务器方案:Google Widevine License Server、Microsoft PlayReady Server、Apple FairPlay Streaming Server。

浏览器WidevinePlayReadyFairPlay
Chrome✅ 支持❌ 不支持❌ 不支持
Firefox✅ 支持❌ 不支持❌ 不支持
Edge✅ 支持✅ 支持❌ 不支持
Safari❌ 不支持❌ 不支持✅ 支持
Opera✅ 支持❌ 不支持❌ 不支持

📌 实际兼容性可能因操作系统和设备而异。移动端支持情况也不同。

集成 EME 的基本步骤:

  1. 使用 navigator.requestMediaKeySystemAccess() 检测并获取 DRM 系统访问权限。
  2. 创建 MediaKeys 对象并关联到视频元素。
  3. 监听视频元素的 encrypted 事件,当检测到加密数据时创建 MediaKeySession
  4. 使用 session.generateRequest() 生成许可证请求。
  5. 将请求发送到许可证服务器,获取许可证响应。
  6. 使用 session.update() 将许可证传递给 CDM。
  7. CDM 自动解密后续的媒体数据,视频正常播放。