使用 Microsoft PlayReady 的 DASH 内容保护

使用通用加密(ISO/IEC 23001-7)和 Microsoft PlayReady 为动态自适应流式处理(ISO/IEC 23009-1)的实时和按需配置文件实施内容保护。

当前版本

当前版本 版本 1.3 于 2018 年 2 月 15 日发布的 2018 年 2 月 15 日

有关详细信息,请参阅 更改历史记录

抽象

ISO/IEC 23009-1 ISO 基础媒体文件格式按需和实时 DASH 配置文件可与 ISO/IEC 23001-7、“ISO 基本媒体文件格式文件中的通用加密”规范一起使用。 Microsoft PlayReady 支持 ISO/IEC 23001-7 和 ISO/IEC 23009-1。 此规范详细介绍了如何创建 ISO/IEC 23009-1 媒体演示说明文件,指示对实时和按需自适应流式处理方案使用 Microsoft PlayReady for ISO/IEC 14496-12 媒体表示形式。

法律声明

© 2018 Microsoft 公司。 保留所有权利。 本文档提供“as-is”。本文档中包含的信息(包括 URL 和其他 Internet 网站引用)可能会更改而不通知。 你承担使用它的风险。

本文档不提供任何Microsoft产品中任何知识产权的任何法律权利。 可以复制本文档并将其用于内部参考目的。 不得从本文档中删除任何通知。

内容

部分 标题
1 简介
1.1 范围
1.2 约定
1.3 术语、缩写和首字母缩略词
1.4 引用
1.5 更改历史记录
2 PlayReady DASH 内容保护方案
2.1 DASH ContentProtection 描述符元素
2.2 实施建议和要求
3 媒体演示文稿说明示例
3.1 在初始化段或媒体内容 中 正确的 PRO
3.2 在 MPD 中包含 PlayReady 对象

桌子 标题
表 1 跟踪加密框
表 2 KID 表示形式示例

1. 简介

MPEG 的动态自适应流式处理通过 HTTP 标准 [DASH] 指定将媒体内容从 HTTP 服务器传送到 HTTP 客户端的格式。 在 DASH 中,媒体内容呈现由媒体演示文稿说明(MPD)文件描述。 MPD 为“段”提供资源标识符,以及媒体演示文稿中这些资源的上下文。

在 DASH 中,媒体演示文稿由时间段([DASH],第 5.3.2 节)组成。 在时间段内,媒体内容将排列为一组称为适应集([DASH],第 5.3.3 节)的可互换编码版本。 每个适应集都包含表示形式([DASH], 第 5.3.5 节) - 可交付的媒体内容组件的编码版本。

ContentProtection 描述符元素可能与适应集或表示形式相关联,以指示加密方案,并且可以添加一个或多个 ContentProtection 描述符元素以启用 DRM 许可证获取([DASH],第 5.8.4.1 节)。

1.1 范围

如何使用 Microsoft PlayReady 作为 ISO/IEC 23009-1 DASH 媒体演示文稿说明文件中的内容保护方案。

1.2 约定

本文档中的关键字“MUST”、“MUST NOT”、“REQUIRED”、“SHOULD”、“SHOULD”、“SHOULD”、“MAY”和“OPTIONAL”将被解释为 [RFC2119]。 即:

  • “MUST”、“REQUIRED”和“SHALL”表示定义是规范的绝对要求。

  • “不得”和“不得”意味着定义是绝对禁止规范。

  • “SHOULD”和“RECOMMENDED”意味着可能有有效理由忽略特定项目,但在选择其他课程之前,必须理解并仔细权衡全部含义。

  • “不应”和“不建议”是指特定行为可接受时可能存在有效原因,但在实施此标签描述的任何行为之前,应理解完整含义并仔细权衡案例。

  • “MAY”和“OPTIONAL”表示该项确实是可选的。

返回顶部

1.3 术语、缩写和首字母缩略词

1.3.1 术语

