개요
PlayReady 테스트 서버는 라이선스 구성을 위한 Base64 JSON 구문을 지원하며 복잡한 라이선스 매개 변수를 포함하기 위한 작고 URL로부터 안전한 방법을 제공합니다. 이 방법은 JSON 구성 데이터를 Base64 형식으로 인코딩하여 URL 매개 변수 및 HTTP 헤더에 적합합니다.
인코딩 프로세스
Base64 JSON 구문에는 다음 두 단계가 포함됩니다.
- JSON 구성 개체 만들기
- 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);
일반적인 테스트 시나리오
- 기본 라이선스 유형: 각 라이선스 유형을 개별적으로 테스트
- 출력 보호: 다른 보호 수준 확인
- 시간 제한: 만료 및 유예 기간 테스트
- 복잡한 구성: 다중 트랙 및 도메인 시나리오 테스트
오류 처리
인코딩 오류
- 잘못된 JSON: 인코딩하기 전에 형식이 잘못된 JSON 구조체
- 인코딩 문제: Base64 변환 중 문자 인코딩 문제
- URL 안전성: Base64 데이터의 적절한 URL 인코딩 확인
Server-Side 오류
- 디코딩 실패: Base64 디코딩 오류가 있는 HTTP 400
- JSON 구문 분석: JSON 구조 오류가 있는 HTTP 400
- 구성이 잘못되었습니다. 구성 유효성 검사 오류가 있는 HTTP 400
모범 사례
- JSON 유효성 검사: 인코딩하기 전에 JSON 유효성 검사
- URL 인코딩: URL에 대해 Base64 데이터를 올바르게 인코딩
- 크기 제한: URL 제한에 대해 구성 크기를 합리적으로 유지
- 테스트: 인코딩/디코딩 프로세스를 철저히 테스트
- 오류 처리: 인코딩 및 서버 오류를 모두 정상적으로 처리
장점
- 압축: URL의 전체 JSON보다 더 컴팩트
- URL 안전: Base64 인코딩은 URL로부터 안전합니다.
- 유연한: 복잡한 구성 개체 지원
- 표준: 표준 Base64 인코딩 사용
관련 설명서
- PlayReady 테스트 서버 서비스 - 기본 서비스 개요
- CustomData JSON 구문 - 전체 JSON 구성 형식
- 쿼리 문자열 구문 - 간단한 매개 변수 기반 접근 방식
- PlayReady 테스트 서버 - 전체 서버 설명서
지원 및 문제 해결
Base64 JSON 구문 관련 문제:
- 인코딩하기 전에 JSON 구조 확인
- Base64 인코딩/디코딩 프로세스 테스트
- Base64 데이터의 URL 인코딩 확인
- 구성 매개 변수 유효성 검사
- 자세한 내용은 서버 오류 응답 검토
추가 지원은 기본 PlayReady 테스트 서버 설명서를 참조하세요.