Partilhar via


Servidor de parada segura para ambiente de teste PlayReady

Visão geral

O PlayReady Secure Stop Server fornece um ponto de extremidade de teste para validar a funcionalidade de parada segura em implementações PlayReady. O Secure Stop garante que os dados de rastreamento do consumo de mídia sejam transmitidos com segurança dos clientes para os provedores de conteúdo, permitindo o monitoramento preciso do uso e relatórios de conformidade.

Endereço de Serviço

O servidor de teste Secure Stop está disponível em:

https://playready.directtaps.net/pr/svc/securestop.asmx

Protocolo de Paragem Segura

Visão geral do protocolo

O Secure Stop permite que os clientes relatem informações de fim de sessão com segurança:

  1. O cliente inicia a sessão de reprodução
  2. A licença especifica os requisitos de parada segura
  3. O cliente gera dados de parada seguros durante a reprodução
  4. No final da sessão, o cliente envia um relatório de parada segura para o servidor
  5. O servidor valida e confirma o recebimento

Fluxo de mensagens

Client                    License Server           Secure Stop Server
  |                            |                           |
  |-- License Request -------->|                           |
  |<-- License Response -------|                           |
  |    (with SecureStop URL)   |                           |
  |                            |                           |
  |    [Playback Session]      |                           |
  |                            |                           |
  |-- Secure Stop Report ------|-------------------------->|
  |<-- Acknowledgment ---------|---------------------------|

Configuração do servidor

Requisitos de parada segura

Configure a parada segura nas respostas de licença:

{
  "licenseType": "persistent",
  "keyId": "key-id-guid",
  "secureStop": {
    "required": true,
    "serverUrl": "https://playready.directtaps.net/pr/svc/securestop.asmx",
    "reportingFrequency": "session-end",
    "customData": {
      "sessionId": "unique-session-identifier",
      "contentId": "content-identifier"
    }
  }
}

Configuração de resposta do servidor

O servidor suporta vários modos de resposta para teste:

{
  "responseMode": "success|failure|timeout|partial",
  "acknowledgmentDelay": 0,
  "customData": {
    "testScenario": "normal-operation"
  }
}

Pontos de extremidade da API

Enviar Relatório de Parada Segura

Ponto final:POST /pr/svc/securestop.asmx/SubmitReport

Formato do pedido:

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

[Secure Stop Report Data - Binary Format]

Formato de resposta:

HTTP/1.1 200 OK
Content-Type: application/octet-stream

[Secure Stop Acknowledgment - Binary Format]

Status do relatório de consulta

Ponto final:GET /pr/svc/securestop.asmx/QueryStatus

Formato do pedido:

GET /pr/svc/securestop.asmx/QueryStatus?sessionId=SESSION_ID HTTP/1.1
Host: playready.directtaps.net

Formato de resposta:

{
  "sessionId": "session-identifier",
  "status": "pending|received|processed|error",
  "timestamp": "2024-01-15T10:30:00Z",
  "reportSize": 1024,
  "processingTime": 50
}

Cenários de teste

Teste básico de parada segura

Testar o fluxo de paragem seguro normal:

async function testBasicSecureStop() {
    // 1. Acquire license with secure stop requirement
    const license = await acquireLicense({
        keyId: 'test-key-id',
        secureStopRequired: true,
        secureStopUrl: 'https://playready.directtaps.net/pr/svc/securestop.asmx'
    });
    
    // 2. Simulate playback session
    const session = await startPlaybackSession(license);
    
    // 3. End session and generate secure stop report
    const secureStopReport = await endSessionWithSecureStop(session);
    
    // 4. Submit secure stop report
    const response = await submitSecureStopReport(secureStopReport);
    
    return response.acknowledged;
}

Teste de manipulação de erros

Cenários de erro de teste:

async function testSecureStopErrorHandling() {
    const testCases = [
        {
            name: 'Invalid Report Format',
            data: generateInvalidReport(),
            expectedError: 'INVALID_FORMAT'
        },
        {
            name: 'Expired Session',
            data: generateExpiredSessionReport(),
            expectedError: 'SESSION_EXPIRED'
        },
        {
            name: 'Duplicate Report',
            data: generateDuplicateReport(),
            expectedError: 'DUPLICATE_REPORT'
        }
    ];
    
    const results = [];
    for (const testCase of testCases) {
        try {
            await submitSecureStopReport(testCase.data);
            results.push({ test: testCase.name, result: 'UNEXPECTED_SUCCESS' });
        } catch (error) {
            results.push({ 
                test: testCase.name, 
                result: error.code === testCase.expectedError ? 'PASS' : 'FAIL' 
            });
        }
    }
    
    return results;
}

Testes de desempenho

Teste o desempenho de parada segura:

async function testSecureStopPerformance() {
    const concurrentReports = 10;
    const reports = [];
    
    // Generate multiple secure stop reports
    for (let i = 0; i < concurrentReports; i++) {
        reports.push(generateSecureStopReport(`session-${i}`));
    }
    
    // Submit reports concurrently
    const startTime = Date.now();
    const promises = reports.map(report => submitSecureStopReport(report));
    const results = await Promise.allSettled(promises);
    const endTime = Date.now();
    
    return {
        totalTime: endTime - startTime,
        averageTime: (endTime - startTime) / concurrentReports,
        successCount: results.filter(r => r.status === 'fulfilled').length,
        errorCount: results.filter(r => r.status === 'rejected').length
    };
}

