Składnia JSON usługi CustomData dla serwera testowego PlayReady

Przegląd

Serwer PlayReady Test Server obsługuje składnię customData JSON na potrzeby zaawansowanej konfiguracji licencji. Ta metoda umożliwia deweloperom określanie złożonych parametrów licencji i zasad przy użyciu formatu JSON w polu CustomData żądań licencji.

Struktura JSON

Pole CustomData akceptuje obiekt JSON z różnymi parametrami konfiguracji:

{
  "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"
      }
    }
  }
}

Parametry konfiguracji

Typ licencji

Określa typ licencji do wygenerowania:

  • trwałe: licencja przechowywana na urządzeniu, przetrwa ponowne uruchomienie aplikacji
  • nietrwale: licencja tymczasowa wygasa po zamknięciu aplikacji
  • wynajem: licencja ograniczona czasowo z określonym wygaśnięciem
  • subskrypcja: licencja oparta na subskrypcji z okresową walidacją

Zarządzanie kluczami

Konfigurowanie kluczy szyfrowania i identyfikatorów:

{
  "keyId": "12345678-1234-1234-1234-123456789012",
  "contentKey": "base64EncodedContentKey",
  "keyRotation": {
    "enabled": true,
    "interval": "PT1H"
  }
}

Zasady ochrony danych wyjściowych

Wymagania dotyczące ochrony danych wyjściowych kontroli:

{
  "outputProtection": {
    "digital": {
      "hdcp": "required",
      "cgmsa": "copy-never"
    },
    "analog": {
      "macrovision": "required",
      "cgmsa": "copy-once"
    }
  }
}

Przykładowe konfiguracje

Podstawowa licencja trwała

{
  "version": "1.0",
  "config": {
    "licenseType": "persistent",
    "keyId": "12345678-1234-1234-1234-123456789012",
    "policies": {
      "playback": {
        "allowOffline": true
      }
    }
  }
}

Licencja na wynajem z ograniczeniami czasu

{
  "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"
      }
    }
  }
}

Licencja subskrypcji z ochroną danych wyjściowych

{
  "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"
      }
    }
  }
}

Użycie w żądaniach licencji

Żądanie HTTP POST

Uwzględnij konfigurację JSON w polu CustomData:

POST /pr/svc/rightsmanager.asmx HTTP/1.1
Host: playready.directtaps.net
Content-Type: application/octet-stream

[License Request with CustomData containing JSON configuration]

Integracja klienta

Przykład języka 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
};

Przykład w języku 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

Funkcje zaawansowane

Dostęp warunkowy

Skonfiguruj dostęp warunkowy na podstawie atrybutów urządzenia lub użytkownika:

{
  "conditionalAccess": {
    "deviceRestrictions": {
      "allowedDeviceTypes": ["mobile", "desktop"],
      "blockedDevices": ["emulator", "debugger"]
    },
    "geoRestrictions": {
      "allowedCountries": ["US", "CA", "GB"],
      "blockedRegions": ["region1", "region2"]
    }
  }
}

Obsługa wielu kluczy

Obsługa wielu kluczy szyfrowania:

{
  "keys": [
    {
      "keyId": "key-1-guid",
      "contentKey": "base64-key-1",
      "keyType": "content"
    },
    {
      "keyId": "key-2-guid", 
      "contentKey": "base64-key-2",
      "keyType": "track"
    }
  ]
}

Obsługa błędów

Błędy sprawdzania poprawności kodu JSON

  • Źle sformułowany kod JSON: HTTP 400 ze szczegółami błędu analizowania w formacie JSON
  • Brakujące wymagane pola: HTTP 400 z błędami walidacji pól
  • Nieprawidłowe wartości pól: HTTP 400 z naruszeniami ograniczeń wartości

Błędy konfiguracji

  • Nieobsługiwany typ licencji: HTTP 400 z listą obsługiwanych typów
  • Nieprawidłowy format klucza: HTTP 400 z wymaganiami dotyczącymi formatu klucza
  • Konflikty zasad: HTTP 400 ze wskazówkami dotyczącymi rozwiązywania problemów z zasadami

Najlepsze praktyki

  1. Walidacja kodu JSON: weryfikowanie struktury JSON przed wysłaniem żądań
  2. Zgodność wersji: użyj odpowiedniej wersji do obsługi funkcji
  3. Zabezpieczenia klucza: nigdy nie ujawniaj kluczy zawartości w kodzie po stronie klienta
  4. Testowanie zasad: Dokładnie przetestuj różne kombinacje zasad
  5. Obsługa błędów: Implementowanie kompleksowej obsługi błędów we wszystkich scenariuszach

Pomoc techniczna i rozwiązywanie problemów

W przypadku problemów ze składnią JSON usługi CustomData:

  1. Weryfikowanie formatu i struktury JSON
  2. Sprawdzanie obecności i wartości wymaganych pól
  3. Weryfikowanie zgodności i ograniczeń zasad
  4. Najpierw przetestuj z uproszczonymi konfiguracjami
  5. Przejrzyj odpowiedź serwera, aby uzyskać szczegółowe informacje o błędzie

Aby uzyskać dodatkową pomoc techniczną, zapoznaj się z główną dokumentacją serwerów testowych PlayReady .