共用方式為


PlayReady 測試伺服器的 CustomData JSON 語法

概觀

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 與原則解決指引

最佳做法

  1. JSON 驗證:在傳送要求之前驗證 JSON 結構
  2. 版本相容性:針對功能支援使用適當的版本
  3. 密鑰安全性:永遠不要在用戶端程式代碼中公開內容金鑰
  4. 原則測試:徹底測試不同的原則組合
  5. 錯誤處理:針對所有案例實作完整的錯誤處理

支援和疑難解答

針對 CustomData JSON 語法的問題:

  1. 驗證 JSON 格式和結構
  2. 檢查必要的欄位顯示狀態和值
  3. 確認原則相容性和條件約束
  4. 先使用簡化的組態進行測試
  5. 檢閱伺服器回應以取得詳細的錯誤資訊

如需其他支援,請參閱主要的 PlayReady 測試伺服器 檔。