

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

# SPEKE API v2 - 标准负载组件
<a name="standard-payload-components-v2"></a>

根据为给定内容定义的加密合约，通过单个 SPEKE 请求，加密程序可以请求多个内容密钥，以及针对多种打包格式的必要清单信令。

为了涵盖所有这些方面，标准的 CPIX 文档由三个强制列表部分组成，外加一个用于实时内容密钥轮换的可选列表部分。

**<cpix:CPIX><cpix: ContentKeyList > 分区和顶级元素**  
这是一个强制部分，与实时和 VOD 流式处理有关，其中定义加密程序需要使用的不同内容密钥。`<cpix:ContentKeyList>` 元素可以包含一个或多个 `<cpix:ContentKey>` 子元素，每个子元素都描述一个不同的内容密钥。

根据 CPIX 规范，`ContentKey@commonEncryptionScheme` 属性的可能值在 ISO 基础媒体文件格式文件通用加密规范（ISO/IEC 23001-7:2016）中定义：
+ 'cenc'：AES-CTR 模式完整样本和视频 NAL 子样本加密
+ 'cbc1'：AES-CBC 模式完整样本和视频 NAL 子样本加密
+ 'cens'：AES-CTR 模式部分视频 NAL 模式加密
+ 'cbcs'：AES-CBC 模式部分视频 NAL 模式加密

以下示例显示带有单个非加密内容密钥的 CPIX 文档：

```
<cpix:CPIX contentId="abc123" version="2.3" xmlns:cpix="urn:dashif:org:cpix" xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc">
	<cpix:ContentKeyList>
		<cpix:ContentKey explicitIV="OFj2IjCsPJFfMAxmQxLGPw==" kid="98ee5596-cd3e-a20d-163a-e382420c6eff" commonEncryptionScheme="cbcs">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>5dGAgwGuUYu4dHeHtNlxJw==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
	</cpix:ContentKeyList>
	...
</cpix:CPIX>
```

默认情况下，内容密钥不加密，如下例所示。但是，加密器可以通过包含<cpix : >元素来请求对内容密钥进行加密。DeliveryDataList有关更多详细信息，请参阅“内容密钥加密”部分。


| SPEKE 支持的元素 | 强制属性 | 可选属性 | 强制子元素 | 可选子元素 | 
| --- | --- | --- | --- | --- | 
|  <cpix:CPIX>  |  contentId、version、xmlns:cpix、xmlns:pskc  |  name、xmlns:enc  |  一个 <cpix: ContentKeyList >，一个<cpix : List>，一个 <cpix: DRMSystem > ContentKeyUsageRuleList  |  一个 <cpix: DeliveryDataList >，一个 <cpix : >ContentKeyPeriodList  | 
|  <cpix : >ContentKeyList  |  -  |  id  |  至少有一个 <cpix : >ContentKey  |  -  | 
|  <cpix : >ContentKey  |  孩子， commonEncryptionScheme，数据  |  id、Algorithm、explicitIV  |  一个 <pskc:Secret>  |  -  | 
|  <pskc:Secret>  |  PlainValue 或者 EncryptedValue  |  ValueMAC  |  -  |  <enc: EncryptionMethod >，<enc : >CipherData  | 

**<cpix: 列表> 部分 DRMSystem**  
这是一个强制部分，与实时和 VOD 流式处理有关，其中定义需要与内容密钥结合利用的不同 DRM 系统。

以下示例显示了包含单个 DRM 系统规格的 PlayReady DRM 系统列表：

```
<cpix:DRMSystemList>
	<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
		<cpix:HLSSignalingData playlist="media">HicXmbZ2m[...]4==</cpix:HLSSignalingData>
		<cpix:HLSSignalingData playlist="master">HicXmbZ2m[...]jEi</cpix:HLSSignalingData>
		<cpix:ContentProtectionData>t7WwH24FI[...]YCC</cpix:ContentProtectionData>
		<cpix:PSSH>FFFFanBzc[...]A==</cpix:PSSH>
		<cpix:SmoothStreamingProtectionHeaderData>s5RrJ12HL[...]UBB</cpix:SmoothStreamingProtectionHeaderData>
	</cpix:DRMSystem>
</cpix:DRMSystemList>
```

