Resumen
Con Google Cast tecnología, puede iniciar y controlar el contenido de video transmitido desde sus dispositivos móviles a televisores de alta definición y sistemas de audio en el hogar. Desde su aplicación, toque el botón Transmitir para transmitir su contenido en una pantalla grande.
Para crear una aplicación Cast, necesita los siguientes componentes:
-
A solicitud de remitente - Esto reside en su dispositivo móvil y detecta dispositivos receptores, establece una conexión segura y refleja su contenido. La aplicación del remitente es el reproductor local que se utiliza para transmitir contenido a la aplicación del receptor en su dispositivo Chromecast. Después de enviar contenido a la aplicación del receptor, puede pensar en él como un control remoto para Chromecast.
La aplicación de remitente la proporciona el complemento Cast para Brightcove Native SDK para Android. Lo aprenderás en este tema.
-
A aplicación del receptor - Esta aplicación se ejecuta en el dispositivo Chromecast. Se puede considerar como una aplicación HTML de una sola página con elementos CSS y JavaScript.
Para realizar la prueba, siga estos pasos:
- Empezar con Receptor de transmisión de muestra de Google
- Revisar Aplicaciones de Google Cast documentación
Para uso en producción, este documento ilustrará cómo utilizar Brightcove Receiver v2.0.0.
Versión de SDK compatible
Para usar el complemento Cast con el nuevo Brightcove Receiver v2.0, debe usar Brightcove Native SDK para Android versión 6.16.0 y superior.
Comprender el complemento Cast
El complemento Cast está construido sobre el nueva extensión ExoPlayer Cast y el marco de transmisión de servicios de Google Play. Después de agregar la dependencia del complemento de transmisión, gradle extraerá la dependencia de Play Services Cast Framework, la dependencia de ExoPlayer Cast Extension junto con otras dependencias necesarias.
El complemento Cast se ha rediseñado para minimizar su esfuerzo al integrarse con Video Cloud. Al utilizar Video Cloud, el BrightcoveCastMediaManager
La clase recopila información de la respuesta de Video Cloud, como Brightcove Video
y Source
objetos, cada vez que el EventType.SET_SOURCE
se emite el evento. Esta información se almacena en caché y está lista para usar cuando el usuario selecciona reproducir para poner el video en cola.
Integrando el complemento Cast
Hay dos formas de integrar su aplicación con el complemento Native SDK para Android Cast. Puede integrarse con Brightcove Cast Receiver v2.0 o con Google Cast Demo Receiver.
Para cualquier integración, debe agregar esta dependencia a su proyecto de aplicación:
implementation "com.brightcove.player:android-cast-plugin:6.16.0"
Uso del receptor Brightcove Cast v2.0
Esta integración está destinada a los clientes de Brightcove que utilizan las API de Brightcove para entregar su contenido.
Para obtener una muestra de código completa, consulte la BasicCastBrightcoveReceiverSampleApp.
Uso del receptor de demostración de Google Cast
Esta integración está destinada a los clientes de Brightcove que son nuevos en la fundición.
Para obtener una muestra de código completa, consulte la BasicCastGoogleReceiverSampleApp.
Especificación de su propio ID de aplicación de receptor de transmisión
La BasicCastGoogleReceiverSampleApp establece un ID de aplicación del receptor de demostración de Google, que puede ser útil para comenzar y realizar pruebas, pero no para la producción.
Para anular este valor con su aplicación Cast Receiver, defina el siguiente valor de cadena en la aplicación de muestra strings.xml expediente:
<string name="cast_receiver_app_id">4F8B3483</string>
El componente GoogleCast de Brightcove
La GoogleCastComponent
class es la clase principal del complemento Brightcove Cast. Crea una instancia de ExoPlayer CastPlayer y establece sus oyentes. Expone algunos métodos esenciales para cargar un video o agregarlo a la cola. La GoogleCastComponent
class también agrega varios detectores de eventos de Brightcove para manejar eventos de ciclo de vida de actividad y fragmentos, así como otros detectores de eventos que puede usar para emitir información multimedia para cargar un video en su dispositivo Chromecast.
La GoogleCastComponent
ahora usa un patrón Builder. En las versiones del SDK nativo para Android anteriores a la v6.16.0, era necesario crear una instancia del componente y pasar el Context
y EventEmitter
hacia GoogleCastComponent
constructor. Luego, establecería las opciones del componente en una serie de llamadas de método separadas.
A partir del SDK nativo para Android v6.16.0, use el patrón Builder para crear una instancia del GoogleCastComponent
y establezca sus opciones, todo dentro de una única cadena de llamadas al método Builder.
CustomData
Como con el GoogleCastComponent
, la CustomData
La clase usa un patrón Builder para instanciar el objeto y agregarle propiedades. Si bien el receptor Brightcove puede utilizar CustomData
para recuperar videos de su catálogo de Brightcove, no es necesario enviar un CustomData
objeto, como para enviar un recurso remoto. También es importante tener en cuenta que cuando se utiliza el receptor de demostración de Google, el uso de CustomData
no es apoyado. Para los propósitos de esta discusión, nos centraremos en CustomData
enviado al receptor utilizado para recuperar los datos de vídeo del catálogo de Brightcove.
¿Qué es CustomData?
CustomData
es un objeto JSON contenido en el MediaInfo
objeto. Su uso previsto es con la aplicación Brightcove Cast Receiver v2.0.
CustomData con Brightcove Receiver y Catalog Data
Al integrarse con Brightcove Receiver, el CustomData
El objeto JSON tomará esta forma:
"customData": {
"accountId": "1234567890",
"analyticsParams": {
"application": "com.brightcove.player.test",
"user": "abcde1c44b951234"
},
"catalogParams": {
"adConfigId": null,
"type": "video",
"bcovAuthToken": null,
"id": "2345678901",
"policyKey": "BCpkPolicyKeyObject"
}
}
La CustomData
El ejemplo de objeto anterior contiene todos los elementos de datos necesarios para transmitir un video desde Brightcove Receiver. Estos datos son los mismos independientemente del cifrado, es decir, no hay una estructura adicional necesaria para la URL de la licencia en el caso de los videos DRM.
También puede encontrar un ejemplo de CustomData
objeto en el BrightcoveCastBrightcoveReceiverSampleApp.
CustomData con el receptor de demostración de Google
Como se indicó anteriormente, CustomData
no es compatible con el receptor de demostración de Google.
BrightcoveCastMediaManager
Es posible ampliar el BrightcoveCastMediaManager
, como se muestra arriba, para anular sus métodos o implementar los suyos propios. Para ver ejemplos de cómo extender la clase BrightcoveCastMediaManager, consulte lo siguiente:
- Amplíe la sección BrightcoveCastMediaManager
- BasicCastCustomRemoteVideoSampleApp
OpcionesProveedor
A continuación, debe especificar el OpcionesProveedor implementación para el marco de Google Cast. La OptionsProvider
La interfaz ayuda a configurar varias opciones necesarias para inicializar el CastContext clase. Aquí es donde configurará el ID de la aplicación del receptor de transmisión. Para obtener más información sobre la integración de OptionsProvider
, ver Google's Inicializar el contexto de transmisión documento.
El complemento Brightcove Cast incluye un DefaultOptionsProvider
clase, donde el ID de la aplicación del receptor de transmisión se establece a través de una clave de cadena establecida en el strings.xml archivo de recursos. Para obtener más detalles y aprender cómo anularlo en su aplicación, consulte la Uso de su propia ID de aplicación del receptor Cast sección anterior.
Ya sea que use el DefaultOptionsProvider
clase o la tuya OptionsProvider
implementación, necesita establecer el OptionsProvider
nombre de la clase de implementación en la aplicación AndroidManifest.xml archivo como metadatos de par clave-valor, como se muestra aquí:
<meta-data android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME" android:value="com.brightcove.cast.DefaultOptionsProvider" />
Si usa el DefaultOptionsProvider
clase, puede configurar el ExpandedControllerActivity
para activar / desactivar la notificación de transmisión mediante la configuración de información de metadatos similar en su AndroidManifest.
Actividad del controlador ampliada
La ExpandedControllerActivity viene con la biblioteca de Google Cast y le permite controlar el video que se transmite en su dispositivo Chromecast. Esta clase proporciona cierta flexibilidad de personalización. Por ejemplo, hay cinco espacios disponibles para mostrar botones, donde el tercer espacio está reservado para el botón Reproducir no configurable. El resto de los botones se pueden configurar como otros botones predefinidos o como sus propios botones personalizados.
El complemento Brightcove Cast proporciona la subclase DefaultExpandedControllerActivity
. Hemos habilitado los siguientes botones en el siguiente orden:
- Subtítulos
- Saltar anterior
- Tocar
- Omitir próximo
- Alternar silencio
Además, la barra de búsqueda establece el mismo elemento de diseño predeterminado que se utiliza en el estándar. BrightcoveMediaController
:
- El Progreso Dibujable:
R.drawable.default_scrubber_progress_horizontal
- El pulgar dibujable:
R.drawable.default_scrubber_thumb
Para saber cómo personalizar la barra de búsqueda, consulte la SeekBarColorsSampleApp.
Para configurar el DefaultExpandedControllerActivity
o el tuyo ExpandedControllerActivity
, configure los siguientes metadatos en su AndroidManifest.xml expediente:
<meta-data android:name="com.brightcove.cast.DefaultOptionsProvider.EXPANDED_CONTROLLER_ACTIVITY_CLASS_NAME"
android:value="com.brightcove.cast.DefaultExpandedControllerActivity" />
Notificación de reparto
Cuando la Notificación de transmisión está habilitada, la notificación aparecerá cuando transmita un video y ponga su aplicación en segundo plano; por ejemplo, después de presionar la tecla de inicio.
<pPara habilitar la notificación de transmisión, configure los siguientes metadatos en su AndroidManifest.xml y proporcione el nombre de la actividad que se iniciará cuando se haga clic en la notificación:
<meta-data android:name="com.brightcove.cast.DefaultOptionsProvider.NOTIFICATION_TARGET_ACTIVITY_CLASS_NAME"
android:value="com.brightcove.cast.BrightcoveControllerActivity" />
Si no proporciona com.brightcove.cast.DefaultOptionsProvider.NOTIFICATION_TARGET_ACTIVITY_CLASS_NAME o si el valor tiene un nombre de actividad no válido, la notificación de transmisión se desactivará.
El botón Cast
El botón de transmisión le permite seleccionar un dispositivo Chromecast en la misma red que su dispositivo y le permite conectarse y crear una sesión. Para agregar el botón de transmisión a su aplicación, siga las instrucciones de Google Integrar elenco: Agregar un botón para transmitir documento.
El complemento Brightcove Cast proporciona un método de utilidad para configurar fácilmente el botón Cast. Esto es útil cuando solo desea agregar el botón Transmitir al menú Actividad / Fragmento. Consulte el siguiente código para obtener más detalles:
//Activity
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
GoogleCastComponent.setUpMediaRouteButton(MainActivity.this, menu);
return true;
}
El mini controlador
El Mini Controlador es un Fragmento que se adjunta a su Actividad, generalmente ubicado en la parte inferior del diseño. El mini controlador le permite reproducir y pausar el video e indica cuándo se está reproduciendo un video en su dispositivo Chromecast. Cuando se hace clic en el minicontrolador, se inicia el controlador expandido.
Para habilitar el minicontrolador, agregue el siguiente código al diseño de su actividad.
<fragment
android:id="@+id/castMiniController"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:visibility="gone"
class="com.google.android.gms.cast.framework.media.widget.MiniControllerFragment" />
Para conocer las mejores prácticas con el minicontrolador, consulte la Lista de verificación de diseño: Mini controlador del remitente documento. Para obtener detalles sobre la implementación, consulte la Integrar elenco: Agregar mini controlador documento.
Temas avanzados
Escuchando la sesión de Cast
Si desea que su aplicación reaccione cuando la conexión de Cast comience o finalice, puede agregar el GoogleCastEventType.CAST_SESSION_STARTED
o GoogleCastEventType.CAST_SESSION_ENDED
oyentes de eventos como se muestra aquí:
eventEmitter.on(GoogleCastEventType.CAST_SESSION_STARTED, new EventListener() {
@Override
public void processEvent(Event event) {
// Session Started
}
});
eventEmitter.on(GoogleCastEventType.CAST_SESSION_ENDED, new EventListener() {
@Override
public void processEvent(Event event) {
// Session Ended
}
});
Alternativamente, puede llamar GoogleCastComponent.isSessionAvailable()
para comprobar si hay una sesión disponible.
Transmisión de un video
Para transmitir un video a Chromecast después de una conexión exitosa, puede usar EventEmitter y emitir la información de información multimedia o puede usar directamente el GoogleCastComponent
métodos.
Si prefiere emitir la información multimedia, puede utilizar los siguientes eventos:
GoogleCastEventType.LOAD_MEDIA_INFO
GoogleCastEventType.LOAD_MEDIA_QUEUE_ITEM
GoogleCastEventType.ADD_MEDIA_INFO
GoogleCastEventType.ADD_MEDIA_QUEUE_ITEM
La siguiente tabla muestra las propiedades esperadas para cada evento:
Nombre del evento | Propiedades | |
---|---|---|
Clave | Tipo de clase de valor | |
LOAD_MEDIA_INFO |
GoogleCastComponent.CAST_MEDIA_INFO GoogleCastComponent.CAST_MEDIA_PLAY_POSITION |
MediaInfo Entero |
LOAD_MEDIA_QUEUE_ITEM |
GoogleCastComponent.CAST_MEDIA_QUEUE_ITEM |
MediaQueueItem |
ADD_MEDIA_INFO |
GoogleCastComponent.CAST_MEDIA_INFO GoogleCastComponent.CAST_MEDIA_PLAY_POSITION |
MediaInfo Entero |
ADD_MEDIA_QUEUE_ITEM |
GoogleCastComponent.CAST_MEDIA_QUEUE_ITEM |
MediaQueueItem |
Alternativamente, puede utilizar lo siguiente GoogleCastComponent
métodos:
-
public void loadMediaInfo(MediaInfo mediaInfo, long positionMs)
-
public void loadMediaInfo(MediaInfo mediaInfo)
-
public PendingResult<RemoteMediaClient.MediaChannelResult> loadItem(MediaQueueItem mediaQueue, int playheadPosition)
-
public PendingResult<RemoteMediaClient.MediaChannelResult> addItems(MediaQueueItem... mediaQueue )
Cambiar los datos de MediaInfo predeterminados
De forma predeterminada, el complemento Cast recopila información sobre el objeto de fuente y video actual emitido por el EventType.SET_SOURCE event
. Si desea cambiar o agregar información adicional, como agregar un objeto JSON personalizado a su MediaInfo
que el receptor de la aplicación entienda, puede hacerlo sobrescribiendo el loadMediaInfo()
y addMediaInfo()
métodos de la BrightcoveCastMediaManager
. Entonces tu BrightcoveCastMediaManager
La subclase se pasa como un parámetro de constructor a la GoogleCastComponent
clase.
Dentro de estos métodos, puede crear su MediaInfo
objetos y emitir los eventos apropiados como se mostró anteriormente. Asegúrate de comprobar com.brightcove.cast.util.CastMediaUtil
, ya que proporciona algunos métodos de utilidad para crear un MediaInfo
de los objetos Video y Source.
Configuración de Cast MediaController
Para cambiar el diseño del controlador que aparece en Brightcove Video View cuando se inicia una sesión de Cast, siga estos pasos.
- Amplíe BrightcoveCastMediaManager
- Establecer MediaControllerConfig
- Sobrescribir la configuración de la barra de control
Amplíe BrightcoveCastMediaManager
Para cambiar el comportamiento predeterminado del BrightcoveCastMediaManager
, cree una subclase y sobrescriba algunos métodos clave:
-
public void updateBrightcoveMediaController(boolean isRemote)
Este método es llamado por el
GoogleCastComponent
cuando cambia la sesión; es decir, cuando la sesión ha comenzado o ha finalizado. Cuando la sesión ha comenzado, elisRemote
el parámetro serátrue
y elsetupRemoteController
se llama al método. De lo contrario, elisRemote
estaránfalse
y elresetToLocalController
se llama. -
protected void setupRemoteController()
Este método emite el evento
EventType.SET_MEDIA_CONTROLLER_CONFIG
con elMediaControllerConfig
objeto. Hablaremos mas deMediaControllerConfig
más adelante en esta sección. Este método también escucha elBrightcoveMediaController.CONTROL_BAR_CREATED
evento y reacciona llamando alsetupBrightcoveControlBar
método. -
protected void resetToLocalController()
Este método es responsable de restablecer el
BrightcoveMediaController
al diseño del controlador original emitiendo elEventType.RESTORE_DEFAULT_MEDIA_CONTROLLER
. -
protected void setupBrightcoveControlBar(BrightcoveControlBar controlBar)
Una vez el
BrightcoveMediaController
ha sido recreado con el diseño proporcionado en elMediaControllerConfig
, tendrás acceso a laBrightcoveControlBar
vista. Desde aquí, puede acceder a las vistas de la interfaz de usuario, como los botones, donde puede agregarOnClickListener
es para ellos.
Establecer MediaControllerConfig
La MediaControllerConfig
es una clase de configuración que puede utilizar para cambiar el diseño de control predeterminado del BrightcoveMediaController
clase. En esta clase, puede establecer el diseño y la OnTouchListener
. Una vez creado y configurado, puede emitir este objeto como se muestra a continuación:
Map<String, Object> properties = new HashMap<>();
properties.put(Event.MEDIA_CONTROLLER_CONFIG, myMediaControllerConfig);
eventEmitter.emit(EventType.SET_MEDIA_CONTROLLER_CONFIG,properties);
El valor por defecto MediaControllerConfig
objeto establece el R.layout.cast_media_controller
como el diseño con un solo Tocar botón. Al hacer clic, se abrirá un cuadro de diálogo con dos opciones:
- Reproducir ahora - Cuando se selecciona, el
loadMediaInfo()
se llama al método y el video se cargará y reproducirá en Chromecast. - Añadir a la cola - Cuando se selecciona, el
addMediaInfo()
se llama al método y el video se agrega al final de la cola.
Sobrescribir la configuración de la barra de control
Cuando el diseño de su controlador de medios se establece emitiendo el MediaControllerConfig
, la BrightcoveControlBar
se creará la vista y BrightcoveCastMediaManager.setupBrightcoveControlBar()
se llamará al método. Es aquí donde puede obtener los componentes de la interfaz de usuario por Id y agregar los oyentes adecuados.
@Override
protected void setupBrightcoveControlBar(BrightcoveControlBar controlBar) {
Button playButton = controlBar.findViewById(R.id.cast_play);
if (playButton != null) {
playButton.setOnClickListener(new View.OnClickListener() {...});
}
}
Problemas conocidos
Android 9
Cuando utilice Chromecast con Android 9 y superior, debe incluir un FOREGROUND_SERVICE
permiso. Esto permite que la aplicación use notificaciones para controlar una sesión de transmisión cuando la aplicación está en segundo plano y se devuelve al primer plano.
La uses-permission
la etiqueta debe agregarse a la aplicación AndroidManifest.xml archivo, de la siguiente manera:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
Servicios de Google Play
Es posible que no se cree la conexión de transmisión si la versión de Google Play Services del remitente no está actualizada. Cuando los servicios de Google Play del remitente, en particular el marco de servicios de Cast, están desactualizados, es posible que no pueda crear una conexión de Cast. Esto se soluciona actualizando los servicios de Google Play del remitente a través de Google Play Store.