PlayReady 標頭規格
1.簡介
此規格適用于使用 PlayReady Server SDK、PlayReady 裝置移植套件、Windows、Xbox、Windows Phone和 Silverlight 建立的任何終端產品。
1.1. 變更記錄
版本 | 變更 |
---|---|
2021 年 9 月 8 日 | 將選擇性 LICENSEREQUESTED 屬性新增至 PROTECTINFO 節點。 |
2017 年 11 月 1 日 | 新增 [語法需求] 區段。 修正具有不正確屬性順序 (屬性的多個範例必須依字母順序排列) |
2017 年 7 月 12 日 | 從 PlayReady 第 4 版開始,支援新增 PlayReady 標頭 4.3.0.0 區段。 新增所有 XML 節點都必須由結束記號明確關閉的語法需求 |
2015 年 4 月 10 日 | 從 PlayReady 第 3 版開始支援 PlayReady 標頭 4.2.0.0 區段 |
2011 年 9 月 | 從 PlayReady 第 2 版開始支援新增 PlayReady 標頭 4.1.0.0 區段 |
2008 年 8 月 | PlayReady 標頭 4.0.0.0 支援的初始版本 |
2. PlayReady 物件 (PRO)
PlayReady 物件 (PRO) 包含下欄欄位。
欄位名稱 | 欄位類型 | 大小 (位) | 描述 |
---|---|---|---|
長度 | DWORD | 32 | PlayReady 物件的長度,以位元組為單位。 此值不應超過 15 KB (KB) 。 |
PlayReady 物件記錄計數 | WORD | 16 | 指定 PlayReady 物件中的 PlayReady 物件記錄數目。 |
PlayReady 物件記錄 | BYTE 陣列 | 不定 | 包含可變數目的記錄,其中包含與授權和授權取得相關的資訊。 |
2.1 PlayReady 物件記錄
PlayReady 物件是由稱為 PlayReady 物件記錄的其他子物件所組成。 PlayReady 物件記錄包含下欄欄位。
欄位名稱 | 欄位類型 | 大小 (位) | 描述 |
---|---|---|---|
記錄類型 | WORD | 16 | 指定儲存在記錄值中的資料類型。 |
記錄長度 | WORD | 16 | 指定 Record Value 的位元組大小。 |
記錄值 | BYTE 陣列 | 不定 | 物件的內容取決於 Record Type 的值。 |
[記錄類型] 欄位具有下列其中一個值。
值類型 | 描述 |
---|---|
0x0001 | 表示記錄包含 PlayReady 標頭 (PRH) 。 |
0x0002 | 保留的。 |
0x0003 | 表示內嵌授權Microsoft Store (ELS) 。 |
2.2. PlayReady 物件範例
下圖顯示具有 PlayReady 物件的分段 MP4 檔案,其中包含 PlayReady 標頭:
下圖顯示此 MP4 檔案的 HEX 檢視:
3. PlayReady 標頭 (PRH)
PlayReady 標頭 (PRH) 是由用戶端用來尋找或取得其儲存內容片段的授權。 它會使用 UTF-16 進行編碼。
3.1 版本支援矩陣
PlayReady 標頭 v4.3.0.0 | PlayReady 標頭 v4.2.0.0 | PlayReady 標頭 v4.1.0.0 | PlayReady 標頭 v4.0.0.0 | |
---|---|---|---|---|
PlayReady 4.0 SDK 型用戶端 (請參閱附注 1) |
✓ | ✓ | ✓ | ✓ |
PlayReady 3.0 SDK 型用戶端 (請參閱附注 2) |
✓ | ✓ | ✓ | |
PlayReady 2.x SDK 型用戶端 (請參閱附注 3) |
✓ | ✓ | ||
PlayReady 1.x SDK 型用戶端 (請參閱附注 4) |
✓ |
注意:
- Xbox One 1709 版或更高版本是 PlayReady 4.X 用戶端。
- Windows 10 (所有版本) 和Xbox One 1703 版或更新版本都是 PlayReady 3.X 用戶端。 例如,2017 年之後發行的最新非Windows裝置) (是 PlayReady 3.X 用戶端。
- Silverlight 和 Windows 8,8.1 是 PlayReady 2.X 用戶端。 例如,大部分非Windows裝置 (,在 2011 到 2017 年之間發行的智慧) 型電視都是 PlayReady 2.X 用戶端。
- 例如,大部分非Windows裝置 (,在 2008 到 2011 年之間發行的智慧) 型電視都是 PlayReady 1.X 用戶端。
3.2. 語法需求
3.2.1. 標準化
XML 必須正式化。
3.2.2. 所有 Node 和 Attributes 名稱都會區分大小寫
支援
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
不支援
<KID value="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<kid VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </kid>
3.2.3. 結束記號必須明確
所有 XML 節點都必須透過結束記號明確關閉,包括 CUSTOMATTRIBUTES 節點內的節點中的節點。
支援
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo"> </MyNode> </CUSTOMATTRIBUTES>
不支援
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> <CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo"> </CUSTOMATTRIBUTES>
3.2.4. 命名空間屬性
所有命名空間屬性都必須出現在非命名空間屬性之前。
支援
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
不支援
<WRMHEADER version="4.3.0.0" xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader>
3.2.5. 字母順序
所有屬性都必須依字母順序排列,包括 CUSTOMATTRIBUTES 節點內的節點。
支援
<KID ALGID="AESCBC" VALUE="PV1LM/VEVk+kEOB8qqcWDg=="> </KID>
<CUSTOMATTRIBUTES> <MyNode BarAttribute="Bar" FooAttribute="Foo"> </MyNode> </CUSTOMATTRIBUTES>
不支援
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg==" ALGID="AESCBC"> </KID>
<CUSTOMATTRIBUTES> <MyNode FooAttribute="Foo" BarAttribute="Bar"> </MyNode> </CUSTOMATTRIBUTES>
3.3. v4.3.0.0
PlayReady Header v4.3.0.0 于 2017 年 9 月推出 PlayReady 4.0 版,以支援標頭中的 AESCBC 金鑰。 這項支援允許在 CBC 模式中加密內容,特別是常見加密模式 'cbcs'。 它也會增加 PlayReady 用戶端與其他 DRM 系統的互通性,以及現有的內容。
3.3.1. 與其他版本的差異
從 4.0 版開始,PlayReady SDK 和用戶端就能夠處理 PlayReady 標頭 4.0、4.1、4.2 和 4.3 版。 4.0 版之前的 PlayReady SDK 會在 v4.3 標頭提供時傳回「不支援的版本」錯誤。
相較于 v4.2.0.0,PlayReady 標頭格式 v.4.3.0.0 具有下列變更:
- WRMHEADER元素的版本屬性設定為字串 「4.3.0.0」。
- 在授權擷取要求中,可能遺漏位於 KID元素內的ALGID屬性。 Microsoft 建議 ALGID 屬性在內容中包含的標頭中具有有效的值。
- 當ALGID屬性存在於任何一個的一個,而且在 KIDS元素中有一個以上的一個,則所有的 KID元素都必須包含ALGID屬性,而且屬性值必須相同。
- 除了 「AESCTR」 之外,在一般專案內的 ALGID 屬性現在可以有值 「AESCBC」,前提是:
- 當 ALGID 屬性設定為 「AESCBC」 時,不得包含 CHECKSUM 屬性。
3.3.2. 範例
以下是具有 AESCBC 機碼的 PlayReady 標頭 4.3.0.0 範例:
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
<DATA>
<PROTECTINFO>
<KIDS>
<KID ALGID="AESCBC" VALUE="PV1LM/VEVk+kEOB8qqcWDg=="></KID>
<KID ALGID="AESCBC" VALUE="tuhDoKUN7EyxDPtMRNmhyA=="></KID>
</KIDS>
</PROTECTINFO>
<LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
<DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
</DATA>
</WRMHEADER>
以下是具有遺漏 ALGID 的 PlayReady Header 4.3.0.0 範例:
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
<DATA>
<PROTECTINFO>
<KIDS>
<KID VALUE="PV1LM/VEVk+kEOB8qqcWDg=="></KID>
</KIDS>
</PROTECTINFO>
<LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
<DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
</DATA>
</WRMHEADER>
3.3.3. [格式]
PlayReady Header v4.3.0.0 具有下列語法:
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.3.0.0">
<DATA>
<PROTECTINFO LICENSEREQUESTED="true">
<KIDS>
<KID ALGID="value" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
<KID ALGID="value" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
<KID ALGID="value" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
</KIDS>
</PROTECTINFO>
<LA_URL> URL for license acquisition </LA_URL>
<LUI_URL>
URL for Non-silent license acquisition web page
</LUI_URL>
<DS_ID> base64-encoded guid </DS_ID>
<CUSTOMATTRIBUTES xmlns="">
<mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
<mm:Author>
Elvis Presley
</mm:Author>
<mm:CreationDate>
2007/08/21:12:00:00
</mm:CreationDate>
</mm:Publisher>
</CUSTOMATTRIBUTES>
<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
</DATA>
</WRMHEADER>
標籤如下所述。
標籤名稱 | 必要 | 描述 |
---|---|---|
WRMHEADER | 是 | 標頭物件的最外層專案。 它可以包含一個 DATA 元素,而且必須包含一個版本屬性。 標頭的版本是 「4.3.0.0」。 每當 Microsoft 定義新的強制標記或屬性時,新的版本號碼就會與這些標籤或屬性相關聯。 如果版本大於撰寫用戶端程式代碼的版本,則用戶端程式代碼必須失敗,因為它表示標頭包含用戶端無法瞭解的必要標記。 如果版本小於或等於撰寫用戶端程式代碼的版本,則用戶端程式代碼可以安全地略過它不了解的任何標記或屬性。 |
DATA | 否 | 標頭資料的容器元素,包括協力廠商標記。 WRMHEADER元素中不能包含多個DATA元素。 |
PROTECTINFO | 否 | 指定零或一 個 KIDS 元素。 DATA元素中不能包含一個以上的 PROTECTINFO元素。 選擇性地包含 LICENSEREQUESTED 屬性。 |
LICENSEREQUESTED | 否 | 指定授權取得是否要求至少一個授權。 如果存在,則必須設定為 「true」 或 「false」,如果不存在,則會假設設定為 「true」。 4.5 之前的 PlayReady 版本會忽略此屬性。 PlayReady Server SDK 應用程式是免費的,可以忽略此屬性;它僅供參考。 |
孩子 | 否 | 指定一或多個可用於為相關聯內容建立解密程式物件的一或多個一或多個 KID 元素。 PROTECTINFO節點底下可能存在一或零個兒童元素。 |
孩子 | 否 | 包含指定授權的所有金鑰資料。 如果兒童節點存在,則兒童節點底下必須有一或多個一或多個KID元素。
KID元素包含下列屬性。 ALGID:選擇性。 指定加密演算法。 可以設定為:「AESCTR」、「AESCBC」 或 「一個「資料行」。 CHECKSUM:選擇性。 僅適用于 AESCTR 金鑰。 包含使用 KID VALUE 屬性和內容索引鍵計算的總和檢查碼。 如需詳細資訊,請參閱本檔的金鑰總和檢查碼演算法一節。 如果此節點存在於 WRMHeader XML 中,則其資料值必須是空的。 VALUE:必要。 包含 base64 編碼的金鑰識別碼 GUID 值。 請注意,這個 GUID (DWORD、WORD、WORD、8 位元組陣列) 值必須是位元組的位元組順序小到小。 |
LA_URL | 否 | 包含授權取得 Web 服務的 URL。 只允許絕對 URL。
DATA元素中不能包含一個以上的LA_URL專案。 如果此節點存在於 WRMHeader XML 中,則其資料值不得為空白。 |
LUI_URL | 否 | 包含非無訊息授權取得網頁的 URL。 只允許絕對 URL。
DATA元素中不能包含一個以上的LUI_URL專案。 如果此節點存在於 WRMHeader XML 中,則其資料值不得為空白。 |
DS_ID | 否 | 網域服務的服務識別碼。 DATA元素最多只能包含一個DS_ID元素。 如果此節點存在於 WRMHeader XML 中,則其資料值不得為空白。 |
CUSTOMATTRIBUTES | 否 | 內容作者可以在這個專案內新增自訂 XML。 Microsoft 程式碼不會針對此元素內含的任何資料採取動作。
DATA元素中不能包含一個以上的CUSTOMATTRIBUTES元素。 如果此節點存在於 WRMHeader XML 中,則其資料值不得為空白。 |
DECRYPTORSETUP | 否 | 此標籤只能包含值 「ONDEMAND」。 當此標籤存在於 DATA 節點且其值設定為 「ONDEMAND」 時,它會向應用程式指出它不應該預期內容的完整授權鏈結可供取得,或在用戶端電腦上已存在,再設定媒體圖形。 如果未設定此標籤,則表示應用程式可以在設定媒體圖表之前,強制執行要取得的授權,或已存在於用戶端電腦上。 DATA元素中不能包含多個DECRYPTORSETUP專案。 |
3.4. v4.2.0.0
PlayReady Header v4.2.0.0 于 2015 年 4 月引進 PlayReady 3.0 版,以允許單一標頭中的多個 KID。 這表示多個金鑰可用來加密單一資產,例如,當音訊播放軌必須使用與視訊播放軌不同的金鑰加密時。
3.4.1. 與其他版本的差異
PlayReady 3.0 SDK 和更新版本的用戶端能夠處理 v4.0、v4.1 和 v4.2 PlayReady 標頭版本。 先前的 PlayReady SDK 會在提供 v4.2 標頭時傳回「不支援的版本」錯誤。 使用 v4.2 標頭時,用戶端必須知道它透過自訂的應用程式特定機制所使用的伺服器版本。 PlayReady SDK 不提供取得此版本資訊的原生方式。
相較于 v4.1.0.0,PlayReady 標頭格式 v.4.2.0.0 具有下列變更:
- WRMHEADER元素的版本屬性會設定為字串 「4.2.0.0」。
- PROTECTINFO元素內的KID元素已重新命名為兒童,但仍為選擇性專案。
- 多個 KID 元素位於 KIDS 元素內。
3.4.2. 範例
具有兩個 AESCTR 機碼的 PlayReady 標頭 4.2.0.0:
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.2.0.0">
<DATA>
<PROTECTINFO>
<KIDS>
<KID ALGID="AESCTR" CHECKSUM="xNvWVxoWk04=" VALUE="0IbHou/5s0yzM80yOkKEpQ=="></KID>
<KID ALGID="AESCTR" CHECKSUM="GnKaQIRacPU=" VALUE="/qgG2xbs4k2SKCxx6bhWqw=="></KID>
</KIDS>
</PROTECTINFO>
<LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
<DS_ID>AH+03juKbUGbHl1V/QIwRA==</DS_ID>
</DATA>
</WRMHEADER>
3.4.3. [格式]
PlayReady Header v4.2.0.0 具有下列語法:
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.2.0.0">
<DATA>
<PROTECTINFO>
<KIDS>
<KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
<KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
<KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
</KIDS>
</PROTECTINFO>
<LA_URL> URL for license acquisition </LA_URL>
<LUI_URL>
URL for Non-silent license acquisition web page
</LUI_URL>
<DS_ID> base64-encoded guid </DS_ID>
<CUSTOMATTRIBUTES xmlns="">
<mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
<mm:Author>
Elvis Presley
</mm:Author>
<mm:CreationDate>
2007/08/21:12:00:00
</mm:CreationDate>
</mm:Publisher>
</CUSTOMATTRIBUTES>
<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
</DATA>
</WRMHEADER>
標籤如下所述。
標籤名稱 | 必要 | 描述 |
---|---|---|
WRMHEADER | 是 | 標頭物件的最外層專案。 它可以包含一個 DATA 元素,而且必須包含一個版本屬性。 標頭的版本是 「4.2.0.0」。 每當 Microsoft 定義新的強制標記或屬性時,新的版本號碼就會與這些標籤或屬性相關聯。 如果版本大於撰寫用戶端程式代碼的版本,則用戶端程式代碼必須失敗,因為它表示標頭包含用戶端無法瞭解的必要標記。 如果版本小於或等於撰寫用戶端程式代碼的版本,則用戶端程式代碼可以安全地略過它不了解的任何標記或屬性。 |
DATA | 否 | 標頭資料的容器元素,包括協力廠商標記。 WRMHEADER元素最多隻能包含一個DATA元素。 |
PROTECTINFO | 否 | 指定零或一 個 KIDS 元素。 DATA元素中不能包含一個以上的 PROTECTINFO元素。 |
孩子 | 否 | 指定一或多個可用於為相關聯內容建立解密程式物件的一或多個一或多個 KID 元素。 PROTECTINFO節點底下可能存在一或零個兒童元素。 |
孩子 | 否 | 包含指定授權的所有金鑰資料。 如果兒童節點存在,則一或多個KIDS元素必須存在於兒童節點之下。
KID元素包含下列屬性。 ALGID:必要。 指定加密演算法。 必須設定為:AESCTR 或一或二 次檢查碼:選擇性。 包含使用 KID VALUE 和內容金鑰計算的總和檢查碼。 如需詳細資訊,請參閱本檔的 金鑰總和檢查碼演算法 一節。 如果此節點存在於 WRMHeader XML 中,則其資料值必須是空的。 VALUE:必要。 包含 base64 編碼的金鑰識別碼 GUID 值。 請注意,這個 GUID (DWORD、WORD、WORD、8 位元組陣列) 值必須是位元組的位元組順序小到小。 |
LA_URL | 否 | 包含授權取得 Web 服務的 URL。 只允許絕對 URL。
DATA元素中不能包含一個以上的LA_URL專案。 如果此節點存在於 WRMHeader XML 中,則其資料值不得為空白。 |
LUI_URL | 否 | 包含非無訊息授權取得網頁的 URL。 只允許絕對 URL。
DATA元素中不能包含一個以上的LUI_URL專案。 如果此節點存在於 WRMHeader XML 中,則其資料值不得為空白。 |
DS_ID | 否 | 網域服務的服務識別碼。
DATA元素中不能包含一個以上的DS_ID專案。 如果此節點存在於 WRMHeader XML 中,則其資料值不得為空白。 |
CUSTOMATTRIBUTES | 否 | 內容作者可以在這個專案內新增任意 XML。 Microsoft 程式碼不會針對此元素內含的任何資料採取動作。
DATA元素中不能包含一個以上的CUSTOMATTRIBUTES元素。 如果此節點存在於 WRMHeader XML 中,則其資料值不得為空白。 |
DECRYPTORSETUP | 否 | 此標籤只能包含值 「ONDEMAND」。 當此標籤存在於 DATA 節點且其值設定為 「ONDEMAND」 時,它會向應用程式指出它不應該預期內容的完整授權鏈結可供取得,或在用戶端電腦上已存在,再設定媒體圖形。 如果未設定此標籤,則表示應用程式可以在設定媒體圖表之前,強制執行要取得的授權,或已存在於用戶端電腦上。 DATA元素中不能包含多個DECRYPTORSETUP專案。 |
3.5. v4.1.0.0
PlayReady Header v4.1.0.0 已于 2011 年 9 月推出 PlayReady 2.0 版,以支援內嵌于資料流程中的即時線性串流。 這種類型的資料流程需要用戶端系結可調整的根授權,而不需要知道將用於解密程式的內容加密金鑰。
3.5.1. 與其他版本的差異
PlayReady 2.0 SDK 和更新版本的用戶端能夠同時處理 v4.0 和 v4.1 PlayReady 標頭版本。 先前的 PlayReady SDK 會在 v4.1 標頭提供時傳回「不支援的版本」錯誤。
相較于 v4.0.0.0,PlayReady 標頭格式 v.4.1.0.0 有下列變更:
- WRMHEADER元素的版本屬性會設定為字串 「4.1.0.0」。
- DATA元素包含選擇性的 DECRYPTORSETUP元素。
- KID元素位於PROTECTINFO元素內,而且是選擇性專案,而不是必要專案。
- KID元素包含ALGID (必要) 、CHECKSUM (選擇性) 和VALUE (必要) 的屬性。
- 已移除 KEYLEN元素。 KEYLEN屬性先前用來厘清具有不同長度金鑰的授權。 v4.1 標頭會中斷支援 8 位元組的金鑰以外的任何功能。 如果您使用不是 8 位元組的金鑰,則必須使用 v4.0 標頭。
- ALGID和CHECKSUM元素已移除,因為其資料包含在KID元素的屬性內。
3.5.2. [格式]
PlayReady 標頭 v4.1.0.0 具有下列語法:
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.1.0.0">
<DATA>
<PROTECTINFO>
<KID ALGID="AESCTR" CHECKSUM="base64-encoded value" VALUE="base64-encoded guid"></KID>
</PROTECTINFO>
<LA_URL> URL for license acquisition </LA_URL>
<LUI_URL>
URL for Non-silent license acquisition web page
</LUI_URL>
<DS_ID> base64-encoded guid </DS_ID>
<CUSTOMATTRIBUTES xmlns="">
<mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
<mm:Author>
Elvis Presley
</mm:Author>
<mm:CreationDate>
2007/08/21:12:00:00
</mm:CreationDate>
</mm:Publisher>
</CUSTOMATTRIBUTES>
<DECRYPTORSETUP>ONDEMAND</DECRYPTORSETUP>
</DATA>
</WRMHEADER>
標記如下所述。
標籤名稱 | 必要 | 描述 |
---|---|---|
WRMHEADER | 是 | 標頭物件的最專用項目。 它可以包含一個 DATA 元素,而且必須包含一個版本屬性。 標頭的版本是 「4.1.0.0」。 每當 Microsoft 定義新的強制標記或屬性時,新的版本號碼就會與這些標記或屬性相關聯。 如果版本大於撰寫用戶端程式代碼的版本,則用戶端程式代碼必須失敗,因為它表示標頭包含用戶端不了解的必要標記。 如果版本小於或等於撰寫用戶端程式代碼的版本,則用戶端程式代碼可以安全地略過它不了解的任何標記或屬性。 |
DATA | 否 | 標頭資料的容器元素,包括協力廠商標記。 WRMHEADER元素中不能包含多個DATA元素。 |
PROTECTINFO | 否 | 指定零個或一個可用於建立相關聯內容的解密程式物件 之 KID 元素。 DATA元素中不能包含一個以上的PROTECTINFO元素。 |
孩子 | 否 | 包含指定授權的所有金鑰資料。
PROTECTINFO節點下可能存在一個或零的 KID元素。
KID元素包含下列屬性。 VALUE:必要。 包含 base64 編碼的金鑰識別碼 GUID 值。 請注意,這個 GUID (DWORD、WORD、WORD、8-BYTE 陣列) 值必須是小到尾位元組順序。 ALGID:必要。 指定加密演算法。 必須設定為:「AESCTR」 或 「TRANSACTION」 CHECKSUM:選擇性。 包含使用 KID VALUE 和內容金鑰計算的總和檢查碼。 如需詳細資訊,請參閱本檔的金鑰總和檢查碼演算法一節。 如果此節點存在於 WRMHeader XML 中,則其資料值必須是空的。 |
LA_URL | 否 | 包含授權取得 Web 服務的 URL。 只允許絕對 URL。
DATA元素中不能包含多個LA_URL專案。 如果此節點存在於 WRMHeader XML 中,則其資料值不得為空白。 |
LUI_URL | 否 | 包含非無訊息授權取得網頁的 URL。 只允許絕對 URL。
DATA元素中不能包含一個以上的LUI_URL元素。 如果此節點存在於 WRMHeader XML 中,則其資料值不得為空白。 |
DS_ID | 否 | 網域服務的服務識別碼。
DATA元素中不能包含多個DS_ID元素。 如果此節點存在於 WRMHeader XML 中,則其資料值不得為空白。 |
CUSTOMATTRIBUTES | 否 | 內容作者可以在這個專案內新增任意 XML。 Microsoft 程式碼不會處理此專案內所含的任何資料。
DATA元素最多隻能包含一個CUSTOMATTRIBUTES元素。 如果此節點存在於 WRMHeader XML 中,則其資料值不得為空白。 |
DECRYPTORSETUP | 否 | 此標籤只能包含 「ONDEMAND」 值。 當 DATA 節點中存在此標記且其值設定為 「ONDEMAND」時,它會向應用程式指出它不應該預期內容的完整授權鏈結可供取得,或已在用戶端電腦上顯示,再設定媒體圖形。 如果未設定此標籤,則表示應用程式可以在設定媒體圖表之前,強制執行要取得的授權,或已存在於用戶端電腦上。 只有最多一個 DECRYPTORSETUP 元素可以包含在 DATA 元素中。 |
v4.1 的注意事項:
- PlayReady 標頭中的所有 XML 標籤和屬性都是由 Microsoft 所定義。 唯一的例外狀況是 CUSTOMATTRIBUTES 專案的內容。 PlayReady PC 應用程式開發人員不得在 CUSTOMATTRIBUTES 元素之外新增任何自訂標記。
- PlayReady 標頭應遵守 W3C 標準 XML v1.1 規格。
- PlayReady 標頭不包含格式正確的 XML 中所需的最上層
?XML
標籤。 - 建議此欄位的大小不應超過 1 KB。
3.6. v4.0.0.0
PlayReady Header v4.0.0.0 在 2008 年引進 PlayReady 1.0 版,並允許單一 AESCTR 金鑰支援 AES 加密內容,或支援 WMDRM 加密內容的一個 SOAP 金鑰。
3.6.1. 範例
PlayReady 標頭 4.0.0.0
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0">
<DATA>
<PROTECTINFO>
<ALGID>AESCTR</ALGID>
<KEYLEN>16</KEYLEN>
</PROTECTINFO>
<KID>q5HgCTj40kGeNVhTH9Gexw==</KID>
<CHECKSUM>w+OZVr8vzrQ=</CHECKSUM>
<LA_URL>http://rm.contoso.com/rightsmanager.asmx</LA_URL>
<CUSTOMATTRIBUTES>
<IIS_DRM_VERSION>8.0.1705.19</IIS_DRM_VERSION>
</CUSTOMATTRIBUTES>
</DATA>
</WRMHEADER>
Base64 編碼的 PlayReady 物件,其中包含 PlayReady 標頭 4.0.0.0
XAMAAAEAAQBSAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4AcQA1AEgAZwBDAFQAagA0ADAAawBHAGUATgBWAGgAVABIADkARwBlAHgAdwA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgB3ACsATwBaAFYAcgA4AHYAegByAFEAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBwAHIAbwBmAGYAaQBjAGkAYQBsAHMAaQB0AGUALgBrAGUAeQBkAGUAbABpAHYAZQByAHkALgBtAGUAZABpAGEAcwBlAHIAdgBpAGMAZQBzAC4AdwBpAG4AZABvAHcAcwAuAG4AZQB0AC8AUABsAGEAeQBSAGUAYQBkAHkALwA8AC8ATABBAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAPgA8AEkASQBTAF8ARABSAE0AXwBWAEUAUgBTAEkATwBOAD4AOAAuADAALgAxADcAMAA1AC4AMQA5ADwALwBJAEkAUwBfAEQAUgBNAF8AVgBFAFIAUwBJAE8ATgA+ADwALwBDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=
3.6.2. [格式]
PlayReady 標頭 v4.0.0.0 具有下列語法:
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader" version="4.0.0.0">
<DATA>
<PROTECTINFO>
<ALGID>AESCTR</ALGID>
<KEYLEN>16</KEYLEN>
</PROTECTINFO>
<LA_URL> URL for license acquisition </LA_URL>
<LUI_URL>
URL for Non-silent license acquisition web page
</LUI_URL>
<DS_ID>base64-encoded guid</DS_ID>
<KID>base64-encoded kid</KID>
<CUSTOMATTRIBUTES xmlns="">
<mm:Publisher xmlns:mm="urn:schema-musicmogul-com">
<mm:Author>
Elvis Presley
</mm:Author>
<mm:CreationDate>
2007/08/21:12:00:00
</mm:CreationDate>
</mm:Publisher>
</CUSTOMATTRIBUTES>
<CHECKSUM>
checksum of the content key for verification
</CHECKSUM>
</DATA>
</WRMHEADER>
下表描述不同的標記。
標籤名稱 | 必要 | 描述 |
---|---|---|
WRMHEADER | 是 | 標頭物件的最外層專案。 它可以包含一個 DATA 元素和一個版本屬性。 標頭的版本是 「4.0.0.0」。 packager 的語意: 每當 Microsoft 定義新的強制標記或屬性時,新的版本號碼會與這些標記或屬性相關聯。 PlayReady 標頭的版本必須設定為標頭中存在之必要標籤和屬性的最高版本。 Client: 如果版本大於用戶端程式代碼所撰寫的語意,則用戶端程式代碼必須失敗,因為它表示標頭包含用戶端無法瞭解的必要標記。 如果版本小於或等於撰寫用戶端程式代碼的版本,則用戶端程式代碼可以安全地略過它不了解的任何標記或屬性。 |
DATA | 是 | 標頭資料的容器元素,包括協力廠商標記。 |
PROTECTINFO | 是 | 使用 KEYLEN 和 ALGID 子項目指定加密的類型。 |
KEYLEN | 是 | 指定內容金鑰的大小。 如果 ALGID 設定為 「AESCTR」,則 ALGID 必須設定為 16,如果 ALGID 設定為 「TRANSACTION」,則必須設定為 7。 |
ALGID | 是 | 指定加密演算法。 必須設定為下列值: AESCTR:對應至計數器模式中的 AES 演算法。 一開始:對應至「混合式」演算法。 |
孩子 | 是 | 包含 base64 編碼的金鑰識別碼 GUID 值。 請注意,這個 GUID (DWORD、WORD、WORD、8 位元組陣列) 值必須是位元組的位元組順序小到小。 |
CHECKSUM | 否 | 包含使用 KID VALUE 和內容金鑰計算的總和檢查碼。 如需詳細資訊,請參閱金鑰總和檢查碼演算法一節。 舊版 PlayReady 會將此欄位視為必要,因此應該包含在任何即將由舊版 PlayReady 取用的標頭中。 |
LA_URL | 否 | 包含授權取得 Web 服務的 URL。 只允許絕對 URL。 |
LUI_URL | 否 | 包含非無訊息授權取得網頁的 URL。 只允許絕對 URL。 |
DS_ID | 否 | 網域服務的服務識別碼。 |
CUSTOMATTRIBUTES | 否 | 內容作者可以在這個專案內新增任意 XML。 Microsoft 程式碼不會針對此元素內含的任何資料採取動作。 |
v4.0 的注意事項:
- PlayReady 標頭中的所有 XML 標籤和屬性都是由 Microsoft 定義。 唯一的例外是 CUSTOMATTRIBUTES 元素的內容。 PlayReady 電腦應用程式開發人員不得在 CUSTOMATTRIBUTES 元素之外新增任何自訂標籤,因為這樣做可能會與 Microsoft 所定義的未來標記衝突。
- 容器元素內子專案的順序並不重要。
- 請注意,PlayReady 標頭不包含格式正確的 XML 中所需的最上層
?XML
標籤。 - 建議此欄位的大小不應超過 1 KB。
- PlayReady Server SDK 最多 1.2 版需要CHECKSUM。 自 1.5 版起,PlayReady Server SDK 會將 CHECKSUM 視為選擇性。 PlayReady 移植套件 1.2 現用需要 CHECKSUM。 PlayReady 移植套件 2.0 會將 CHECKSUM 視為選擇性。
4. 內嵌授權Microsoft Store (ELS)
在下列情況下,最好將空的 Embedded 授權Microsoft Store新增至 PlayReady 物件:
- PlayReady 物件要插入內容檔中。
- 內容可用於具有內嵌授權的 PlayReady 網域內容。
這可讓 PlayReady 用戶端只要填入現有的內嵌授權Microsoft Store,即可讓 PlayReady 用戶端在 PlayReady 物件中進一步內嵌網域系結授權,並節省重新將整個檔案重新頭處理的工作,其大小大於初始的 PlayReady 物件。
注意
請勿在 PlayReady 物件中包含空的 Embedded License Microsoft Store,目標是在 Smooth Streaming 用戶端資訊清單中插入為 base-64 字串。
注意
建議的大小為 10KB。
5.金鑰總和檢查碼演算法
PlayReady 標頭中的總和檢查碼演算法旨在防止不相符的金鑰。 在 DRM 的早期,歌曲會以未正確標記的金鑰加密。 這會導致在解密歌曲時播放白色雜訊。 而且,如果歌曲播放得夠大,播放設備就會損毀。 使用總和檢查碼,內容金鑰可以驗證為用來加密檔案的金鑰。 演算法的運作方式如下:
針對設定為 「AESCBC」 的 ALGID 值,沒有定義金鑰總和檢查碼演算法。 必須省略 CHECKSUM 屬性。
針對設定為 「AESCTR」 的 ALGID 值,16 位元組金鑰識別碼會使用 ECB 模式的 16 位元組 AES 內容金鑰加密。 擷取緩衝區的前 8 個位元組,並編碼 base64。
針對設定為 「一個 ALGID 值」,請執行下列步驟:
系統會建立 21 位元組的緩衝區。
內容索引鍵會放在緩衝區中,而緩衝區的其餘部分則會填入零。
針對五個反復專案:
a. buffer = SHA-1 (buffer) 。
系統會擷取緩衝區的前 7 個位元組,並編碼 base64。
執行這些步驟之後,base64 編碼的位元組會當做總和檢查碼使用。
6. CUSTOMATTRIBUTES
服務提供者可以在 PlayReady 標頭的 CUSTOMATTRIBUTES 元素內新增專屬 XML。 在 CUSTOMATTRIBUTES元素內使用的任何標記,保證不會與 Microsoft 所定義的未來標記衝突。
Microsoft 程式碼不會對這個專案內的任何 XML 採取動作。 服務提供者的後端或其用戶端程式代碼是唯一解譯這個專案值的後端。 例如,假設白色標籤服務代表前端服務 AAA、BBB、CCC。 這類服務只能加密其內容庫一次 (,因為這是昂貴的作業) ,但是當它提供給使用者內容時,可以將 CUSTOMATTRIBUTES 設定為使用者所訂閱的特定前端服務名稱。 當使用者要求該內容的授權時,這可讓白標服務判斷終端使用者訂閱的前端服務,以便發出不同的授權。
此欄位的大小不應超過 1 KB (KB) 。