Reproducción de vídeo en Chromecast con Xamarin Forms

Hoy os traigo otro Nuget interesante y muy fácil de utilizar, para reproducir vídeo en dispositivos Chromecast. Su nombre es GoogleCast. Aquí os dejo un enlace al repositorio, en el que encontraréis algo de documentación, aunque su uso, como vamos a ver a continuación, es muy sencillo.

Para explicar cómo usar este Nuget, he construido una app muy sencilla, en la que aparece un entry, en el que escribir la URL del vídeo que queremos reproducir, y un botón que, al pulsarse, buscará todos los dispositivos Chromecast en los que se puede reproducir un vídeo. Al seleccionar una de esos dispositivos, el vídeo se reproducirá en él.

Los puntos importantes son:
- ¿Cómo cargar la lista de dispositivos Chromecast?
- ¿Cómo reproducir el vídeo en un dispositivo?
En nuestro ejemplo, los dispositivos se cargan desde el método LoadReceivers. En éste, se utiliza el Nuget para obtener una lista de IReceiver y asignarla al ItemSource del CollectionView en el que se muestran todos los dispositivos. La clase IReceiver tiene una propiedad, llamada FriendlyName, que contiene el nombre que le dimos al Chromecast cuando lo configuramos, y la utilizaremos para mostrar el nombre en la lista.
private async Task LoadReceivers()
{
chromecastDevices = null;
chromecastDevices = (await new DeviceLocator().FindReceiversAsync()).ToList();
CvChromecastDevices.ItemsSource = chromecastDevices;
}
Por último, para responder a la segunda pregunta, la reproducción de vídeo la hacemos en el método PlayVideo. Se hace en 3 pasos.
- Conexión: Utilizando la clase Sender, realizamos la conexión con el IReceiver seleccionado.
- Establecer un canal entre Chromecast y móvil: Para ello, con la ayuda de Sender, obtenemos el canal y lo abrimos. Para lo que usamos los métodos GetChannel y LaunchAsync.
- Cargar vídeo desde una URL: Simplemente, en el canal que tenemos abierto, lanzamos la URL con el método LoadAsync, que retorna un objeto MediaStatus, desde el que obtenemos información del estado de la reproducción.
private async Task PlayVideo()
{
IReceiver selectedCastDevice = CvChromecastDevices.SelectedItem as IReceiver;
if (selectedCastDevice == null)
return;
Sender ccSender = new Sender();
await ccSender.ConnectAsync(selectedCastDevice);
IMediaChannel mediaChannel = ccSender.GetChannel();
await ccSender.LaunchAsync(mediaChannel);
MediaStatus mediaStatus = await mediaChannel.LoadAsync(new MediaInformation() { ContentId = EnUrl.Text });
CvChromecastDevices.SelectedItem = null;
await CloseReceiversList();
}
Como siempre, aquí os dejo un enlace al repositorio del proyecto de ejemplo que he creado https://github.com/jorgediegocrespo/XamarinChromecast