Integración con ExoPlayer

En este documento, se brinda una descripción general de las colas y la integración de DRM y asistencia.

Mejoras de DRM

La demostración de transmisión de ExoPlayer se actualizó para utilizar una forma estructurada de pasar la configuración de DRM mediante MediaInfo de ExoPlayer a una aplicación receptora La muestra de Cast también usa un receptor de demostración que incluye el mismo código en esta descripción general, lo que permite que pruebes la compatibilidad con DRM. Sin embargo, si deseas transmitir contenido protegido por DRM de red, debes crear y alojar tu propio Receptor Web.

Antes de comenzar, te recomendamos que te familiarices con los documentación sobre la compatibilidad de DRM en Google Cast y ExoPlayer. Esta descripción general te mostrará para conectar la configuración de DRM de ExoPlayer a un receptor web. Información sobre cómo usar DRM en ExoPlayer, consulta el Sitio web de ExoPlayer.

Proporcionar la configuración de DRM

La app de demostración de ExoPlayer contiene código de muestra que indica cómo proporcionar DRM configuración como parte de un objeto MediaItem. Estas son las cuatro opciones que puedes configurar:

  • Encabezados: un diccionario de encabezados que se aplican a la solicitud HTTPS para recuperar la licencia de DRM.
  • URL de la licencia: La URL que se usó para adquirir la licencia.
  • Sistema de protección: Es el esquema de protección de DRM que se usa para proteger el contenido. por ejemplo, Widevine.

La configuración de DRM que proporcionas a ExoPlayer se envía a tu receptor aplicación como una propiedad en customData en MediaInformation como parte de una solicitud de carga. De forma predeterminada, esta propiedad se llama exoPlayerConfig, que coincide con la siguiente definición.

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

Configuración inicial

Según la solución de DRM que uses, es posible que debas configurar un licenseRequestHandler y un mediaPlaybackInfoHandler. licenseRequestHandler te permite personalizar cómo la CAF solicita una licencia a tu servidor de claves de licencia. El mediaPlaybackInfoHandler te permite modificar el PlaybackConfig por elemento multimedia si, por ejemplo, cada elemento de contenido tiene que usar un una URL de servidor de licencias diferente.

Para capturar una copia del ExoPlayerConfig de cada objeto de solicitud de carga, crea un interceptor de solicitudes de carga en la aplicación del SDK del receptor web.

El primer paso es registrar los controladores antes de iniciar la transmisión y mantener la integridad de su aplicación.

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

Interceptor de solicitudes de carga

El interceptor de solicitudes de carga es una devolución de llamada que te permite ver y modificar un Solicitud de carga de transmisión antes de que CAF intente cargar un elemento multimedia. Es importante destacar que se llama antes del controlador de solicitudes de licencias y del controlador de información de reproducción multimedia.

Al interceptor de solicitud de carga se le pasa un LoadRequestData. que contenga la configuración de Exo Player que envió tu app. Puedes guarda este objeto como una variable global para usarlo en tu controlador de solicitudes de licencia y el controlador de información de reproducción multimedia.

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

Controlador de solicitudes de licencia

El controlador de solicitudes de licencia te permite personalizar la solicitud HTTPS que realiza el receptor a tu servidor de licencias. Al controlador se le pasa un NetworkRequestInfo. que puedes usar para agregar encabezados HTTP, incluir cookies o incluso modificar la URL. El controlador debería mostrar este objeto.

Si, por ejemplo, necesitas agregar encabezados personalizados a tu solicitud de licencia, podría crear un controlador de solicitudes de licencia similar al siguiente:

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

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

    return networkRequestInfo;
}

Controlador de información de reproducción de contenido multimedia

El controlador de información de reproducción de contenido multimedia te permite modificar la reproducción predeterminada por elemento multimedia. Al controlador se le pasa un LoadRequestData. y un PlaybackConfig, deberías mostrar una configuración de reproducción. El controlador de información de reproducción multimedia será llamado antes de que se cargue cada elemento que transmitas. Si tuvieras URLs de licencia por contenido, para cambiarlas y el sistema de protección antes de la carga.

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

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

    return playbackConfig;
}

Más recursos

Cada implementación de DRM es personalizada, y este código se proporciona a modo de demostración. solamente. Debes consultar a tu proveedor de DRM para asegurarte de que implementado DRM en tus aplicaciones de ExoPlayer y Cast.

El sitio web de ExoPlayer incluye documentación actualizada. y anuncios. Los problemas con ExoPlayer y su integración de Cast pueden informada en GitHub de ExoPlayer en un repositorio de confianza.