

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

# SPEKE API v2
<a name="the-speke-api-v2"></a>

這是 REST API for Secure Packager and Encoder Key Exchange (SPEKE) v2。使用此規格為使用加密的客戶提供 DRM 版權保護。若要符合 SPEKE，您的 DRM 金鑰提供者必須公開此規格中所述的 REST API。加密程式會對您的金鑰提供者進行 API 呼叫。

**注意**  
本規定中的代碼範例僅供參考之用。您無法執行這些範例，由於它們不是完整 SPEKE 實作的一部分。

SPEKE 使用 DASH 產業論壇內容保護資訊交換格式 (DASH-IF-CPIX) 資料結構定義進行金鑰交換，但有一些限制。DASH-IF-CPIX 會定義結構描述，以提供從 DRM 平台到加密程式的可擴展、多 DRM 交換。這可讓系統在內容壓縮和封裝時，能夠對所有自適性位元速率封裝格式進行內容加密。自適性位元速率封裝格式包括 HLS、DASH 和 MSS。

從其 2.0 版開始，SPEKE 會與特定 CPIX 版本一致：

在 SPEKE 端，這是透過使用 `X-Speke-Version` HTTP 標頭，以及在 CPIX 端透過使用 `CPIX@version` 屬性強制執行。請求中缺少這些元素是 SPEKE v1 舊版工作流程的典型情況。在 SPEKE v2 工作流程中，只有在金鑰提供者同時支援兩個版本參數時，才會預期其會處理 CPIX 文件。

