Integracja z ExoPlayer

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.