다음을 통해 공유


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