Compartilhar via


Sintaxe JSON CustomData para o servidor de teste do PlayReady

Visão geral

O Servidor de Teste do PlayReady dá suporte à sintaxe JSON CustomData para configuração avançada de licença. Esse método permite que os desenvolvedores especifiquem parâmetros e políticas de licença complexos usando o formato JSON no campo CustomData de solicitações de licença.

Estrutura JSON

O campo CustomData aceita um objeto JSON com vários parâmetros de configuração:

{
  "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 configuração

Tipo de Licença

Especifica o tipo de licença a ser gerada:

  • persistente: Licença armazenada no dispositivo, sobrevive à reinicialização do aplicativo
  • não persistente: licença temporária, expira quando o aplicativo fecha
  • aluguel: licença limitada por tempo com expiração específica
  • assinatura: licença baseada em assinatura com validação periódica

Gerenciamento de chaves

Configurar chaves de criptografia e identificadores:

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

Políticas de proteção de saída

Controlar os requisitos de proteção de saída:

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

Configurações de exemplo

Licença persistente básica

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

Licença de aluguel com restrições de tempo

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

Licença de assinatura com a Proteção de Saída

{
  "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 em solicitações de licença

Solicitação HTTP POST

Inclua a configuração JSON no 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]

Integração de Cliente

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

Exemplo 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

Recursos avançados

Acesso condicional

Configure o acesso condicional com base em atributos de dispositivo ou usuário:

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

Suporte a várias chaves

Suporte para várias chaves de criptografia:

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

Tratamento de erros

Erros de validação JSON

  • JSON malformado: HTTP 400 com detalhes de erro de análise JSON
  • Campos necessários ausentes: HTTP 400 com erros de validação de campo
  • Valores de campo inválidos: HTTP 400 com violações de restrição de valor

Erros de configuração

  • Tipo de licença sem suporte: HTTP 400 com lista de tipos com suporte
  • Formato de chave inválido: HTTP 400 com requisitos de formato de chave
  • Conflitos de política: HTTP 400 com diretrizes de resolução de política

Práticas recomendadas

  1. Validação JSON: validar a estrutura JSON antes de enviar solicitações
  2. Compatibilidade de versão: usar a versão apropriada para o suporte a recursos
  3. Segurança de Chave: Nunca exponha chaves de conteúdo no código do lado do cliente
  4. Teste de política: testar combinações de políticas diferentes completamente
  5. Tratamento de erros: implementar o tratamento de erros abrangente para todos os cenários

Suporte e solução de problemas

Para problemas com a sintaxe JSON CustomData:

  1. Validar o formato JSON e a estrutura
  2. Verificar a presença e os valores de campo necessários
  3. Verificar a compatibilidade e as restrições da política
  4. Testar com configurações simplificadas primeiro
  5. Examinar a resposta do servidor para obter informações detalhadas de erro

Para obter suporte adicional, consulte a documentação principal dos Servidores de Teste do PlayReady .