1. 簡介
此規格適用於使用 PlayReady Server SDK、PlayReady 裝置移植套件、Windows、Xbox、Windows Phone 和 Silverlight 建立的任何終端產品。
1.1. 變更歷程記錄
| 版本 | 改變 |
|---|---|
| 2021 年 9 月 8 日 | 將選擇性 LICENSEREQUESTED 屬性新增至 PROTECTINFO 節點。 |
| 2017年11月1日 | 新增 [語法需求] 區段。 修正屬性順序不正確的多個範例(屬性必須依字母順序排列) |
| 2017年7月12日 | 新增 PlayReady Header 4.3.0.0 區段,從 PlayReady 第 4 版開始支援。 新增語法要求,所有 XML 節點必須有明確的結尾標記來關閉 |
| 2015年4月10日 | 新增 PlayReady Header 4.2.0.0 區段,從 PlayReady 版本 3 開始支援 |
| 2011年9月 | 新增 PlayReady Header 4.1.0.0 區段,從 PlayReady 第 2 版開始支援 |
| 2008 年 8 月 | 初始版本,記錄在 PlayReady 第 1 版中支援的 PlayReady 標頭 4.0.0.0 |
2. PlayReady 物件(PRO)
PlayReady 物件 (PRO) 包含下列欄位。
| 欄位名稱 | 欄位類型 | 大小(位元) | 說明 |
|---|---|---|---|
| 長度 | DWORD(32位元整數) | 32 | PlayReady 對象的長度,以位元組為單位。 此值不應超過 15 KB。 |
| PlayReady 物件記錄計數 | 詞 | 16 | 指定 PlayReady 物件中的 PlayReady 物件記錄數目。 |
| PlayReady 物件記錄 | BYTE 陣列 | 不定 | 包含可變數目的記錄,其中包含與授權和取得授權相關的資訊。 |
2.1 PlayReady 對象記錄
PlayReady 物件是由稱為 PlayReady 對象記錄的其他子物件所組成。 PlayReady 對象記錄包含下列欄位。
| 欄位名稱 | 欄位類型 | 大小(比特) | 說明 |
|---|---|---|---|
| 記錄類型 | 詞 | 16 | 指定儲存在記錄值中的數據類型。 |
| 記錄長度 | 詞 | 16 | 指定 Record Value 的位元組大小。 |
| 記錄值 | BYTE 陣列 | 不定 | 對象的內容取決於 Record Type 的值。 |
[記錄類型] 欄位具有下列其中一個值。
| 值類型 | 說明 |
|---|---|
| 0x0001 | 表示此記錄包含 PlayReady 標頭(PRH)。 |
| 0x0002 | 已保留。 |
| 0x0003 | 表示內嵌授權存放區 (ELS)。 |
2.2. PlayReady 物件範例
下圖顯示具有 PlayReady 物件的分段 MP4 檔案,其中包含 PlayReady 標頭:
下圖顯示此 MP4 檔案的 HEX 檢視:
3. PlayReady 標頭 (PRH)
PlayReady Header (PRH) 是由客戶端用來尋找或取得儲存在其中之內容片段的授權。 它會使用UTF-16進行編碼。
3.1 版本支援矩陣
| PlayReady Header v4.3.0.0 | PlayReady Header v4.2.0.0 | PlayReady Header v4.1.0.0 | PlayReady Header 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 裝置(例如 Smart TV)是 PlayReady 3.X 用戶端。
- Silverlight 和 Windows 8、8.1 是 PlayReady 2.X 用戶端。 2011 年至 2017 年間發行的大部分非 Windows 裝置(例如智慧型手機電視)都是 PlayReady 2.X 用戶端。
- 2008 年至 2011 年間發行的大部分非 Windows 裝置(例如智慧型手機電視)都是 PlayReady 1.X 用戶端。
3.2. 語法需求
3.2.1. 標準化
XML 必須正式化。
3.2.2. 所有節點和屬性名稱都會區分大小寫
支持
<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 隨著 PlayReady 4.0 版於 2017 年 9 月的推出而引入,以支持在標頭中使用 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 標頭時會傳回「不支援的版本」錯誤。
PlayReady Header 格式 v.4.3.0.0 與 v4.2.0.0 相比有下列變更:
- WRMHEADER 元素的版本屬性會設定為字串 「4.3.0.0」。。
- 在許可證獲取請求中,ALGID 屬性可能會遺失,位於 KID 元素內。 Microsoft建議 ALGID 屬性在內容中包含的標頭中有有效的值。
- 當 ALGID 屬性存在於任何 KID 元素中,而且 KIDS 元素中有多個 KID 元素時,所有 KID 元素都必須包含 ALGID 屬性,而且屬性值必須相同。
- 除了 “AESCTR” 之外,位於 KID 元素內的 ALGID 屬性現在可以有 “AESCBC” 值,前提是:
- 當 ALGID 屬性設定為 「AESCBC」 時,不得包含 CHECKSUM 屬性。
3.3.2. 範例
以下是具有 AESCBC 金鑰的 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 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定義新的強制標籤或屬性時,新的版本號碼就會與這些標籤或屬性相關聯。 如果版本大於寫入用戶端程式代碼的版本,則用戶端程式代碼必須失敗,因為它表示標頭包含用戶端不瞭解的必要標記。 如果版本小於或等於撰寫用戶端程式代碼的版本,則用戶端程式代碼可以安全地略過它不瞭解的任何標記或屬性。 |
| 資料 | 否 | 標頭數據的容器元素,包括第三方標籤。 WRMHEADER 元素中不能包含一個以上的 DATA 元素。 |
| PROTECTINFO | 否 | 指定零或一個 KIDS 元素。 DATA 元素中不能包含一個以上的 PROTECTINFO 元素。 選擇性地包含 LICENSEREQUESTED 屬性。 |
| 授權已申請 | 否 | 指定授權取得是否要求至少一個授權。 如果存在,則必須設定為 「true」 或 「false」,如果不存在,則假設設為 「true」。 PlayReady 版本在 4.5 之前會忽略此屬性。 PlayReady Server SDK 應用程式可以不理會此屬性,它僅供參考。 |
| 孩子 | 否 | 指定一或多個 KID 元素,可用於建立相關聯內容的解密器物件。 在 PROTECTINFO 節點下,可能存在一個或零個 KIDS 元素。 |
| 孩子 | 否 | 包含指定授權的所有金鑰數據。 如果 KIDS 節點存在,則必須在 KIDS 節點底下存在一或多個 KID 元素。
KID 元素包含下列屬性。 ALGID:選擇性。 指定加密演算法。 可能設定為:“AESCTR”、“AESCBC” 或 “COCKTAIL”。 CHECKSUM:選擇性。 僅適用於 AESCTR 金鑰。 包含使用 KID VALUE 屬性和內容金鑰所計算的校驗和。 如需詳細資訊,請參閱本檔的 密鑰總和檢查碼演算法 一節。 如果此節點存在於 WRMHeader XML 中,則其數據值必須是空的。 VALUE:必要。 包含base64編碼的金鑰標識元 GUID 值。 請注意,這個 GUID(DWORD、WORD、WORD、8-BYTE 陣列)值必須是小端序。 |
| 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中,則其數值不得為空白。 |
| 自訂屬性 | 否 | 內容作者可以在這個專案內新增自定義 XML。 Microsoft程式代碼不會對這個專案內所包含的任何數據採取動作。
DATA 元素中不能包含一個以上的 CUSTOMATTRIBUTES 元素。 如果此節點存在於WRMHeader XML中,則其數據值不得為空白。 |
| DECRYPTOR 設定 | 否 | 此標記只能包含 「ONDEMAND」 值。 當此標籤存在於 DATA 節點中,且其值設定為 「ONDEMAND」時,它會向應用程式指出,在設定媒體圖形之前,不應預期內容的完整授權鏈結可供取得,或已存在於用戶端電腦上。 如果未設定此標籤,則表示應用程式可以在設定媒體圖形之前強制執行要取得或已存在於用戶端電腦上的授權。 DATA 元素中不能包含一個以上的 DECRYPTORSETUP 元素。 |
3.4. v4.2.0.0
PlayReady Header v4.2.0.0 與 PlayReady 3.0 版於 2015 年 4 月推出,以允許單一標頭中包含多個 KID。 這表示多個金鑰可以用來加密單一資產,例如,當音訊播放軌必須使用與視訊播放軌不同的密鑰加密時。
3.4.1. 與其他版本的差異
PlayReady 3.0 SDK 和更新版本的客戶端能夠處理 v4.0、v4.1 和 v4.2 PlayReady 標頭版本。 當提供 v4.2 標頭時,各版本的 PlayReady SDK 會傳回「不支援的版本」錯誤。 使用 v4.2 標頭時,客戶端必須知道它透過自定義的應用程式特定機制使用哪個伺服器版本。 PlayReady SDK 沒有原生方式可取得此版本資訊。
PlayReady 標頭格式 v.4.2.0.0 與 v4.1.0.0 相比有下列變更:
- WRMHEADER 元素的版本屬性會設定為字串 「4.2.0.0」。。
- KID 元素位於 PROTECTINFO 元素內,已重新命名為 KIDS,且仍為可選的。
- 多個 KID 元素位於 KIDS 元素內。
3.4.2. 範例
PlayReady Header 4.2.0.0 搭配兩個 AESCTR 密鑰:
<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定義新的強制標籤或屬性時,新的版本號碼就會與這些標籤或屬性相關聯。 如果版本大於寫入用戶端程式代碼的版本,則用戶端程式代碼必須失敗,因為它表示標頭包含用戶端不瞭解的必要標記。 如果版本小於或等於撰寫用戶端程式代碼的版本,則用戶端程式代碼可以安全地略過它不瞭解的任何標記或屬性。 |
| 資料 | 否 | 標頭數據的容器元素,包括第三方標籤。 WRMHEADER 元素中最多只能包含一個 DATA 元素。 |
| PROTECTINFO | 否 | 指定零或一個 KIDS 元素。 DATA 元素中不能包含一個以上的 PROTECTINFO 元素。 |
| 孩子 | 否 | 指定一或多個 KID 元素,可用於建立相關聯內容的解密器物件。 在 PROTECTINFO 節點下,可能存在一個或零個 KIDS 元素。 |
| 孩子 | 否 | 包含指定授權的所有金鑰數據。 如果 KIDS 節點存在,則底下必須有一個或多個 KID 元素位於 KIDS 節點之中。
KID 元素包含下列屬性。 ALGID:必要。 指定加密演算法。 必須設定為:AESCTR 或 COCKTAIL 總和檢查碼:可選。 包含使用 KID VALUE 和內容密鑰計算的校驗和。 如需詳細資訊,請參閱本檔的 金鑰總和檢查碼演算法 一節。 如果此節點存在於 WRMHeader XML 中,則其數據值必須是空的。 VALUE:必要。 包含base64編碼的金鑰標識元 GUID 值。 請注意,這個 GUID(DWORD、WORD、WORD、8-BYTE 陣列)值必須是小端序。 |
| 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 中,則該元素的數據值必須非空。 |
| 自訂屬性 | 否 | 內容作者可以在這個專案內新增任意 XML。 Microsoft程式代碼不會對這個專案內所包含的任何數據採取動作。
DATA 元素中不能包含一個以上的 CUSTOMATTRIBUTES 元素。 如果此節點存在於WRMHeader XML中,則其數據值不得為空白。 |
| DECRYPTOR 設定 | 否 | 此標記只能包含 「ONDEMAND」 值。 當此標籤存在於 DATA 節點中,且其值設定為 「ONDEMAND」時,它會向應用程式指出,在設定媒體圖形之前,不應預期內容的完整授權鏈結可供取得,或已存在於用戶端電腦上。 如果未設定此標籤,則表示應用程式可以在設定媒體圖形之前強制執行要取得或已存在於用戶端電腦上的授權。 DATA 元素中不能包含一個以上的 DECRYPTORSETUP 元素。 |
3.5. v4.1.0.0
PlayReady Header v4.1.0.0 隨著 PlayReady 2.0 版於 2011 年 9 月推出,以支援具可調整分葉授權功能的實時線性串流,並將這些授權內嵌於數據流中。 這種類型的數據流需要用戶端系結可調整的根授權,而不需要知道解密工具中將使用的內容加密密鑰。
3.5.1. 與其他版本的差異
PlayReady 2.0 SDK 和更新版本的客戶端能夠同時處理 v4.0 和 v4.1 PlayReady 標頭版本。 先前的 PlayReady SDK 會在 v4.1 標頭提供時傳回「不支援的版本」錯誤。
PlayReady 標頭格式 v.4.1.0.0 與 v4.0.0 相比有下列變更:
- WRMHEADER 元素的版本屬性會設定為字串 「4.1.0.0」。。
- DATA 元素包含選擇性 DECRYPTORSETUP 元素。
- KID 元素位於 PROTECTINFO 元素內,是選擇性專案,而不是必要專案。
- KID 元素包含 ALGID 屬性(必要)、CHECKSUM(選擇性)和 VALUE(必要)。
- 已移除 KEYLEN 元素。 KEYLEN 屬性先前用來區分不同密鑰長度的雞尾酒授權。 v4.1 標頭將限制只能支援8位元組雞尾酒鍵的能力。 如果您使用不是八位元組的密鑰,則必須使用 v4.0 標頭。
- ALGID 和 CHECKSUM 元素已移除,因為它們的數據包含在 KID 元素的屬性內。
3.5.2. 格式
PlayReady Header 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定義新的強制標籤或屬性時,新的版本號碼就會與這些標籤或屬性相關聯。 如果版本大於寫入用戶端程式代碼的版本,則用戶端程式代碼必須失敗,因為它表示標頭包含用戶端不瞭解的必要標記。 如果版本小於或等於撰寫用戶端程式代碼的版本,則用戶端程式代碼可以安全地略過它不瞭解的任何標記或屬性。 |
| 資料 | 否 | 標頭數據的容器元素,包括第三方標籤。 WRMHEADER 元素中不能包含一個以上的 DATA 元素。 |
| PROTECTINFO | 否 | 指定零個或一個 KID 元素,可用於建立相關聯內容的解密器物件。 DATA 元素中不能包含一個以上的 PROTECTINFO 元素。 |
| 孩子 | 否 | 包含指定授權的所有金鑰數據。 一或零 個 KID 元素可能存在於 PROTECTINFO 節點之下。
KID 元素包含下列屬性。 VALUE:必要。 包含base64編碼的金鑰標識元 GUID 值。 請注意,這個 GUID(DWORD、WORD、WORD、8-BYTE 陣列)值必須是小端序。 ALGID:必要。 指定加密演算法。 必須設定為:“AESCTR” 或 “COCKTAIL” 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 中,則該元素的數據值必須非空。 |
| 自訂屬性 | 否 | 內容作者可以在這個專案內新增任意 XML。 Microsoft程式代碼不會對這個專案內所包含的任何數據採取動作。 DATA 元素中最多只能包含一個 CUSTOMATTRIBUTES元素。 如果此節點存在於WRMHeader XML中,則其數據值不得為空白。 |
| DECRYPTOR 設定 | 否 | 此標記只能包含 「ONDEMAND」 值。 當 DATA 節點中存在此標籤且其值設定為 「ONDEMAND」時,它會向應用程式指出,在設定媒體圖形之前,不應預期內容的完整授權鏈結可供取得,或已存在於用戶端電腦上。 如果未設定此標籤,則表示應用程式可以在設定媒體圖形之前強制執行要取得或已存在於用戶端電腦上的授權。 DATA 元素中最多只能包含一個 DECRYPTORSETUP元素。 |
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 加密內容的 COCKTAIL 密鑰。
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 Header 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 標頭的版本必須設定為標頭中存在的強制標籤和屬性版本中的最高版本。 用戶端: 如果版本大於撰寫用戶端程式碼的版本,用戶端程式碼必須失敗,因為這表示標頭包含用戶端無法解析的強制標籤。 如果版本小於或等於撰寫用戶端程式代碼的版本,則用戶端程式代碼可以安全地略過它不瞭解的任何標記或屬性。 |
| 資料 | 是的 | 標頭數據的容器元素,包括第三方標籤。 |
| PROTECTINFO | 是的 | 使用 KEYLEN 和 ALGID 子專案指定加密類型。 |
| KEYLEN | 是的 | 指定內容密鑰的大小。 如果 ALGID 設定為 「AESCTR」,則 ALGID 必須設定為 16,如果 ALGID 設定為 “COCKTAIL”,則必須設定為 7。 |
| ALGID | 是的 | 指定加密演算法。 必須設定為下列值: AESCTR:對應至計數器模式中的 AES 演算法。 雞尾酒:對應至雞尾酒演算法。 |
| 孩子 | 是的 | 包含base64編碼的金鑰標識元 GUID 值。 請注意,這個 GUID(DWORD、WORD、WORD、8-BYTE 陣列)值必須是小端序。 |
| 校驗和 | 否 | 包含使用 KID VALUE 和內容金鑰計算的總和檢查碼。 如需詳細資訊,請參閱 密鑰總和檢查碼演算法 一節。 舊版 PlayReady 會將此字段視為必要,因此應該包含在舊版 PlayReady 所耗用的任何標頭中。 |
| LA_URL | 否 | 包含用於取得授權的 Web 服務的 URL。 只允許絕對 URL。 |
| LUI_URL | 否 | 包含非靜默授權取得網頁的 URL。 只允許絕對 URL。 |
| DS_ID | 否 | 網域服務的服務標識碼。 |
| 自訂屬性 | 否 | 內容作者可以在這個專案內新增任意 XML。 Microsoft程式代碼不會對這個專案內所包含的任何數據採取動作。 |
v4.0 的注意事項:
- PlayReady 標頭中的所有 XML 標籤和屬性都是由Microsoft定義。 唯一的例外狀況是 CUSTOMATTRIBUTES 項目的內容。 PlayReady PC 應用程式開發人員不得在 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. 內嵌授權存放區 (ELS)
在下列情況下,最好將空的 Embedded 授權存放區新增至 PlayReady 物件:
- PlayReady 物件將被插入該內容檔中。
- 內容可用於具有內嵌授權的 PlayReady 網域情境中。
這可讓 PlayReady 用戶端在 PlayReady 物件中進一步內嵌網域系結的授權,只要填入現有的內嵌授權存放區,並節省重新標頭整個檔案的繁勞工作,新的 PlayReady 物件大小會大於初始授權的大小。
備註
不要在 PlayReady 物件中包含空的內嵌授權存放區,該存放區的目的是要作為 base-64 字串插入到 Smooth Streaming 用戶端指令清單中。
備註
建議的大小為 10KB。
5. 金鑰總和檢查碼演算法
PlayReady 標頭中的總和檢查碼演算法旨在防止密鑰不相符。 在DRM的早期,歌曲會以不正確的標記密鑰加密。 這導致當歌曲解密時,白雜訊被播放。 如果歌曲音量過大,播放設備可能會被毀壞。 使用總和檢查碼,內容密鑰可以驗證為用來加密檔案的金鑰。 此演算法的運作方式如下:
針對設定為 「AESCBC」 的 ALGID 值,未定義密鑰總和檢查碼演算法。 必須省略 CHECKSUM 屬性。
對於設定為 「AESCTR」 的 ALGID 值,16 位元組的密鑰標識碼會使用 ECB 模式的 16 位元組 AES 內容金鑰來加密。 會擷取緩衝區的前8個字節,並編碼base64。
針對設定為 「COCKTAIL」 的 ALGID 值,請執行下列步驟:
系統會建立 21 位元組的緩衝區。
內容索引鍵會放在緩衝區中,其餘的緩衝區會填入零。
針對五次迭代:
一。 buffer = SHA-1 (buffer)。
會擷取緩衝區的前 7 個字節,並編碼 base64。
執行這些步驟之後,base64 編碼的位元組會當做總和檢查碼使用。
6. CUSTOMATTRIBUTES
服務提供者可以在 PlayReady 標頭的 CUSTOMATTRIBUTES 元素內新增專屬 XML。 在 CUSTOMATTRIBUTES 元素內使用的任何標記,都保證不會與Microsoft所定義的未來標記發生衝突。
Microsoft 程式不會對這個元素內的任何 XML 執行任何操作。 服務提供者的後端或其用戶端程式碼是通常解析此元素值的唯一系統。 例如,假設白色標籤服務代表前端服務 AAA、BBB、CCC。 這類服務只能加密其內容庫一次(因為這是昂貴的作業),但是當它向使用者提供內容時,可以將 CUSTOMATTRIBUTES 設定為使用者訂閱的特定前端服務名稱。 當使用者要求該內容的授權時,這可讓允許標籤服務判斷使用者訂閱的前端服務,以便發出不同的授權。
此欄位的大小不應超過 1 KB。