Partilhar via


Sintaxe JSON CustomData para PlayReady Test Server

Visão geral

O PlayReady Test Server suporta a sintaxe JSON CustomData para configuração de licença avançada. Esse método permite que os desenvolvedores especifiquem parâmetros e políticas de licença complexos usando o formato JSON dentro do 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 é fechado
  • aluguer: Licença por tempo limitado com expiração específica
  • assinatura: licença baseada em assinatura com validação periódica

Gestão de Chaves

Configure chaves e identificadores de criptografia:

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

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

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

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

Exemplos de configurações

Licença Básica Persistente

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

Licença de aluguer 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 Subscrição com 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 do 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 em 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

Funcionalidades avançadas

Acesso Condicional

Configure o acesso condicional com base nos atributos do dispositivo ou do usuário:

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

Suporte Multi-Key

Suporte para várias chaves de encriptação:

{
  "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 obrigató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 não suportado: HTTP 400 com lista de tipos suportados
  • Formato de chave inválido: HTTP 400 com requisitos de formato de chave
  • Conflitos de política: HTTP 400 com orientação de resolução de política

Melhores práticas

  1. Validação JSON: Valide a estrutura JSON antes de enviar solicitações
  2. Compatibilidade de versão: use a versão apropriada para 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íticas: teste completamente diferentes combinações de políticas
  5. Tratamento de erros: implemente um 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 e a estrutura JSON
  2. Verificar presença e valores obrigatórios no campo
  3. Verificar a compatibilidade e as restrições da política
  4. Teste primeiro com configurações simplificadas
  5. Revise a resposta do servidor para obter informações detalhadas sobre erros

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