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

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

99
0
0
0

术语词汇表

加密媒体扩展(Encrypted Media Extensions,EME)

加密媒体扩展(EME)是 W3C 制定的 Web 标准 API,定义了 Web 应用与内容解密模块(CDM)之间的标准化接口,用于在浏览器中播放 DRM 保护的加密媒体内容。EME 的核心接口包括 Navigator.requestMediaKeySystemAccess()(请求访问指定的 DRM 系统)、MediaKeySystemAccess.createMediaKeys()(创建媒体密钥对象)、MediaKeys.createSession()(创建密钥会话)以及 MediaKeySession 的 generateRequest()、update()、load() 等方法。EME 的设计目标是提供一个与具体 DRM 系统无关的标准化接口,使得同一个 Web 播放器可以使用不同的 DRM 系统播放加密内容。EME 是 HTML5 媒体播放生态的重要组成部分,与 MediaSource Extensions(MSE)和 HTML5 Video/Audio 元素共同构成了 Web 上完整的媒体播放技术栈。

数字版权管理(Digital Rights Management,DRM)

数字版权管理(DRM)是用于控制数字内容的访问、使用和分发的技术手段和法律框架的统称。DRM 系统通过加密技术保护数字内容(如视频、音频、电子书等),只有经过授权的用户和设备才能解密和使用内容。DRM 技术的核心组成部分包括:加密算法(用于加密内容数据)、密钥管理系统(用于安全地分发和存储解密密钥)、许可证服务器(用于验证用户权限并分发许可证)、客户端解密模块(用于在用户设备上解密和播放内容)。在 Web 环境中,DRM 面临着独特的挑战——浏览器是开放平台,用户可能尝试绕过 DRM 保护。EME 通过标准化接口和硬件安全级别的 CDM 实现来应对这些挑战。常见的商业 DRM 系统包括 Widevine、PlayReady、FairPlay Streaming、Nagra 等。

内容解密模块(Content Decryption Module,CDM)

内容解密模块(CDM)是 DRM 系统中负责实际解密媒体数据的软件或硬件组件。CDM 运行在浏览器或操作系统提供的安全环境中,接收加密的媒体数据和解密密钥,输出解密后的明文数据供解码器处理。CDM 的关键特性是其安全隔离性——解密密钥和解密过程在受保护的环境中运行,Web 应用无法直接访问原始密钥或解密后的数据,这有效防止了通过 JavaScript 提取密钥或录制解密后内容的攻击。不同的 DRM 系统使用不同的 CDM 实现:Widevine 的 CDM 集成在 Chrome 浏览器和 Android 系统中,PlayReady 的 CDM 集成在 Edge 浏览器和 Windows 系统中,FairPlay 的 CDM 集成在 Safari 浏览器和 Apple 设备中。CDM 的安全级别(如 L1 硬件安全、L3 软件安全)决定了其保护能力的强度。

许可证(License)

许可证是 DRM 系统中用于授权客户端解密特定加密内容的数据结构。许可证由许可证服务器(License Server)生成和签发,包含了客户端解密内容所需的信息。一个典型的许可证包含以下数据:密钥列表(每个密钥对应一个 Key ID,包含实际的解密密钥值)、使用权限(如允许播放的次数、时间范围、设备数量等)、过期时间(许可证的有效期限)、以及数字签名(用于防止许可证被篡改)。许可证的获取过程称为"许可证协商"(License Negotiation)——客户端构造包含 initData 的许可证请求,发送到许可证服务器,服务器验证请求者的身份和权限后生成许可证并返回。许可证可以是临时的(Non-persistent,仅在当前会话有效)或持久化的(Persistent,可存储到本地用于离线播放)。

密钥标识符(Key ID)

Key ID(密钥标识符)是 DRM 系统中用于唯一标识一个加密内容的密钥的标识符。每个加密的媒体内容(或媒体内容的某个轨道/片段)都关联一个特定的 Key ID。当浏览器遇到加密的媒体数据时,会从数据中提取 Key ID,然后请求包含对应解密密钥的许可证。Key ID 通常嵌入在媒体文件的元数据中(如 MP4 文件的 Protection Scheme Information box 中),或者通过应用层逻辑传递给 EME。Key ID 的格式和长度取决于具体的 DRM 系统——Widevine 通常使用 16 字节的二进制 Key ID,PlayReady 使用自定义的 Key ID 格式。Key ID 的唯一性确保了不同内容使用不同的密钥加密,许可证服务器可以为不同的 Key ID 分发不同的密钥和权限。

初始化数据(initData)

