概要
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);
}
ベスト プラクティス
サーバーの選択ガイドライン
- クライアント バージョンの一致: クライアントと一致するか、またはクライアントと互換性のあるサーバー バージョンを使用する
- 機能要件: 必要な DRM 機能に基づいて選択する
- セキュリティ レベル: コンテンツに適したセキュリティ レベルを選択する
- 下位互換性: 以前のバージョンのサーバーで互換性をテストする
推奨事項のテスト
- バージョン マトリックス テスト: すべてのクライアントとサーバーのバージョンの組み合わせをテストする
- 機能の分離: 適切なサーバー バージョンで個々の機能をテストする
- 移行シナリオ: アップグレードパスとダウングレード パスをテストする
- エラー処理: テスト バージョンの不一致エラー シナリオ
監視と診断
サーバーの正常性チェック
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
};
}
}
関連ドキュメント
- PlayReady テスト サーバー サービス - メイン サービスの概要
- Client-Server バージョンをテストする方法 - バージョン テスト ガイダンス
- 移行方法 - 移行ガイダンス
- PlayReady テスト サーバー - サーバーの完全なドキュメント
サポートとトラブルシューティング
バージョン管理されたサーバーに関する問題の場合:
- クライアントとサーバーのバージョンの互換性を確認する
- 機能のサポート マトリックスを確認する
- 適切なサーバー バージョンでテストする
- バージョン固有の構成要件を確認する
- セキュリティ レベルの要件を検証する
追加のサポートについては、 PlayReady テスト サーバー のメイン ドキュメントを参照してください。