第 8 章 · DRM 版权保护
为什么 Netflix 不能被录屏

Widevine / FairPlay / PlayReady · CENC · License · L1/L2/L3 · 轻量保护

本章你会理解:Widevine / FairPlay / PlayReady 是什么、一次加密三家通吃是怎么做到的、License 流程、L1/L2/L3 级别为什么决定你能不能看 4K、短视频/短剧常用的轻量保护手段。

预计阅读时间:22 分钟

• • •

1 8.1 为什么视频需要"加密 + 许可"

假设你花 $50 买下 Netflix 一个月。Netflix 要保证:

只有你可以看(不能复制给朋友)
只能在有限时间内看(月费到期就不能看)
只能在授权设备上看(不能导出到一个"播放器外壳"疯狂传播)
高清 4K 只给安全设备(防止有人破解后把 4K 视频泄露全网)

这就是 DRM(Digital Rights Management,数字版权管理) 要做的事。

DRM 的核心思路:

1. 加密视频内容(用一个密钥 CEK 加密每个切片)
2. 密钥分发给播放器要经过严格校验(你是谁?订阅了吗?设备靠谱吗?)
3. 密钥永远不暴露给 APP 层,只存在硬件安全区内

类比:视频就像一本加密的书。书本身(加密切片)可以随便复制,但读书用的钥匙(CEK)发放时要检查证件,且钥匙只在"密室"(硬件安全区 TEE)里使用,永远不会出门。
• • •

2 8.2 区分三个"都叫加密"的东西

新手最容易混淆:

名称 能叫 DRM 吗 强度
HTTPS / TLS 否 — 只是传输加密 抓包能绕过
HLS AES-128 否 — 轻量加密 key URL 泄漏即失效
HLS SAMPLE-AES + FairPlay FairPlay DRM
CMAF + CENC + Widevine/FairPlay/PlayReady 真正的 DRM
• • •

3 8.3 HLS AES-128(轻量加密)

这是 HLS 规范里自带的简单加密机制:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-KEY:METHOD=AES-128,URI="https://api.example.com/key?ep=123",IV=0x1234...

#EXTINF:6.000,
seg_00001.ts
#EXTINF:6.000,
seg_00002.ts
...

工作流程:

1. 切片用 AES-128-CBC 全量加密
2. Key URL 里下发 16 字节 AES 密钥
3. 播放器解密后播放

优点:

• 简单,任何播放器基本都支持
• 不需要接 DRM License Server

缺点:

Key 以明文形式在 JS 层可见(Web 端)
• 抓包就能拿到 key
不能阻止录屏、不能阻止用户用抓包工具下载

适合场景: 防"非付费用户直接盗链",配合 Signed URL + Token 使用,增加门槛。

不适合: Netflix 这种有真金白银版权的大厂;对防盗录有需求的高价值内容。

• • •

4 8.4 "真 DRM" 三巨头

DRM 厂商 覆盖平台
Widevine Google Android、ChromeOS、Chrome、Firefox、Edge、大部分智能电视
FairPlay Streaming (FPS) Apple iOS、iPadOS、macOS (Safari)、tvOS
PlayReady Microsoft Windows、Xbox、Edge、部分智能电视

问题来了:同一部电影要给 iPhone 和 Android 同时看,需要两套加密、两套 key,还要在两个 License Server 上配?

答案是:不用。有个东西叫 CENC 解决了这个问题。

• • •

5 8.5 CENC:一次加密、三家通吃

CENCCommon Encryption),ISO/IEC 23001-7 国际标准。

核心贡献:定义统一的加密格式,让 Widevine、FairPlay、PlayReady 的播放器都能解同一份加密文件

两种 CENC 模式

模式 算法 特点 DRM 支持
cenc AES-128 CTR 精确加密 Widevine、PlayReady(经典)
cbcs AES-128 CBC + Pattern 带 pattern 加密、硬件解码友好 FairPlay(必须)、Widevine(现代)、PlayReady(现代)
结论:cbcs 模式一次加密,Widevine + FairPlay + PlayReady 三家通吃。这就是现代 CMAF + CBCS 的黄金组合。
• • •

6 8.6 DRM 的完整工作流

一次带 DRM 的播放过程:

  Packager                            Key Store
  (加密切片)        KID + CEK        (密钥库/KMS)
      |                                        ^
      | 加密后的切片                          |
      v                                        |
    CDN                                  License Server
      |                                        ^
      | 1. fetch manifest                      |
      | 2. fetch encrypted segment            |
      v                            4. license 请求
  +-----------------+                     |
  |    Player       |                     |
  |  +----------+  |                     |
  |  |   CDM    |--+--- 3. challenge ---+
  |  |  (黑盒)  |<-+--- 5. license + CEK
  |  | 在 TEE 里 |  |
  |  | 解密播放  |  |
  |  +----------+  |
  +-----------------+

关键概念

