概要
PlayReady テスト サーバーでは、高度なライセンス構成用の 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"
}
}
}
}
構成パラメーター
ライセンスの種類
生成するライセンスの種類を指定します。
- 永続的: デバイスに格納されているライセンス、アプリケーションの再起動後も存続する
- 非永続的: 一時的なライセンス、アプリケーションの終了時に有効期限が切れる
- レンタル: 特定の有効期限が切れる時間制限付きライセンス
- サブスクリプション: サブスクリプション ベースのライセンスと定期的な検証
キー管理
暗号化キーと識別子を構成します。
{
"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"
}
}
}
}
Output Protection を使用したサブスクリプション ライセンス
{
"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 テスト サーバー サービス - メイン サービスの概要
- クエリ文字列の構文 - 単純な URL ベースの構成
- Base64 JSON 構文 - Base64 でエンコードされた JSON 形式
- PlayReady テスト サーバー - サーバーの完全なドキュメント
サポートとトラブルシューティング
CustomData JSON 構文に関する問題の場合:
- JSON の形式と構造を検証する
- 必須フィールドの存在と値を確認する
- ポリシーの互換性と制約を確認する
- 簡略化された構成を最初に使用してテストする
- サーバーの応答で詳細なエラー情報を確認する
追加のサポートについては、 PlayReady テスト サーバー のメイン ドキュメントを参照してください。