Carrusel de vídeos e imágenes en un televisor …

… una tarea que me zampado en dos días y que ha sido mucho más fructífera y divertida de lo que esperaba.

En mi lugar de trabajo este fin de semana van a realizar una jornada de puertas abiertas -también llamada feria- y se les ha ocurrido situar un televisor en modo kiosko para los vídeos que tenemos de promoción y uso de nuestros productos.

Y después de una pequeña discusión sobre quién debía hacerlo me lo encargaron a mi; total, el televisor acepta un pincho con las fotos y puede reproducirlas. Más simple que el asa de un cubo.

Y sí, lo es, siempre que quieras reproducir con el mando vídeo tras vídeo. El firmware del televisor, un LG modelo 32LJ510U-ZA, con la siguiente disposición de conexiones:

no admite la posibilidad de ver los vídeos en cadena. Sí las imágenes y ni hablar de mezclarlos.

Me puse a pensar que podría ser divertido darle un uso a una Raspberry PI 2 que tenía en casa y, de paso, refrescar conocimientos.

El resultado es bueno, hoy me lo han arrebatado de las manos, aunque no me han dejado darle los toques finales.En concreto ahora mismo se inicia como servicio, espera a tener una memoria USB conectada en algún puerto y busca un direcrio llamado VIDEOS para reproducirlos con toda la fluidez de que es capaz el dispositivo. Las imágenes, por contra, no las muestra por un fallo de diseño del visor empleado.

Si se inicia una sesión en consola y se invoca al programa todo va como la seda, con sus esperas tras cada imagen de varios segundos y la selección aleatoria de contenidos. Cuando me devuelvan el trasto lo termino porque he aprendido mucho sobre el dispositivo y sobre systemd, que ya tocaba.

Y más o menos lo hice así  …

  1. Descargar una versión de Raspbian sin programas de escritorio.
  2. Instalarla sobre una memoria SD
  3. Arrancar el sistema
  4. Configurarlo y añadir los programas necesarios para efectuar el desarrollo sobre ella: git, make, ssh y alguno más.

Para instalar la imagen sobre la tarjeta he tenido primero que descomprimirla y luego ajustar algún parámetro del programa de duplicado tal y como lo describen aquí:

$ sudo dd bs=1M if=2018-04-18-raspbian-stretch.img of=/dev/sdX conv=fsync

Tras arrancar se accede al sistema con el usuario pi y ia contraseña raspberry y se procede a configurar con $ sudo raspi-config.

Con ese frontal se cambia la contraseña del usuario, el lenguaje del sistema (incluyendo el tipo de teclado), el nombre de la máquina en la red (que en este caso poco necesario iba a ser) y se actualiza el sistema. La configuración se guarda en /boot/config.txt  que es un archivo de texto plano y que no está mal copiar fuera de la máquina.

Después he buscado qué opciones tengo para las imágenes y los vídeos sin iniciar una sesión X. Para las primeras existe un programa llamado fbi que puede hacer incluso un pase de carrusel y que es muy cómodo y ligero siempre que funcione en una consola de sistema (las /dev/tty0-9 de toda la vida).

El inconveniente es que las muestra para siempre o hasta que alguien pulse la tecla de fin de programa (la letra q). La solución está en lanzarlo en segundo plano, esperar un tiempo y matar al proceso sin miramientos.

Los vídeos son gestionados con omxplayer que es tan verśátil como el anterior pero sólo reproduce los indicados en los parámetros de llamada.

En este caso además me he encontrado con el pequeño problema de las raspi con la reproducción de vídeos: necesitan una licencia si se quiere usar el hardware. No cuestan mucho y no la tenía para este dispositivo porque iba a darle otro uso (ni idea de cuál pero estaba muy convencido de la idea) por lo que he tenido que comprarlas y guardar los códigos en la configuración.

Para ver si la aceleración hardware está activa se puede emplear lo siguiente:

$ vcgencmd codec_enabled MPG2
MPG2=enabled

y que está mucho mejor explicado en esta página.

Hay muchos otros detalles que he aprendido y que he intentado documentar en el código que he escrito. Los enlaces de la sección de más abajo me han sido impagables. Lástima que en el trabajo, que por cierto no dedican un euro a formación de empleados, no lo terminen de ver.

Uno de los más interesantes detalles ha sido el programa externo que finaliza con el visor de imágenes al pasar cierto tiempo. Lo he guardado también en el repositorio aunque no es de mi autoría. Se trata de timeout3 de Dmitry V Golovashkin y descargado de este sitio.

Hoy les he dejado con todo el sistema en una mesa de pedidos para que lo probasen, la regleta y la raspi en una caja de cartón agujereada por los extremos, y es bastante sólido aunque un poco primitivo en ciertos aspectos tales como la detección y montaje de la unidad USB.

Es algo que voy a mejorar porque llevo tiempo ideando un sistema semi automatizado de copias de seguridad de escritorio. Volveré a hablar de ello pero ahora …

Y el resultado lo conservo y mantengo en …

Un subdirectorio de un repositorio git donde guardo cosas que no son muy grandes (en este caso se me empieza a desbordar un poco) y cuyo acceso está donde suelen estar todos:

https://git.astillas.net/snippets/tree/raspberry

El montaje físico final quedó así

Televisión mostrando un vídeo en carrusel

La televisión quedó instalada al final del mostrador de pedidos y justo detrás, en uno de los huecos de la mesa situé la regleta eléctrica, la Raspberry Pi, con su memoria USB de contenido y el mando de la televisión por si necesitaban ajustar el volumen.

Pendiente queda

Varios detalles bastante importantes y a los que no me dejaron hincar el diente (con algo así como que ya funciona, no lo toques, así está bien y demás):

  1. Emplear el sistema para detectar la inserción de medios USB (probablemente empleando DBUS).
  2. Abrir sesión en la consola para que el programa fbi funcione mostrando imágenes.
  3. Empaquetarlo para Debian y guardarlo en repositorio.

Enlaces y referencias