Compartir a través de


Sintaxis JSON de CustomData para el servidor de pruebas de PlayReady

Información general

El servidor de pruebas de PlayReady admite la sintaxis JSON de CustomData para la configuración avanzada de licencias. Este método permite a los desarrolladores especificar parámetros y directivas de licencia complejos mediante el formato JSON dentro del campo CustomData de solicitudes de licencia.

Estructura JSON

El campo CustomData acepta un objeto JSON con varios parámetros de configuración:

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

Parámetros de configuración

Tipo de licencia

Especifica el tipo de licencia que se va a generar:

  • persistente: la licencia almacenada en el dispositivo sobrevive al reinicio de la aplicación.
  • no persistente: la licencia temporal expira cuando se cierra la aplicación.
  • alquiler: licencia limitada por tiempo con expiración específica
  • suscripción: licencia basada en suscripciones con validación periódica

Administración de claves

Configure las claves de cifrado y los identificadores:

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

Directivas de protección de salida

Controlar los requisitos de protección de salida:

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

Configuraciones de ejemplo

Licencia persistente básica

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

Licencia de alquiler con restricciones de tiempo

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

Licencia de suscripción con protección de salida

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

Uso en solicitudes de licencia

Solicitud HTTP POST

Incluya la configuración JSON en el campo 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]

Integración de clientes

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

Ejemplo de 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

Características avanzadas

Acceso condicional

Configure el acceso condicional basado en atributos de dispositivo o usuario:

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

Compatibilidad con varias claves

Compatibilidad con varias claves de cifrado:

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

Tratamiento de errores

Errores de validación de JSON

  • JSON con formato incorrecto: HTTP 400 con detalles del error de análisis de JSON
  • Campos obligatorios que faltan: HTTP 400 con errores de validación de campos
  • Valores de campo no válidos: HTTP 400 con infracciones de restricciones de valor

Errores de configuración

  • Tipo de licencia no compatible: HTTP 400 con la lista de tipos admitidos
  • Formato de clave no válido: HTTP 400 con requisitos de formato de clave
  • Conflictos de directivas: HTTP 400 con instrucciones de resolución de directivas

Procedimientos recomendados

  1. Validación de JSON: validación de la estructura JSON antes de enviar solicitudes
  2. Compatibilidad de versiones: usar la versión adecuada para la compatibilidad con características
  3. Seguridad de claves: nunca exponga las claves de contenido en el código del lado cliente
  4. Pruebas de directivas: prueba exhaustiva de diferentes combinaciones de directivas
  5. Control de errores: implementar un control completo de errores para todos los escenarios

Soporte técnico y solución de problemas

Para problemas con la sintaxis JSON de CustomData:

  1. Validación del formato y la estructura JSON
  2. Comprobación de la presencia y los valores de campo necesarios
  3. Comprobación de la compatibilidad y restricciones de directivas
  4. Prueba con configuraciones simplificadas primero
  5. Revisión de la respuesta del servidor para obtener información detallada sobre errores

Para obtener soporte adicional, consulte la documentación principal de los servidores de prueba de PlayReady .