次の方法で共有


PlayReady テスト サーバーの Base64 JSON 構文

概要

PlayReady テスト サーバーでは、ライセンス構成用の Base64 JSON 構文がサポートされており、複雑なライセンス パラメーターを埋め込むためのコンパクトで URL セーフな方法が提供されます。 この方法では、JSON 構成データが Base64 形式でエンコードされるため、URL パラメーターと HTTP ヘッダーに適しています。

エンコード プロセス

Base64 JSON 構文には、次の 2 つの手順が含まれます。

  1. JSON 構成オブジェクトを作成する
  2. Base64 エンコードを使用して JSON 文字列をエンコードする
JSON Configuration → Base64 Encoding → URL Parameter

基本的な JSON 構造

エンコードする前に、JSON 構成を作成します。

{
  "licenseType": "persistent",
  "keyId": "12345678-1234-1234-1234-123456789012",
  "outputProtection": {
    "digital": "required",
    "analog": "optional"
  }
}

Base64 エンコードの例

シンプルな構成

元の JSON:

{"licenseType": "persistent", "keyId": "12345678-1234-1234-1234-123456789012"}

Base64 エンコード:

eyJsaWNlbnNlVHlwZSI6InBlcnNpc3RlbnQiLCJrZXlJZCI6IjEyMzQ1Njc4LTEyMzQtMTIzNC0xMjM0LTEyMzQ1Njc4OTAxMiJ9

複雑な構成

元の JSON:

{
  "licenseType": "rental",
  "keyId": "87654321-4321-4321-4321-210987654321",
  "expirationDate": "2024-12-31T23:59:59Z",
  "outputProtection": {
    "digital": "required",
    "analog": "never"
  }
}

Base64 エンコード:

eyJsaWNlbnNlVHlwZSI6InJlbnRhbCIsImtleUlkIjoiODc2NTQzMjEtNDMyMS00MzIxLTQzMjEtMjEwOTg3NjU0MzIxIiwiZXhwaXJhdGlvbkRhdGUiOiIyMDI0LTEyLTMxVDIzOjU5OjU5WiIsIm91dHB1dFByb3RlY3Rpb24iOnsiZGlnaXRhbCI6InJlcXVpcmVkIiwiYW5hbG9nIjoibmV2ZXIifX0=

URL の使用法

クエリ パラメーターの形式

https://playready.directtaps.net/pr/svc/rightsmanager.asmx?cfg=base64&data=BASE64_ENCODED_JSON

完全な URL の例

永続的なライセンス

https://playready.directtaps.net/pr/svc/rightsmanager.asmx?cfg=base64&data=eyJsaWNlbnNlVHlwZSI6InBlcnNpc3RlbnQiLCJrZXlJZCI6IjEyMzQ1Njc4LTEyMzQtMTIzNC0xMjM0LTEyMzQ1Njc4OTAxMiJ9

レンタル ライセンス

https://playready.directtaps.net/pr/svc/rightsmanager.asmx?cfg=base64&data=eyJsaWNlbnNlVHlwZSI6InJlbnRhbCIsImtleUlkIjoiODc2NTQzMjEtNDMyMS00MzIxLTQzMjEtMjEwOTg3NjU0MzIxIiwiZXhwaXJhdGlvbkRhdGUiOiIyMDI0LTEyLTMxVDIzOjU5OjU5WiJ9

構成オプション

ライセンスの種類

すべての標準ライセンスの種類のサポート:

{
  "licenseType": "persistent|non-persistent|rental|subscription"
}

出力保護の設定

デジタルおよびアナログ出力保護を構成します。

{
  "outputProtection": {
    "digital": "required|optional|never",
    "analog": "required|optional|never",
    "hdcp": {
      "version": "1.4|2.0|2.1|2.2",
      "required": true
    }
  }
}

Time-Based 制限

有効期限と猶予期間を設定します。

{
  "expirationDate": "2024-12-31T23:59:59Z",
  "gracePeriod": 3600,
  "firstPlayExpiration": "PT48H"
}

実装例

JavaScript/HTML5

// Create configuration object
const config = {
  licenseType: "persistent",
  keyId: keyId,
  outputProtection: {
    digital: "required",
    analog: "optional"
  }
};

