本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
SPEKE API v2-对 DASH-IF 规范的自定义和限制
DASH 行业论坛 CPIX 2.3 规范
CPIX 简介
-
SPEKE 遵循加密器使用者工作流程。
-
对于加密的内容密钥,SPEKE 适用以下限制:
-
SPEKE 不支持请求或响应有效负载的数字签名验证 (XMLDSIG)。
-
SPEKE 需要 2048 个基于 RSA 的证书。
-
-
SPEKE 仅利用 CPIX 功能的子集:
-
SPEKE 省略了该
UpdateHistoryItemList
功能。如果列表存在于响应中,SPEKE 会将其忽略。 -
SPEKE 省略了根/叶键功能。如果响应中存在该
ContentKey@dependsOnKey
属性,SPEKE 会将其忽略。 -
SPEKE 省略了
BitrateFilter
元素和VideoFilter@wcg
属性。如果这些元素或属性存在于 CPIX 有效负载中,SPEKE 会将其忽略。
-
-
在与 SPEKE v2 交换的 CPIX 文档中,只能使用标准有效载荷组件页面或加密合同页面上以 “支持” 形式引用的元素或属性。
-
当加密器包含在 CPIX 请求中时,所有元素和属性都应在密钥提供商 CPIX 响应中具有有效值。否则,加密器将停止并抛出错误。
-
SPEKE 支持使用
KeyPeriodFilter
元素进行密钥轮换。SPEKE 仅使用ContentKeyPeriod@index
来跟踪关键时段。 -
对于 HLS 信令,必须使用多个
DRMSystem.HLSSignalingData
元素:一个的DRMSystem.HLSSignalingData@playlist
属性值为 “媒体”,另一个元素的DRMSystem.HLSSignalingData@playlist
属性值为 “master”。 -
当请求密钥时,加密程序可能会在
ContentKey
元素上使用可选的@explicitIV
属性。密钥提供程序可以使用@explicitIV
来响应 IV,即使该属性未包含在请求中。 -
加密程序创建密钥标识符 (
KID
),这对于任何给定的内容 ID 和密钥周期保持不变。密钥提供程序在其对请求文档的响应中包含KID
。 -
加密器应包含该
CPIX@contentId
属性的值。当收到此属性的空值时,密钥提供者应返回错误并附有 “缺少 CPIX @contentId” 的描述。CPIX@contentId
值不能被密钥提供者覆盖。CPIX@id
如果值不为 null,则密钥提供者应忽略该值。 -
加密器应包含该
CPIX@version
属性的值。当收到此属性的空值时,密钥提供者应返回错误并附有 “缺少 CPIX @version” 的描述。当收到不支持版本的请求时,密钥提供者返回的错误描述应为 “不支持的 CPIX @version”。CPIX@version
值不能被密钥提供者覆盖。 -
加密器应包括每个请求密钥的
ContentKey@commonEncryptionScheme
属性值。当收到此属性的空值时,密钥提供者应返回一个错误,描述为 “缺少 ContentKey @ focommonEncryptionScheme r KIDid
”。唯一的 CPIX 文档不能混合不同
ContentKey@commonEncryptionScheme
属性的多个值。收到此类组合时,密钥提供者应返回错误消息,描述为 “不合规 ContentKey @commonEncryptionScheme 组合”。并非所有
ContentKey@commonEncryptionScheme
值都与所有 DRM 技术兼容。收到此类组合时,密钥提供者应返回错误描述 “ContentKey@ 与 DRMSystemcommonEncryptionScheme 不兼容id
”。ContentKey@commonEncryptionScheme
值不能被密钥提供者覆盖。 -
当在 CPIX 响应正文中接收
DRMSystem.ContentProtectionData
innerXML<pssh>
元素的不同值时,加密器应停止并抛出错误。DRMSystem@PSSH
CPIX 的 API
-
密钥提供者应包含
X-Speke-User-Agent
HTTP 响应标头的值。 -
兼容 Speke 的加密器充当客户端,将 POST 操作发送到密钥提供者端点。
-
加密器应包含
X-Speke-Version
HTTP 请求标头的值,请求中使用的 SPEKE 版本的格式为 MajorVersion。 MinorVersion,比如 SPEKE v2.0 的 “2.0”。如果密钥提供者不支持加密器用于当前请求的 SPEKE 版本,则密钥提供者应返回错误并附有 “不支持的 SPEKE 版本” 的描述,并且不会尽最大努力处理 CPIX 文档。密钥提供者无法在响应请求时修改加密器定义的
X-Speke-Version
标头值。 -
当在响应正文中收到错误时,加密器应抛出错误,并且不会使用 SPEKE v1.0 版本重试请求。
如果密钥提供者没有返回错误但未能返回包含强制性信息的 CPIX 文档,则加密器应停止并抛出错误。
下表汇总了密钥提供者必须在消息正文中返回的标准消息。错误情况下的 HTTP 响应码应为 4XX 或 5XX,而不是 200。422 错误代码可用于所有与 SPEKE/CPIX 相关的错误。
错误案例 | 错误消息 |
---|---|
CPIX @contentId 未定义 |
缺少CPIX @contentId |
CPIX @version 未定义 |
缺少CPIX @version |
不支持 CPIX @version |
不支持的 CPIX @version |
ContentKey@commonEncryptionScheme 未定义 |
KIDcommonEncryptionScheme 缺少 ContentKey @ |
在单个 CPIX 文档中使用多个 ContentKey @commonEncryptionScheme 值 |
不兼容 ContentKey @commonEncryptionScheme 组合 |
ContentKey@commonEncryptionScheme 与 DRM 技术不兼容 |
ContentKey@ 与 DRMSystemcommonEncryptionScheme 不兼容 |
X-Speke-Version 标头值不支持的 SPEKE 版本 |
不支持的 SPEKE 版本 |
加密合约格式不正确 |
格式不正的加密合约 |
加密合约与 DRM 安全级别限制相矛盾 |
不支持请求的 CPIX 加密合约 |
加密合约不包含任何 VideoFilter 或 AudioFilter 元素 |
缺少 CPIX 加密合约 |