有关 DRM 系统的完整列表IDs，请参阅 DASH-IF 标识符存储库的 “[内容保护” 部分](https://dashif.org/identifiers/content_protection/)。


| SPEKE 支持的元素 | 强制属性 | 可选属性 | 强制子元素 | 可选子元素 | 
| --- | --- | --- | --- | --- | 
|  <cpix：列表> DRMSystem  |  -  |  id  |  至少有一个 <cpix : >DRMSystem  |  -  | 
|  <cpix : >DRMSystem  |  kid、systemId  |  id、name、PSSH  |  -  |  ContentProtectionData， SmoothStreamingProtectionHeaderData，两个 <cpix：具有不同播放列表属性值的 HLSSignaling Data> 元素  | 

 如果将 ISO-BMFF 封装应用于媒体分段，则 `DRMSystem@PSSH` 为必填项。加密程序仅将 `DRMSystem.ContentProtectionData` innerXML `<pssh>` 元素用于清单信令目的。

如果存在 `DRMSystem@PSSH` 且 `DRMSystem.ContentProtectionData` 包含 innerXML `<pssh>` 元素，则两个值应相同。

如果要在 HLS 清单中传送 `DRMSystem` 信令，则必须在 CPIX 请求和响应中同时包含 `<cpix:HLSSignalingData playlist="media">` 和 `<cpix:HLSSignalingData playlist="master">` 元素。

**<cpix : >部分 ContentKeyPeriodList**  
这是一个可选部分，仅与实时流式处理有关，它定义了应用于内容的加密周期。

`<cpix:ContentKeyPeriodList>` 元素可以包含一个或多个 `<cpix:ContentKeyPeriod>` 子元素，每个子元素都描述了实时时间线中不同的加密周期。 UUIDs 作为 id 属性值的一部分使用是一种常用的方法。

```
<cpix:ContentKeyPeriodList>
	<cpix:ContentKeyPeriod id="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f" index="1" />
</cpix:ContentKeyPeriodList>
```


| SPEKE 支持的元素 | 强制属性 | 可选属性 | 强制子元素 | 可选子元素 | 
| --- | --- | --- | --- | --- | 
|  <cpix : >ContentKeyPeriodList  |  -  |  id  |  至少有一个 <cpix : >ContentKeyPeriod  |  -  | 
|  <cpix : >ContentKeyPeriod  |  id、index  |  -  |  -  |  -  | 

如果使用加密周期，则还需要将加密密钥附加到 CPIX 文档中的一个加密周期，如以下部分所示。

**<cpix : >部分 ContentKeyUsageRuleList**  
这是一个强制部分，与实时和 VOD 流式处理有关，定义了不同的内容密钥将如何保护流集内和加密周期的轨道。

<cpix: ContentKeyUsageRuleList > 元素可以包含一个或多个 <cpix: ContentKeyUsageRule > 子元素，每个子元素都描述了加密器可能在特定的加密期间应用给定内容密钥的轨道。<cpix: AudioFilter > 元素中至少需要一个 <cpix: VideoFilter > 或一个<cpix : >元素。ContentKeyUsageRule

以下示例显示了一个简单的列表，其中只有一条规则，将单个内容密钥应用于特定加密周期内的所有音频和视频轨道。

```
<cpix:ContentKeyUsageRuleList>
	<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="ALL">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter />
		<cpix:VideoFilter />
	</cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```


| SPEKE 支持的元素 | 强制属性 | 可选属性 | 强制子元素 | 可选子元素 | 
| --- | --- | --- | --- | --- | 
|  <cpix : >ContentKeyUsageRuleList  |  -  |  id  |  至少有一个 <cpix : >ContentKeyUsageRule  |  -  | 
|  <cpix : >ContentKeyUsageRule  |  孩子， intendedTrackType  |  -  |  至少一个 <cpix: AudioFilter > 或者一个 <cpix : >(\$1) VideoFilter  |  <cpix : >KeyPeriodFilter  | 
|  <cpix : >KeyPeriodFilter  |  periodId  |  -  |  -  |  -  | 
|  <cpix : >AudioFilter  |  -  |  minChannels、maxChannels  |  -  |  -  | 
|  <cpix : >VideoFilter  |  -  |  minPixels、maxPixels、hdr、minFps、maxFps  |  -  |  -  | 

 *（\$1）要详细了解如何使用单个或多个内容密钥来保护流集中的一个或多个轨道，请参阅[加密合约](encryption-contract-v2.md)文档部分。*