{"id":2725,"date":"2018-09-26T15:25:00","date_gmt":"2018-09-26T15:25:00","guid":{"rendered":"https:\/\/esferas.org\/msqlu\/?p=2725"},"modified":"2018-10-01T06:50:20","modified_gmt":"2018-10-01T06:50:20","slug":"carrusel-de-videos-e-imagenes-en-un-televisor","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2018\/09\/26\/carrusel-de-videos-e-imagenes-en-un-televisor\/","title":{"rendered":"Carrusel de v\u00eddeos e im\u00e1genes en un televisor &#8230;"},"content":{"rendered":"<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:615,&quot;href&quot;:&quot;https:\\\/\\\/www.raspberrypi.org\\\/documentation\\\/installation\\\/installing-images\\\/linux.md&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:616,&quot;href&quot;:&quot;https:\\\/\\\/omxplayer.sconde.net&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20210126151824\\\/https:\\\/\\\/omxplayer.sconde.net\\\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 14:07:18&quot;,&quot;http_code&quot;:404}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 14:07:18&quot;,&quot;http_code&quot;:404},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:617,&quot;href&quot;:&quot;https:\\\/\\\/elinux.org\\\/RPI_vcgencmd_usage&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260415142508\\\/https:\\\/\\\/elinux.org\\\/RPI_vcgencmd_usage&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:618,&quot;href&quot;:&quot;https:\\\/\\\/git.astillas.net\\\/snippets\\\/tree\\\/bash&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:619,&quot;href&quot;:&quot;http:\\\/\\\/www.bashcookbook.com\\\/bashinfo\\\/source\\\/bash-4.0\\\/examples\\\/scripts\\\/timeout3&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20260215080918\\\/http:\\\/\\\/www.bashcookbook.com\\\/bashinfo\\\/source\\\/bash-4.0\\\/examples\\\/scripts\\\/timeout3&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 14:07:44&quot;,&quot;http_code&quot;:503}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 14:07:44&quot;,&quot;http_code&quot;:503},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:620,&quot;href&quot;:&quot;https:\\\/\\\/git.astillas.net\\\/snippets\\\/tree\\\/raspberry&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20230331031017\\\/https:\\\/\\\/git.astillas.net\\\/snippets\\\/tree\\\/raspberry&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 14:07:51&quot;,&quot;http_code&quot;:404}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 14:07:51&quot;,&quot;http_code&quot;:404},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:621,&quot;href&quot;:&quot;https:\\\/\\\/www.instructables.com\\\/id\\\/Easy-Raspberry-Pi-Based-ScreensaverSlideshow-for-E&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20200819223630\\\/https:\\\/\\\/www.instructables.com\\\/id\\\/Easy-Raspberry-Pi-Based-ScreensaverSlideshow-for-E\\\/&quot;,&quot;redirect_href&quot;:&quot;https:\\\/\\\/www.instructables.com\\\/id\\\/Easy-Raspberry-Pi-Based-ScreensaverSlideshow-for-E\\\/&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:622,&quot;href&quot;:&quot;https:\\\/\\\/www.cyberciti.biz\\\/tips\\\/handling-filenames-with-spaces-in-bash.html&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:623,&quot;href&quot;:&quot;http:\\\/\\\/www.diegoacuna.me\\\/how-to-run-a-script-as-a-service-in-raspberry-pi-raspbian-jessie&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20210916174548\\\/https:\\\/\\\/www.diegoacuna.me\\\/how-to-run-a-script-as-a-service-in-raspberry-pi-raspbian-jessie\\\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 14:08:00&quot;,&quot;http_code&quot;:404}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 14:08:00&quot;,&quot;http_code&quot;:404},&quot;process&quot;:&quot;done&quot;}]'><\/div>\n<p>&#8230; una tarea que me zampado en dos d\u00edas y que ha sido mucho m\u00e1s fruct\u00edfera y divertida de lo que esperaba.<\/p>\n<p><!--more--><\/p>\n<p>En mi lugar de trabajo este fin de semana van a realizar una jornada de puertas abiertas -tambi\u00e9n llamada feria- y se les ha ocurrido situar un televisor en modo kiosko para los v\u00eddeos que tenemos de promoci\u00f3n y uso de nuestros productos.<\/p>\n<p>Y despu\u00e9s de una peque\u00f1a discusi\u00f3n sobre qui\u00e9n deb\u00eda hacerlo me lo encargaron a mi; total, el televisor acepta un <em>pincho<\/em> con las fotos y puede reproducirlas. M\u00e1s simple que el asa de un cubo.<\/p>\n<p>Y s\u00ed, lo es, siempre que quieras reproducir con el mando v\u00eddeo tras v\u00eddeo. El firmware del televisor, un LG modelo 32LJ510U-ZA, con la siguiente disposici\u00f3n de conexiones:<\/p>\n<p><a href=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2018\/09\/lg-32jl510-conexiones.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2726\" src=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2018\/09\/lg-32jl510-conexiones-300x182.jpg\" alt=\"\" width=\"300\" height=\"182\" srcset=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2018\/09\/lg-32jl510-conexiones-300x182.jpg 300w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2018\/09\/lg-32jl510-conexiones-768x466.jpg 768w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2018\/09\/lg-32jl510-conexiones-1024x622.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>no admite la posibilidad de ver los v\u00eddeos en cadena. S\u00ed las im\u00e1genes y ni hablar de mezclarlos.<\/p>\n<p>Me puse a pensar que podr\u00eda ser divertido darle un uso a una Raspberry PI 2 que ten\u00eda en casa y, de paso, refrescar conocimientos.<\/p>\n<p>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\u00fan puerto y busca un direcrio llamado VIDEOS para reproducirlos con toda la fluidez de que es capaz el dispositivo. Las im\u00e1genes, por contra, no las muestra por un <em>fallo<\/em> de dise\u00f1o del visor empleado.<\/p>\n<p>Si se inicia una sesi\u00f3n en consola y se invoca al programa todo va como la seda, con sus esperas tras cada imagen de varios segundos y la selecci\u00f3n aleatoria de contenidos. Cuando me devuelvan el trasto lo termino porque he aprendido mucho sobre el dispositivo y sobre <em>systemd<\/em>, que ya tocaba.<\/p>\n<h3>Y m\u00e1s o menos lo hice as\u00ed\u00a0 &#8230;<\/h3>\n<ol>\n<li>Descargar una versi\u00f3n de Raspbian sin programas de escritorio.<\/li>\n<li>Instalarla sobre una memoria SD<\/li>\n<li>Arrancar el sistema<\/li>\n<li>Configurarlo y a\u00f1adir los programas necesarios para efectuar el desarrollo sobre ella: <em>git<\/em>, <em>make, <\/em><em>ssh<\/em> y alguno m\u00e1s.<\/li>\n<\/ol>\n<p>Para instalar la imagen sobre la tarjeta he tenido primero que descomprimirla y luego ajustar alg\u00fan par\u00e1metro del programa de duplicado tal y como lo describen <a href=\"https:\/\/www.raspberrypi.org\/documentation\/installation\/installing-images\/linux.md\">aqu\u00ed<\/a>:<\/p>\n<pre class=\"lang:default decode:true\">$ sudo dd <strong>bs=1M<\/strong> if=2018-04-18-raspbian-stretch.img of=\/dev\/sdX conv=fsync<\/pre>\n<p>Tras arrancar se accede al sistema con el usuario <em>pi<\/em> y ia contrase\u00f1a <em>raspberry<\/em> y se procede a configurar con <code>$ sudo raspi-config.<\/code><\/p>\n<p>Con ese frontal se cambia la contrase\u00f1a del usuario, el lenguaje del sistema (incluyendo el tipo de teclado), el nombre de la m\u00e1quina en la red (que en este caso poco necesario iba a ser) y se actualiza el sistema. La configuraci\u00f3n se guarda en <code>\/boot\/config.txt<\/code>\u00a0 que es un archivo de texto plano y que no est\u00e1 mal copiar fuera de la m\u00e1quina.<\/p>\n<p>Despu\u00e9s he buscado qu\u00e9 opciones tengo para las im\u00e1genes y los v\u00eddeos sin iniciar una sesi\u00f3n X. Para las primeras existe un programa llamado\u00a0<em>fbi<\/em> que puede hacer incluso un pase de carrusel y que es muy c\u00f3modo y ligero siempre que funcione en una consola de sistema (las <code>\/dev\/tty0-9<\/code> de toda la vida).<\/p>\n<p>El inconveniente es que las muestra para siempre o hasta que alguien pulse la tecla de fin de programa (la letra <em>q<\/em>). La soluci\u00f3n est\u00e1 en lanzarlo en segundo plano, esperar un tiempo y matar al proceso sin miramientos.<\/p>\n<p>Los v\u00eddeos son gestionados con <a href=\"https:\/\/omxplayer.sconde.net\/\"><em>omxplayer<\/em><\/a> que es tan ver\u015b\u00e1til como el anterior pero s\u00f3lo reproduce los indicados en los par\u00e1metros de llamada.<\/p>\n<p>En este caso adem\u00e1s me he encontrado con el peque\u00f1o problema de las <em>raspi<\/em> con la reproducci\u00f3n de v\u00eddeos: necesitan una licencia si se quiere usar el <em>hardware<\/em>. No cuestan mucho y no la ten\u00eda para este dispositivo porque iba a darle otro uso (ni idea de cu\u00e1l pero estaba muy convencido de la idea) por lo que he tenido que comprarlas y guardar los c\u00f3digos en la configuraci\u00f3n.<\/p>\n<p>Para ver si la aceleraci\u00f3n hardware est\u00e1 activa se puede emplear lo siguiente:<\/p>\n<pre class=\"lang:default decode:true \">$ vcgencmd codec_enabled MPG2\r\nMPG2=enabled\r\n<\/pre>\n<p>y que est\u00e1 mucho mejor explicado en <a href=\"https:\/\/elinux.org\/RPI_vcgencmd_usage\">esta p\u00e1gina.<\/a><\/p>\n<p>Hay muchos otros detalles que he aprendido y que he intentado documentar en el c\u00f3digo que he escrito. Los enlaces de la secci\u00f3n de m\u00e1s abajo me han sido impagables. L\u00e1stima que en el trabajo, que por cierto no dedican un euro a formaci\u00f3n de empleados, no lo terminen de ver.<\/p>\n<p>Uno de los m\u00e1s interesantes detalles ha sido el programa externo que finaliza con el visor de im\u00e1genes al pasar cierto tiempo. Lo he guardado tambi\u00e9n en el <a href=\"https:\/\/git.astillas.net\/snippets\/tree\/bash\">repositorio<\/a> aunque no es de mi autor\u00eda. Se trata de <em>timeout3<\/em> de Dmitry V Golovashkin y descargado de <a href=\"http:\/\/www.bashcookbook.com\/bashinfo\/source\/bash-4.0\/examples\/scripts\/timeout3\">este sitio<\/a>.<\/p>\n<p>Hoy les he dejado con todo el sistema en una mesa de pedidos para que lo probasen, la regleta y la <em>raspi<\/em> en una caja de cart\u00f3n agujereada por los extremos, y es bastante s\u00f3lido aunque un poco primitivo en ciertos aspectos tales como la detecci\u00f3n y montaje de la unidad USB.<\/p>\n<p>Es algo que voy a mejorar porque llevo tiempo ideando un sistema semi automatizado de copias de seguridad de escritorio. Volver\u00e9 a hablar de ello pero ahora &#8230;<\/p>\n<h3>Y el resultado lo conservo y mantengo en &#8230;<\/h3>\n<p>Un subdirectorio de un repositorio <em>git<\/em> donde guardo cosas que no son muy grandes (en este caso se me empieza a desbordar un poco) y cuyo acceso est\u00e1 donde suelen estar todos:<\/p>\n<p style=\"padding-left: 30px;\"><a href=\"https:\/\/git.astillas.net\/snippets\/tree\/raspberry\">https:\/\/git.astillas.net\/snippets\/tree\/raspberry<\/a><\/p>\n<h3>El montaje f\u00edsico final qued\u00f3 as\u00ed<\/h3>\n<p><a href=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2018\/09\/raspi-carrusel-tv.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2739 size-medium\" src=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2018\/09\/raspi-carrusel-tv-300x225.jpg\" alt=\"Televisi\u00f3n mostrando un v\u00eddeo en carrusel\" width=\"300\" height=\"225\" srcset=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2018\/09\/raspi-carrusel-tv-300x225.jpg 300w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2018\/09\/raspi-carrusel-tv-768x576.jpg 768w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2018\/09\/raspi-carrusel-tv-1024x768.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><a href=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2018\/09\/raspi-carrusel.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-2740 alignnone\" src=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2018\/09\/raspi-carrusel-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2018\/09\/raspi-carrusel-300x225.jpg 300w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2018\/09\/raspi-carrusel-768x576.jpg 768w, https:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2018\/09\/raspi-carrusel-1024x768.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>La televisi\u00f3n qued\u00f3 instalada al final del mostrador de pedidos y justo detr\u00e1s, en uno de los huecos de la mesa situ\u00e9 la regleta el\u00e9ctrica, la Raspberry Pi, con su memoria USB de contenido y el mando de la televisi\u00f3n por si necesitaban ajustar el volumen.<\/p>\n<h3>Pendiente queda<\/h3>\n<p>Varios detalles bastante importantes y a los que no me dejaron hincar el diente (con algo as\u00ed como que ya funciona, no lo toques, as\u00ed est\u00e1 bien y dem\u00e1s):<\/p>\n<ol>\n<li>Emplear el sistema para detectar la inserci\u00f3n de medios USB (probablemente empleando DBUS).<\/li>\n<li>Abrir sesi\u00f3n en la consola para que el programa <em>fbi<\/em> funcione mostrando im\u00e1genes.<\/li>\n<li>Empaquetarlo para Debian y guardarlo en repositorio.<\/li>\n<\/ol>\n<h3>Enlaces y referencias<\/h3>\n<ul>\n<li>\n<p class=\"header-title\"><a href=\"https:\/\/www.instructables.com\/id\/Easy-Raspberry-Pi-Based-ScreensaverSlideshow-for-E\/\">Intro: Raspberry Pi Wall Display Without X-Windows<\/a><\/p>\n<\/li>\n<li>\n<p class=\"header-title\"><a href=\"https:\/\/www.instructables.com\/id\/Easy-Raspberry-Pi-Based-ScreensaverSlideshow-for-E\/\">Easy Raspberry Pi Based Screensaver\/Slideshow for Exhibitions\/Store Front.\u00a0<\/a>Que es una soluci\u00f3n completa a mi problema pero que no he empleado porque me interesaba m\u00e1s aprender.<\/p>\n<\/li>\n<li>\n<p class=\"entry-title\"><a href=\"https:\/\/www.cyberciti.biz\/tips\/handling-filenames-with-spaces-in-bash.html\">BASH Shell: For Loop File Names With Spaces<\/a><\/p>\n<\/li>\n<li>\n<p class=\"entry-title\"><a href=\"http:\/\/www.diegoacuna.me\/how-to-run-a-script-as-a-service-in-raspberry-pi-raspbian-jessie\/\">How to run a script as a service in Raspberry Pi &#8211; Raspbian Jessie<\/a><\/p>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>&#8230; una tarea que me zampado en dos d\u00edas y que ha sido mucho m\u00e1s fruct\u00edfera y divertida de lo que esperaba.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[5],"tags":[824,823,52,821,822],"class_list":["post-2725","post","type-post","status-publish","format-standard","hentry","category-hardware","tag-dmitry-v-golovashkin","tag-lg","tag-mi-lugar-de-trabajo","tag-raspberry-pi","tag-raspbian"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/2725","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=2725"}],"version-history":[{"count":5,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/2725\/revisions"}],"predecessor-version":[{"id":2741,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/2725\/revisions\/2741"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=2725"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=2725"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=2725"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}