Integrazione con ExoPlayer

Questo documento fornisce una panoramica dell'accodamento e dell'integrazione di DRM. assistenza in tempo reale.

Miglioramenti al DRM

La demo di Cast di ExoPlayer è stato aggiornato in modo da utilizzare un metodo strutturato per trasmettere la configurazione DRM utilizzando MediaInfo di ExoPlayer a un'applicazione ricevitore. L'esempio di Cast utilizza anche un ricevitore demo che include lo stesso codice in questa panoramica, di testare il supporto DRM. Tuttavia, se desideri che la trasmissione sia protetta da DRM contenuti, dovresti creare e ospitare i tuoi Web receiver (Ricevitore web).

Prima di iniziare, sarebbe utile acquisire familiarità con documentazione sul supporto DRM Google Cast ed ExoPlayer. Questa panoramica ti mostra come per collegare la configurazione DRM di ExoPlayer a un ricevitore web. Per informazioni sull'utilizzo di DRM in ExoPlayer, consulta il Sito web di ExoPlayer.

Fornire la configurazione DRM

L'app demo ExoPlayer contiene un codice campione che mostra come fornire DRM configurazione come parte di MediaItem. Le quattro opzioni che puoi configurare sono:

  • Intestazioni: un dizionario di intestazioni applicate alla richiesta HTTPS a recuperare la licenza DRM.
  • URL licenza: l'URL utilizzato per acquisire la licenza.
  • Protection System: lo schema di protezione DRM utilizzato per proteggere i contenuti; come Widevine.

La configurazione DRM che fornisci a ExoPlayer viene inviata al tuo ricevitore l'applicazione come proprietà in customData in MediaInformation come parte di una richiesta di caricamento. Per impostazione predefinita, questa proprietà è exoPlayerConfig, che corrisponde alla definizione riportata di seguito.

/**
 * 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;
  }
}

Configurazione iniziale

A seconda della soluzione DRM che utilizzi, potrebbe essere necessario configurare un licenseRequestHandler e un mediaPlaybackInfoHandler. licenseRequestHandler ti consente di personalizzare il modo in cui CAF richiede una licenza al server delle chiavi di licenza. La mediaPlaybackInfoHandler consente di modificare PlaybackConfig in base agli elementi multimediali se, ad esempio, ogni contenuto deve utilizzare un un URL del server licenze diverso.

Per acquisire una copia di ExoPlayerConfig da ciascun oggetto della richiesta di caricamento, crea un intercettatore della richiesta di carico nella tua applicazione SDK WebRicevir.

Il primo passaggio consiste nel registrare i tuoi gestori prima di avviare la trasmissione un'applicazione.

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});

Intercettore richieste di carico

L'intercettatore della richiesta di carico è un callback che ti consente di visualizzare e modificare Richiesta di caricamento della trasmissione prima che il CAF tenti di caricare un elemento multimediale. È importante prima del gestore della richiesta di licenza e del gestore delle informazioni sulla riproduzione dei contenuti multimediali.

L'intercettatore della richiesta di carico ha superato un LoadRequestData contenente l'Exo Player Config inviata dall'app. Puoi salva questo oggetto come variabile globale da utilizzare nel gestore delle richieste di licenza e gestore delle informazioni sulla riproduzione di contenuti multimediali.

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;
}

Gestore richieste di licenza

Il gestore delle richieste di licenza ti consente di personalizzare la richiesta HTTPS sul web Il ricevitore invia al server di licenze. Al gestore viene trasmesso un parametro NetworkRequestInfo che potrai utilizzare per aggiungere intestazioni HTTP, includere cookie modificare l'URL. Il gestore deve restituire questo oggetto.

Se, ad esempio, dovevi aggiungere intestazioni personalizzate alla tua richiesta di licenza, potresti creare un gestore di richieste di licenza simile a questo:

licenseRequestHandler(networkRequestInfo) {
    if (!exoPlayerConfig) {
        return networkRequestInfo;
    }

    networkRequestInfo.headers =
            exoPlayerConfig.headers ? exoPlayerConfig.headers : undefined;

    return networkRequestInfo;
}

Gestore delle informazioni sulla riproduzione dei contenuti multimediali

Il gestore delle informazioni sulla riproduzione dei contenuti multimediali ti consente di apportare modifiche alla tua riproduzione configurazione in base agli elementi multimediali. Al gestore viene trasmesso un parametro LoadRequestData e PlaybackConfig, dovresti restituire una configurazione di riproduzione. Il gestore delle informazioni sulla riproduzione dei contenuti multimediali prima che venga caricato ogni elemento che trasmetti. Se avevi URL di licenza per contenuti, e il sistema di protezione prima del caricamento.

mediaPlaybackInfoHandler(loadRequest, playbackConfig) {
    if (!exoPlayerConfig) {
        return;
    }

    playbackConfig.licenseUrl = exoPlayerConfig.licenseUrl ?
            exoPlayerConfig.licenseUrl :
            undefined;
    playbackConfig.protectionSystem = exoPlayerConfig.protectionSystem ?
            exoPlayerConfig.protectionSystem :
            undefined;

    return playbackConfig;
}

Ulteriori risorse

Ogni implementazione DRM è personalizzata e questo codice viene fornito a titolo dimostrativo . Consulta il tuo fornitore di DRM per assicurarti di avere implementato DRM nelle tue applicazioni ExoPlayer e Cast.

Documentazione aggiornata sulle funzionalità del sito web di ExoPlayer e annunci. È possibile che si verifichino problemi con ExoPlayer e la sua integrazione Cast segnalato sul GitHub di ExoPlayer repository Git.