很多小伙伴在浏览视频网站时,会发现截屏或录屏时画面变黑。这并非简单的 JS 监听快捷键就能实现,因为绕过方法太多。真正能生效的必须是浏览器原生支持的 API,也就是 Encrypted Media Extensions(简称 EME)。

什么是 Encrypted Media Extensions(EME)
EME 是 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,它运行在沙箱中,不向 JS 暴露密钥。
-
禁止系统级截屏 取决于 DRM 等级。以 Chrome 播放 Netflix 为例,使用系统截图键或屏幕录制工具,视频区域会显示为黑色。
- Widevine L1(硬件级):支持防截屏。DRM 解密后的视频帧不会进入 CPU 层,而是通过 GPU 的保护路径直接输出,截屏 API 无法捕获受保护的视频帧。
- PC 浏览器(L3):基本无法防截屏,仅能防止简单抓取。
-
禁止扩展抓取 DRM 视频帧在受保护的视频管线(Video Pipeline)中,普通浏览器扩展无法获取。
-
禁止调试记录 媒体解密密钥不会暴露在 JS 环境中。
EME 播放加密媒体的代码示例
EME 充当网页应用、浏览器和底层 DRM 系统(CDM)之间的'安全信使',在不暴露密钥的前提下工作。以下是一个使用 EME 播放加密 DASH(mpd)视频的完整流程示例。


