Ten dokument zawiera omówienie procesu kolejkowania i integracji z DRM .
Ulepszenia DRM
Prezentacja obsady ExoPlayer
został zaktualizowany, by w uporządkowany sposób przekazywać konfigurację DRM za pomocą
MediaInfo ExoPlayer do aplikacji odbiornika. Próbka Cast
korzysta też z odbiornika demonstracyjnego, który zawiera ten sam kod w tym przeglądzie, co pozwala
do przetestowania obsługi DRM. Jeśli jednak chcesz przesyłać treści chronione przez DRM
należy tworzyć i hostować własne treści,
Odbiornik internetowy.
Zanim zaczniesz, warto zapoznać się z dokumentacji na temat obsługi DRM w Google Cast i ExoPlayer. Z tego omówienia dowiesz się, by podłączyć konfigurację DRM ExoPlayer do odbiornika internetowego. Informacje na temat na temat korzystania z DRM w ExoPlayer znajdziesz Strona ExoPlayer.
Udostępniam konfigurację DRM
Aplikacja demonstracyjna ExoPlayer zawiera przykładowy kod, który pokazuje, jak zapewnić DRM w ramach elementu MediaItem. Dostępne są 4 opcje:
- Nagłówki – słownik nagłówków stosowanych w żądaniu HTTPS w pobrania licencji DRM.
- URL licencji – adres URL używany do pozyskania licencji.
- Protection System – schemat zabezpieczeń DRM używany do ochrony treści, np. Widevine.
Konfiguracja DRM ustawiona dla ExoPlayer jest wysyłana do odbiornika.
aplikacji jako usługi w: customData w systemie MediaInformation
jako część żądania wczytywania. Domyślnie ta właściwość nosi nazwę
exoPlayerConfig, która pasuje do tej definicji.
/**
* Extended configuration settings for ExoPlayer.
*/
ExoPlayerConfig class {
constructor() {
/**
* Dictionary of headers to apply to the license request.
* @type {!Object|undefined}
*/
this.headers;
/**
* The URL for your DRM server.
* @type {string|undefined}
*/
this.licenseUrl;
/**
* Preferred protection system to use for decrypting content.
* @type {!cast.framework.ContentProtection|undefined}
*/
this.protectionSystem;
/**
* Indicates whether CORS Access-Control requests should be made using
* credentials such as cookies or authorization headers.
*
* If withCredentials is set to true then Access-Control-Allow-Origin cannot
* be set to '*'.
* @type {boolean|undefined}
*/
this.withCredentials;
}
}
Konfiguracja początkowa
W zależności od używanego rozwiązania DRM konieczne może być skonfigurowanie licenseRequestHandler
i mediaPlaybackInfoHandler. licenseRequestHandler umożliwia dostosowywanie
jak CAF żąda licencji od serwera klucza licencji.
mediaPlaybackInfoHandler umożliwia modyfikowanie
PlaybackConfig.
osobno dla każdego elementu multimedialnego, jeśli na przykład każdy fragment treści musi mieć
inny adres URL serwera licencji.
Aby przechwycić kopię instancji ExoPlayerConfig z każdego obiektu żądania wczytywania, utwórz
może przechwytywać żądania wczytywania w aplikacji pakietu SDK usługi Web Receiver.
Pierwszym krokiem jest zarejestrowanie modułów obsługi przed rozpoczęciem przesyłania. aplikacji.
const context = cast.framework.CastReceiverContext.getInstance();
const playbackConfig = new cast.framework.PlaybackConfig();
playbackConfig.licenseRequestHandler =
licenseRequestHandler;
context.getPlayerManager().setMediaPlaybackInfoHandler(
mediaPlaybackInfoHandler);
context.getPlayerManager().setMessageInterceptor(
cast.framework.messages.MessageType.LOAD,
loadInterceptor);
// starts the Cast application
context.start({playbackConfig: playbackConfig});
Przechwytujący żądania obciążenia
Przechwytujący żądania obciążenia to wywołanie zwrotne, które umożliwia wyświetlanie i modyfikowanie Żądanie wczytania danych przesyłanych przed próbą wczytania elementu multimedialnego przez CAF. Co ważne, przed modułem do obsługi próśb o licencję i modułem obsługi informacji o odtwarzaniu multimediów.
Moduł przechwytujący żądania obciążenia jest przekazywany do LoadRequestData
obiekt zawierający konfigurację Exo Playera wysłaną przez Twoją aplikację. Dostępne opcje
zapisz ten obiekt jako zmienną globalną do użycia w module obsługi żądań licencji
i informacji o odtwarzaniu multimediów.
loadInterceptor(loadRequestData) {
// not every load request will have a customData object
if (loadRequestData.media && loadRequestData.media.customData &&
loadRequestData.media.customData['exoPlayerConfig']) {
// exoPlayerConfig is a global variable here
exoPlayerConfig =
loadRequestData.media.customData['exoPlayerConfig'];
}
// you must return the loadRequestData object
return loadRequestData;
}
Moduł obsługi żądań licencji
Moduł obsługi żądań licencji pozwala dostosować żądania HTTPS w internecie
Odbiornik przesyła do serwera licencji. Moduł obsługi przekazuje NetworkRequestInfo
którego można użyć, aby dodać nagłówki HTTP, pliki cookie, a nawet
zmienić go. Moduł obsługi powinien zwrócić ten obiekt.
Jeśli na przykład do żądania licencji konieczne było dodanie niestandardowych nagłówków, może utworzyć moduł obsługi żądania licencji podobny do tego:
licenseRequestHandler(networkRequestInfo) {
if (!exoPlayerConfig) {
return networkRequestInfo;
}
networkRequestInfo.headers =
exoPlayerConfig.headers ? exoPlayerConfig.headers : undefined;
return networkRequestInfo;
}
Moduł obsługi informacji o odtwarzaniu multimediów
Moduł obsługi informacji o odtwarzaniu multimediów umożliwia wprowadzanie zmian w odtwarzaniu
dla każdego elementu multimedialnego. Moduł obsługi przekazuje LoadRequestData
oraz PlaybackConfig,
zwróci konfigurację odtwarzania. Moduł obsługi informacji o odtwarzaniu multimediów będzie
jest wywoływana przed każdym załadowaniem przesyłanego elementu. Jeśli masz adresy URL licencji na treść,
aby je zmienić, jak również system ochrony przed wczytaniem danych.
mediaPlaybackInfoHandler(loadRequest, playbackConfig) {
if (!exoPlayerConfig) {
return;
}
playbackConfig.licenseUrl = exoPlayerConfig.licenseUrl ?
exoPlayerConfig.licenseUrl :
undefined;
playbackConfig.protectionSystem = exoPlayerConfig.protectionSystem ?
exoPlayerConfig.protectionSystem :
undefined;
return playbackConfig;
}
Dodatkowe zasoby
Każda implementacja DRM jest niestandardowa, a kod ten jest przedstawiany jako przykład. Skonsultuj się z dostawcą systemu DRM, aby upewnić się, że ustawienia w aplikacjach ExoPlayer i Cast wprowadzono DRM.
Witryna ExoPlayer zawiera aktualną dokumentację i ogłoszeń. Problemy z odtwarzaczem ExoPlayer i integracją Cast mogą zgłoszone w GitHubie firmy ExoPlayer z repozytorium.