En esta guía, se explica cómo migrar una app de Cast Receiver v2 a la versión más reciente de la Web App receptora.
El nuevo SDK del framework de aplicaciones (CAF) de Cast, también conocido como Web Receiver v3, se una actualización importante del SDK de la versión 2 del receptor. El SDK de receptor web proporciona un es un SDK sencillo y optimizado para desarrollar aplicaciones de receptor web multimedia.
El receptor web proporciona una API que es más coherente con el nuevo remitente de CAF APIs Proporciona la integración completa de un reproductor (MPL y Shaka) y implementación y compatibilidad con contenido multimedia de Cast y Asistente de Google comandos por voz. El SDK de CAF también proporciona una IU predeterminada a la que se puede ajustar el estilo fácilmente. con CSS, y un servicio de vinculación de datos para simplificar la implementación de IU.
¿Por qué migrar?
Mediante la migración de una aplicación Receiver v2 a Web Receiver, se genera una gran cantidad de código con el reproductor, para que puedas concentrarte en escribir la lógica empresarial específica de la aplicación.
CAF integra perfectamente los reproductores de MPL y Shaka para admitir una gama más amplia de tipos de contenido, incluidos HTTP Live Streaming (TS y CMAF), MPEG-DASH, Smooth La transmisión y los tipos admitidos por la propiedad fuente del elemento multimedia (MP3, MP4, Icecast, etc.). Para obtener una lista completa, consulta Contenido multimedia compatible con Google Cast. Actualmente, CAF no es compatible con un reproductor proporcionado por el usuario.
Si migras a CAF, se agregará la compatibilidad con el control por voz con Asistente de Google. Cualquier comando por voz nuevo de Asistente de Google será compatible automáticamente cuando con CAF.
Además de admitir nuevos comandos multimedia, como "cambiar pistas por idioma" y "cambiar velocidad de reproducción", CAF también ofrece una mejor fila de anuncios y una mejor asistencia en vivo.
¿Qué cambió?
La API de Web Receiver intenta seguir las convenciones que introdujo Remitentes de CAF para Android y iOS, y es muy diferente de v2.
El receptor web está usando un espacio de nombres nuevo
cast.framework
en lugar del espacio de nombres cast.receiver
para todas las APIs expuestas. Muchos de
los objetos de datos que se usaron en la v2 son los mismos en CAF y se exponen
el
cast.framework.messages
de espacio de nombres (la mayoría estaban en cast.receiver.media
).
Los siguientes servicios de la v2 se reemplazan por los servicios de CAF correspondientes:
- Se reemplazó la clase
CastReceiverManager
porCastReceiverContext
que es un singleton que administra la sesión de transmisión, los remitentes, y eventos del sistema global. ElCastReceiverOptions
se pueden usar para proporcionar opciones de aplicaciones globales (como cola, versión, configuración de reproducción, etc.) al contexto. - Se reemplazó la clase
MediaManager
porPlayerManager
que es una propiedad delCastReceiverContext
singleton y administra la sesión multimedia, las solicitudes multimedia, Solicitudes de voz de Asistente (CommandAndControlManager
en la versión 2), y activa eventos de medios. Configuración de los reproductores (cast.player.api.Host
en MPL) proporcionado porPlaybackConfig
, que se puede proporcionar globalmente o por solicitud de carga.
PlayerManager
también expone las nuevas clases de subadministrador:
TextTracksManager
: Administra pistas de texto multimedia.AudioTracksManager
: Administra las pistas de audio.QueueManager
: Administra la cola.BreakManager
: Administra los anuncios.
const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();
// Set global options.
const options = new cast.framework.CastReceiverOptions();
options.versionCode = DEVELOPERS_APP_VERSION;
context.start(options);
Lógica empresarial del receptor
Controladores de eventos expuestos del receptor v2 (como CastReceiverManager.onReady
o
MediaManager.onLoad
) para agregar lógica empresarial. En CAF, los controladores de eventos
reemplazado por objetos de escucha de eventos
(CastReceiverContext.addEventListener
)
e interceptores de mensajes
(PlayerManager.setMessageInterceptor
).
Un receptor web puede tener varios objetos de escucha de eventos para un evento (el objeto de escucha
no afecta el evento), y hay un interceptor por mensaje. El interceptor
puede actualizar la solicitud o controlarla (devolver una solicitud modificada, una
o un mensaje de error), y puede ser un controlador asíncrono que muestre una promesa.
El interceptor de solicitudes de carga es el lugar más común para agregar la lógica específica de la aplicación. Para las solicitudes de carga de un remitente, puede convertir Content ID en Content URL. El interceptor de carga también para solicitudes de precarga y almacenamiento en caché si no hay un interceptor explícito para la precarga o el almacenamiento en caché.
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD,
request => {
// Resolve entity to content id
if (request.media.entity && !request.media.contentId) {
return getMediaByEntity(request.media.entity).then(
media => {
request.media.contentId = media.url;
return request;
});
}
return request;
});
El controlador de estado multimedia personalizado v2 también se reemplaza por un mensaje
interceptor para el mensaje de estado del contenido multimedia. las apps receptoras web que no quieren
exponer la URL del contenido multimedia en el estado del contenido multimedia puede proporcionar un agente de resolución de URL
(PlayerManager.setMediaUrlResolver
),
que proporciona la URL de medios para una solicitud de carga. CAF usa esa URL
internamente y no se proporciona en el estado de contenido multimedia.
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.MEDIA_STATUS,
status => {
// Disable seek.
status.supportedMediaCommands &=
~cast.framework.messages.Command.SEEK
return status;
});
Eventos
Web Receiver ofrece un amplio conjunto de eventos,
CastReceiverContext
y
PlayerManager
Las apps de receptor web pueden tener varios objetos de escucha en cualquier evento.
también puede proporcionar un objeto de escucha
para varios eventos. (Consulta
cast.framework.events.category
para algunos grupos de eventos).
Los eventos abarcan cualquier solicitud del usuario, progreso de reproducción, procesamiento del reproductor y cualquier evento de elemento multimedia de bajo nivel (CAF no expone el elemento multimedia en sí)
La app receptora web puede agregar objetos de escucha de eventos para realizar acciones (por ejemplo, agregar texto hace un seguimiento de la definición cuando se completa la carga) o para las estadísticas.
// Log all media commands
playerManager.addEventListener(
cast.framework.events.category.REQUEST,
event => logEvent(event.type));
Bus de mensajes personalizado
CAF no expone el bus de mensajes en la API, sino que proporciona
CastReceiverContext.addCustomMessageListener
para agregar un objeto de escucha de mensajes a un espacio de nombres específico (solo uno por espacio de nombres) y
CastReceiverContext.sendCustomMessage
para enviar un mensaje en un espacio de nombres. Todos los espacios de nombres deben declararse antes
iniciar el receptor web (es decir, antes de llamar
CastReceiverContext.start
)
Los espacios de nombres se pueden declarar
un objeto de escucha de mensajes o puede proporcionarse como opción de inicio en
CastReceiverOptions.customNamespaces
const options = new cast.framework.CastReceiverOptions();
options.customNamespaces = {
CUSTOM_NS: cast.framework.system.MessageType.JSON
};
context.start(options);
context.sendCustomMessage(CUSTOM_NS, {
type: 'status'
message: 'Playing'
});
IU predeterminada
CAF proporciona una IU de receptor web predeterminada que muestra una barra de progreso de reproducción y
metadatos de medios según sea necesario. La IU predeterminada se proporciona como un elemento personalizado
(<cast-media-player>
)
que puede recibir un estilo similar al de CSS.
<style>
cast-media-player { --splash-image: url("splash.png"); }
</style>
<cast-media-player></cast-media-player>
Para una mayor personalización, una app receptora web puede implementar su propia IU. El
Web Receiver proporciona la
cast.framework.ui.PlayerDataBinder
para ayudar a vincular un objeto de IU con el estado de reproducción del receptor web.