概觀
PlayReady Test Server 支援 CustomData JSON 語法以進行進階授權設定。 此方法可讓開發人員在授權要求的 CustomData 字段中使用 JSON 格式來指定複雜的授權參數和原則。
JSON 結構
CustomData 字段接受 JSON 對象與各種組態參數:
{
"version": "1.0",
"config": {
"licenseType": "persistent|non-persistent|rental|subscription",
"keyId": "GUID",
"contentKey": "base64-encoded-key",
"policies": {
"outputProtection": {
"digital": "required|optional|never",
"analog": "required|optional|never"
},
"playback": {
"allowOffline": true|false,
"expirationDate": "ISO-8601-datetime",
"gracePeriod": "duration-in-seconds"
}
}
}
}
組態參數
授權類型
指定要產生之授權的類型:
- persistent:儲存在裝置上的授權,在應用程式重新啟動後倖存下來
- 非持續性:暫時授權,在應用程式關閉時到期
- 租用:具有特定到期時間限制的授權
- 訂用帳戶:具有定期驗證的訂用帳戶型授權
金鑰管理
設定加密金鑰和識別碼:
{
"keyId": "12345678-1234-1234-1234-123456789012",
"contentKey": "base64EncodedContentKey",
"keyRotation": {
"enabled": true,
"interval": "PT1H"
}
}
輸出保護原則
控制輸出保護需求:
{
"outputProtection": {
"digital": {
"hdcp": "required",
"cgmsa": "copy-never"
},
"analog": {
"macrovision": "required",
"cgmsa": "copy-once"
}
}
}
範例組態
基本持續性授權
{
"version": "1.0",
"config": {
"licenseType": "persistent",
"keyId": "12345678-1234-1234-1234-123456789012",
"policies": {
"playback": {
"allowOffline": true
}
}
}
}
具有時間限制的租用授權
{
"version": "1.0",
"config": {
"licenseType": "rental",
"keyId": "87654321-4321-4321-4321-210987654321",
"policies": {
"playback": {
"expirationDate": "2024-12-31T23:59:59Z",
"gracePeriod": 3600
},
"outputProtection": {
"digital": "required",
"analog": "optional"
}
}
}
}
具有輸出保護的訂用帳戶授權
{
"version": "1.0",
"config": {
"licenseType": "subscription",
"keyId": "11111111-2222-3333-4444-555555555555",
"policies": {
"playback": {
"allowOffline": false
},
"outputProtection": {
"digital": "required",
"analog": "required"
},
"subscription": {
"renewalUrl": "https://subscription.service.com/renew",
"validationInterval": "PT24H"
}
}
}
}
授權要求中的使用量
HTTP POST 要求
在 CustomData 字段中包含 JSON 組態:
POST /pr/svc/rightsmanager.asmx HTTP/1.1
Host: playready.directtaps.net
Content-Type: application/octet-stream
[License Request with CustomData containing JSON configuration]
用戶端整合
JavaScript 範例
const customData = {
version: "1.0",
config: {
licenseType: "persistent",
keyId: keyId,
policies: {
playback: {
allowOffline: true
}
}
}
};
// Include in license request
const licenseRequest = {
customData: JSON.stringify(customData),
// ... other license request parameters
};
C# 範例
var customData = new {
version = "1.0",
config = new {
licenseType = "persistent",
keyId = keyId,
policies = new {
playback = new {
allowOffline = true
}
}
}
};
string jsonCustomData = JsonConvert.SerializeObject(customData);
// Include in PlayReady license request
進階功能
條件式存取
根據裝置或使用者屬性設定條件式存取:
{
"conditionalAccess": {
"deviceRestrictions": {
"allowedDeviceTypes": ["mobile", "desktop"],
"blockedDevices": ["emulator", "debugger"]
},
"geoRestrictions": {
"allowedCountries": ["US", "CA", "GB"],
"blockedRegions": ["region1", "region2"]
}
}
}
多鍵支援
支援多個加密金鑰:
{
"keys": [
{
"keyId": "key-1-guid",
"contentKey": "base64-key-1",
"keyType": "content"
},
{
"keyId": "key-2-guid",
"contentKey": "base64-key-2",
"keyType": "track"
}
]
}
錯誤處理
JSON 驗證錯誤
- 格式不正確的 JSON:HTTP 400 與 JSON 剖析錯誤詳細數據
- 遺漏必要欄位:HTTP 400,並出現欄位驗證錯誤
- 無效的域值:HTTP 400 與值條件約束違規
設定錯誤
- 不支援的授權類型:HTTP 400 含支援的類型清單
- 無效的金鑰格式:具有金鑰格式需求的 HTTP 400
- 原則衝突:HTTP 400 與原則解決指引
最佳做法
- JSON 驗證:在傳送要求之前驗證 JSON 結構
- 版本相容性:針對功能支援使用適當的版本
- 密鑰安全性:永遠不要在用戶端程式代碼中公開內容金鑰
- 原則測試:徹底測試不同的原則組合
- 錯誤處理:針對所有案例實作完整的錯誤處理
相關文件
- PlayReady Test Server 服務 - 主要服務概觀
- 查詢字串語法 - 簡單 URL 型設定
- Base64 JSON 語法 - Base64 編碼的 JSON 格式
- PlayReady 測試伺服器 - 完整伺服器檔
支援和疑難解答
針對 CustomData JSON 語法的問題:
- 驗證 JSON 格式和結構
- 檢查必要的欄位顯示狀態和值
- 確認原則相容性和條件約束
- 先使用簡化的組態進行測試
- 檢閱伺服器回應以取得詳細的錯誤資訊
如需其他支援,請參閱主要的 PlayReady 測試伺服器 檔。