本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
SPEKEAPIv2--IF 规范的自定义和约束 DASH
DASH行业论坛 CPIX2.3 规范
CPIX个人资料
-
SPEKE 遵循 Encryptor Consumer 工作流。
-
对于加密的内容密钥,SPEKE应用以下限制:
-
SPEKE不支持请求或响应负载的数字签名验证 (XMLDSIG)。
-
SPEKE需要RSA基于 2048 的证书。
-
-
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
属性的值。当收到此属性的空值时,密钥提供者应返回一个错误,描述为 “Missing CPIX @contentId”。CPIX@contentId
值不能被密钥提供者覆盖。CPIX@id
值(如果不为空)应被密钥提供程序忽略。 -
加密程序应包含
CPIX@version
属性的值。当收到此属性的空值时,密钥提供者应返回一个错误,描述为 “Miss CPIX ing @version”。当收到版本不支持的请求时,密钥提供程序返回的错误描述应为 “不支持 CPIX @version”。CPIX@version
值不能被密钥提供程序覆盖。 -
加密程序应包括每个所请求密钥的
ContentKey@commonEncryptionScheme
属性值。当收到此属性的空值时,密钥提供者应返回一个错误,描述为 “缺少 ContentKey @ f commonEncryptionScheme or KIDid
”。一个唯一的CPIX文档不能混合不同
ContentKey@commonEncryptionScheme
属性的多个值。收到此类组合时,密钥提供者应返回一条错误信息,描述为 “不合规 ContentKey @ commonEncryptionScheme 组合”。并非所有
ContentKey@commonEncryptionScheme
值都与所有DRM技术兼容。当收到这样的组合时,密钥提供者应返回一个错误,描述为 “ContentKey@ commonEncryptionScheme 不兼容 DRMSystemid
”。ContentKey@commonEncryptionScheme
值不能被密钥提供程序覆盖。 -
当在CPIX响应正文中接收不同值
DRMSystem@PSSH
和DRMSystem.ContentProtectionData
内部XML<pssh>
元素时,加密器应停止并抛出错误。
API for CPIX
-
密钥提供者应包含
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 |
不支持 @version CPIX |
ContentKey@ commonEncryptionScheme 未定义 |
缺少 ContentKey @ commonEncryptionScheme KID |
在单个CPIX文档中使用多个 ContentKey @ commonEncryptionScheme 值 |
不合规的 ContentKey @ commonEncryptionScheme 组合 |
ContentKey@ commonEncryptionScheme 与DRM技术不兼容 |
ContentKey@ commonEncryptionScheme 不兼容 DRMSystem |
X-Speke-Version 标头值不是支持的版本 SPEKE |
不支持的SPEKE版本 |
加密合约格式不正确 |
格式不正确的加密合约 |
加密合同与DRM安全级别限制相矛盾 |
不支持请求的CPIX加密合约 |
加密合同不包含任何 VideoFilter 或 AudioFilter 元素 |
缺少CPIX加密合约 |