개요
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"
}
}
}
}
출력 보호를 사용하여 구독 라이선스
{
"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: JSON 구문 분석 오류 세부 정보가 있는 HTTP 400
- 필수 필드 누락: 필드 유효성 검사 오류가 있는 HTTP 400
- 잘못된 필드 값: 값 제약 조건 위반이 있는 HTTP 400
구성 오류
- 지원되지 않는 라이선스 유형: 지원되는 형식 목록이 있는 HTTP 400
- 잘못된 키 형식: 키 형식 요구 사항이 있는 HTTP 400
- 정책 충돌: 정책 해결 지침이 포함된 HTTP 400
모범 사례
- JSON 유효성 검사: 요청을 보내기 전에 JSON 구조의 유효성 검사
- 버전 호환성: 기능 지원에 적절한 버전 사용
- 키 보안: 클라이언트 쪽 코드에서 콘텐츠 키를 노출하지 않습니다.
- 정책 테스트: 다양한 정책 조합을 철저히 테스트
- 오류 처리: 모든 시나리오에 대한 포괄적인 오류 처리 구현
관련 설명서
- PlayReady 테스트 서버 서비스 - 기본 서비스 개요
- 쿼리 문자열 구문 - 단순 URL 기반 구성
- Base64 JSON 구문 - Base64로 인코딩된 JSON 형식
- PlayReady 테스트 서버 - 전체 서버 설명서
지원 및 문제 해결
CustomData JSON 구문 관련 문제:
- JSON 형식 및 구조 유효성 검사
- 필수 필드 현재 상태 및 값 확인
- 정책 호환성 및 제약 조건 확인
- 먼저 간소화된 구성으로 테스트
- 자세한 오류 정보는 서버 응답 검토
추가 지원은 기본 PlayReady 테스트 서버 설명서를 참조하세요.