Compartilhar via


Sintaxe JSON base64 para o servidor de teste do PlayReady

Visão geral

O Servidor de Teste do PlayReady dá suporte à sintaxe JSON base64 para configuração de licença, fornecendo um método compacto e seguro de URL para inserir parâmetros de licença complexos. Essa abordagem codifica dados de configuração JSON no formato Base64, tornando-os adequados para parâmetros de URL e cabeçalhos HTTP.

Processo de codificação

A sintaxe JSON base64 envolve duas etapas:

  1. Criar um objeto de configuração JSON
  2. Codificar a cadeia de caracteres JSON usando a codificação Base64
JSON Configuration → Base64 Encoding → URL Parameter

Estrutura JSON básica

Antes de codificar, crie uma configuração JSON:

{
  "licenseType": "persistent",
  "keyId": "12345678-1234-1234-1234-123456789012",
  "outputProtection": {
    "digital": "required",
    "analog": "optional"
  }
}

Exemplos de codificação base64

Configuração simples

JSON original:

{"licenseType": "persistent", "keyId": "12345678-1234-1234-1234-123456789012"}

Codificado em Base64:

eyJsaWNlbnNlVHlwZSI6InBlcnNpc3RlbnQiLCJrZXlJZCI6IjEyMzQ1Njc4LTEyMzQtMTIzNC0xMjM0LTEyMzQ1Njc4OTAxMiJ9

Configuração complexa

JSON original:

{
  "licenseType": "rental",
  "keyId": "87654321-4321-4321-4321-210987654321",
  "expirationDate": "2024-12-31T23:59:59Z",
  "outputProtection": {
    "digital": "required",
    "analog": "never"
  }
}

Codificado em Base64:

eyJsaWNlbnNlVHlwZSI6InJlbnRhbCIsImtleUlkIjoiODc2NTQzMjEtNDMyMS00MzIxLTQzMjEtMjEwOTg3NjU0MzIxIiwiZXhwaXJhdGlvbkRhdGUiOiIyMDI0LTEyLTMxVDIzOjU5OjU5WiIsIm91dHB1dFByb3RlY3Rpb24iOnsiZGlnaXRhbCI6InJlcXVpcmVkIiwiYW5hbG9nIjoibmV2ZXIifX0=

Uso de URL

Formato de parâmetro de consulta

https://playready.directtaps.net/pr/svc/rightsmanager.asmx?cfg=base64&data=BASE64_ENCODED_JSON

Concluir URLs de exemplo

Licença persistente

https://playready.directtaps.net/pr/svc/rightsmanager.asmx?cfg=base64&data=eyJsaWNlbnNlVHlwZSI6InBlcnNpc3RlbnQiLCJrZXlJZCI6IjEyMzQ1Njc4LTEyMzQtMTIzNC0xMjM0LTEyMzQ1Njc4OTAxMiJ9

Licença de aluguel

https://playready.directtaps.net/pr/svc/rightsmanager.asmx?cfg=base64&data=eyJsaWNlbnNlVHlwZSI6InJlbnRhbCIsImtleUlkIjoiODc2NTQzMjEtNDMyMS00MzIxLTQzMjEtMjEwOTg3NjU0MzIxIiwiZXhwaXJhdGlvbkRhdGUiOiIyMDI0LTEyLTMxVDIzOjU5OjU5WiJ9

Opções de configuração

Tipos de licença

Suporte para todos os tipos de licença padrão:

{
  "licenseType": "persistent|non-persistent|rental|subscription"
}

Configurações de proteção de saída

Configurar a proteção de saída digital e analógica:

{
  "outputProtection": {
    "digital": "required|optional|never",
    "analog": "required|optional|never",
    "hdcp": {
      "version": "1.4|2.0|2.1|2.2",
      "required": true
    }
  }
}

Restrições de Time-Based

Definir períodos de expiração e carência:

{
  "expirationDate": "2024-12-31T23:59:59Z",
  "gracePeriod": 3600,
  "firstPlayExpiration": "PT48H"
}

Exemplos de implementação

JavaScript/HTML5

// Create configuration object
const config = {
  licenseType: "persistent",
  keyId: keyId,
  outputProtection: {
    digital: "required",
    analog: "optional"
  }
};