initData(Initialization Data,初始化数据)是 EME API 中用于传递给 CDM 的初始数据,包含了 CDM 需要用来构造密钥请求的信息。initData 的格式和内容取决于具体的 DRM 系统和媒体容器格式。对于基于 CENC 加密的 MP4 内容,initData 通常包含 PSSH(Protection System Specific Header)box,其中封装了 DRM 系统所需的初始化参数(如 Key System 标识符、Key ID 列表等)。对于 HLS(HTTP Live Streaming)内容,initData 使用 FairPlay 的 SKD(Secure Key Delivery)格式。initData 通常通过两种方式获取:从媒体文件的 init segment 中解析(对于 MSE 播放场景),或者从 encrypted 事件的事件对象中获取(对于原生 Video 元素播放场景)。initData 是构造许可证请求的必要参数,没有正确的 initData,CDM 无法生成有效的密钥请求。

密钥会话(MediaKeySession)

MediaKeySession 是 EME API 中表示一个密钥管理会话的对象。每个 MediaKeySession 关联一组密钥和一个 CDM 内部会话。通过 MediaKeySession,Web 应用可以:生成密钥请求(generateRequest())、安装许可证中的密钥(update())、加载持久化会话(load())、监听密钥状态变化事件(keystatuseschange)和许可证消息事件(message)。MediaKeySession 有创建(created)、加载中(loading)和活跃(active)等状态。一个 MediaKeys 对象可以管理多个 MediaKeySession,每个会话可以关联不同的 Key ID 和密钥。会话的状态信息(如每个 Key ID 的当前状态:usable、expired、released、output-restricted 等)通过 keystatuseschange 事件通知 Web 应用。会话可以在不需要时调用 close() 方法关闭以释放资源。

通用加密(Common Encryption,CENC)

通用加密(CENC)是 ISO/IEC 23001-7 定义的媒体加密标准,旨在为不同的媒体容器格式(如 MP4、WebM 等)提供统一的加密方案。CENC 定义了两种加密模式:CENC AES-CTR 模式(使用 AES 计数器模式加密)和 CENC AES-CBCS 模式(使用 AES 密码块链接模式与模式调制)。CENC 的核心优势在于标准化——不同的 DRM 系统可以使用相同的加密方案加密内容,减少了内容提供商需要维护的加密版本数量。CENC 的加密信息存储在 MP4 文件的 Protection Scheme Information box 中,包括加密算法标识、密钥 ID、以及每个样本的加密参数(如初始化向量和加密范围)。CENC 是目前 Web 流媒体中使用最广泛的加密标准。

密钥请求(Key Request / License Request)

密钥请求(也称为许可证请求)是 CDM 生成并传递给 Web 应用的数据,包含了向许可证服务器请求解密密钥所需的信息。当 MediaKeySession 的 generateRequest() 方法被调用后,CDM 根据提供的 initData 构造密钥请求,然后通过 message 事件将请求传递给 Web 应用。密钥请求通常包含以下信息:Key System 标识符(如 com.widevine.alpha)、请求类型(如 license-request 或 individualization-request)、CDM 生成的请求数据(通常是加密的,包含 CDM 的公钥或证书信息)、以及安全级别信息。Web 应用将密钥请求转发到许可证服务器,服务器解密请求、验证请求者的身份和权限、生成包含解密密钥的许可证,然后返回给客户端。密钥请求的格式由具体的 DRM 系统定义,不同 DRM 系统的请求格式不兼容。

安全级别(Security Level)

安全级别是 EME 规范中定义的用于标识 CDM 安全保护能力的分级指标。不同的安全级别意味着不同的安全保护机制和保护强度。Widevine 定义了三个安全级别:L1 表示硬件级别的安全保护,密钥管理和解密操作在设备的可信执行环境(TEE)中运行,提供最高级别的安全性,通常用于保护 4K/HDR 等高价值内容;L2 表示软件级别的安全保护,密钥管理在 TEE 中运行但解密操作在软件中执行;L3 表示完全的软件级别安全保护,密钥管理和解密都在软件中运行,安全性最低。PlayReady 定义了 SL150(软件安全)、SL2000(增强软件安全)和 SL3000(硬件安全)等级别。内容提供商根据内容的价值和授权要求选择需要的安全级别——通常 4K 和 HDR 内容要求 L1 级别的安全保护。

持久化许可证(Persistent License)

