
在实际业务场景中,我们常遇到视频防盗需求。当用户尝试截屏或录屏时,画面变黑是常见现象。这并非简单的 JS 监听快捷键所能实现,单纯依靠脚本极易被绕过。真正有效的方案依赖于浏览器原生支持的 Encrypted Media Extensions (EME)。

什么是 Encrypted Media Extensions(EME)
EME 是 W3C 定义的一套 Web API,用于让浏览器播放受 DRM(数字版权管理)加密的媒体内容。通俗来说,它是一套 JS 接口,负责协调网页应用、浏览器与底层的 CDM(内容解密模块)之间的通信。
详细文档可参考:W3C Encrypted Media Extensions
主流平台对应的 DRM 方案:
| 平台 | DRM |
|---|---|
| Chrome、Android | Google Widevine |
| Edge/Windows | Microsoft PlayReady |
| Safari/iOS/macOS | Apple FairPlay |
EME 如何实现防截屏 / 防录屏
在浏览器层面,EME 结合 DRM 机制可以实现一定程度的防护:
- 媒体文件加密:内容本身采用加密格式(如 Widevine Modular 加密)。
- CDM 沙箱解密:浏览器内置 CDM 模块(如 Chrome 内置 Widevine CDM),运行在沙箱环境中,密钥不暴露给 JS。
- 禁止系统级截屏:取决于 DRM 等级。例如在 Chrome 上播放 Netflix 时,使用系统截图键或录屏工具,视频区域会显示为黑色。
- 原理:Widevine L1(硬件级)支持防截屏。DRM 解密后的视频帧不会进入 CPU 层,而是通过 GPU 的保护路径直接输出,截屏 API 无法捕获受保护的视频帧。
- 禁止扩展抓取:DRM 视频帧在受保护的 Video Pipeline 中,浏览器扩展无法获取。
- 禁止调试记录:解密密钥不会暴露在 JS 上下文中。
EME 播放加密媒体的代码示例
EME 充当网页应用、浏览器和底层 DRM 系统之间的'安全信使',在不暴露密钥的前提下完成解密流程。以下是一个使用 EME 播放加密 DASH(mpd)视频的完整流程示例。
注意:实际运行需要服务器提供 License Server 才能获取许可证。
1. 创建 video 标签
< = =>