术语 含义
KID(Key ID) 每个切片对应一个 key id
CEK(Content Encryption Key) 加密切片的 16 字节 AES 密钥
CDM(Content Decryption Module) 播放器里的 DRM 组件,操作在硬件安全区(TEE)中
License 服务器下发给 CDM 的东西,里面包含加密后的 CEK + 使用规则

逐步解释

1. 打包阶段:Packager 从 Key Store 要 KID 和 CEK,加密每个切片,把 KID 和 PSSH(Protection System Specific Header)写进 manifest。

2. 播放阶段:

• Player 加载 manifest → 发现有 DRM → 初始化 CDM
• CDM 生成一个 challenge(请求消息,包含设备指纹、公钥等)
• Player 把 challenge 发给 License Server(业务接口)
• License Server 校验:"这个用户订了吗?这个设备安全级别够吗?"
• 合格 → 返回 license(里面的 CEK 用 CDM 的公钥加密)
• CDM 在 TEE 里解密 license → 用 CEK 解密切片 → 直接给 GPU 渲染

CEK 全程不进内存、不进 JavaScript。这是 DRM 的根本安全保证。
• • •

7 8.7 Widevine 的 L1 / L2 / L3

Widevine 把设备分三个安全级别

等级 视频解密位置 解码位置 安全性 最高画质
L1 TEE(硬件安全区) TEE 最高 4K / HDR
L2 TEE 软件 1080p 上限
L3 软件(app 层) 软件 最低 480p / 720p 上限
为什么 4K 只给 L1?
Netflix 4K 流有 $1M+ 的版权价值。如果 L3 设备能解 4K,攻击者用虚拟机 + 逆向就能把 4K 源保存下来泄露到盗版网站。
Netflix、Disney+ 在 License Server 校验 securityLevel >= L1 才下发 4K 的 key。

如何检查设备 Widevine 级别?

• Android:用 drm_info APP 查看
• Chrome:chrome://settings/content/protectedContent → 看证书

很多主流 Android 旗舰(三星 S 系、小米 Pro 版、Pixel)是 L1;中低端很多是 L3。

FairPlay 没有等级

Apple 不像 Widevine 分级。所有苹果设备统一用 Secure Enclave 保护,实质等同于 L1。

PlayReady 有 SL150 / SL2000 / SL3000

类似 Widevine 的分级:

SL150:软件级别,对应 L3
SL2000:主流硬件级别,对应 L2
SL3000:最高硬件级别,对应 L1

• • •

8 8.8 HDCP:你的 HDMI 线也被检查了

HDCP(High-bandwidth Digital Content Protection):HDMI/DisplayPort 链路上的保护协议。

当你用 iPad 外接 HDMI 到电视放 Netflix,这条链路要协商 HDCP。如果:

• 你的 HDMI 线太老(只支持 HDCP 1.4)→ Netflix 可能只给 1080p
• 线和显示器都支持 HDCP 2.2 → 可以给 4K

License Server 常强制 requireHdcp: "2.2",否则拒绝下发 key。

一个常见坑:测试环境用 HDMI 采集卡录视频发现"黑屏"——因为采集卡不支持 HDCP 合规协议,link 被切断。这是 DRM 在起作用
• • •

9 8.9 License Server 在做什么

License Server 是业务自己搭(或买托管)。收到 challenge 后:

def handle_license_request(challenge, user_jwt):
    # 1. 验证 JWT (用户身份、订阅、剧集权限)
    user = verify_jwt(user_jwt)
    if not user.subscribed:
        return 403

    # 2. 识别 challenge 是哪种 DRM (Widevine/FairPlay/PlayReady)
    drm_type = detect_drm_type(challenge)

    # 3. 校验设备安全级别
    security_level = extract_security_level(challenge)
    if video_is_4k and security_level < L1:
        return 403  # 4K 不给不安全设备

    # 4. 找到 CEK (按 KID)
    kid = extract_kid(challenge)
    cek = key_store.get(kid)

    # 5. 调用 DRM 厂商的 SDK 生成 license
    license_blob = drm_sdk[drm_type].generate_license(
        challenge=challenge,
        cek=cek,
        policy={
            "expires_in": 86400,        # 1 天有效
            "hdcp_required": "2.2",     # HDMI 强制 HDCP 2.2
            "allow_offline": False,     # 不允许下载
            "output_protection": True,
        }
    )

    return license_blob

常见托管 SaaS:

• EZDRM
• PallyCon
• Irdeto
• BuyDRM KeyOS
• Axinom
• VdoCipher

价格:按 license 请求计费,每 1000 次约 $0.1-1。

• • •

10 8.10 SPEKE:Packager 和 Key Server 的对话协议

SPEKE(Secure Packager and Encoder Key Exchange)是 AWS 推出的标准接口,让 Packager(如 MediaPackage、Shaka Packager)用统一的方式跟不同 DRM 厂商的 Key Server 对话。

接入 SPEKE 后:

• MediaPackage 配一个 URL → 指向 EZDRM/PallyCon 的 SPEKE endpoint
• 打包时 Packager 自动向 Key Server 请求 KID + CEK
• Key Server 返回,Packager 自动生成带 DRM 的 manifest

SPEKE 是业界接入 DRM 的事实标准。配置简单,Packager 侧无需了解各 DRM 厂商的私有 API。
• • •

11 8.11 离线播放(Download to Go)

"下载到本地离线看"也要通过 DRM:

• 客户端下载加密切片到本地存储
• License Server 下发一个 persistent license(带"离线有效 48 小时"这种条款)
• CDM 把 license 存在硬件安全区
• 离线播放时用存着的 license 解密

Widevine 的 offline license、FairPlay 的 persistent license 都支持。

"下载到手机 SD 卡就能分享吗?" — 不能。密文切片没有 license 无法播放,license 又绑定设备。
• • •

12 8.12 短视频/短剧的轻量保护策略

短视频/短剧平台的内容:

• 单集价值不高(几毛到几块)
• 用户量大、License 调用开销巨大
• 多是"先看到再说"(不看就流失)

用完整 DRM 反而不划算。常见做法分三级:

L0 (免费试看段):
    明文 HLS + Signed URL
    (前几集)

L1 (中等保护):
    HLS AES-128 + 动态 IV + Signed URL
    + 客户端 SDK 做 key 派生 + 反抓包
    (绝大多数付费解锁剧集)

L2 (高):
    完整 Multi-DRM (CBCS + Widevine + FairPlay)
    (顶级独家爆款)

常见辅助保护

1. Signed URL + Token 绑定用户 / 订单

2. Key Rotation:每 N 秒换一次 key,提高破解成本

3. 客户端 SDK 内嵌 key 派生逻辑:攻击者要逆向 SDK 才能提取

4. 反录屏:
   • iOS:UIScreen.isCaptured 检测,AirPlay 强制降清晰度
   • Android:FLAG_SECURE 禁止录屏截屏

5. 反调试 / 反越狱:检测 Frida、root、LLDB

6. 动态水印:左下角小字叠 user_id + 时间戳,泄漏溯源

7. Private Encryption:云厂商(BytePlus、阿里云、腾讯云)的私有加密方案,CDN 边缘解密

• • •

13 8.13 选择建议

你的内容是什么?
|
+-- 好莱坞大片 / 独家精品长视频
|     -> 完整 Multi-DRM (CBCS + Widevine L1 + FairPlay + PlayReady SL3000)
|     -> License Server 强制 HDCP 2.2、securityLevel=L1(4K)
|
+-- 普通 VOD 视频(B 级电影、纪录片、教学)
|     -> Widevine L3 + FairPlay + PlayReady(硬件等级可放宽)
|
+-- 付费短剧 / 中低价值付费视频
|     -> HLS AES-128 + Signed URL + 反录屏
|     -> 客户端 SDK 做 key 派生
|
+-- 用户付费订阅下的自制内容
|     -> 按版权方要求灵活(多半 DRM + 水印)
|
+-- 免费视频 / UGC
      -> 不加密,用 Signed URL 防盗链即可
• • •

14 8.14 动手:用 Shaka Packager 做 DRM 打包

动手试一试。Shaka Packager 是 Google 开源的 DRM 打包工具。

生成 Widevine + FairPlay(CBCS 模式)

packager \
  in=video.mp4,stream=video,init_segment=v/init.mp4,segment_template=v/seg_$Number$.m4s \
  in=audio.mp4,stream=audio,init_segment=a/init.mp4,segment_template=a/seg_$Number$.m4s \
  --protection_scheme cbcs \
  --enable_raw_key_encryption \
  --keys label=VIDEO:key_id=31323334...:key=32333435...,\
         label=AUDIO:key_id=31323334...:key=32333435... \
  --protection_systems Widevine,FairPlay \
  --hls_master_playlist_output master.m3u8 \
  --mpd_output manifest.mpd

生产环境不会硬写 key,会接 SPEKE endpoint

packager \
  ... \
  --key_server_url https://speke.ezdrm.com/v2 \
  --content_id 'my-video-123' \
  --protection_systems Widevine,FairPlay,PlayReady \
  ...
• • •

本章要点回顾

1. DRM = 内容加密 + 严格 key 分发 + 硬件级解密保护。
2. HLS AES-128 不是真 DRM,只是轻量加密。
3. 三大 DRM:Widevine(Google)、FairPlay(Apple)、PlayReady(微软)。
4. CENC(CBCS 模式) 让一份 CMAF 文件三家 DRM 通吃。
5. Widevine L1 = 4K 通行证;L3 最多给到 720p。
6. HDCP 2.2 是 4K 外接显示器的前置条件。
7. 短剧/短视频一般用 轻量加密 + 反录屏,而不是真 DRM。
8. 生产环境用 SPEKE 接 EZDRM / PallyCon 等托管服务。
• • •
← 上一章:CDN 分发 目录 下一章:播放器 →
© 2026 Zmead · VOD 流媒体技术全解