术语 描述
适应集 在 DASH 中,一组可互换编码版本的一个或多个媒体内容组件。
内容保护 (CP) 保护受保护资源后将其传送到客户端设备的过程。
嵌入式许可证 存储在 PlayReady 对象(PRO)中的许可证。
嵌入式许可证存储(ELS) 用于存储嵌入式许可证的 PlayReady 对象(PRO)中的记录。
全局唯一标识符 (GUID) 唯一引用号,表示为连字符分隔的 32 个字符十六进制字符串,通常存储为 128 位整数。
初始化段 包含呈现媒体段中封装的媒体流所需的元数据的 DASH 段;如果为 ISO 媒体,则为文件标头。
密钥标识符(KID) 唯一标识保护内容、许可证或其他敏感信息的密钥的 UUID;如果为 PlayReady,则存储为 GUID。
密钥轮换 定期更改与媒体关联的加密密钥。 通常,这意味着
叶许可证 一个许可证,其内容密钥使用根许可证中的内容密钥进行加密。
许可证 包含策略和加密内容密钥的 PlayReady 数据结构。
许可证获取 URL (LAURL) 许可证获取 PlayReady Web 服务 URL。
许可证链 许可证链由根许可证和叶许可证组成。 叶许可证可能有多个根许可证,而根许可证可能具有多个叶许可证。 每个对存在许可证链。
实时配置文件 ISO 基媒体文件格式实时配置文件(请参阅 [DASH] 的第 8.4 节)。 实时配置文件针对实时编码进行了优化,使用模板生成的 URL 对每个电影段进行编码后,可以立即请求每个电影段。
媒体演示 可在 ISO/IEC 23009-1 中定义的可下载和呈现为媒体演示文稿的元数据和媒体数据的集合。
媒体演示说明 (MPD) ISO/IEC 23009-1 中定义的媒体演示文稿的正式 XML 文档说明。
媒体段 符合媒体格式并启用播放的 DASH 段,可能与其他媒体段和/或初始化段结合使用。
电影盒 ('moov') 在 ISO 基础媒体文件格式中,其子框定义媒体演示文稿的元数据 [ISOBFF]。
电影片段框 ('moof') 在 ISO 基础媒体文件格式中,电影片段框按时间扩展媒体演示文稿 [ISOBFF],并包含在 DASH 媒体段中。
按需配置文件 ISO 基媒体文件格式按需配置文件(请参阅 [DASH] 的第 8.3 节)。 按需配置文件提供对按需内容的基本支持。 每个表示形式都作为单个段提供,子细分在适应集的表示形式之间对齐,子分段以对应于电影段的流接入点开头。
时期 媒体演示文稿的间隔。
PlayReady 对象 (PRO) 包含可变数量的记录的二进制对象,包括可选的 PRH 和 ELS 记录。 这些记录包含与许可证和许可证获取相关的信息(请参阅 [PRO])。
保护系统特定标头框 ('pssh') 在 ISO 基础媒体文件格式中,“保护系统特定标头”框包含特定内容保护系统获取许可证和解密媒体内容所需的元数据 [ISOBFF]。
表示法 定义的时间段(例如 ISO 媒体文件)中的媒体内容组件替代选项之一。 MPD 表示形式元素([DASH], 第 5.3.5 节)描述。
PlayReady 标头 (PRH) PlayReady 对象(PRO)中的一条记录,其中包含解密媒体内容所需的元数据,包括一个或多个密钥 ID 和许可证获取 URL(请参阅 [PRH])。
根许可证 一个许可证,其内容密钥用于加密叶许可证中的内容密钥
在 DASH 中,MPD 中引用具有 HTTP-URL 和可选字节范围的媒体资源的元素。
段索引 媒体段中与 MPD 分开的时间范围到字节范围索引映射,定义为 ISO 媒体“sidx”框。
流访问点 (SAP) 表示形式中的位置,它仅使用来自该位置的表示形式数据来启用媒体段播放。
Subsegment 在 DASH 中,这是由段索引编制索引的媒体段内的单位。 电影段在 DASH 按需配置文件中作为子细分进行寻址,但 DASH 实时配置文件中的细分。
“跟踪加密”框 在 ISO 基础媒体文件格式中,“跟踪加密”框(“tenc”)描述了跟踪的默认加密参数 [CENC], [ISOBFF]。
UUID 用数学唯一标识符表示为 [X.667] 中指定的数字或字符串
点播视频 (VOD) 系统使最终用户能够按需选择和观看视频内容。 DASH 实时配置文件和 DASH 按需配置文件都可用于 VOD 演示。

1.3.2 缩写和首字母缩略词

Abbr. 意义
CP 内容保护
破折号 通过 HTTP 进行动态自适应流式处理
ELS 嵌入式许可证存储
GUID 全局唯一标识符
孩子 密钥标识符
LAURL 许可证获取 URL
MPD 媒体演示说明
PRH PlayReady 标头
PRO PlayReady 对象
树液 流访问点
UUID 通用唯一标识符
VOD 点播视频

1.4 引用

1.4.1 规范引用

