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.