PlayReady 테스트 서버에 대한 Base64 JSON 구문

개요

PlayReady 테스트 서버는 라이선스 구성을 위한 Base64 JSON 구문을 지원하며 복잡한 라이선스 매개 변수를 포함하기 위한 작고 URL로부터 안전한 방법을 제공합니다. 이 방법은 JSON 구성 데이터를 Base64 형식으로 인코딩하여 URL 매개 변수 및 HTTP 헤더에 적합합니다.

인코딩 프로세스

Base64 JSON 구문에는 다음 두 단계가 포함됩니다.

  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 테스트 서버 설명서를 참조하세요.