法典 规范参考
[CENC] ISO/IEC FDIS 23001-7:2016“信息技术 - MPEG 系统技术 - 第 7 部分:ISO 基础媒体文件格式文件中的常见加密”https://www.iso.org/standard/68042.html
[DASH] ISO/IEC 23009-1:2014,第二版,“信息技术 - 通过 HTTP 动态自适应流式传输(DASH)-第 1 部分:媒体演示说明和段格式”http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip
[EME] “加密媒体扩展”,W3C 建议 2017 年 9 月 18 日https://www.w3.org/TR/encrypted-media/
[PRH] “Microsoft PlayReady 标头,请参阅 PlayReady 标头规范
[PRO] “Microsoft PlayReady 对象,请参阅 PlayReady 标头规范
[RFC2119] 1997年3月,S. Bradner,“用于指示要求 级别的 RFC 中的关键 词”,
[RFC3629] “UTF-8,ISO 10646 的转换格式”,F. Yergeau,2003年11月,http://tools.ietf.org/html/rfc3629
[RFC4122] “一个通用唯一的伊登蒂弗(UUID)URN Namespace”,P. Leach,M. Mealling,R. Salz,2005年7月,http://www.ietf.org/rfc/rfc4122.txt
[X.667] “信息技术 - 开放系统互连 - OSI 注册机构操作过程:生成和注册通用唯一标识符(UUID)及其用作 ASN.1 对象标识符组件”系列 X ITU-T 建议http://www.itu.int/rec/T-REC-X.667-201210-I/en

1.4.2 信息引用

法典 信息参考
[CPSID] DASH 行业论坛“保护系统特定的标识符”,http://dashif.org/identifiers/content_protection/
[DASHIF] DASH 行业论坛,“实施指南:DASH-IF 互操作性点”,2017 年 9 月 7 日,版本 4.1,https://dashif.org/docs/DASH-IF-IOP-v4.3.pdf
[ISOBFF] ISO/IEC 14496-12、第四版(更正版本 2012-09-15)、“信息技术 - 音像对象的编码 - 第 12 部分:ISO 基础媒体文件格式”,http://standards.iso.org/ittf/PubliclyAvailableStandards/c061988_ISO_IEC_14496-12_2012.zip

返回顶部

1.5 更改历史记录

版本 日期
版本 1.3 2018 年 2 月 15 日 阐明对 16 字节初始化向量(16 字节 IV)的支持。
版本 1.2 2014 年 10 月 8 日 1) CENC 第 2 版更改
2) 与 DASH MPD ContentProtection 描述符元素相关的更改
3) 术语添加和说明的更改
4) 参考最新版本的规范性和信息性参考的更改
5) 在 ISOBFF 框、PRO 和 PlayReady 许可证中阐明 KID 表示形式和结束性。
版本 1.1 2013 年 2 月 18 日 阐明 PlayReady SystemID 表示形式。
PlayReady SystemID 为 9a04f079-9840-4286-ab92-e65be0885f95。
big endian 表示形式 = {0x9A、 0x04, 0xF0, 0x79, 0x98, 0x40, 0x42, 0x86, 0xAB, 0x92, 0xE6, 0x5B, 0xE0, 0x88, 0x5F, 0x95} 。
小字节表示形式 = {0x79, 0xF0, 0x04, 0x9A, 0x40, 0x98, 0x86, 0x42, 0xAB, 0x92, 0xE6, 0x5B, 0xE0, 0x88, 0x5F, 0x95}。
版本 1.0 2012 年 7 月 17 日 初始版本



2. PlayReady DASH 内容保护方案

Microsoft PlayReady 支持新的 ISO/IEC 23009-1 [DASH] 和 ISO/IEC 23001-7 [CENC] 标准。 此规范详细介绍了如何为按需([DASH], 第 8.3 节) 和实时 ([DASH], 第 8.4 节) 自适应流式处理方案创建Microsoft PlayReady for ISO 基础媒体文件格式媒体表示形式的 DASH 媒体演示文件。

此规范的重点有四种方案是 VOD 或媒体的实时演示:

  1. 使用单个密钥进行加密

  2. 其中某些内容已加密,某些内容处于明文中

  3. 带有密钥轮换(不含嵌入式叶许可证)

  4. 使用嵌入叶许可证进行密钥轮换

2.1 DASH ContentProtection 描述符元素

DASH 为 ISO 媒体定义两种类型的 ContentProtection 描述符元素([DASH] 第 5.3.7.2 节-表 9、5.8.5.2 和 5.8.4.1):

  1. 使用 @schemeIdUri=”urn:mpeg:dash:mp4protection:2011” @value=”<scheme>”
  2. 使用 @schemeIdUri=”urn:uuid:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx” @value=”DRMNAME version”

第一个描述符类型指示每个加密 ISO 媒体跟踪中包含在保护方案信息框('schi')中的加密方案的四个字符代码(“4CC”)。此描述符类型应始终存在,以便玩家知道内容已加密,并且可以在尝试下载并播放加密方案之前确定它们是否可以解密加密方案。

第二个描述符类型指示特定 DRM 系统的 UUID 字符串,该系统可为关联的适应集提供许可证和解密密钥。 应用程序规范(如 DASH 行业论坛、DVB 和 DECE)限制适应集中的所有表示形式共享相同的密钥和许可证,以实现无缝自适应切换,这是通过限制 MPD 表示级别的 ContentProtection 描述符来实现的。 UUID 字符串等于文件或 DASH 初始化段的电影框('moov')中可能存在的 ISO 媒体保护系统特定信息框('pssh')指定的 SystemID 字段。

