

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# SPEKE API v2
<a name="the-speke-api-v2"></a>

这是用于安全打包器和编码器密钥交换 (SPEKE) v2 的 REST API。使用此规范为使用加密的客户提供 DRM 版权保护。为了符合 SPEKE，您的 DRM 密钥提供程序必须公开本规范中描述的 REST API。加密程序对您的密钥提供程序进行 API 调用。

**注意**  
本规范中的代码示例仅用于说明目的。您无法运行这些示例，因为它们不是完整的 SPEKE 实现的一部分。

SPEKE 使用 DASH 行业论坛内容保护信息交换格式 (DASH-IF-CPIX) 数据结构定义进行密钥交换，但有一些限制。 DASH-IF-CPIX定义了一个架构，以提供从 DRM 平台到加密器的可扩展的多 DRM 交换。这使得在内容压缩和打包时允许对所有自适应比特率打包格式进行内容加密。自适应比特率打包格式包括 HLS、DASH 和 MSS。

从其 2.0 版本开始，SPEKE 与特定的 CPIX 版本保持一致：

在 SPEKE 方面，通过使用 `X-Speke-Version` HTTP 标头强制执行一致性；在 CPIX 方面，则通过使用 `CPIX@version` 属性来强制执行一致性。请求中缺少这些元素是 SPEKE v1 传统工作流的典型特征。在 SPEKE v2 工作流中，只有当密钥提供程序同时支持两个版本参数时，它才应处理 CPIX 文档。

有关交换格式的详细信息，请参阅 DASH 行业论坛 [CPIX 2.3 规范](https://dashif.org/docs/CPIX2.3/Cpix.html)。

总体而言，与 SPEKE v1.0 相比，SPEKE v2.0 带来了以下演变：
+ SPEKE XML 命名空间中的所有标签已弃用，改为使用 CPIX XML 命名空间中的等效标签
+  `SPEKE:ProtectionHeader` 已弃用并替换为 `CPIX:DRMSystem.SmoothStreamingProtectionHeaderData` 
+  `CPIX:URIExtXKey`、`SPEKE:KeyFormat` 和 `SPEKE:KeyFormatVersions` 已弃用并替换为 `CPIX:DRMSystem.HLSSignalingData` 
+  `CPIX@id` 替换为 `CPIX@contentId` 
+ 新的强制性 CPIX 属性：`CPIX@version`、`ContentKey@commonEncryptionScheme`
+ 新的可选 CPIX 元素：`DRMSystem.ContentProtectionData`
+ 支持多个内容密钥
+ SPEKE 和 CPIX 之间的跨版本控制机制
+ HTTP 标头的演变：新的 `X-Speke-Version` 标头，`Speke-User-Agent` 标头重命名为 `X-Speke-User-Agent` 
+ 检测信号 API 已弃用

由于 SPEKE v1.0 规范保持不变，因此现有实施无需更改即可继续支持 SPEKE v1.0 工作流。

**Topics**
+ [SPEKE API v2 - 有关 DASH-IF 规范的自定义项和约束](speke-constraints-v2.md)
+ [SPEKE API v2 - 标准负载组件](standard-payload-components-v2.md)
+ [SPEKE API v2 - 加密合约](encryption-contract-v2.md)
+ [SPEKE API v2 - 实时工作流方法调用示例](live-workflow-methods-v2.md)
+ [SPEKE API v2 - VOD 工作流方法调用示例](vod-workflow-method-v2.md)
+ [SPEKE API v2 - 内容密钥加密](content-key-encryption-v2.md)
+ [SPEKE API v2 - 覆盖密钥标识符](kid-override-v2.md)