如需交換格式的詳細資訊，請參閱 DASH 產業論壇 [CPIX 2.3 規格。](https://dashif.org/docs/CPIX2.3/Cpix.html)

整體而言，與 SPEKE v1.0 相比，SPEKE v2.0 帶來了以下發展：
+ 來自 SPEKE XML 命名空間的所有標籤都已棄用，以有利於 CPIX XML 命名空間中的對等標籤
+  `SPEKE:ProtectionHeader` 已棄用，並由 取代 `CPIX:DRMSystem.SmoothStreamingProtectionHeaderData` 
+  `CPIX:URIExtXKey`、 `SPEKE:KeyFormat`和 `SPEKE:KeyFormatVersions` 已棄用，並由 取代 `CPIX:DRMSystem.HLSSignalingData` 
+  `CPIX@id` 被 取代 `CPIX@contentId` 
+ 新的強制性 CPIX 屬性：`CPIX@version`、 `ContentKey@commonEncryptionScheme`
+ 新的選用 CPIX 元素： `DRMSystem.ContentProtectionData`
+ 支援多個內容金鑰
+ SPEKE 和 CPIX 之間的跨版本機制
+ HTTP 標頭演變：新`X-Speke-Version`標頭、`Speke-User-Agent`標頭重新命名為 `X-Speke-User-Agent` 
+ 活動訊號 API 棄用

隨著 SPEKE v1.0 規格保持不變，現有的實作不需要變更，即可繼續支援 SPEKE v1.0 工作流程。

**Topics**
+ [

# SPEKE API v2 - DASH-IF 規格的自訂和限制
](speke-constraints-v2.md)
+ [

# SPEKE API v2 - 標準承載元件
](standard-payload-components-v2.md)
+ [

# SPEKE API v2 - 加密合約
](encryption-contract-v2.md)
+ [

# SPEKE API v2 - 即時工作流程方法呼叫範例
](live-workflow-methods-v2.md)
+ [

# SPEKE API v2 - VOD 工作流程方法呼叫範例
](vod-workflow-method-v2.md)
+ [

# SPEKE API v2 - 內容金鑰加密
](content-key-encryption-v2.md)
+ [

# SPEKE API v2 - 覆寫金鑰識別符
](kid-override-v2.md)

# SPEKE API v2 - DASH-IF 規格的自訂和限制
<a name="speke-constraints-v2"></a>

DASH 產業論壇 [CPIX 2.3 規格](https://dashif.org/docs/CPIX2.3/Cpix.html)支援多種使用案例和拓撲。SPEKE API v2.0 規格同時定義 CPIX 設定檔和 CPIX 的 API。為了實現這兩個目標，它遵循具有下列自訂和限制條件的 CPIX 規格：

**CPIX 設定檔**
+ SPEKE 遵循 Encryptor Consumer 工作流程。
+ 對於加密的內容金鑰，SPEKE 會套用下列限制：
  + SPEKE 不支援請求或回應承載的數位簽章驗證 (XMLDSIG)。
  + SPEKE 需要 2048 RSA 型憑證。
+ SPEKE 只會利用一部分的 CPIX 功能：
  + SPEKE 會省略`UpdateHistoryItemList`功能。如果回應中存在清單，SPEKE 會忽略該清單。
  + SPEKE 會省略根/分葉金鑰功能。如果`ContentKey@dependsOnKey`屬性存在於回應中，SPEKE 會忽略該屬性。
  + SPEKE 會省略 `BitrateFilter`元素和 `VideoFilter@wcg` 屬性。如果 CPIX 承載中存在這些元素或屬性，則 SPEKE 會忽略它。
+ 只有[標準承載元件頁面](standard-payload-components-v2.md)或[加密合約頁面](encryption-contract-v2.md)中參考為「支援」的元素或屬性，才能用於與 SPEKE v2 交換的 CPIX 文件。
+ 當加密程式包含在 CPIX 請求中時，所有元素和屬性都應在金鑰提供者 CPIX 回應中包含有效值。如果沒有，加密程式應停止並擲回錯誤。
+ SPEKE 支援具有 `KeyPeriodFilter` 元素的金鑰輪換。SPEKE 僅使用 `ContentKeyPeriod@index`來追蹤金鑰期間。
+ 對於 HLS 訊號，必須使用多個`DRMSystem.HLSSignalingData`元素：一個`DRMSystem.HLSSignalingData@playlist`屬性值為「媒體」，另一個`DRMSystem.HLSSignalingData@playlist`屬性值為「主要」。
+ 當請求金鑰時，加密程式必須使用 `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` 屬性的值。接收此屬性的空值時，金鑰提供者應傳回描述為 'Missing ContentKey@commonEncryptionScheme for KID ' `id` 的錯誤。

  唯一的 CPIX 文件不能混合不同`ContentKey@commonEncryptionScheme`屬性的多個值。接收這類組合時，金鑰提供者應傳回描述為「不合規 ContentKey@commonEncryptionScheme 組合」的錯誤。

  並非所有`ContentKey@commonEncryptionScheme`值都與所有 DRM 技術相容。接收這類組合時，金鑰提供者應傳回描述為 'ContentKey@commonEncryptionScheme 與 DRMSystem `id` ' 不相容的錯誤。

   `ContentKey@commonEncryptionScheme` 值無法由金鑰提供者覆寫。
+ 在 CPIX 回應內文中接收 `DRMSystem@PSSH`和 `DRMSystem.ContentProtectionData` innerXML `<pssh>`元素的不同值時，加密程式應停止並擲回錯誤。 innerXML 

**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   |  缺少 KID 的 ContentKey@commonEncryptionScheme `id`（其中 `id`等於 ContentKey@kid 值）  | 
|  單一 CPIX 文件中使用的多個 ContentKey@commonEncryptionScheme 值  |  不合規的 ContentKey@commonEncryptionScheme 組合  | 
|  ContentKey@commonEncryptionScheme 與 DRM 技術不相容  |  ContentKey@commonEncryptionScheme 與 DRMSystem 不相容 `id`（其中 `id`等於 DRMSystem@systemId 值）  | 
|  X-Speke-Version 標頭值不是支援的 SPEKE 版本  |  不支援的 SPEKE 版本  | 
|  加密合約格式錯誤  |  格式不正確的加密合約  | 
|  加密合約與 DRM 安全層級限制條件相衝突  |  不支援請求的 CPIX 加密合約  | 
|  加密合約不包含任何 VideoFilter 或 AudioFilter 元素  |  缺少 CPIX 加密合約  | 

# 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* 

# SPEKE API v2 - 加密合約
<a name="encryption-contract-v2"></a>

加密合約會根據軌跡特性，定義哪些內容金鑰正在保護指定串流集中的追蹤。

雖然 是建議的業界最佳實務，但在串流集中對不同音軌使用多個內容金鑰並非強制性，但建議使用 - 至少兩個不同的內容金鑰，一個用於音訊音軌，另一個用於視訊音軌。可以使用單一內容金鑰來加密多個軌道，但需要在加密程式傳送至金鑰提供者的 CPIX 文件中明確發出訊號。一般而言，加密程式一律準確描述需要多少內容金鑰，以及如何利用這些金鑰來加密各種媒體軌。

**原則**  
加密合約位於 CPIX 文件的 `<cpix:ContentKeyUsageRuleList>`區段。在本節中， `<cpix:ContentKeyList>` 區段中定義的每個內容金鑰對應至特定`<cpix:ContentKeyUsageRule>`元素，其中應包含：
+ 可以參考一或多個子元件的`ContentKeyUsageRule@intendedTrackType`屬性，如果使用多個子元件，則以「＋」符號分隔。的值`ContentKeyUsageRule@intendedTrackType`在加密合約中應是唯一的，不能用於多個`ContentKeyUsageRule`元素。
+ 一或多個 `<cpix:AudioFilter>` 或 `<cpix:VideoFilter>` 子元素，取決於`ContentKeyUsageRule@intendedTrackType`屬性的值。

管理此關係的規則如下：
+ 當串流集的所有音訊和視訊軌都需要使用唯一的內容金鑰保護時，`'ALL'`必須使用字串做為`ContentKeyUsageRule@intendedTrackType`屬性值。範例 1 顯示這類使用案例。在這種情況下，應同時包含不含任何屬性的 `<cpix:AudioFilter />`和`<cpix:VideoFilter />`子元素。`<cpix:AudioFilter>` 和/或 `<cpix:VideoFilter>` 元素的任何其他組合在此特定內容中無效。
+ 對於所有其他使用案例，可以自由定義`ContentKeyUsageRule@intendedTrackType`屬性的值，且 `<cpix:AudioFilter />`和`<cpix:VideoFilter />`子元素的數量必須對應至透過 '\$1' 符號彙總的子元件數量。當`ContentKeyUsageRule@intendedTrackType`屬性值中存在單一子元件時，範例 2/3/4/5/6/7/9/10 會說明此需求。範例 8 會在使用多個子元件時加以說明：由具有不同屬性值的兩個不同`<cpix:VideoFilter>`子元素`ContentKeyUsageRule@intendedTrackType="SD+HD"`描述，而由具有不同屬性值的三個不同`<cpix:VideoFilter>`子元素`ContentKeyUsageRule@intendedTrackType="HDR+HFR+UHD"`描述。

**篩選條件**  
CPIX 定義多個篩選元素和屬性，但 SPEKE 僅支援其中一部分。下表摘要說明這些差異：


| CPIX 篩選條件類型 | 整體 SPEKE 支援 | SPEKE 支援的篩選條件屬性 | SPEKE 不支援篩選條件屬性 | 
| --- | --- | --- | --- | 
|  <cpix：VideoFilter>  |  是  |  minPixels、maxPixels、hdr、minFps、maxFps （選用屬性）  |  wcg  | 
|  <cpix：AudioFilter>  |  是  |  minChannels、maxChannels （選用屬性）  |  | 
|  <cpix：KeyPeriodFilter>  |  是  |  periodId （必要屬性）  |  | 
|  <cpix：BitrateFilter>  |  否  |  N/A  |  N/A  | 
|  <cpix：LabelFilter>  |  否  |  N/A  |  N/A  | 

根據 VideoFilter 的 CPIX 規格，【minPixels， maxPixels】 是兩個維度中的所有包含範圍，而 (minFps， maxFps】 僅包含 maxFps 維度。對於 AudioFilter，【minChannels， maxChannels】 是兩個維度中的包含範圍。

**有問題的情況**  
在某些情況下，加密合約中提供的資訊可能是部分、不明確或錯誤。在這些情況下，加密程式和金鑰提供者的行為必須適當，並保證對內容提供適當的保護。下表顯示在這些情況下的建議行為：


| 在這種情況下 | 加密程式應該/應... | 金鑰提供者應該/應... | 
| --- | --- | --- | 
|  沒有規則適用於串流集中的一或多個音軌 （請參閱下面的範例 3)  |  加密程式應查看其組態 (CPIX 承載外部），並確認相關軌道不需要加密。如果不是預期，加密程式應該擲回錯誤並停止處理。  |   *不相關：金鑰提供者不了解串流集結構。*  | 
|  多個規則重疊，並建議多個內容金鑰來加密特定軌道  |  加密程式應該按照文件的順序套用最後一個成功評估的 ContentKeyUsageRule。  |   *不相關：金鑰提供者不了解串流集結構。*  | 
|  加密合約會在單一 SPEKE 請求/回應週期中變更  |  加密程式應引發例外狀況並停止處理，因為金鑰提供者不負責定義加密合約。  |  為避免這種情況發生，金鑰提供者不得修改 SPEKE 請求的 CPIX 承載中收到的加密合約。  | 
|  格式錯誤的加密合約：intendedTrackType/Filters 基數限制例外狀況、不支援的篩選條件或屬性  |  加密程式應引發例外狀況、停止處理，且不會將 SPEKE 請求傳送至金鑰提供者，因為這很可能會導致內容保護錯誤，或使某些軌跡未受保護。  |  金鑰提供者應引發例外狀況，並傳回「格式化加密合約」錯誤。  | 
|  格式良好的加密合約，但違反 DRM 安全層級限制：例如，請求單一內容金鑰來保護音訊音軌和 UHD 視訊音軌  |  如果加密程式了解 DRM 安全層級限制，應該引發例外狀況、停止處理，而且不會將 SPEKE 請求傳送給金鑰提供者，因為這很可能會導致內容保護錯誤。  |  金鑰提供者應引發例外狀況，並傳回「不支援請求的 CPIX 加密合約」錯誤。  | 
|  缺少加密合約  |  加密程式不應傳送不包含任何 VideoFilter 或 AudioFilter 元素的 CPIX 文件。  |  金鑰提供者應引發例外狀況，並傳回「缺少 CPIX 加密合約」錯誤。  | 

**加密合約的範例**  
 *範例 1：一個內容索引鍵，用於所有音訊和視訊音軌* 

```
<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>
```

 *範例 2：一個內容金鑰用於所有視訊軌，一個內容金鑰用於所有音訊軌* 

```
<cpix:ContentKeyUsageRuleList>
    <cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO">
        <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
        <cpix:VideoFilter />
    </cpix:ContentKeyUsageRule>
    <cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
        <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
        <cpix:AudioFilter />
    </cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```

 *範例 3：一個內容索引鍵，用於所有視訊軌、未加密的音訊軌* 

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

 *範例 4：多個內容金鑰用於不同的視訊軌 (SD/HD)，一個內容金鑰用於所有音訊軌* 

```
<cpix:ContentKeyUsageRuleList>
	<!-- Rule for SD video tracks (up to 1024x576) -->
	<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter maxPixels="589824" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for HD video tracks (more than 1024x576) -->
	<cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter minPixels="589825" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for all audio tracks -->
	<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter />
	</cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```

 *範例 5：多個內容金鑰用於不同的視訊軌 (SD/HD/UHD)，一個內容金鑰用於所有音訊軌* 

```
<cpix:ContentKeyUsageRuleList>
	<!-- Rule for SD video tracks (up to 1024x576) -->
	<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter maxPixels="589824" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for HD video tracks (more than 1024x576, up to 1920x1080) -->
	<cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter minPixels="589825" maxPixels="2073600" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for UHD video tracks (more than 1920x1080) -->
	<cpix:ContentKeyUsageRule kid="75c6fa78-8b5d-6d75-9653-26f41b78d1a3" intendedTrackType="UHD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter minPixels="2073601" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for all audio tracks -->
	<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter />
	</cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```

 *範例 6：多個內容金鑰用於不同的視訊軌 (SD/HD/UHD1/UHD2)，一個內容金鑰用於所有音訊軌* 

```
<cpix:ContentKeyUsageRuleList>
	<!-- Rule for SD video tracks (up to 1024x576) -->
	<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter maxPixels="589824" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for HD video tracks (more than 1024x576, up to 1920x1080) -->
	<cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter minPixels="589825" maxPixels="2073600" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for UHD1 video tracks (more than 1920x1080, up to 4096x2160) -->
	<cpix:ContentKeyUsageRule kid="75c6fa78-8b5d-6d75-9653-26f41b78d1a3" intendedTrackType="UHD1">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter minPixels="2073601" maxPixels="8847360" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for UHD2 video tracks (more than 4096x2160) -->
	<cpix:ContentKeyUsageRule kid="63d2ec36-6b7c-9f34-4546-97d01f36f7c5" intendedTrackType="UHD2">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter minPixels="8847361" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for all audio tracks -->
	<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter />
	</cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```

 *範例 7：多個內容金鑰用於不同的視訊軌 (SD/HD1/HD2/UHD1/UHD2)，一個內容金鑰用於所有音訊軌* 

```
<cpix:ContentKeyUsageRuleList>
	<!-- Rule for SD video tracks (up to 1024x576) -->
	<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter maxPixels="589824" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for HD1 video tracks (more than 1024x576, up to 1280x720) -->
	<cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HD1">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter minPixels="589825" maxPixels="921600" />
	</cpix:ContentKeyUsageRule>
        <!-- Rule for HD2 video tracks (more than 1280x720, up to 1920x1080) -->
          <cpix:ContentKeyUsageRule kid="cda406d8-9d87-4f76-92da-31110e756176" intendedTrackType="HD2">
            <cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
            <cpix:VideoFilter minPixels="921601" maxPixels="2073600" />
          </cpix:ContentKeyUsageRule>
	<!-- Rule for UHD1 video tracks (more than 1920x1080, up to 4096x2160) -->
	<cpix:ContentKeyUsageRule kid="75c6fa78-8b5d-6d75-9653-26f41b78d1a3" intendedTrackType="UHD1">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter minPixels="2073601" maxPixels="8847360" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for UHD2 video tracks (more than 4096x2160) -->
	<cpix:ContentKeyUsageRule kid="63d2ec36-6b7c-9f34-4546-97d01f36f7c5" intendedTrackType="UHD2">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter minPixels="8847361" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for all audio tracks -->
	<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter />
	</cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```

 *範例 8：適用於不同視訊音軌的多個內容金鑰 （根據多個屬性類型）、適用於所有音軌的單一內容金鑰* 

```
<cpix:ContentKeyUsageRuleList>
	<!-- Rule for SD and HD video tracks-->
	<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="SD+HD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter maxPixels="442368" maxFps="30" hdr="false"/>
		<cpix:VideoFilter minPixels="442369" maxPixels="2073600" maxFps="30" hdr="false"/>
	</cpix:ContentKeyUsageRule>
	<!-- Rule for HDR, HFR and UHD video tracks-->
	<cpix:ContentKeyUsageRule kid="37e3de05-9a3b-4c69-8970-63c17a95e0b7" intendedTrackType="HDR+HFR+UHD">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter hdr="true" />
		<cpix:VideoFilter minFps="30" />
		<cpix:VideoFilter minPixels="20736001" />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for all audio tracks-->
	<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter />
	</cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```

 *範例 9：一個內容金鑰用於所有視訊音軌，多個內容金鑰用於立體聲和多聲道音訊音軌* 

```
<cpix:ContentKeyUsageRuleList>
	<!-- Rule for video tracks-->
	<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for stereo audio tracks-->
	<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="STEREO_AUDIO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter maxChannels="2"/>
	</cpix:ContentKeyUsageRule>
	<!-- Rule for multichannel audio tracks-->
	<cpix:ContentKeyUsageRule kid="7ae8e96f-309e-42c3-a510-24023d923373" intendedTrackType="MULTICHANNEL_AUDIO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<AudioFilter minChannels="3"/>
	</cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```

 *範例 10：一個內容金鑰用於所有影片音軌、多個內容金鑰用於立體聲，以及兩種類型的多聲道音軌* 

```
<cpix:ContentKeyUsageRuleList>
	<!-- Rule for video tracks-->
	<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:VideoFilter />
	</cpix:ContentKeyUsageRule>
	<!-- Rule for stereo audio tracks-->
	<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="STEREO_AUDIO">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter maxChannels="2"/>
	</cpix:ContentKeyUsageRule>
	<!-- Rule for multichannel audio tracks (3 to 6 channels)-->
	<cpix:ContentKeyUsageRule kid="7ae8e96f-309e-42c3-a510-24023d923373" intendedTrackType="MULTICHANNEL_AUDIO_3_6">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter minChannels="3" maxChannels="6"/>
	</cpix:ContentKeyUsageRule>
  <!-- Rule for multichannel audio tracks (7 channels and more)-->
	<cpix:ContentKeyUsageRule kid="81eb3761-55ff-4d22-a31d-94f01bbfd8ba" intendedTrackType="MULTICHANNEL_AUDIO_7">
		<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
		<cpix:AudioFilter minChannels="7"/>
	</cpix:ContentKeyUsageRule>
</cpix:ContentKeyUsageRuleList>
```

# SPEKE API v2 - 即時工作流程方法呼叫範例
<a name="live-workflow-methods-v2"></a>

 *請求語法範例* 

下列 URL 範例僅供參考，格式並非固定不變：

```
POST https://speke-compatible-server/speke/v2.0/copyProtection
```

 *請求內文* 

CPIX 文件。

 *請求標頭* 


| 名稱 | 類型 | 發生 | Description | 
| --- | --- | --- | --- | 
|   `AWS Authorization`   |  String  |  1..1  |  請參閱 [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html)   | 
|   `X-Amz-Security-Token`   |  String  |  1..1  |  請參閱 [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html)   | 
|   `X-Amz-Date`   |  String  |  1..1  |  請參閱 [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html)   | 
|   `Content-Type`   |  String  |  1..1  |  application/xml  | 
|   `X-Speke-Version`   |  String  |  1..1  |  與請求搭配使用的 SPEKE API 版本，配方為 MajorVersion.MinorVersion,例如 SPEKE v2.0 的 '2.0'  | 

 *回應標頭* 


| 名稱 | 類型 | 發生 | Description | 
| --- | --- | --- | --- | 
|   `X-Speke-User-Agent`   |  String  |  1..1  |  識別金鑰提供者的字串  | 
|   `Content-Type`   |  String  |  1..1  |  application/xml  | 
|   `X-Speke-Version`   |  String  |  1..1  |  與請求搭配使用的 SPEKE API 版本，配方為 MajorVersion.MinorVersion,例如 SPEKE v2.0 的 '2.0'  | 

 *請求回應* 


| HTTP 代碼 | 承載名稱 | 發生 | Description | 
| --- | --- | --- | --- | 
|   `200 (Success)`   |  CPIX  |  1..1  |  DASH-CPIX 承載回應  | 
|   `4XX (Client error)`   |  用戶端錯誤訊息  |  1..1  |  用戶端錯誤描述  | 
|   `5XX (Server error)`   |  伺服器錯誤訊息  |  1..1  |  伺服器錯誤描述  | 

**注意**  
本節中的範例不包含內容金鑰加密。如需如何新增內容金鑰加密的資訊，請參閱[內容金鑰加密](content-key-encryption-v2.md)。

 *清除中包含金鑰的即時範例請求承載* 

下列範例顯示從加密程式到 DRM 金鑰提供者的典型即時請求承載，包含一個內容金鑰用於所有視訊軌，以及一個內容金鑰用於所有音訊軌：

```
<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:ContentKey>
		<cpix:ContentKey explicitIV="L6jzdXrXAFbCJGBuMrrKrG==" kid="53abdba2-f210-43cb-bc90-f18f9a890a02" commonEncryptionScheme="cbcs"></cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- FairPlay -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<!-- Widevine -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
		</cpix:DRMSystem>
		<!-- Playready -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData></cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData></cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
	<cpix:ContentKeyPeriodList>
		<cpix:ContentKeyPeriod id="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f" index="1" />
	</cpix:ContentKeyPeriodList>
	<cpix:ContentKeyUsageRuleList>
		<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO">
			<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
			<cpix:VideoFilter />
		</cpix:ContentKeyUsageRule>
		<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
			<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
			<cpix:AudioFilter />
		</cpix:ContentKeyUsageRule>
	</cpix:ContentKeyUsageRuleList>
</cpix:CPIX>
```

 *清除中包含金鑰的即時範例請求承載* 

下列範例顯示來自 DRM 金鑰提供者的典型回應承載 （傳回的值已縮短為 【... 】 以供讀取）：

```
<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:ContentKey explicitIV="L6jzdXrXAFbCJGBuMrrKrG==" kid="53abdba2-f210-43cb-bc90-f18f9a890a02" commonEncryptionScheme="cbcs">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>h3toSFIlyAYpfXVQ795m6x==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- FairPlay -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media">aHR0cHM6L[...]WZm</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">Y29tLmFwc[...]XJ5</cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media">trBAnbMcj[...]u44</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">mn626PjyR[...]2fi</cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<!-- Widevine -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media">Ifa2V5LWl[...]nNB</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">oIARIQeSI[...]Nd2l</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>RoNd2lkZXZ[...]Nib</cpix:ContentProtectionData>
			<cpix:PSSH>AAAAanBzc[...]A==</cpix:PSSH>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media">lTznjvtzL[...]GfJ</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">XgzdzQH7p[...]zeX</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>TdgRnuJsZ[...]wDw</cpix:ContentProtectionData>
			<cpix:PSSH>mYZbjpWdS[...]D==</cpix:PSSH>
		</cpix:DRMSystem>
		<!-- Playready -->
		<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">GVzdCIfa2[...]Eta</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>t7WwH24FI[...]YCC</cpix:ContentProtectionData>
			<cpix:PSSH>FFFFanBzc[...]A==</cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData>s5RrJ12HL[...]UBB</cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media">BptGzwis2[...]Iej</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">3c9SXdVa0[...]MBH</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>HotJCMQyc[...]GpU</cpix:ContentProtectionData>
			<cpix:PSSH>S6UD43ybN[...]f==</cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData>VBFUv2or0[...]JeP</cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
	<cpix:ContentKeyPeriodList>
		<cpix:ContentKeyPeriod id="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f" index="1" />
	</cpix:ContentKeyPeriodList>
	<cpix:ContentKeyUsageRuleList>
		<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO">
			<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
			<cpix:VideoFilter />
		</cpix:ContentKeyUsageRule>
		<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
			<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
			<cpix:AudioFilter />
		</cpix:ContentKeyUsageRule>
	</cpix:ContentKeyUsageRuleList>
</cpix:CPIX>
```

# SPEKE API v2 - VOD 工作流程方法呼叫範例
<a name="vod-workflow-method-v2"></a>

 *請求語法範例* 

下列 URL 範例僅供參考，格式並非固定不變。

```
POST https://speke-compatible-server/speke/v2.0/copyProtection
```

 *請求內文* 

CPIX 文件。

 *請求標頭* 


| 名稱 | 類型 | 發生 | Description | 
| --- | --- | --- | --- | 
|   `AWS Authorization`   |  String  |  1..1  |  請參閱 [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html)   | 
|   `X-Amz-Security-Token`   |  String  |  1..1  |  請參閱 [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html)   | 
|   `X-Amz-Date`   |  String  |  1..1  |  請參閱 [AWS Sigv4](https://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html)   | 
|   `Content-Type`   |  String  |  1..1  |  application/xml  | 
|   `X-Speke-Version`   |  String  |  1..1  |  與請求搭配使用的 SPEKE API 版本，配方為 MajorVersion.MinorVersion,例如 SPEKE v2.0 的 '2.0'  | 

 *回應標頭* 


| 名稱 | 類型 | 發生 | Description | 
| --- | --- | --- | --- | 
|   `X-Speke-User-Agent`   |  String  |  1..1  |  識別金鑰提供者的字串  | 
|   `Content-Type`   |  String  |  1..1  |  application/xml  | 
|   `X-Speke-Version`   |  String  |  1..1  |  與請求搭配使用的 SPEKE API 版本，配方為 MajorVersion.MinorVersion,例如 SPEKE v2.0 的 '2.0'  | 

 *請求回應* 


| HTTP 代碼 | 承載名稱 | 發生 | Description | 
| --- | --- | --- | --- | 
|   `200 (Success)`   |  CPIX  |  1..1  |  DASH-CPIX 承載回應  | 
|   `4XX (Client error)`   |  用戶端錯誤訊息  |  1..1  |  用戶端錯誤描述  | 
|   `5XX (Server error)`   |  伺服器錯誤訊息  |  1..1  |  伺服器錯誤描述  | 

**注意**  
本節中的範例不包含內容金鑰加密。如需如何新增內容金鑰加密的資訊，請參閱[內容金鑰加密](content-key-encryption-v2.md)。

 *清除中包含金鑰的 VOD 範例請求承載* 

下列範例顯示從加密程式到 DRM 金鑰提供者的典型 VOD 請求承載，包含一個內容金鑰用於所有視訊軌，以及一個內容金鑰用於所有音訊軌：

```
<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:ContentKey>
		<cpix:ContentKey explicitIV="L6jzdXrXAFbCJGBuMrrKrG==" kid="53abdba2-f210-43cb-bc90-f18f9a890a02" commonEncryptionScheme="cbcs"></cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- FairPlay -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<!-- Widevine -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
		</cpix:DRMSystem>
		<!-- Playready -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData></cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData></cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
	<cpix:ContentKeyUsageRuleList>
		<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO">
			<cpix:VideoFilter />
		</cpix:ContentKeyUsageRule>
		<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
			<cpix:AudioFilter />
		</cpix:ContentKeyUsageRule>
	</cpix:ContentKeyUsageRuleList>
</cpix:CPIX>
```

 *清除中包含金鑰的 VOD 範例請求承載* 

下列範例顯示來自 DRM 金鑰提供者的典型回應承載 （傳回的值已縮短為 【... 】 以供讀取）：

```
<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:ContentKey explicitIV="L6jzdXrXAFbCJGBuMrrKrG==" kid="53abdba2-f210-43cb-bc90-f18f9a890a02" commonEncryptionScheme="cbcs">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>h3toSFIlyAYpfXVQ795m6x==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- FairPlay -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media">aHR0cHM6L[...]WZm</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">Y29tLmFwc[...]XJ5</cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="94ce86fb-07ff-4f43-adb8-93d2fa968ca2">
			<cpix:HLSSignalingData playlist="media">trBAnbMcj[...]u44</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">mn626PjyR[...]2fi</cpix:HLSSignalingData>
		</cpix:DRMSystem>
		<!-- Widevine -->
		<cpix:DRMSystem kid="98ee5596-cd3e-a20d-163a-e382420c6eff" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media">Ifa2V5LWl[...]nNB</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">oIARIQeSI[...]Nd2l</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>RoNd2lkZXZ[...]Nib</cpix:ContentProtectionData>
			<cpix:PSSH>AAAAanBzc[...]A==</cpix:PSSH>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media">lTznjvtzL[...]GfJ</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">XgzdzQH7p[...]zeX</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>TdgRnuJsZ[...]wDw</cpix:ContentProtectionData>
			<cpix:PSSH>mYZbjpWdS[...]D==</cpix:PSSH>
		</cpix:DRMSystem>
		<!-- Playready -->
		<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">GVzdCIfa2[...]Eta</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>t7WwH24FI[...]YCC</cpix:ContentProtectionData>
			<cpix:PSSH>FFFFanBzc[...]A==</cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData>s5RrJ12HL[...]UBB</cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
		<cpix:DRMSystem kid="53abdba2-f210-43cb-bc90-f18f9a890a02" systemId="9a04f079-9840-4286-ab92-e65be0885f95">
			<cpix:HLSSignalingData playlist="media">BptGzwis2[...]Iej</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">3c9SXdVa0[...]MBH</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>HotJCMQyc[...]GpU</cpix:ContentProtectionData>
			<cpix:PSSH>S6UD43ybN[...]f==</cpix:PSSH>
			<cpix:SmoothStreamingProtectionHeaderData>VBFUv2or0[...]JeP</cpix:SmoothStreamingProtectionHeaderData>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
	<cpix:ContentKeyUsageRuleList>
		<cpix:ContentKeyUsageRule kid="98ee5596-cd3e-a20d-163a-e382420c6eff" intendedTrackType="VIDEO">
			<cpix:VideoFilter />
		</cpix:ContentKeyUsageRule>
		<cpix:ContentKeyUsageRule kid="53abdba2-f210-43cb-bc90-f18f9a890a02" intendedTrackType="AUDIO">
			<cpix:AudioFilter />
		</cpix:ContentKeyUsageRule>
	</cpix:ContentKeyUsageRuleList>
</cpix:CPIX>
```

# SPEKE API v2 - 內容金鑰加密
<a name="content-key-encryption-v2"></a>

您可以選擇性地將內容金鑰加密新增至 SPEKE 實作。除了加密內容本身外，內容金鑰加密還會透過加密內容金鑰進行傳輸，以確保完整的端對端保護。如果您未為金鑰提供者實作此項目，則需要傳輸層加密加上強式身分驗證以確保安全。

若要對在 AWS 雲端中執行的加密程式使用內容金鑰加密，客戶會將憑證匯入 AWS Certificate Manager，然後使用產生的憑證 ARNs 進行加密活動。加密程式會使用憑證 ARNs 和 ACM 服務，將加密的內容金鑰提供給 DRM 金鑰提供者。

**限制**  
SPEKE 支援 DASH-IF CPIX 規格中指定的內容金鑰加密，但有下列限制：
+ SPEKE 不支援請求或回應承載的數位簽章驗證 (XMLDSIG)。
+ SPEKE 需要 2048 RSA 型憑證。

這些限制也會列在[自訂和 DASH-IF 規格的限制中](speke-constraints-v2.md)。

**實作內容金鑰加密**  
若要提供內容金鑰加密，請在您的 DRM 金鑰提供者實作中包含下列內容：
+ 處理請求和回應承載中的 `<cpix:DeliveryDataList>` 元素。
+ 在回應承載的 `<cpix:ContentKeyList>` 中提供加密值。

如需這些元素的詳細資訊，請參閱 [DASH-IF CPIX 2.3 規格。](https://dashif.org/docs/CPIX2.3/Cpix.html)

 *請求承載中的` <cpix:DeliveryDataList> ` 範例內容金鑰加密元素* 

```
<cpix:CPIX contentId="abc123"
    version="2.3"
    xmlns:cpix="urn:dashif:org:cpix"
    xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc">
    <cpix:DeliveryDataList>
        <cpix:DeliveryData id="<ORIGIN SERVER ID>">
            <cpix:DeliveryKey>
                <ds:X509Data>
                    <ds:X509Certificate><X.509 CERTIFICATE, BASE-64 ENCODED></ds:X509Certificate>
                </ds:X509Data>
            </cpix:DeliveryKey>
        </cpix:DeliveryData>
    </cpix:DeliveryDataList>
    <cpix:ContentKeyList>
     ...
    </cpix:ContentKeyList>
</cpix:CPIX>
```

 *回應承載中的` <cpix:DeliveryDataList> ` 範例內容金鑰加密元素* 

```
<cpix:CPIX contentId="abc123"
    version="2.3"
    xmlns:cpix="urn:dashif:org:cpix"
    xmlns:pskc="urn:ietf:params:xml:ns:keyprov:pskc">
    <cpix:DeliveryDataList>
        <cpix:DeliveryData id="<ORIGIN SERVER ID>">
            <cpix:DeliveryKey>
                <ds:X509Data>
                    <ds:X509Certificate><X.509 CERTIFICATE, BASE-64 ENCODED></ds:X509Certificate>
                </ds:X509Data>
            </cpix:DeliveryKey>
            <cpix:DocumentKey Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc">
                <cpix:Data>
                    <pskc:Secret>
                        <pskc:EncryptedValue>
                            <enc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" />
                            <enc:CipherData>
                                <enc:CipherValue><RSA CIPHER VALUE></enc:CipherValue>
                            </enc:CipherData>
                        </pskc:EncryptedValue>
                        <pskc:ValueMAC>qnei/5TsfUwDu+8bhsZrLjDRDngvmnUZD2eva7SfXWw=</pskc:ValueMAC>
                    </pskc:Secret>
                </cpix:Data>
            </cpix:DocumentKey>
            <cpix:MACMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#hmac-sha512">
                <cpix:Key>
                    <pskc:EncryptedValue>
                        <enc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p" />
                        <enc:CipherData>
                            <enc:CipherValue><RSA CIPHER VALUE></enc:CipherValue>
                        </enc:CipherData>
                    </pskc:EncryptedValue>
                    <pskc:ValueMAC>DGqdpHUfFKxdsO9+EWrPjtdTCVfjPLwwtzEcFC/j0xY=</pskc:ValueMAC>
                </cpix:Key>
            </cpix:MACMethod>
        </cpix:DeliveryData>
    </cpix:DeliveryDataList>
    <cpix:ContentKeyList>
     ...
    </cpix:ContentKeyList>
</cpix:CPIX>
```

 *回應承載中的` <cpix:ContentKeyList> ` 範例內容金鑰加密元素* 

下列範例說明回應承載 `<cpix:ContentKeyList>` 元素中的加密內容金鑰處理。其會使用 `<pskc:EncryptedValue>` 元素：

```
<cpix:ContentKeyList>
     <cpix:ContentKey explicitIV="OFj2IjCsPJFfMAxmQxLGPw==" kid="98ee5596-cd3e-a20d-163a-e382420c6eff" commonEncryptionScheme="cbcs">
         <cpix:Data>
             <pskc:Secret>
                 <pskc:EncryptedValue>
                     <enc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes256-cbc" />
                     <enc:CipherData>
                         <enc:CipherValue>NJYebfvJ2TdMm3k6v+rLNVYb0NoTJoTLBBdbpe8nmilEfp82SKa7MkqTn2lmQBPB</enc:CipherValue>
                     </enc:CipherData>
                 </pskc:EncryptedValue>
                 <pskc:ValueMAC>t9lW4WCebfS1GP+dh0IicMs+2+jnrAmfDa4WU6VGHc4=</pskc:ValueMAC>
             </pskc:Secret>
         </cpix:Data>
     </cpix:ContentKey>
 </cpix:ContentKeyList>
```

相比之下，下列範例會顯示類似的回應承載，包含未加密交付的內容金鑰 (做為清除金鑰)。其會使用 `<pskc:PlainValue>` 元素：

```
<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>
```

# SPEKE API v2 - 覆寫金鑰識別符
<a name="kid-override-v2"></a>

加密程式會在每次輪換金鑰時建立新的金鑰識別符 (KID)。它會在請求中將 KID 傳遞到 DRM 金鑰提供者。金鑰提供者通常會使用相同的 KID 進行回應，但它可以為回應中的 KID 提供不同的值。

下列是 KID 的範例請求 `11111111-1111-1111-1111-111111111111`：

```
<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="11111111-1111-1111-1111-111111111111" commonEncryptionScheme="cbcs"></cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- Widevine -->
		<cpix:DRMSystem kid="11111111-1111-1111-1111-111111111111" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media"></cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master"></cpix:HLSSignalingData>
			<cpix:ContentProtectionData></cpix:ContentProtectionData>
			<cpix:PSSH></cpix:PSSH>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
	<cpix:ContentKeyPeriodList>
		<cpix:ContentKeyPeriod id="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f" index="1" />
	</cpix:ContentKeyPeriodList>
	<cpix:ContentKeyUsageRuleList>
		<cpix:ContentKeyUsageRule kid="11111111-1111-1111-1111-111111111111" intendedTrackType="VIDEO">
			<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
			<cpix:VideoFilter />
		</cpix:ContentKeyUsageRule>
	</cpix:ContentKeyUsageRuleList>
</cpix:CPIX>
```

下列回應會將 KID 覆寫為 `22222222-2222-2222-2222-222222222222`：

```
<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="22222222-2222-2222-2222-222222222222" commonEncryptionScheme="cbcs">
			<cpix:Data>
				<pskc:Secret>
					<pskc:PlainValue>5dGAgwGuUYu4dHeHtNlxJw==</pskc:PlainValue>
				</pskc:Secret>
			</cpix:Data>
		</cpix:ContentKey>
	</cpix:ContentKeyList>
	<cpix:DRMSystemList>
		<!-- Widevine -->
		<cpix:DRMSystem kid="22222222-2222-2222-2222-222222222222" systemId="edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
			<cpix:HLSSignalingData playlist="media">Ifa2V5LWl[...]nNB</cpix:HLSSignalingData>
			<cpix:HLSSignalingData playlist="master">oIARIQeSI[...]Nd2l</cpix:HLSSignalingData>
			<cpix:ContentProtectionData>RoNd2lkZXZ[...]Nib</cpix:ContentProtectionData>
			<cpix:PSSH>AAAAanBzc[...]A==</cpix:PSSH>
		</cpix:DRMSystem>
	</cpix:DRMSystemList>
	<cpix:ContentKeyPeriodList>
		<cpix:ContentKeyPeriod id="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f" index="1" />
	</cpix:ContentKeyPeriodList>
	<cpix:ContentKeyUsageRuleList>
		<cpix:ContentKeyUsageRule kid="22222222-2222-2222-2222-222222222222" intendedTrackType="VIDEO">
			<cpix:KeyPeriodFilter periodId="keyPeriod_0909829f-40ff-4625-90fa-75da3e53278f"/>
			<cpix:VideoFilter />
		</cpix:ContentKeyUsageRule>
	</cpix:ContentKeyUsageRuleList>
</cpix:CPIX>
```