次の方法で共有


PlayReady テスト環境のバージョン管理されたサーバー

概要

PlayReady テスト環境には、異なる PlayReady バージョンと機能セット間のテストをサポートする複数のバージョン管理されたサーバーが用意されています。 バージョン管理された各サーバーは、特定の PlayReady 機能とコンプライアンス要件を実装し、クライアント実装の包括的なテストを可能にします。

使用可能なサーバー のバージョン

PlayReady 1.x テスト サーバー

PlayReady 1.0-1.3 互換性テスト用のレガシ サーバー:

https://playready-v1.directtaps.net/pr/svc/rightsmanager.asmx

機能:

  • 基本ライセンスの取得
  • シンプルな出力保護
  • 従来の SOAP プロトコル
  • Silverlight の互換性

PlayReady 2.x テスト サーバー

PlayReady 2.0-2.3 機能をサポートするサーバー:

https://playready-v2.directtaps.net/pr/svc/rightsmanager.asmx

機能:

  • 拡張ライセンス ポリシー
  • ドメイン バインド ライセンス
  • セキュアストップ機能
  • ハードウェア ベースの DRM のサポート

PlayReady 3.x テスト サーバー

PlayReady 3.0 以上の機能を備えた最新のサーバー:

https://playready-v3.directtaps.net/pr/svc/rightsmanager.asmx

機能:

  • Common Encryption (CENC) のサポート
  • 高度な出力保護レベル
  • 安全な削除機能
  • 拡張キーのローテーション

PlayReady 4.x テスト サーバー

PlayReady 4.0 以降の機能をサポートする最新のサーバー:

https://playready-v4.directtaps.net/pr/svc/rightsmanager.asmx

機能:

  • SL3000 セキュリティ レベルのサポート
  • 高度なハードウェア セキュリティ
  • ポリシーの適用の強化
  • 最新の暗号化標準

Version-Specific テスト

クライアント バージョンの検出

さまざまなクライアント バージョンとのサーバーの互換性をテストします。

// Test client version compatibility
async function testClientVersionCompatibility(clientVersion) {
    const serverUrl = getServerUrlForVersion(clientVersion);
    const response = await testLicenseAcquisition(serverUrl);
    return response.success;
}

function getServerUrlForVersion(version) {
    const versionMap = {
        '1.x': 'https://playready-v1.directtaps.net/pr/svc/rightsmanager.asmx',
        '2.x': 'https://playready-v2.directtaps.net/pr/svc/rightsmanager.asmx',
        '3.x': 'https://playready-v3.directtaps.net/pr/svc/rightsmanager.asmx',
        '4.x': 'https://playready-v4.directtaps.net/pr/svc/rightsmanager.asmx'
    };
    return versionMap[version];
}

機能の互換性マトリックス

特徴 v1.x v2.x v3.x v4.x
基本ライセンスの取得
Domain-Bound ライセンス
安全停止
安全に削除
ハードウェアのセキュリティ 部分的
高度な OPL
SL3000 のサポート

Version-Specific 構成

PlayReady 1.x 構成

レガシ クライアントの基本的なライセンス構成:

<LicenseAcquisition>
    <Header>
        <DATA>
            <PROTECTINFO>
                <KEYLEN>16</KEYLEN>
                <ALGID>AESCTR</ALGID>
            </PROTECTINFO>
            <KID>base64-encoded-kid</KID>
            <CHECKSUM>base64-encoded-checksum</CHECKSUM>
        </DATA>
    </Header>
</LicenseAcquisition>

PlayReady 2.x 構成

ドメインをサポートする拡張構成:

{
    "version": "2.0",
    "licenseType": "persistent",
    "keyId": "key-id-guid",
    "domainBinding": {
        "required": true,
        "domainId": "domain-service-id"
    },
    "outputProtection": {
        "digital": "required",
        "analog": "copy-never"
    }
}

PlayReady 3.x 構成

高度な機能を備えた最新の構成:

{
    "version": "3.0",
    "licenseType": "persistent",
    "keyId": "key-id-guid",
    "securityLevel": "SL2000",
    "outputProtectionLevels": {
        "compressedDigitalVideo": 270,
        "uncompressedDigitalVideo": 270,
        "analogVideo": 150,
        "compressedDigitalAudio": 200,
        "uncompressedDigitalAudio": 200
    },
    "secureStop": {
        "required": true,
        "serverUrl": "https://securestop.service.com"
    }
}

PlayReady 4.x 構成

SL3000 サポートを使用した最新の構成:

{
    "version": "4.0", 
    "licenseType": "persistent",
    "keyId": "key-id-guid",
    "securityLevel": "SL3000",
    "hardwareBinding": {
        "required": true,
        "allowSoftwareFallback": false
    },
    "outputProtectionLevels": {
        "compressedDigitalVideo": 270,
        "uncompressedDigitalVideo": 270,
        "analogVideo": 100
    },
    "advancedSecurity": {
        "antiRollbackClock": true,
        "tamperResistance": "required"
    }
}

バージョン別のテスト シナリオ

バージョン互換性テスト

各サーバー バージョンのテスト シナリオ:

PlayReady 1.x テスト

// Basic license acquisition test
async function testPlayReady1x() {
    const config = {
        serverUrl: 'https://playready-v1.directtaps.net/pr/svc/rightsmanager.asmx',
        playRight: 1,
        keyId: 'test-key-id'
    };
    
    return await testBasicLicenseAcquisition(config);
}

PlayReady 2.x テスト