// Convert to JSON and encode
const jsonString = JSON.stringify(config);
const base64Data = btoa(jsonString);

// Build URL
const licenseUrl = `https://playready.directtaps.net/pr/svc/rightsmanager.asmx?cfg=base64&data=${base64Data}`;

C# アプリケーション

using System;
using System.Text;
using Newtonsoft.Json;

// Create configuration object
var config = new {
    licenseType = "persistent",
    keyId = keyId,
    outputProtection = new {
        digital = "required",
        analog = "optional"
    }
};

// Convert to JSON and encode
string jsonString = JsonConvert.SerializeObject(config);
byte[] jsonBytes = Encoding.UTF8.GetBytes(jsonString);
string base64Data = Convert.ToBase64String(jsonBytes);

// Build URL
string licenseUrl = $"https://playready.directtaps.net/pr/svc/rightsmanager.asmx?cfg=base64&data={base64Data}";

Python の例

import json
import base64

# Create configuration dictionary
config = {
    "licenseType": "persistent",
    "keyId": key_id,
    "outputProtection": {
        "digital": "required",
        "analog": "optional"
    }
}

# Convert to JSON and encode
json_string = json.dumps(config)
base64_data = base64.b64encode(json_string.encode('utf-8')).decode('utf-8')

# Build URL
license_url = f"https://playready.directtaps.net/pr/svc/rightsmanager.asmx?cfg=base64&data={base64_data}"

高度な構成

マルチトラック コンテンツ

複数のトラックを含むコンテンツの構成:

{
  "licenseType": "persistent",
  "tracks": [
    {
      "keyId": "video-key-guid",
      "trackType": "video",
      "outputProtection": {
        "digital": "required"
      }
    },
    {
      "keyId": "audio-key-guid", 
      "trackType": "audio",
      "outputProtection": {
        "digital": "optional"
      }
    }
  ]
}

Domain-Bound ライセンス

ドメイン バインド コンテンツの構成:

{
  "licenseType": "persistent",
  "keyId": "domain-key-guid",
  "domainBinding": {
    "domainId": "domain-service-id",
    "domainAccountId": "account-identifier",
    "required": true
  }
}

テストと検証

検証のデコード

Base64 エンコードを確認するには:

// Decode Base64 back to JSON
const decodedJson = atob(base64Data);
const configObject = JSON.parse(decodedJson);
console.log(configObject);

一般的なテスト シナリオ

  1. 基本ライセンスの種類: 各ライセンスの種類を個別にテストする
  2. 出力保護: さまざまな保護レベルを確認する
  3. 時間制限: テストの有効期限と猶予期間
  4. 複雑な構成: マルチトラックとドメインのシナリオをテストする

エラー処理

エンコード エラー

  • 無効な JSON: エンコード前の JSON 構造の形式が正しくありません
  • エンコードの問題: Base64 変換中の文字エンコードの問題
  • URL の安全性: Base64 データの適切な URL エンコードを確保する

Server-Side エラー

  • デコードエラー: Base64 デコード エラーを含む HTTP 400
  • JSON 解析: JSON 構造エラーを含む HTTP 400
  • 構成が無効: 構成検証エラーが発生した HTTP 400

ベスト プラクティス

  1. JSON 検証: エンコード前に JSON を検証する
  2. URL エンコード: URL の Base64 データを適切にエンコードする
  3. サイズ制限: URL の制限に合わせて構成のサイズを適切に設定する
  4. テスト: エンコード/デコード プロセスを徹底的にテストする
  5. エラー処理: エンコード エラーとサーバー エラーの両方を適切に処理する

利点

  • コンパクト: URL の完全な JSON よりもコンパクト
  • URL セーフ: Base64 エンコードは URL セーフです
  • 柔軟: 複雑な構成オブジェクトをサポート
  • 標準: 標準の Base64 エンコードを使用します

サポートとトラブルシューティング

Base64 JSON 構文に関する問題の場合:

  1. エンコードする前に JSON 構造を確認する
  2. Base64 エンコード/デコード プロセスをテストする
  3. Base64 データの URL エンコードを確認する
  4. 構成パラメーターの検証
  5. サーバー エラー応答の詳細を確認する

追加のサポートについては、 PlayReady テスト サーバー のメイン ドキュメントを参照してください。