注释“pssh”框包括 SystemID、唯一标识内容保护系统的 UUID [X.667]。 PlayReady SystemID 为 9a04f079-9840-4286-ab92-e65be0885f95。

DRM 系统的 SystemID 值在以下位置注册:https://dashif.org/identifiers/content_protection/

每个 AdaptationSet 元素 MAY 都会列出多个 DRM 描述符,以指示许可证可用于多个 DRM 系统。 每个 DRM 系统都可以在其自己的命名空间中指定元素和属性,并在描述符中使用其 SystemID 将其设置为可选或必需。

第二版通用加密([CENC] 第 11 节)指定了一个可选的 cenc:pssh 元素,所有 DRM ContentProtection 描述符都可使用该元素来提高互操作性。 它还指定建议包含在 mp4protection 描述符中的 cenc:default_KID 属性,以识别所有系统在一个位置所需的许可证。 元素 cenc:pssh 包含完整的“pssh”框结构,因此由 Web 浏览器中的加密媒体扩展 (EME) API 以相同的方式进行处理 [EME]。

DRM 系统可以在以下环境中提供许可证获取信息:

  1. MPD 中 ContentProtection 描述符中的 cenc:pssh 元素
  2. 文件或初始化段的“moov”框中的“pssh”框
  3. 上述两者(在这种情况下,cenc:pssh 元素优先)

根据工作流,在编码或打包过程中将许可证获取信息嵌入到适应集的每个文件中的“pssh”框中可能更高效:或者,在提供流式处理演示文稿时,在 MPD 中嵌入 cenc:pssh 元素可能更有效。 对于实时传送视频流,最好在 MPD 中使用 cenc:pssh 来启用早期许可证获取,而不是在首次初始化段和“pssh”框同时传送给数百万观众时触发许多同时的许可证请求。 MPD 中的许可证获取信息允许不同的流服务使用不同的许可证服务器、随时间推移更改它们等,而无需创建和管理单独的媒体文件。

对于 PlayReady,PlayReady 对象 (PRO) [PRO] 可以包含在 cenc:pssh 元素、mspr:pro 元素或“pssh”框中以启用许可证获取。 mspr:pro 元素由 Microsoft PlayReady 定义,仅包含 PRO [PRO] 信息,不包括“pssh”和 cenc:pssh 中包含的框结构。 包括 mspr:pro 和 cenc:pssh 将启用基于 Silverlight 的玩家在内的旧玩家,以及新玩家(包括使用脚本在 HTML5 浏览器中播放受保护的 DASH 演示文稿的网页)。

注意,在整个规范“mspr”中,“mspr”为“urn:microsoft:playready”,由 xmlns:mspr=“urn:microsoft:playready”定义。

返回顶部

2.1.1 初始化段或媒体内容中的正确 PRO

如果有包含正确 PRO 的初始化段,或者如果媒体内容包含具有正确 PRO 的 PlayReady“pssh”框,则具有 PlayReady 内容保护系统特定标识符 [CPSID] 的以下 ContentProtection 描述符元素应在 MPD 中的 AdaptationSet 元素中使用,以指示 PlayReady 许可证的可用性:

<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”/>

PlayReady 支持通用加密 [CENC] 标准。 当许可证获取元数据存储在初始化段或媒体内容“pssh”中时,应存在 PlayReady ContentProtection 描述符元素。

每个受保护的适应集中都存在以下 ContentProtection 描述符元素,单个实例指示支持“cenc”方案的所有 DRM 的加密方案。

<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc"/>

2.1.2 在 MPD 中包含 PlayReady 对象

在多个情况下,PlayReady 对象 [PRO] 可能需要包含在 PlayReady ContentProtection 描述符元素中。 例如:

  • 缺少 PlayReady“pssh”框的演示文稿

  • 在 PlayReady “pssh” 框中找到 PRO 的演示文稿需要重写

若要将 PlayReady 标识为内容保护方案并在 ContentProtection 描述符元素中包含 PRO,建议根据 [CENC] 和 mspr:pro 语法使用 cenc:pssh 语法来实现向后兼容性,如下所示:

<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”>
  	<cenc:pssh>
          <!-- *base64-encoded PlayReady ‘pssh’ complete box* -->
  	</cenc:pssh>
  	<mspr:pro>
          <!-- *base64-encoded PlayReady Object* -->
    </mspr:pro>
</ContentProtection>

