Pantallas informativas (III): Reproducción de archivos

Bien, el proyecto va avanzando. Ya tenemos configuradas las carpetas y podemos actualizar la de la Raspberry a golpe de instrucción, ahora toca reproducir en loop y a pantalla completa todos los archivos que contenga.

Vamos a necesitar reproducir vídeos e imágenes fijas y los programas que usaremos serán OMXPlayer y FIM. En nuestro proyecto en concreto restringiremos las imágenes a archivos jpg, pero FIM es capaz de visualizar múltiples formatos de archivo, así que modificar el código para poder reproducir otros tipos es muy fácil.

Vídeos

Vamos a usar el reproductor OMXPlayer que funciona desde la línea de comandos.

Para reproducir los vídeos en bucle haremos lo siguiente: Usaremos un while para que mientras se cumpla la condición se ejecute de forma indefinida, y un for – in para recorrer los ficheros del directorio.

Para nuestros propósitos, vamos a crear una variable $a y le vamos a dar un valor, en este caso “si” o el que más os guste. ¿Por qué así y no un while true? Pues porque más adelante podremos cambiar el valor a esta variable, lo que provocará que salgamos del bucle y una vez fuera comparar su valor y hacer una cosa u otra, pero eso vendrá más adelante, así probamos que este sistema y su sintaxis nos funcionan.

Así que para probar vamos a crear un fichero, que podemos llamar “loop.sh” y lo dejamos de momento así:

Un pequeño paréntesis de aviso: Si usáis un editor en Windows para luego trasladar los scripts a la Raspberry (o a cualquier otro chisme bajo Linux), configurad y/o comprobad que los finales de línea correspondan al tipo Unix o provocarán los más variados y divertidos errores:

Probamos que nuestro fichero funciona con la siguiente instrucción:

bash loop.sh

Los vídeos que tengamos en la carpeta “Videos” de la Raspberry deberían de reproducirse uno tras otro y vuelta a empezar.

Las opciones usadas son las siguientes:

-b: Fondo negro

–aspect-mode letterbox: El vídeo ocupa toda la pantalla sin perder su relación de aspecto, dejando franjas negras horizontales o verticales si es preciso. En realidad, si no especificamos un tamaño de ventana esta es la opción por defecto, por lo que en teoría podríamos obviarla.

Aquí el loop estará ejecutándose hasta el fin de los tiempos, así que tocará salir a las bravas con ctrl-c o matando el proceso desde una sesión abierta desde otro equipo si no se pone un contador o algo que cambie el valor de $a tras un determinado número de iteraciones.

Y bueno, esto ya es de lógica, pero se recomienda usar vídeos de muy corta duración porque lo que interesa es ver si el código funciona. En Internet  podemos encontrar páginas con samples que se pueden descargar libremente. No obstante, si alguien quiere probar con “Guerra y Paz”, “Novecento” y “Cleopatra”, por ejemplo, pues adelante con los faroles, por supuesto. En este caso se recomienda realizar varias iteraciones sin despegar la vista de la pantalla para asegurarnos de que el código funciona bien, pero bien, bien, requetebien.

Pantalla verde

Puede suceder que al reproducir algún vídeo la pantalla se ponga verde y no se vea absolutamente nada. Y lo sé por propia experiencia: en mi caso, una Raspberry estuvo funcionando en pruebas un tiempo con distintos archivos, pero un buen día al cargar un vídeo de más peso que los habituales, al reproducirlo por segunda vez aquello se ponía en modo pellejo de rana y se acabó.

La solución pasa por modificar, como root, el fichero config.txt que se encuentra en el directorio boot de la Raspberry, añadiendo al final del mismo la siguiente línea:

gpu_mem=128

Y con eso, se acabaron las pantallas verdes en OMXPlayer

Imágenes jpg

También es posible que deseemos proyectar imágenes fijas, de hecho en nuestro caso no es que lo deseemos, es que lo necesitamos. Para eso vamos a usar el programa “FIM”.

FIM, tal como dicen en su web https://www.nongnu.org/fbi-improved/ es un fork de Fbi y lo mejora en muchos aspectos. En un principio intenté usar Fbi para el proyecto, pero a la hora de hacerlo funcionar desde un sh ejecutado en crontab daba problemas (ioctl vt_activate operation not permitted). Supongo que todo era cosa de permisos porque haciendo que lo ejecutara el root (sudo fbi) funcionaba, pero no me gustaba esa idea y pelearme con los permisos tampoco. Probé FIM y para mi sorpresa, aunque está basado en Fbi, funcionó a la primera.

y comenzamos instalándolo:

sudo apg-get install fim

Y vamos a probarlo. Para ello, de la ingente cantidad de opciones y configuraciones que tiene, no nos vamos a complicar mucho y sólo vamos a pedirle que nos muestre la imagen a pantalla completa, que lo haga sin mostrarnos ninguna información adicional y que mantenga la imagen durante unos segundos, que para probar vamos a poner 5. Comenzamos con la instrucción para mostrar un fichero de nombre “prueba.jpg”

fim prueba.jpg -a -c '{sleep 5;quit;};'

Las opciones usadas:

    • -a: le dice a FIM que queremos que la imagen se muestre a pantalla completa sin perder la relación de aspecto.
    • -c: le indica que a continuación viene unos comandos que ha de ejecutar, en este caso:
      • -sleep 5: tiempo en segundos que permanecerá la imagen en pantalla
      • -quit: salir de FIM

El resultado es el siguiente:

Vemos en la imagen toda la información que aparece al pie de la foto. Incluso en este caso delata la “trampa” que he cometido, ya que la captura no es de pantalla completa sino que está hecha en modo ventana y nos dice que la imagen se está mostrando al 44%. Todos estos datos pueden venir bien, pero en nuestro proyecto nos estorban y los quitaremos con el fichero de configuración.

Vemos que todavía hay que afinar algo porque esa información que sale en el pie de pantalla está muy bien pero en nuestro caso nos molesta. Para eliminarla, como se muestra por defecto, hay que crear un pequeño fichero de configuración que se llamará .fimrc y que colocaremos en el home. El contenido del fichero será el siguiente:

_display_busy=0;
_display_status=0;

Volvemos a probar y vemos el resultado:

Imagen lista. Por cierto, que pertenece a http://maulla.me Una web que espero tener tiempo en un futuro no muy lejano para dotar de contenido gatuno

Ya lo tenemos listo, ahora sólo falta probar la reproducción uno por uno de todos los ficheros jpg que tengamos en una carpeta, sustituyendo en nombre del fichero por una variable. Para ello vaciamos el directorio Videos, metemos dos o tres jpgs de prueba y adaptamos el código usado antes, esta vez sin el while que ya sabemos que funciona. Llamamos al script como queramos, en este caso “imagen.sh” y lo probamos.

Si todo ha ido bien deberían mostrarse los jpgs de la carpeta uno por uno, manteniéndose cada uno 5 segundos en pantalla.

Llegados a este punto ya tenemos los vídeos que se reproducen en bucle y las imágenes también. Toca ahora ir juntando todo e ir añadiendo funcionalidades, un cierto control sobre algo que queremos que sea lo más automático posible.

Deja un comentario

No está permitida la inserción de ningún dato de carácter personal (mail, tef...). Cualquier comentario que los contenga será editado o eliminado.

Por favor, si dejas un comentario pon cualquier nombre para poderme dirigir a ti pero que no te identifique

10 + nueve =

El comentario es totalmente privado. No se almacena la IP