

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

# SPEKE API v1 - 有关 DASH-IF 规范的自定义项和约束
<a name="speke-constraints"></a>

DASH-IF CPIX 规范，https://dashif。 org/docs/DASH-IF-CPIX-v2-0.pdf，支持多种用例和拓扑。SPEKE API 规范符合具有以下自定义项和约束的 CPIX 规范：
+ SPEKE 遵循 Encryptor Consumer 工作流。
+ 对于加密的内容密钥，SPEKE 应用以下限制：
  + SPEKE 不支持请求或响应负载的数字签名验证（XMLDSIG）。
  + SPEKE 需要基于 2048 位 RSA 的证书。
+ 对于轮换密钥工作流，SPEKE 需要 `ContentKeyUsageRule` 筛选条件 `KeyPeriodFilter`。SPEKE 会忽略所有其他 `ContentKeyUsageRule` 设置。
+ SPEKE 会忽略 `UpdateHistoryItemList` 功能。如果响应中包含该列表，则 SPEKE 会将其忽略。
+ SPEKE 支持密钥轮换。SPEKE 只使用 `ContentKeyPeriod@index 来跟踪关键时段。
+ 为了支持 MSS PlayReady，SPEKE 在`DRMSystem`标签下使用了一个自定义参数。`SPEKE:ProtectionHeader`
+ 对于 HLS 打包，如果 `URIExtXKey` 包含在响应中，则它必须包含要在 HLS 播放列表的 `EXT-X-KEY` 标签的 URI 参数中添加的完整数据，没有其他信号发送要求。
+ 对于 HLS 播放列表，在 `DRMSystem` 标签下，SPEKE 提供了可选的自定义参数 `speke:KeyFormat` 和 `speke:KeyFormatVersions`，对应于 `EXT-X-KEY` 标签的 `KEYFORMAT` 和 `KEYFORMATVERSIONS` 参数的值。

  HLS 初始化向量 (IV) 始终跟随段编号，除非由运算符显式指定。
+ 当请求密钥时，加密程序可能会在 `ContentKey` 元素上使用可选的 `@explicitIV` 属性。密钥提供程序可以使用 `@explicitIV` 来响应 IV，即使该属性未包含在请求中。
+ 加密程序创建密钥标识符 (`KID`)，这对于任何给定的内容 ID 和密钥周期保持不变。密钥提供程序在其对请求文档的响应中包含 `KID`。
+ 密钥提供程序可能包含 `Speke-User-Agent` 响应标头的值以确定本身用于调试目的。
+ 对于每个内容，SPEKE 目前不支持多个轨迹或密钥。

  符合 SPEKE 的加密程序充当客户端并向密钥提供程序端点发送 `POST` 操作。加密程序可能会发送定期 `heartbeat` 请求，以确保加密程序和密钥提供程序终端节点之间的连接正常。