Синтаксис JSON Base64 для тестового сервера PlayReady

Обзор

Сервер тестирования PlayReady поддерживает синтаксис JSON Base64 для конфигурации лицензии, предоставляя компактный и безопасный URL-адрес метод для внедрения сложных параметров лицензии. Этот подход кодирует данные конфигурации JSON в формате Base64, что делает его подходящим для параметров URL-адресов и заголовков HTTP.

Процесс кодирования

Синтаксис JSON Base64 состоит из двух этапов:

  1. Создание объекта конфигурации JSON
  2. Кодирование строки JSON с помощью кодировки Base64
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-адресов. Обеспечение правильной кодировки URL-адресов данных Base64

ошибки Server-Side

  • Декодирование сбоев: HTTP 400 с ошибкой декодирования Base64
  • Анализ JSON: HTTP 400 с ошибками структуры JSON
  • Недопустимая конфигурация: HTTP 400 с ошибками проверки конфигурации

Лучшие практики

  1. Проверка JSON: проверка JSON перед кодировкой
  2. Кодировка URL-адресов: правильно кодирование данных Base64 для URL-адресов
  3. Ограничения размера. Сохранение конфигураций достаточного размера для ограничений URL-адресов
  4. Тестирование: тщательное тестирование кодирования и декодирования
  5. Обработка ошибок. Обработка ошибок как кодирования, так и ошибок сервера корректно

Преимущества

  • Компактный: более компактный, чем полный JSON в URL-адресах
  • Безопасный URL-адрес: кодировка Base64 является URL-безопасной
  • Гибкий: поддерживает сложные объекты конфигурации
  • Стандарт: использует стандартную кодировку Base64

Поддержка и устранение неполадок

Проблемы с синтаксисом JSON Base64:

  1. Проверка структуры JSON перед кодировкой
  2. Тестирование процесса кодирования и декодирования Base64
  3. Проверка кодирования URL-адресов данных Base64
  4. Проверка параметров конфигурации
  5. Дополнительные сведения см. в ответах на ошибки сервера

Дополнительные сведения о поддержке см. в основной документации по серверам тестирования PlayReady .