// Domain-bound license test
async function testPlayReady2x() {
    const config = {
        serverUrl: 'https://playready-v2.directtaps.net/pr/svc/rightsmanager.asmx',
        licenseType: 'persistent',
        keyId: 'test-key-id',
        domainRequired: true
    };
    
    return await testDomainBoundLicense(config);
}

PlayReady 3.x テスト

// Secure stop functionality test
async function testPlayReady3x() {
    const config = {
        serverUrl: 'https://playready-v3.directtaps.net/pr/svc/rightsmanager.asmx',
        licenseType: 'persistent', 
        keyId: 'test-key-id',
        secureStopRequired: true,
        securityLevel: 'SL2000'
    };
    
    return await testSecureStopFunctionality(config);
}

PlayReady 4.x テスト

// Hardware security test
async function testPlayReady4x() {
    const config = {
        serverUrl: 'https://playready-v4.directtaps.net/pr/svc/rightsmanager.asmx',
        licenseType: 'persistent',
        keyId: 'test-key-id',
        securityLevel: 'SL3000',
        hardwareBindingRequired: true
    };
    
    return await testHardwareSecurity(config);
}

サーバー選択戦略

自動バージョン検出

async function selectOptimalServer(clientCapabilities) {
    // Check client PlayReady version
    const clientVersion = clientCapabilities.playreadyVersion;
    
    // Select compatible server version
    if (clientVersion >= '4.0') {
        return 'https://playready-v4.directtaps.net/pr/svc/rightsmanager.asmx';
    } else if (clientVersion >= '3.0') {
        return 'https://playready-v3.directtaps.net/pr/svc/rightsmanager.asmx';
    } else if (clientVersion >= '2.0') {
        return 'https://playready-v2.directtaps.net/pr/svc/rightsmanager.asmx';
    } else {
        return 'https://playready-v1.directtaps.net/pr/svc/rightsmanager.asmx';
    }
}

Feature-Based の選択

function selectServerByFeatures(requiredFeatures) {
    const serverCapabilities = {
        'v4': ['basic', 'domain', 'secureStop', 'secureDelete', 'sl3000'],
        'v3': ['basic', 'domain', 'secureStop', 'secureDelete', 'sl2000'],
        'v2': ['basic', 'domain', 'secureStop'],
        'v1': ['basic']
    };
    
    // Find minimum server version that supports all required features
    for (const [version, features] of Object.entries(serverCapabilities).reverse()) {
        if (requiredFeatures.every(feature => features.includes(feature))) {
            return `https://playready-${version}.directtaps.net/pr/svc/rightsmanager.asmx`;
        }
    }
    
    throw new Error('No compatible server version found');
}

移行テスト

バージョン間の互換性

異なるサーバー バージョン間でライセンスの互換性をテストします。

async function testCrossVersionCompatibility() {
    const keyId = 'test-key-12345';
    const results = {};
    
    // Test each server version
    for (const version of ['v1', 'v2', 'v3', 'v4']) {
        try {
            const serverUrl = `https://playready-${version}.directtaps.net/pr/svc/rightsmanager.asmx`;
            results[version] = await testLicenseAcquisition(serverUrl, keyId);
        } catch (error) {
            results[version] = { success: false, error: error.message };
        }
    }
    
    return results;
}

アップグレード パスのテスト

クライアントアップグレードのシナリオをテストする:

async function testUpgradePath(fromVersion, toVersion) {
    // Get license from old server
    const oldServerUrl = `https://playready-${fromVersion}.directtaps.net/pr/svc/rightsmanager.asmx`;
    const oldLicense = await acquireLicense(oldServerUrl);
    
    // Test license compatibility with new server
    const newServerUrl = `https://playready-${toVersion}.directtaps.net/pr/svc/rightsmanager.asmx`;
    return await validateLicenseCompatibility(newServerUrl, oldLicense);
}

ベスト プラクティス

サーバーの選択ガイドライン

  1. クライアント バージョンの一致: クライアントと一致するか、またはクライアントと互換性のあるサーバー バージョンを使用する
  2. 機能要件: 必要な DRM 機能に基づいて選択する
  3. セキュリティ レベル: コンテンツに適したセキュリティ レベルを選択する
  4. 下位互換性: 以前のバージョンのサーバーで互換性をテストする

推奨事項のテスト

  1. バージョン マトリックス テスト: すべてのクライアントとサーバーのバージョンの組み合わせをテストする
  2. 機能の分離: 適切なサーバー バージョンで個々の機能をテストする
  3. 移行シナリオ: アップグレードパスとダウングレード パスをテストする
  4. エラー処理: テスト バージョンの不一致エラー シナリオ

監視と診断

サーバーの正常性チェック

async function checkServerHealth(version) {
    const serverUrl = `https://playready-${version}.directtaps.net/pr/svc/rightsmanager.asmx`;
    
    try {
        const response = await fetch(`${serverUrl}?health`);
        return {
            version: version,
            status: response.ok ? 'healthy' : 'unhealthy',
            responseTime: response.headers.get('x-response-time')
        };
    } catch (error) {
        return {
            version: version,
            status: 'error',
            error: error.message
        };
    }
}

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

バージョン管理されたサーバーに関する問題の場合:

  1. クライアントとサーバーのバージョンの互換性を確認する
  2. 機能のサポート マトリックスを確認する
  3. 適切なサーバー バージョンでテストする
  4. バージョン固有の構成要件を確認する
  5. セキュリティ レベルの要件を検証する

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