在 PlayReady ContentProtection 描述符元素中包含 PlayReady“pssh”框和 PRO 时,必须遵循以下规则:

  • 如果 playReady ContentProtection 描述符元素中包含 cenc:psshmspr:pro

    • 如果 PRO 包含在 媒体 内容的“保护系统特定标头”(“pssh”)框中,则 PRO 中的 KID base64 编码字符串值(PRO 标记值 [PRO])包含在 cenc:pssh 或 mspr:pro 中,应等效于该 PRO 中的 KID base64 编码字符串值(包含在“pssh”框中)。

    • 如果有包含 PlayReady“pssh”的表示形式的 初始化段,则 PRO 中的 KID base64 编码字符串值(包含在该表示形式的 cenc:pssh 或 mspr:pro 中)必须等效于初始化段的“pssh”框中的 KID base64 编码字符串值。 请注意,初始化段可能是 HTTP 响应正文中包含的存储媒体内容文件的文件标头的副本,但它也可能动态生成,并且永远不会存储为文件。

  • 如果媒体内容包含包含 LAURL 的 PRO 的 PlayReady“pssh”框,并且 LAURL 与 ContentProtection 描述符元素中包含的 PRO 中的 LAURL 不同,则 ContentProtection Descriptor 元素 LAURL 应优先。

返回顶部

2.1.3 包括 MPD 中的跟踪加密框字段

通用加密指示用于在每个电影段中使用密钥标识符(s)(KID)加密每个媒体示例(或未使用)的密钥。 某些信息(如跟踪加密箱(“tenc”)中的default_KID可用于在 MPD 中发出信号以确定所需的许可证。

可能存在未加密的媒体呈现周期,后跟加密的句点。 媒体文件和流可能包括加密的和未加密的部分。 此外,密钥标识符(KID)可能从句点更改为时间段或从节更改为节。 曲目部分中的关键更改使用 ISO 媒体示例组和每个电影段中的示例组说明框发出信号。 请参阅 [CENC] 详细了解示例组以及使用指向示例辅助信息的“saio”和“saiz”框访问初始化向量和子采样加密范围。

通用加密信息的默认设置在每个轨道的跟踪加密框('tenc')中编码(请参阅 [ISOBFF] 和 [CENC])存储在 ISO 文件头和初始化段的 Track Box ('trak') 中。 跟踪加密框(default_KID字段)中的默认密钥标识符(KID)还应在与媒体演示文稿适应集关联的 ContentProtection 描述符元素中进行通信。 cenc:default_KID可用于标识可以解密父 AdaptationSet 元素引用的媒体段的许可证。

若要在 Common Encryption ContentProtection 描述符元素中包含默认密钥标识符(KID),请使用 [CENC]中指定的以下 cenc:default_KID 属性:

<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="da9b5994-600c-2ad0-f96d-f12725780978"/>

“tenc”中的default_KID字段是一个 16 个字节的大尾部数组,上面定义以将通用加密 ContentProtection 描述符元素中的 cenc:default_KID 属性存储为 UUID 字符串。

当 ContentProtection 描述符元素引用多个曲目时,它们使用不同的“tenc”框中的默认密钥标识符,cenc:default_KID 属性应存储这些不同default_KID值的空格分隔列表。

cenc:default_KID 属性也可能包含在 PlayReady ContentProtection 描述符元素中。

下表 1 列出了 ISO 媒体跟踪加密箱(“tenc”)中指定的字段(请参阅第 9.2 节[CENC])。 下表中的元素 1,其中在第一版通用加密(mspr:IsEncrypted、mspr:IV_size 和 mspr:kid)的“mspr”命名空间中定义,但在第二版 Common Encryption [CENC] 中指定的 cenc:default_KID 已弃用且功能上被替换。 跟踪加密框(“tenc”)中的IV_size和 IsEncrypted 字段在解密期间使用,但在 MPD ContentProtection 描述符元素中不需要这些字段。

注意,mspr:kid 中的 KID 值是一个 base64 编码的小 endian GUID 解释,用于定义用于存储大型 endian UUID 的“tenc”default_KID字节数组。 跟踪加密箱中的所有字段都可以复制到 MPD,但只有default_KID才能公开许可证获取。

表 1 - 跟踪加密框字段

元素 默认 说明
default_IsEncrypted 1 指示示例组中示例的加密状态的标志。 允许的值为 0(未加密)和 1(已加密)。
default_IV_size 8 初始化向量 (IV) 字段的大小(以字节为单位)。
- PlayReady 版本 1、2、3 支持 0 和 8。
- PlayReady 版本 4 及更高版本支持 0、8 和 16。
如果default_IsEncrypted =1,则default_IV_size不得设置为 0。

由于并非所有已启用 PlayReady 的玩家都支持 16 字节初始化向量,因此,如果服务需要访问 PlayReady 版本 1/2/3 播放器,则建议仅将 8 个default_IV_size用于加密内容。
default_KID 16 字节(128 位)密钥标识符,用于唯一标识解密关联示例所需的密钥。 根据 [CENC] 将密钥标识符视为 UUID]
请注意,与 PlayReady 标头中的 KID [PRH]不同,“tenc”default_KID存储为包含有序大字节字节数组的 16 字节数组,128 位整数等效于二进制(第 6.2 节)和数字(第 6.3 节)UUID 表示形式(X.667]。

