内容打包和交付

PlayReady 的基本功能是保护内容免受未经授权的使用。 为此,必须先对内容进行加密,并在内容中插入关联的 PlayReady 标头。 执行此操作的系统是打包程序,也称为加密程序,有时与编码器集成。

本主题介绍使用 PlayReady 加密和传送内容的各种方法。

打包 PlayReady 内容 - 加密和插入 DRM 标头

加密明文内容的过程包括定义一个或多个加密密钥,使用这些密钥来加密构成内容的字节,并将 DRM 标头插入内容文件中的内容 (的内容,或者如果内容有一个) ,则插入清单中。

由 PlayReady 保护的所有加密内容都必须在加密文件中插入 PlayReady 标头。 PlayReady 客户端使用此 PlayReady 标头来查找或获取该特定内容片段的许可证。 PlayReady 标头由采用 UTF-16 编码的 XML 组成。 它包括用于加密内容的密钥标识符) (KID,以及用于加密内容的默认 URL、客户端用于从中获取许可证(如果未提供其他 URL)以及任何自定义属性。  

打包清除内容的任何打包程序都需要实现 PlayReady 标头生成器,以生成标头并将其嵌入到加密内容中。 必须根据 PlayReady 标头规范实现 PlayReady 标头。 在打包程序中创建 PlayReady 标头生成器有多种方法:

  • 根据 PlayReady 标头规范自行开发它。 
  • 使用生成 PlayReady 标头的 PlayReady 服务器 SDK API。 
  • 使用生成 PlayReady 标头的Windows 10 API。 

加密的内容可以包含多个 DRM 标头,包括 PlayReady 标头以及第三方 DRM 标头。 有关其工作原理的详细信息,请参阅 “使用加密工具”。

内容类型

PlayReady 可用于保护音频和视频内容。 用于 PlayReady 的最常见编码类型包括 MPEG-4 AVC (H.264) 、高效视频编码 (HEVC) H.265 标准以及 AV1 标准。 PlayReady 不限于这些标准,可用于客户端设备上支持的任何音频和视频格式。

PlayReady 版本 1 和 2 允许你创建一个受保护的包,其中包含的内容不限于音频或视频有效负载。 这些包(称为信封)可以包含数据文件和 (可执行文件集合等文件,例如,应用程序存储) 分发的应用程序、图片 (例如屏幕壁纸) 或电子书。 此内容是通过将文件封装到信封文件中打包的,可以采用类似于音频/视频内容的方式解密。

PlayReady 3.0 及更高版本中不再支持这些非音频/视频内容类型。 

加密工具

Microsoft 不包括打包程序作为 PlayReady 可交付结果的一部分。 PlayReady 会根据编码器使用的常见加密标准提供规范。 因此,加密格式不是特定于 PlayReady,而是文件格式的函数。 目前最常用的加密格式是通用加密 ISO 标准格式 ISO/IEC 23001-7

基本上,可以创建自己的打包程序,也可以处理任何类型的开放源代码加密程序 (,例如 ffmpeg) 。 此外,如果要使用 PlayReady ((如调音、Elemental、Ericsson、Wowza、Allegro) )加密内容,则可以与专业编码器公司合作。 Azure 媒体服务还提供用于清除内容的打包功能。

使用加密工具

PlayReady 支持 ISO IEC 通用加密标准。 此过程与 基本加密和许可过程中所述相同,其他 DRM 除外,标头将包含在其他 DRM 中,每个标头作为保护系统特定标头的有效负载, ('pssh') 框,由该 DRM 的 SystemID 标识。 所有这些标头都具有自己的语法,用于指定 KID 或最终访问内容密钥所需的信息。 对于所有 DRM,此资产的内容密钥将相同。

Common Encryption Diagram

使用加密密钥

有多种不同的方法来加密资产。 最复杂到最复杂的最复杂程度取决于你想要在系统中设计的复杂性以及服务的需求。

例如,假设自适应流资产,如下图所示。 它具有四种不同的视频质量、一个音频曲目和一个副标题曲目。它以分段 MP4 文件进行编码,每段 2.0 秒。 它是一种资产,它以多种格式提供,具体取决于客户端希望播放的内容。 平滑流式处理、HLS 和 DASH 是最常见的变体。 在播放期间,客户端 (视频播放器) 将连续通过网络下载资产段,从适当的视频轨道中选择每次播放时间,以便尽可能高地保持播放质量,因为网络带宽、播放速度和其他有限的资源(如播放器功能)。 此逻辑称为自适应流式播放,由播放器中实现的一些启发式处理规则控制。 

Content Assets and Playback

仅使用一个密钥加密资产

加密这些资产的最简单方法是使用单个内容密钥加密所有内容, (通常不会对字幕进行加密,而不是违反任何规则,但它们通常保存在明确的) 中。 使用一个内容密钥使许可证服务器的生活变得简单,因为许可证服务器必须提供一个密钥 {KID, CK}。 在播放发生之前,客户端通常会获取此密钥。

Content Assets and Encryption Keys (I)

注意

PlayReady 客户端可以主动或被动地获取许可证。 有关这两种模式的说明,请参阅 “许可证获取 ”页。

使用两个密钥加密资产,将一个密钥指定为最高质量

过去几年来,由于要求仅允许某些最可靠的客户端使用最高质量的内容,因此使用每个资产的多个密钥有一些增强功能。 随着超级 HD (4K) 内容的到来,并且添加了高动态范围 (HDR) 以实现更高的颜色内容,工作室和服务需要仅在某些客户端上提供最高质量,这些客户端通常内置硬件 DRM。 在此方案中,资产使用一个内容密钥 {kid1, ck1} 对所有曲目进行加密,但使用其他内容密钥 {kid2, ck2} 加密的 4K 轨迹除外。 即:

  • 只允许播放完整的 HD (而不是 4K 轨道) 的客户端将交付 PlayReady 许可证,包括 {kid1, ck1}。 
  • 允许播放最多 4K 的客户端将交付 PlayReady 许可证,包括 {kid1, ck1} 和 {kid2, ck2}。

使用此额外的复杂性,该服务可以确保某些客户端无法解密 4K 跟踪,并且 4K 跟踪只能保留给服务最信任的客户端。 

Content Assets and Encryption Keys (II)

使用每个跟踪一个密钥加密资产

该服务可能具有更复杂的权限映射来强制实施。 某些客户端可能只允许访问某些视频曲目、某些视频质量以及某些音频曲目,具体取决于其屏幕大小、其可靠性、输出和位置。 为了确保服务在未来强制实施一组任意限制方面具有完全的灵活性,它可能会使用特定于每个跟踪的内容密钥加密资产。例如:

  • 只允许播放 720p 的客户端将交付 PlayReady 许可证,包括 {kid1、ck1}、{kid2、ck2}和 {kidA、ckA}。 
  • 允许播放最多 4K 的客户端将交付 PlayReady 许可证,包括 {kid1, ck1}, {kid2, ck2}, {kid3, ck3}, {kid4, ck4}, 和 {kidA, ckA}。 
  • (以前) 下载的资产的 4K 版本的客户端将交付 PlayReady 许可证,包括 {kid4,ck4} 和 {kidA, ckA}。 

Content Assets and Encryption Keys (III)

定期更改加密密钥 (多周期资产) — 许可证轮换

在某些情况下,服务希望偶尔更改加密密钥,通常位于程序边界。 例如,实时线性流具有多个时段,可以自由播出希望每个人都有权访问的内容,然后是限制为订阅者的某些内容。 更改程序边界处的加密密钥允许服务向所有用户提供免费的空密钥 {KIDi1, CKi1} ,并仅向已成功登录服务的订阅者提供内容密钥 {kidi2, cki2}。

请注意,此许可证轮换并非非常可缩放:每次加密密钥更改时,所有客户端都使用自己的许可证请求请求新的加密密钥。 这可能会导致具有大量客户端的系统中的许可证请求高峰。 

Content Assets and Encryption Keys (IV)

频繁更改加密密钥 - 可缩放的密钥轮换

PlayReady 中有一种高级机制,称为可缩放密钥轮换 (而不是许可证轮换) 。 此方法将嵌入式许可证Microsoft Store (ELS) 存储在实际内容的流中。 在此机制中,用于加密 A2 段本身的密钥称为叶密钥 {kidA2, ckA2},并在段 A2 的 ELS 中传递,该密钥本身使用与跟踪 A 的所有段相同的单独密钥进行加密,称为根密钥 {kidRA, ckRA}。 如果你熟悉 MPEG-2 TS 和 Control Word 加密,则除了加密更强且更灵活外,这是一种类似的机制。

假设这个资产是实时线性电视。 当客户端尝试播放时,它会在流清单的 PlayReady 标头中找到 kidRA,并请求 kidRA 的许可证。 许可证服务器返回根密钥 {kidRA, ckRA} 的根许可证。 然后,客户端分析段 A1 并在段的标头中发现 ELS。 分析此 ELS 时,它会在此 ELS 中找到叶许可证 {kidA1, ckA1}。 使用根密钥 {kidRA、ckRA} 和叶许可证 {kidA1, ckA1},它可以获取 ckA1 的值,并解密和呈现段 A1。 

PlayReady 可缩放密钥轮换功能极其可缩放,因为它不需要客户端在每次更改加密密钥时联系许可证服务器。 它将许可证请求量保持在尽可能最低,因为客户端只需要每个流的许可证服务器中的一个根许可证,或跟踪。它允许加密密钥像每个段一样频繁轮换,通常每隔两秒轮换一次(如有必要)。 

Content Assets and Encryption Keys (V)

请参阅

密钥和密钥 ID (KID)