Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Przegląd
Serwer bezpiecznego zatrzymania PlayReady udostępnia punkt końcowy testowy do sprawdzania poprawności funkcji bezpiecznego zatrzymywania w implementacjach PlayReady. Funkcja Secure Stop zapewnia, że dane śledzenia zużycia multimediów są bezpiecznie przesyłane od klientów do dostawców zawartości, umożliwiając dokładne monitorowanie użycia i raportowanie zgodności.
Punkt końcowy usługi
Serwer testowy Bezpiecznego zatrzymywania jest dostępny pod adresem:
https://playready.directtaps.net/pr/svc/securestop.asmx
Protokół Secure Stop
Omówienie protokołu
Funkcja Secure Stop umożliwia klientom bezpieczne raportowanie informacji końcowych sesji:
- Klient rozpoczyna sesję odtwarzania
- Licencja określa wymagania dotyczące bezpiecznego zatrzymywania
- Klient generuje dane bezpiecznego zatrzymania podczas odtwarzania
- Po zakończeniu sesji klient wysyła raport bezpiecznego zatrzymania na serwer
- Serwer weryfikuje i potwierdza potwierdzenie potwierdzenia
Przepływ komunikatów
Client License Server Secure Stop Server
| | |
|-- License Request -------->| |
|<-- License Response -------| |
| (with SecureStop URL) | |
| | |
| [Playback Session] | |
| | |
|-- Secure Stop Report ------|-------------------------->|
|<-- Acknowledgment ---------|---------------------------|
Konfiguracja serwera
Wymagania dotyczące bezpiecznego zatrzymywania
Konfigurowanie bezpiecznego zatrzymania w odpowiedziach na licencje:
{
"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"
}
}
}
Konfiguracja odpowiedzi serwera
Serwer obsługuje różne tryby odpowiedzi na potrzeby testowania:
{
"responseMode": "success|failure|timeout|partial",
"acknowledgmentDelay": 0,
"customData": {
"testScenario": "normal-operation"
}
}
Punkty końcowe interfejsu API
Przesyłanie raportu bezpiecznego zatrzymywania
Punkt końcowy:POST /pr/svc/securestop.asmx/SubmitReport
Format żądania:
POST /pr/svc/securestop.asmx/SubmitReport HTTP/1.1
Host: playready.directtaps.net
Content-Type: application/octet-stream
[Secure Stop Report Data - Binary Format]
Format odpowiedzi:
HTTP/1.1 200 OK
Content-Type: application/octet-stream
[Secure Stop Acknowledgment - Binary Format]
Stan raportu zapytania
Punkt końcowy:GET /pr/svc/securestop.asmx/QueryStatus
Format żądania:
GET /pr/svc/securestop.asmx/QueryStatus?sessionId=SESSION_ID HTTP/1.1
Host: playready.directtaps.net
Format odpowiedzi:
{
"sessionId": "session-identifier",
"status": "pending|received|processed|error",
"timestamp": "2024-01-15T10:30:00Z",
"reportSize": 1024,
"processingTime": 50
}
Scenariusze testowania
Podstawowe testowanie bezpiecznego zatrzymywania
Przetestuj normalny przepływ bezpiecznego zatrzymania:
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;
}
Testowanie obsługi błędów
Scenariusze błędów testowych:
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;
}
Testowanie wydajnościowe
Testowanie wydajności bezpiecznego zatrzymywania:
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
};
}
Integracja klienta
Implementacja języka 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');
Implementacja języka 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);
}
}
Format danych
Secure Stop Report Structure
Raport bezpiecznego zatrzymywania zawiera następujące elementy:
- Identyfikator sesji: unikatowy identyfikator sesji
- Identyfikator zawartości: zawartość zużywana
- Dane użycia: czas trwania odtwarzania, jakość itp.
- Informacje o urządzeniu: szczegóły urządzenia klienckiego
- Informacje o sygnaturze czasowej: czas rozpoczęcia/zakończenia sesji
- Podpis cyfrowy: kryptograficzny dowód autentyczności
Walidacja raportu
Serwer weryfikuje raporty dla:
- Integralność formatu: poprawna struktura binarna
- Podpis cyfrowy: Autentyczność kryptograficzna
- Ważność sesji: prawidłowe parametry sesji
- Dokładność znacznika czasu: rozsądne wartości czasu
- Wykrywanie duplikatów: zapobieganie zduplikowanych przesłanych danych
Funkcje zaawansowane
Obsługa danych niestandardowych
Uwzględnij dane niestandardowe w raportach bezpiecznego zatrzymania:
{
"customData": {
"contentProvider": "test-provider",
"userAgent": "PlayReady-Client/4.0",
"playbackQuality": "HD",
"geolocation": "US-WEST"
}
}
Raportowanie wsadowe
Przesyłanie wielu raportów bezpiecznego zatrzymania w jednym żądaniu:
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();
}
Monitorowanie i analiza
Analiza raportów
Serwer testowy udostępnia punkty końcowe analizy:
GET /pr/svc/securestop.asmx/Analytics?period=24h
Odpowiedź obejmuje:
- Łączna liczba odebranych raportów
- Średni czas przetwarzania
- Współczynniki błędów według typu
- Dystrybucja geograficzna
- Statystyki wersji klienta
Monitorowanie kondycji
Monitorowanie kondycji serwera:
async function checkSecureStopServerHealth() {
const response = await fetch('https://playready.directtaps.net/pr/svc/securestop.asmx/Health');
return await response.json();
}
Najlepsze praktyki
Wdrożenie klienta
- Niezawodne dostarczanie: zaimplementuj logikę ponawiania prób dla przesłanych nieudanych prób
- Obsługa w trybie offline: raporty kolejki, gdy sieć jest niedostępna
- Weryfikacja danych: weryfikowanie danych raportu przed przesłaniem
- Obsługa błędów: obsługa błędów serwera w sposób elastyczny
- Prywatność: Ochrona poufnych danych w raportach
Zalecenia dotyczące testowania
- Kompleksowe scenariusze: Testowanie normalnych i błędów
- Testowanie wydajności: weryfikowanie pod warunkami obciążenia
- Warunki sieciowe: testowanie przy użyciu różnych scenariuszy sieciowych
- Integralność danych: weryfikowanie dokładności danych raportu
- Testowanie zabezpieczeń: weryfikowanie składników kryptograficznych
Powiązana dokumentacja
- PlayReady Test Server Service — omówienie głównej usługi
- Bezpieczny serwer usuwania — powiązana funkcja zabezpieczeń
- Serwery z wersjami — informacje o wersji serwera
- Serwery testowe PlayReady — kompletna dokumentacja serwera
Pomoc techniczna i rozwiązywanie problemów
W przypadku problemów z funkcją bezpiecznego zatrzymywania:
- Sprawdzanie, czy bezpieczny zatrzymanie jest włączone w licencji
- Sprawdzanie formatu i struktury raportu
- Weryfikowanie łączności sieciowej z serwerem
- Przejrzyj odpowiedź serwera, aby uzyskać szczegółowe informacje o błędzie
- Najpierw przetestuj przy użyciu uproszczonych scenariuszy
Typowe problemy:
- Błędy formatu raportu: nieprawidłowy format binarny lub struktura
- Walidacja podpisu: problemy z podpisem kryptograficznym
- Limity czasu sieci: problemy z łącznością serwera
- Wygaśnięcie sesji: raporty przesłane za późno
Aby uzyskać dodatkową pomoc techniczną, zapoznaj się z główną dokumentacją serwerów testowych PlayReady .