

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# SPEKE API v2 - 標準承載元件
<a name="standard-payload-components-v2"></a>

透過單一 SPEKE 請求，根據為指定內容定義的加密合約，加密程式可以請求多個內容金鑰，以及多個封裝格式的必要 Manfest 訊號。

為了涵蓋所有這些層面，標準 CPIX 文件包含三個強制性清單區段，以及用於即時內容金鑰輪換的選用清單區段。

**<cpix：ContentKeyList> 區段和頂層 <cpix：CPIX> 元素**  
這是必要區段，與即時和 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、版本、xmlns：cpix、xmlns：pskc  |  name， xmlns：enc  |  一個 <cpix：ContentKeyList>、一個 <cpix：DRMSystemList>、一個 <cpix：ContentKeyUsageRuleList>  |  一個 <cpix：DeliveryDataList>，一個 <cpix：ContentKeyPeriodList>  | 
|  <cpix：ContentKeyList>  |  -  |  id  |  至少一個 <cpix：ContentKey>  |  -  | 
|  <cpix：ContentKey>  |  kid、commonEncryptionScheme、Data  |  id、演算法、explicitIV  |  一個 <pskc：Secret>  |  -  | 
|  <pskc：Secret>  |  PlainValue 或 EncryptedValue  |  ValueMAC  |  -  |  <enc：EncryptionMethod>、<enc：CipherData>  | 

**<cpix：DRMSystemList> 區段**  
這是必要區段，與即時和 VOD 串流相關，可定義需要與內容金鑰搭配使用的不同 DRM 系統。

下列範例顯示具有單一 PlayReady DRM 系統規格的 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 systemIDs的完整清單，請參閱 DASH-IF 識別符儲存庫[的內容保護一節](https://dashif.org/identifiers/content_protection/)。


| SPEKE 支援的元素 | 必要屬性 | 選擇性屬性 | 強制性子元素 | 選用子元素 | 
| --- | --- | --- | --- | --- | 
|  <cpix：DRMSystemList>  |  -  |  id  |  至少一個 <cpix：DRMSystem>  |  -  | 
|  <cpix：DRMSystem>  |  kid、systemId  |  ID、名稱、PSSH  |  -  |  ContentProtectionData、SmoothStreamingProtectionHeaderData、兩個具有不同播放清單屬性值的 <cpix：HLSSignalingData> 元素  | 

 `DRMSystem@PSSH` 如果將 ISO-BMFF 封裝套用至媒體區段，則為強制性。加密程式只會將 `DRMSystem.ContentProtectionData` innerXML `<pssh>`元素用於資訊清單訊號。

如果 `DRMSystem@PSSH` 存在且`DRMSystem.ContentProtectionData`包含 innerXML `<pssh>`元素，則兩個值應相同。

如果要在 HLS 資訊清單中傳送`DRMSystem`訊號，則 `<cpix:HLSSignalingData playlist="media">`和 `<cpix:HLSSignalingData playlist="master">`元素都必須包含在 CPIX 請求和回應中。

**<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、索引  |  -  |  -  |  -  | 

如果使用加密期間，則加密金鑰也需要連接到 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>  |  kid， intendedTrackType  |  -  |  至少一個 <cpix：AudioFilter> 或一個 <cpix：VideoFilter> (\$1)  |  <cpix：KeyPeriodFilter>  | 
|  <cpix：KeyPeriodFilter>  |  periodId  |  -  |  -  |  -  | 
|  <cpix：AudioFilter>  |  -  |  minChannels、maxChannels  |  -  |  -  | 
|  <cpix：VideoFilter>  |  -  |  minPixels、maxPixels、hdr、minFps、maxFps  |  -  |  -  | 

 *(\$1) 如需使用單一或多個內容金鑰來保護串流集中一或多個音軌的詳細說明，請參閱[加密合約](encryption-contract-v2.md)文件一節。\$1* 