注意: 跟踪加密框中default_KID的格式不同于在 PRO 中嵌入的 cenc:pssh、mspr:pro 和 mspr:kid 中嵌入的 KID 值的格式。 有关详细信息,请参阅第 2.2.5 节[CENC]和 [PRO]。

若要将 PlayReady 标识为内容保护方案,并在 MPD 中包含“跟踪加密框”字段,请使用以下语法:

<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”>
  <mspr:IsEncrypted>1</mspr:IsEncrypted>
  <mspr:IV_size>8</mspr:IV_size>
  <mspr:kid>2ptZlGAMKtD5bfEnJXgJeA==</mspr:kid>
</ContentProtection>

在包括 Common Encryption ContentProtection 描述符元素中的 cenc:default_KID 属性和 PlayReady ContentProtection 描述符元素中的“跟踪加密框”字段时,必须遵循以下规则:

  • Common Encryption ContentProtection 描述符元素中 cenc:default_KID 属性中的 KID 字符串应与该跟踪的跟踪加密框中的 default_KID UUID 等效。

  • PlayReady ContentProtection 描述符元素中的 mspr:IsEncrypted、mspr:IV_size 和/或 mspr:kid 值应等效于该跟踪的“跟踪加密”框中的default_IsEncrypted、default_IV_size或default_KID字段。

  • 如果 PlayReady ContentProtection 描述符元素中包含 mspr:pro 和 cenc:pssh(请参阅包含 Track Encryption Box 字段的第 2.1.2 节):

    • 在 mspr:pro 和 cenc:pssh 元素中嵌入的 KID 应等效于该轨道的跟踪加密框中的default_KID。

    • PlayReady ContentProtection 描述符元素中 cenc:default_KID 属性中的 KID 和 PlayReady ContentProtection 描述符元素Shall 中的 mspr:kid 值等效于该跟踪的“跟踪加密框”中的default_KID。

注意 请注意,跟踪加密框中的default_KID被解释为存储在 16 字节大字节字节数组中的二进制或数字 UUID,在 cenc:default_KID 中将 UUID 连字符字符串解释为 base64 字符串,在 PRO 和 mspr:kid 中以小字节字节顺序 GUID 表示形式编码;但所有都必须是同一 UUID 的替代表示形式。 请参阅第 2.2.5 节。

返回顶部

2.2 实施建议和要求

PlayReady 对象 (PRO) [PRO] 可以包含在编码媒体保护系统特定标头框 ('pssh') [ISOBFF]、 初始化段或编码在 MPD 本身中。

可以在电影框(“moov”)或电影片段框(“moof”)中插入“pssh”框。 例如,可以在“moov”框中插入“pssh”框,以便使用初始化段([DASH],第 5.3.9.5.2 节)。 可以在每个“moof”框中插入一个“pssh”框,以传达 KID 为密钥轮换编制索引的叶许可证。

示例组和示例辅助信息应存储在引用它的任何电影段中。 当存在示例到分组框('sbgp')时,每个“moof”框中应存在一个示例组说明框('sgdp')。 示例辅助信息偏移框('saio')和示例辅助信息大小框('saiz')应出现在包含跟踪加密框('tenc')的每个曲目的每个电影段中,有效指针指向示例辅助信息。

2.2.1 常规

PlayReady ContentProtection 描述符元素可能与适应集或其表示形式相关联,但为了无缝自适应比特率切换和符合 DASH 应用程序规范,PlayReady ContentProtection 描述符元素应包含在 AdaptiveSet 元素而不是表示形式元素中。 这可确保单个许可证和解密器配置可用于适应集中的所有段。

建议包含 PlayReady ContentProtection 描述符,并且,在 MPD 中包含值为“cenc”的 DASH MP4 ContentProtection 描述符是必需的。

这使 DRM 能够“cenc”,并且能够在应用程序中、MPD 或初始化段中的“pssh”中获取许可证信息,以标识内容为 Common Encrypted、标识所需的许可证(使用default_KID)、获取许可证并解密媒体。

建议在 PlayReady ContentProtection 描述符中包含名称和版本为“MSPR 2.0”的 @value 属性,以便进行人工识别。 例如:

<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="da9b5994-600c-2ad0-f96d-f12725780978"/>

<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”/>

PRO 位置的优先级 2.2.2

当客户端应用程序在 MPD 中找到 PRO 时,应优先于初始化段中包含的 PRO(请参阅 2.2.3 中的其他初始化段 PRO 要求)。

当客户端应用程序在 MPD 中找到 PRO 时,该 PRO 中包含的 Rights Management 标头优先于媒体内容的“pssh”框中“pssh”框中的“pssh”框中的 Rights Management 标头。