Integração do Cliente

Implementação JavaScript

class SecureStopClient {
    constructor(serverUrl) {
        this.serverUrl = serverUrl;
    }
    
    async submitReport(secureStopData) {
        const response = await fetch(`${this.serverUrl}/SubmitReport`, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/octet-stream'
            },
            body: secureStopData
        });
        
        if (!response.ok) {
            throw new Error(`Secure stop submission failed: ${response.status}`);
        }
        
        return await response.arrayBuffer();
    }
    
    async queryStatus(sessionId) {
        const response = await fetch(`${this.serverUrl}/QueryStatus?sessionId=${sessionId}`);
        
        if (!response.ok) {
            throw new Error(`Status query failed: ${response.status}`);
        }
        
        return await response.json();
    }
}

// Usage
const secureStopClient = new SecureStopClient('https://playready.directtaps.net/pr/svc/securestop.asmx');

Implementação em C#

public class SecureStopClient
{
    private readonly HttpClient httpClient;
    private readonly string serverUrl;
    
    public SecureStopClient(string serverUrl)
    {
        this.serverUrl = serverUrl;
        this.httpClient = new HttpClient();
    }
    
    public async Task<byte[]> SubmitReportAsync(byte[] secureStopData)
    {
        var content = new ByteArrayContent(secureStopData);
        content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        
        var response = await httpClient.PostAsync($"{serverUrl}/SubmitReport", content);
        response.EnsureSuccessStatusCode();
        
        return await response.Content.ReadAsByteArrayAsync();
    }
    
    public async Task<SecureStopStatus> QueryStatusAsync(string sessionId)
    {
        var response = await httpClient.GetAsync($"{serverUrl}/QueryStatus?sessionId={sessionId}");
        response.EnsureSuccessStatusCode();
        
        var json = await response.Content.ReadAsStringAsync();
        return JsonConvert.DeserializeObject<SecureStopStatus>(json);
    }
}

Formato dos dados

Estrutura do Relatório de Parada Segura

O relatório de paragem segura contém:

  • Identificador de sessão: ID de sessão exclusivo
  • Identificador de conteúdo: conteúdo sendo consumido
  • Dados de uso: duração da reprodução, qualidade, etc.
  • Informações do dispositivo: detalhes do dispositivo cliente
  • Informações de carimbo de data/hora: Hora de início/fim da sessão
  • Assinatura Digital: Prova criptográfica de autenticidade

Validação de relatórios

O servidor valida relatórios para:

  • Integridade do formato: Estrutura binária correta
  • Assinatura Digital: Autenticidade criptográfica
  • Validade da sessão: parâmetros de sessão válidos
  • Precisão do carimbo de data/hora: Valores de tempo razoáveis
  • Deteção de duplicados: Prevenção de envios duplicados

Funcionalidades avançadas

Suporte de dados personalizados

Inclua dados personalizados em relatórios de parada seguros:

{
  "customData": {
    "contentProvider": "test-provider",
    "userAgent": "PlayReady-Client/4.0",
    "playbackQuality": "HD",
    "geolocation": "US-WEST"
  }
}

Relatórios em lote

Envie vários relatórios de parada segura em uma única solicitação:

async function submitBatchReports(reports) {
    const batchData = {
        reports: reports,
        batchId: generateBatchId(),
        timestamp: new Date().toISOString()
    };
    
    const response = await fetch(`${serverUrl}/SubmitBatch`, {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(batchData)
    });
    
    return await response.json();
}

Monitorização e Análise

Análise de relatórios

O servidor de teste fornece pontos de extremidade de análise:

GET /pr/svc/securestop.asmx/Analytics?period=24h

A resposta inclui:

  • Total de relatórios recebidos
  • Tempo médio de processamento
  • Taxas de erro por tipo
  • Distribuição geográfica
  • Estatísticas de versão do cliente

Monitorização de Saúde

Monitore a integridade do servidor:

async function checkSecureStopServerHealth() {
    const response = await fetch('https://playready.directtaps.net/pr/svc/securestop.asmx/Health');
    return await response.json();
}

Melhores práticas

Implementação do Cliente

  1. Entrega confiável: implemente a lógica de repetição para envios com falha
  2. Suporte offline: relatórios de fila quando a rede não está disponível
  3. Validação de dados: valide os dados do relatório antes do envio
  4. Tratamento de erros: Manipule erros do servidor normalmente
  5. Privacidade: proteja dados confidenciais em relatórios

Recomendações de testes

  1. Cenários abrangentes: testar condições normais e de erro
  2. Teste de desempenho: Validar sob condições de carga
  3. Condições de rede: teste com vários cenários de rede
  4. Integridade dos dados: verifique a precisão dos dados do relatório
  5. Teste de segurança: Validar componentes criptográficos

Suporte e solução de problemas

Para problemas com a funcionalidade de parada segura:

  1. Verifique se a parada segura está ativada na licença
  2. Verificar o formato e a estrutura do relatório
  3. Validar a conectividade de rede com o servidor
  4. Revise a resposta do servidor para obter detalhes do erro
  5. Teste primeiro com cenários simplificados

Problemas comuns:

  • Erros de formato de relatório: formato binário ou estrutura inválida
  • Validação de assinatura: problemas de assinatura criptográfica
  • Tempos limite de rede: problemas de conectividade do servidor
  • Expiração da sessão: relatórios enviados tarde demais

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