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.