持久化许可证是 EME API 中支持将许可证数据持久化存储到本地的机制。普通的 EME 许可证是临时的,存储在浏览器内存中,页面刷新后需要重新获取。持久化许可证允许将许可证数据(包括密钥和使用权限)存储到浏览器的持久化存储(如 IndexedDB)中,使应用在后续会话中无需重新获取许可证即可解密播放内容。持久化许可证是实现离线播放功能的技术基础——流媒体应用(如 Netflix)允许用户下载加密内容到本地,配合持久化许可证实现离线播放。持久化许可证通过 MediaKeySession 的 storage 属性访问存储 API,使用 store() 方法存储许可证、load() 方法加载已存储的许可证、和 remove() 方法删除存储的许可证。持久化许可证支持使用次数限制和过期时间等权限约束。

媒体源扩展(MediaSource Extensions,MSE)

媒体源扩展(MSE)是 W3C 制定的 Web API,允许 JavaScript 动态地向 HTML5 Video/Audio 元素提供媒体数据,实现自定义的媒体流传输和缓冲管理。MSE 与 EME 的关系密切——在播放 DRM 保护的流媒体内容时,通常先使用 MSE 将加密的媒体片段追加到 SourceBuffer 中,然后使用 EME 对加密数据进行解密。MSE 的核心接口包括 MediaSource(媒体源对象)、SourceBuffer(源缓冲区对象)和 ManagedMediaSource(自适应媒体源对象)。使用 MSE 的典型流程是:创建 MediaSource 对象并绑定到 Video 元素的 src 属性、在 SourceBuffer 中追加媒体数据、处理 update 事件以管理缓冲。MSE 使 Web 应用能够实现自定义的自适应比特率切换(ABR)逻辑,是 Dash.js、hls.js、Shaka Player 等开源流媒体播放器的技术基础。

PSSH Box(Protection System Specific Header Box)

PSSH Box 是 MP4 媒体文件格式中用于存储 DRM 系统特定初始化数据的结构。PSSH Box 是 ISO Base Media File Format(ISO 14496-12)定义的 Box 类型之一,位于文件的顶层或 moov/trak 级别。PSSH Box 的结构包括:SystemID(16 字节的 UUID,标识 DRM 系统类型)、KID 列表(可选,包含该 PSSH 关联的 Key ID 列表)、以及 DRM 系统特定的数据(Data,不同 DRM 系统使用不同的数据格式)。当 CDM 需要初始化时,会从媒体文件中读取 PSSH Box 的内容作为 initData 的一部分。不同的 DRM 系统使用不同的 SystemID:Widevine 的 SystemID 为 edef8ba9-79d6-4ace-a3c8-27dcd51d21ed,PlayReady 的 SystemID 为 9a04f079-9840-4286-ab92-e65be0885f95。一个 MP4 文件可以包含多个 PSSH Box 以支持不同的 DRM 系统。

自适应比特率流(Adaptive Bitrate Streaming,ABR)

自适应比特率流是一种根据网络条件和设备能力动态调整媒体质量的流媒体传输技术。ABR 将视频内容编码为多个不同比特率和分辨率的版本(称为"轨道"或"质量级别"),播放器根据可用带宽、缓冲区状态和设备能力选择最合适的质量级别进行播放。当网络带宽充足时播放高质量版本,当网络拥塞时降级到低质量版本以避免缓冲中断。常见的 ABR 协议包括 DASH(Dynamic Adaptive Streaming over HTTP)、HLS(HTTP Live Streaming)和 MSS(Microsoft Smooth Streaming)。在 DRM 内容播放场景中,每个质量级别的媒体片段都可能使用不同的密钥加密(或所有质量级别使用相同密钥),EME 负责管理这些密钥的获取和使用。ABR 算法与 EME DRM 的协同工作是流媒体播放器开发的核心技术挑战之一。

合规性与互操作性(Compliance and Interoperability)

合规性指产品(如浏览器、CDM)符合 EME 规范和相关 W3C 标准的程度。互操作性指不同厂商的实现(如不同浏览器的 EME 实现)之间能够正确协作的能力——即使用相同 DRM 系统和相同加密格式的内容能够在所有支持该 DRM 的浏览器中正确播放。W3C 通过标准化 EME 规范和提供测试套件来促进合规性和互操作性。然而,由于 DRM 系统的封闭性和各厂商实现的差异,实际的互操作性可能存在问题。例如,同一段使用 Widevine 加密的视频可能在 Chrome 和 Firefox 中正常播放,但在某些旧版浏览器中可能因为 CDM 版本差异或安全级别要求而无法播放。内容提供商通常需要针对不同的浏览器和设备进行兼容性测试,以确保内容能够被尽可能广泛的用户访问。