Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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:
- O cliente inicia a sessão de reprodução
- A licença especifica os requisitos de parada segura
- O cliente gera dados de parada seguros durante a reprodução
- No final da sessão, o cliente envia um relatório de parada segura para o servidor
- 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
- Entrega confiável: implemente a lógica de repetição para envios com falha
- Suporte offline: relatórios de fila quando a rede não está disponível
- Validação de dados: valide os dados do relatório antes do envio
- Tratamento de erros: Manipule erros do servidor normalmente
- Privacidade: proteja dados confidenciais em relatórios
Recomendações de testes
- Cenários abrangentes: testar condições normais e de erro
- Teste de desempenho: Validar sob condições de carga
- Condições de rede: teste com vários cenários de rede
- Integridade dos dados: verifique a precisão dos dados do relatório
- Teste de segurança: Validar componentes criptográficos
Documentação relacionada
- Serviço do Servidor de Teste PlayReady - Visão geral do serviço principal
- Servidor de exclusão segura - Funcionalidade segura relacionada
- Versioned Servers - Informações sobre a versão do servidor
- PlayReady Test Servers - Documentação completa do servidor
Suporte e solução de problemas
Para problemas com a funcionalidade de parada segura:
- Verifique se a parada segura está ativada na licença
- Verificar o formato e a estrutura do relatório
- Validar a conectividade de rede com o servidor
- Revise a resposta do servidor para obter detalhes do erro
- 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 .