当客户端应用程序在初始化段中找到 PRO 时,应优先于媒体内容的“moov”框标头的“pssh”框中包含的 PRO(请参阅 2.2.3 版中的其他初始化段 PRO 要求)。

2.2.3 在何处包含 PRO

PRO 应存在于 MPD 或初始化段中。 这两者可能都存在。 在 MPD 中,它应同时存在于 PlayReady 内容保护描述符(适用于旧版玩家的 mspr:pro)中的 mspr:pro 元素和 cenc:pssh 元素中。

初始化段或 MPD 中的 PRO 可能包括 Rights Management 标头。

无论是使用初始化段,还是建议 MPD 包含正确的 PRO,以便无需下载初始化段即可获取 Rights Management 标头信息。

2.2.4 MPD PRO 中包含的内容

PRO 可能包括 Rights Management 标头和/或嵌入式许可证存储(ELS)。

建议 MPD PRO 包含 Rights Management 标头。

建议不要包含 ELS,除非它是 DRM 域或许可证链方案的一部分所必需的。

2.2.5 KID 字节顺序

PlayReady 中的密钥标识符(KID)以小字节字节顺序存储在格式化为 GUID(DWORD、WORD、WORD、8-BYTE 数组)的字节数组中,然后 base64 编码存储为 PRO 中的字符串。 PlayReady 生态系统中的 PlayReady 许可证服务器和 PlayReady 客户端都期望 PRO 和 PlayReady 许可证中的 KID 是 [GUID] 的小字节顺序表示形式。

等效的 KID 可以表示为 UUID 字符串([X.667] section 6.4] section 6.4) 或字节数组,其中包含在大字节字节顺序二进制(第 6.2 节)或数字(第 6.3 节)中指定的 [X.667]。 通用加密 [CENC] 和 DASH 在 cenc:default_KID 属性(6.4 字符串)、跟踪加密框(“tenc”)和“seig”示例组描述框('sgpd')(6.2 二进制或 6.3 个数字字节数组)中使用这些表示形式。

因此,除非有更改,否则客户端必须转换 KIDs 字节数组的结束性,以便将其与 PlayReady 许可证匹配。

若要将 cenc:default_KID 属性中的 KID 和 [ISOBFF] 框转换为 PlayReady KID,请使用以下示例代码:

// Create a PlayReady GUID from the KID value in ISOBFF box.
// Since the PlayReady Server always runs on an Intel processor,
// this will be a little endian representation.
// e.g. KID in Track Encryption Box is:
//      {f81d4fae-7dec-11d0-a765-00a0c91e6bf6}

byte[] tencKidBytes = new byte[] {
    0xf8, 0x1d, 0x4f, 0xae,
    0x7d, 0xec,
    0x11, 0xd0,
    0xa7, 0x65,
    0x00, 0xa0, 0xc9, 0x1e, 0x6b, 0xf6
};

Byte[] prKidBytes = new byte[16];

// Swap the endianness of the GUID value:
// - Reverse bytes 0 to 3,
// - swap bytes 4 and 5,
// - swap bytes 6 and 7, and
// - copy bytes 8-15 as-is without swapping

ConvertEndianness(tencKidBytes, prKidBytes);
Guid prKid = new Guid(prKidBytes);
void ConvertEndianness(byte[] original, byte[] guidBytes)
{
    System.Array.Copy(original, guidBytes, 16);
    Swap(ref guidBytes, 0, 3);
    Swap(ref guidBytes, 1, 2);
    Swap(ref guidBytes, 4, 5);
    Swap(ref guidBytes, 6, 7);
}

void Swap(ref byte[] bytes, int pos1, int pos2)
{
    byte temp = bytes[pos1];
    bytes[pos1] = bytes[pos2];
    bytes[pos2] = temp;
}

表 2KID 表示示例

KID 参数 类型 表示形式
儿童 UUID BE Hex 数字 f81d4fae7dec11d0a76500a0c91e6bf6
第 6.3 节 [X.667]
cenc:default_KID 属性 带有连字符的 UUID 十六进制字符串 “f81d4fae-7dec-11d0-a765-00a0c91e6bf6”
第 6.4 节 [X.667]
ISOBFF 框中的 KID UUID BE 字节数组 十六进制表示形式为 { 0xf8、0x1d、0x4f、0xae、0x7d、0xec、0x11、0xd0、0xa7、0x65、0x00、0xa0、0xc9、0x1e、0x6b、0xf6 }
第 6.2 节 [X.667]
PRO 中的 KID GUID LE 字节数组的 Base64 字符串 “rk8d+Ox90BGnZQCgyR5r9g==”
(Base64 编码前数据的十六进制表示形式为 { 0xae、0x4f、0x1d、0xf8、0xec、0x7d、0xd0、0x11、0xa7、0x65、0x00、0xa0、0xc9、0x1e、0x6b、0xf6 })
mspr:kid “tenc”框中default_KID字节数组的 Base64 字符串 “+B1Prn3sEdCnZQCgyR5r9g==”
(Base64 编码前数据的十六进制表示形式为 { 0xf8、0x1d、0x4f、0xae、0x7d、0xec、0x11、0xd0、0xa7、0x65、0x00、0xa0、0xc9、0x1e、0x6b、0xf6 })
playReady 许可证中的 KID GUID LE 字节数组 十六进制表示形式为 { 0xae、0x4f、0x1d、0xf8、0xec、0x7d、0xd0、0x11、0xa7、0x65、0x00、0xa0、0xc9、0x1e、0x6b、 0xf6 }

