Freigeben über


CustomData JSON-Syntax für PlayReady Test Server

Überblick

Der PlayReady Test Server unterstützt customData JSON-Syntax für die erweiterte Lizenzkonfiguration. Mit dieser Methode können Entwickler komplexe Lizenzparameter und Richtlinien im JSON-Format innerhalb des CustomData-Felds von Lizenzanforderungen angeben.

JSON-Struktur

Das Feld CustomData akzeptiert ein JSON-Objekt mit verschiedenen Konfigurationsparametern:

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

Konfigurationsparameter

Lizenztyp

Gibt den Zu generierenden Lizenztyp an:

  • persistent: Auf dem Gerät gespeicherte Lizenz, übersteht den Neustart der Anwendung
  • nicht persistent: Temporäre Lizenz läuft ab, wenn die Anwendung geschlossen wird.
  • Vermietung: Zeitlich begrenzte Lizenz mit spezifischem Ablauf
  • Abonnement: Abonnementbasierte Lizenz mit regelmäßiger Überprüfung

Schlüsselverwaltung

Konfigurieren von Verschlüsselungsschlüsseln und Bezeichnern:

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

Ausgabeschutzrichtlinien

Anforderungen zum Steuern des Ausgabeschutzes:

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

Beispielkonfigurationen

Basic Persistent License

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

Mietlizenz mit Zeitbeschränkungen

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

Abonnementlizenz mit Ausgabeschutz

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

Verwendung in Lizenzanforderungen

HTTP POST-Anforderung

Fügen Sie die JSON-Konfiguration in das Feld CustomData ein:

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

[License Request with CustomData containing JSON configuration]

Clientintegration

JavaScript-Beispiel

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
};

C#-Beispiel

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

Erweiterte Funktionen

Bedingter Zugriff

Konfigurieren des bedingten Zugriffs basierend auf Geräte- oder Benutzerattributen:

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

Unterstützung mit mehreren Schlüsseln

Unterstützung für mehrere Verschlüsselungsschlüssel:

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

Fehlerbehandlung

JSON-Überprüfungsfehler

  • Falsch formatierter JSON-Code: HTTP 400 mit JSON-Analysefehlerdetails
  • Fehlende Pflichtfelder: HTTP 400 mit Feldüberprüfungsfehlern
  • Ungültige Feldwerte: HTTP 400 mit Werteinschränkungsverletzungen

Konfigurationsfehler

  • Nicht unterstützter Lizenztyp: HTTP 400 mit der Liste der unterstützten Typen
  • Ungültiges Schlüsselformat: HTTP 400 mit Schlüsselformatanforderungen
  • Richtlinienkonflikte: HTTP 400 mit Richtlinienauflösungsleitfaden

Bewährte Methoden

  1. JSON-Überprüfung: Überprüfen der JSON-Struktur vor dem Senden von Anforderungen
  2. Versionskompatibilität: Verwenden der entsprechenden Version für die Featureunterstützung
  3. Schlüsselsicherheit: Keine Inhaltsschlüssel im clientseitigen Code verfügbar machen
  4. Richtlinientests: Testen verschiedener Richtlinienkombinationen gründlich
  5. Fehlerbehandlung: Implementieren einer umfassenden Fehlerbehandlung für alle Szenarien

Support und Problembehandlung

Für Probleme mit customData JSON-Syntax:

  1. Überprüfen des JSON-Formats und der Struktur
  2. Überprüfen der erforderlichen Feldpräsenz und -werte
  3. Überprüfen der Richtlinienkompatibilität und -einschränkungen
  4. Testen mit vereinfachten Konfigurationen zuerst
  5. Überprüfen der Serverantwort auf detaillierte Fehlerinformationen

Weitere Unterstützung finden Sie in der Hauptdokumentation zu PlayReady-Testservern .