// Convert to JSON and encode
const jsonString = JSON.stringify(config);
const base64Data = btoa(jsonString);

// Build URL
const licenseUrl = `https://playready.directtaps.net/pr/svc/rightsmanager.asmx?cfg=base64&data=${base64Data}`;

Aplicativo C#

using System;
using System.Text;
using Newtonsoft.Json;

// Create configuration object
var config = new {
    licenseType = "persistent",
    keyId = keyId,
    outputProtection = new {
        digital = "required",
        analog = "optional"
    }
};

// Convert to JSON and encode
string jsonString = JsonConvert.SerializeObject(config);
byte[] jsonBytes = Encoding.UTF8.GetBytes(jsonString);
string base64Data = Convert.ToBase64String(jsonBytes);

// Build URL
string licenseUrl = $"https://playready.directtaps.net/pr/svc/rightsmanager.asmx?cfg=base64&data={base64Data}";

Exemplo do Python

import json
import base64

# Create configuration dictionary
config = {
    "licenseType": "persistent",
    "keyId": key_id,
    "outputProtection": {
        "digital": "required",
        "analog": "optional"
    }
}

# Convert to JSON and encode
json_string = json.dumps(config)
base64_data = base64.b64encode(json_string.encode('utf-8')).decode('utf-8')

# Build URL
license_url = f"https://playready.directtaps.net/pr/svc/rightsmanager.asmx?cfg=base64&data={base64_data}"

Configurações Avançadas

Conteúdo de várias faixas

Configuração de conteúdo com várias faixas:

{
  "licenseType": "persistent",
  "tracks": [
    {
      "keyId": "video-key-guid",
      "trackType": "video",
      "outputProtection": {
        "digital": "required"
      }
    },
    {
      "keyId": "audio-key-guid", 
      "trackType": "audio",
      "outputProtection": {
        "digital": "optional"
      }
    }
  ]
}

Licenças de Domain-Bound

Configuração para conteúdo associado ao domínio:

{
  "licenseType": "persistent",
  "keyId": "domain-key-guid",
  "domainBinding": {
    "domainId": "domain-service-id",
    "domainAccountId": "account-identifier",
    "required": true
  }
}

Teste e validação

Verificação de decodificação

Para verificar a codificação base64:

// Decode Base64 back to JSON
const decodedJson = atob(base64Data);
const configObject = JSON.parse(decodedJson);
console.log(configObject);

Cenários comuns de teste

  1. Tipos básicos de licença: testar cada tipo de licença individualmente
  2. Proteção de Saída: verificar diferentes níveis de proteção
  3. Restrições de tempo: Períodos de expiração e carência de teste
  4. Configurações complexas: testar cenários de vários controles e domínio

Tratamento de erros

Erros de codificação

  • JSON inválido: estrutura JSON malformada antes da codificação
  • Problemas de codificação: problemas de codificação de caracteres durante a conversão do Base64
  • Segurança da URL: garantir a codificação de URL adequada dos dados base64

Erros de Server-Side

  • Falhas de decodificação: erro de decodificação HTTP 400 com Base64
  • Análise JSON: HTTP 400 com erros de estrutura JSON
  • Configuração inválida: HTTP 400 com erros de validação de configuração

Práticas recomendadas

  1. Validação JSON: validar JSON antes da codificação
  2. Codificação de URL: codificar corretamente dados Base64 para URLs
  3. Limites de tamanho: manter configurações razoavelmente dimensionadas para limites de URL
  4. Teste: testar o processo de codificação/decodificação minuciosamente
  5. Tratamento de erros: manipular erros de codificação e de servidor normalmente

Vantagens

  • Compacto: JSON mais compacto do que completo em URLs
  • Url Safe: a codificação Base64 é segura para URL
  • Flexível: dá suporte a objetos de configuração complexos
  • Padrão: usa a codificação base64 padrão

Suporte e solução de problemas

Para problemas com a sintaxe JSON base64:

  1. Verificar a estrutura JSON antes da codificação
  2. Testar o processo de codificação/decodificação base64
  3. Verificar a codificação de URL de dados base64
  4. Validar parâmetros de configuração
  5. Examinar as respostas de erro do servidor para obter detalhes

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