返回顶部



3. 媒体演示文稿说明示例

3.1 初始化段或媒体内容中的正确 PRO

请参阅上面的第 2.1.1 节。

<?xml version="1.0" encoding="utf-8"?>

<MPD
  xmlns="urn:mpeg:DASH:schema:MPD:2011"
  xmlns:cenc="urn:mpeg:cenc:2013"
  minBufferTime="PT2.00S"
  profiles="urn:mpeg:dash:profile:isoff-live:2011"
  type="static">
  <Period>
    <AdaptationSet mimeType="audio/mp4">
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="0b630844-cb17-496a-9700-3702e1d23ee2"/>
      <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”>
      </ContentProtection>
      <Representation bandwidth="134878" id="audio">
        <SegmentList duration="4000" timescale="1000">
          <Initialization sourceURL="audio/init.mp4"/>
          <SegmentURL media="audio/seg-0000.m4f"/>
          <SegmentURL media="audio/seg-0001.m4f"/>
          <SegmentURL media="audio/seg-0002.m4f"/>
        </SegmentList>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

3.2 在 MPD 中包含 PlayReady 对象(PRO)

请参阅上面的第 2.1.2 节。

<?xml version="1.0" encoding="utf-8"?>

<MPD
  xmlns="urn:mpeg:DASH:schema:MPD:2011"
  xmlns:cenc="urn:mpeg:cenc:2013"
  xmlns:mspr="urn:microsoft:playready"
  minBufferTime="PT4.00S"
  profiles="urn:mpeg:dash:profile:isoff-live:2011"
  type="static">
  <Period>
    <AdaptationSet mimeType="audio/mp4">
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="0b630844-cb17-496a-9700-3702e1d23ee2"/>
      <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95" value=”MSPR 2.0”>
<cenc:pssh>AAAAAJoE8HmYQEKGq5LmW+CIX5UAAALq6gIAAAEAAQDgAjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AUgBBAGgAagBDAHgAZgBMAGEAawBtAFgAQQBEAGMAQwA0AGQASQArADQAZwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBxAGgASwBXAEgASgBhAEwAMAAxAEkAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALgBkAHkAbgBkAG4AcwAuAG8AcgBnAC8AYwBvAG4AdABvAHMAbwBzAHMAcAByAC8AcgBpAGcAaAB0AHMAbQBhAG4AYQBnAGUAcgAuAGEAcwBtAHgAPAAvAEwAQQBfAFUAUgBMAD4APABEAFMAXwBJAEQAPgBpAEsARwBsAFcARwA0AEQAWABVAHEANAB3AGIAVwBnAFIATgBMAFIASgBnAD0APQA8AC8ARABTAF8ASQBEAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=</cenc:pssh>
<mspr:pro>6gIAAAEAAQDgAjwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AUgBBAGgAagBDAHgAZgBMAGEAawBtAFgAQQBEAGMAQwA0AGQASQArADQAZwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBxAGgASwBXAEgASgBhAEwAMAAxAEkAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAOgAvAC8AcABsAGEAeQByAGUAYQBkAHkALgBkAHkAbgBkAG4AcwAuAG8AcgBnAC8AYwBvAG4AdABvAHMAbwBzAHMAcAByAC8AcgBpAGcAaAB0AHMAbQBhAG4AYQBnAGUAcgAuAGEAcwBtAHgAPAAvAEwAQQBfAFUAUgBMAD4APABEAFMAXwBJAEQAPgBpAEsARwBsAFcARwA0AEQAWABVAHEANAB3AGIAVwBnAFIATgBMAFIASgBnAD0APQA8AC8ARABTAF8ASQBEAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=</mspr:pro>
      </ContentProtection>
      <Representation bandwidth="134878" id="audio">
        <SegmentList duration="4000" timescale="1000">
          <Initialization sourceURL="audio/init.mp4"/>
          <SegmentURL media="audio/seg-0000.m4f"/>
          <SegmentURL media="audio/seg-0001.m4f"/>
          <SegmentURL media="audio/seg-0002.m4f"/>
        </SegmentList>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>