前端真的能防录屏?EME(加密媒体扩展)DRM 反录屏原理 + 实战代码
在实际开发中,很多开发者会问:为什么有些视频网站截屏或录屏时画面是黑的?单纯靠 JS 监听用户快捷键往往不够可靠,绕过的方法太多了。要实现真正的防护,必须依赖浏览器原生支持的 API。
这就是 Encrypted Media Extensions (EME)。

什么是 Encrypted Media Extensions(EME)
Encrypted Media Extensions 是 W3C Web API,用于让浏览器播放受 DRM(Digital Rights Management,数字版权保护)加密的媒体。
用通俗的话来说:EME 就是一套 JS API,用来控制浏览器的 DRM 解密模块。
更多详细的介绍可以参考官方文档:https://www.w3.org/TR/encrypted-media/
常见 DRM 方案
| 平台 | DRM |
|---|---|
| Chrome、Android | Google Widevine |
| Edge/Windows | Microsoft PlayReady |
| Safari/iOS/macOS | Apple FairPlay |
EME 是如何实现浏览器防截屏 / 防录屏
在浏览器层面,EME + DRM 可以实现防截屏 / 防录屏,其核心机制如下:
-
媒体文件是加密的 内容本身是加密视频(如 Widevine Modular 加密),没有密钥无法解码。
-
浏览器通过 CDM 模块解密 浏览器内置一个 CDM(Content Decryption Module)。
例如 Chrome 内置 Widevine CDM,CDM 运行在沙箱中,不暴露密钥。
-
禁止系统级截屏(取决于 DRM)
例如在 Chrome 上播放 Netflix 时:
- 用系统截图键 → 图片是黑屏
- 用屏幕录制 → 视频区域是黑色
这是因为 Widevine L1(硬件级)支持防截屏。DRM 解密后的视频帧不会进入 CPU 层,而是直接通过 GPU 的保护路径输出,截屏 API 无法捕获受保护的视频帧。
-
禁止浏览器扩展抓取视频帧 DRM 视频帧在受保护的视频管线(Video Pipeline)中,扩展无法获取。


