HowTo

Transmisión en vivo de imágenes

Con una demora de tres a cinco minutos este conjunto de scripts puede ser usado para cubrir eventos como el FLISOL, FUDcon, Google IO y convenciones en general en directo. Cualquier con un dispositivo capaz de tomar fotos y enviarlas por email puede ser usado y formar parte del sistema

Con una demora de tres a cinco minutos este conjunto de scripts puede ser usado para cubrir eventos como el FLISOL, FUDcon, Google IO y convenciones en general en directo. Cualquier con un dispositivo capaz de tomar fotos y enviarlas por email puede ser usado y formar parte del sistema

Esta seria una versión simplificada, con menos puntos de posibles fallas y hasta cierto punto mas eficiente de un conjunto de scripts hechos en BASH para cubrir eventos en directo, Con una demora de entre 3 a 5 minutos es capaz de publicar en paginas web fotos tomadas por dispositivos capaces de tomar fotos y enviarlas vía email. El proceso es básicamente el siguiente:

Cinco pasos simples de este sistema
  1. El grupo de usuarios que van a publicar fotos toman las fotos con sus dispositivos, en mi caso siempre he usado mi teléfono móvil.
  2. Esta foto es enviada vía correo electrónico a Picasa.
  3. Picasa procesa esta foto y genera las miniaturas de la foto automáticamente, ademas de hacerlas disponibles a través de su API.
  4. Mi NSLU2 que aun esta corriendo Linux hace una petición HTTP a Picasa y procesa la respuesta generando un archivo con código javascript.
  5. El código javascript pre-generado por mi NSLU2 puede ser insertado en cualquier pagina web, las fotos estarán alojadas en la infraestructura de Picasa, reduciendo así el impacto a nivel de ancho de banda en nuestros servidores.

 

El Script
Como ven aquí abajo el script esta dividido en tres segmentos, el primero es para la declaración y asignación de variables donde puedes especificar el numero de columnas a usar para mostrar el álbum. El usuario al cual le pertenece esa cuenta de Picasa web y el nombre del álbum que contiene esas fotos. El valor de TEMPORAL debe de ser un directorio donde se van a guardar los archivos temporales que el script use.

El segundo segmento es el encargado de adquirir la data necesaria de las fotos alojadas en Picasa y generar un archivo de texto temporal que luego va a ser procesado para generar el javascript. El tercer y ultimo segmento genera el javascript y manipula el archivo temporal para que se generen columnas de fotos de acuerdo a la variable columnas.
#!/bin/bash
# livecast-1.sh
# preguntas o contacto en http://orvtech.com
# No te olvides de hacer poner un link a http://orvtech.com donde uses este script.
#!/bin/bash
columnas=3
contador=0
ultimas=6
TEMPORAL="/tmp"
USUARIO="tu_ID_de_Usuario_aqui"
ALBUM="Nombre_de_Album_aqui"
DESTINO="tu_path_de_destino_aqui.js"
#
curl -s https://picasaweb.google.com/data/feed/base/user/$USUARIO/album/$ALBUM |\
sed -e 's/\"/\ /g' -e s/\'/\ /g | tr ' ' '\n' |grep s144|\
awk -v USUARIO=$USUARIO -v ALBUM=$ALBUM '{print ""}' > $TEMPORAL/livecast.txt
#
cat $TEMPORAL/livecast.txt|tail -n $ultimas |\
while read line
do contador=$(( $contador + 1 ))
if [ $contador -eq $columnas ];then
echo "${line}
" |tr '\n' ' ' | sed -e 's/ / /g'
contador=0
else
echo "${line}"| tr '\n' ' ' | sed -e 's/ / /g'
fi
done |tr '\n' ' ' | sed -e 's/ / /g' -e 's/s144/s200-c/g' |awk '{print "var livecast='"'"'" $0"'"'"'\ndocument.write(livecast);"}' > $DESTINO

Este script genera un archivo que puede ser invocado con un simple <script src="http://dominio.ltd/archivo.js" type="text/javascript">. En mi caso a partir del álbum https://picasaweb.google.com/orvtech.com/DropBox genero el código:
var livecast='<a href="https://picasaweb.google.com/orvtech.com/DropBox"><img src="http://lh4.ggpht.com/_9SbN2dfg-eo/TVP_pLNsZNI/AAAAAAAAAC4/fPaI9Axe0vM/s144-c/4563315788_ec545d5010_o.jpg" height="144px" width="144px"/></a> <a href="https://picasaweb.google.com/orvtech.com/DropBox"><img src="http://lh5.ggpht.com/_9SbN2dfg-eo/TVP_-5OuSoI/AAAAAAAAAC4/MUoxlt--jcQ/s144-c/4546433743_2c8b357c72_o.jpg" height="144px" width="144px"/></a> <a href="https://picasaweb.google.com/orvtech.com/DropBox"><img src="http://lh4.ggpht.com/_9SbN2dfg-eo/TVQABB_L42I/AAAAAAAAAC4/3ZqVtZbS6Bc/s144-c/IMG_20110127_225432.jpg" height="144px" width="144px"/></a><br /> <a href="https://picasaweb.google.com/orvtech.com/DropBox"><img src="http://lh5.ggpht.com/_9SbN2dfg-eo/TVQAF0PRLvI/AAAAAAAAAC4/YY_T9872UMs/s144-c/Flisol2009_04.jpg" height="144px" width="144px"/></a> <a href="https://picasaweb.google.com/orvtech.com/DropBox"><img src="http://lh5.ggpht.com/_9SbN2dfg-eo/TVQAN3_ZjQI/AAAAAAAAAC4/gg2DoHP5Ybk/s144-c/p4240052.jpg" height="144px" width="144px"/></a> <a href="https://picasaweb.google.com/orvtech.com/DropBox"><img src="http://lh3.ggpht.com/_9SbN2dfg-eo/TVQAOJ9WG-I/AAAAAAAAAC4/rM8wkBYSdsA/s144-c/IMG_5571.JPG" height="144px" width="144px"/></a><br /> '
document.write(livecast);

Que al ser invocado con <script> produce estas 3 columnas de fotos:

 

El tamaño de los thumbnails y la cantidad de columnas puede ser configurado incluso se podría asignar en una variable del script con un poco de mas trabajo (15 minutos). Pero se podría decir que estamos listos para transmitir en vivo fotos de eventos como FLISOL, FUDcon, Google IO o cualquier otro evento de este estilo.

 

La segunda versión de este script
Hace poco mas de dos año hice un script que aunque mas propenso a errores por lo que involucraba muchas mas plataformas y herramientas externas, tenia mas funcionalidades. Entre las que mas les ha llamado la atención al LUG de Trujillo (que son con quienes he discutido el tema de este script en especifico) es la marca de agua y la posibilidad de insertar texto en la imagen. Veamos esta foto para que entiendan de que les estoy hablando.

Subaru WRX en una foto durante la cobertura en vivo del Koni Challenge Subaru WRX en una foto durante la cobertura en vivo del Koni Challenge Subaru WRX en una foto durante la cobertura en vivo del Koni Challenge

 
Estas fotos fueron de un evento que cubrimos los integrantes de la comunidad subyforums.com, es parte de la copa Koni Challenge. En la parte superior de cada imagen esta información que afecta los resultados de las clasificatorias como por ejemplo temperatura y humedad (impactan mucho a los carros con turbo), hora y fecha. En la parte inferior esta el logo del foro como una marca de agua. Este script se uso durante varios eventos, incluyendo Subaru Challenge 2009, Autoshow de California y el Koni Challenge.

El script se conecta a una casilla de correos, descarga los correos, procesa los archivos adjuntos redimencionandolos y aplicándoles las marcas de agua y la información adicional, ademas de esto se crean las miniaturas de las ultimas 10 fotos para ser compartidas en otras comunidades y se suben todos estos archivos a otro servidor vía FTP donde se servirán finalmente vía HTTP.
En esa entonces use mi NSLU2 que con tan solo 266MHz y 32MB de RAM se demoraba unos 3 o 4 minutos por foto.

Entiendo que el beneficio de este script es que podemos tener fotos del FLISOL o de un Google IO en vivo con por ejemplo la marca de agua del FLISOL y en el tope la información del LUG local. Actualmente tengo algunos ajustes que hacerle al script y solventar un problema que tengo con los certificados para poder usar gmail como casilla de correo y dispongo de poco tiempo.

 

Pueden descargar el script de este articulo pinchando aqui. Pronto publicare el otro script y les comentare de otro proyecto de este mismo estilo que estoy trabajando en base a unas sugerencias de tatica.

3 Comments

  1. Demasiado fino, me gustó.

    Saludos.

    • Felix,

      Déjame saber si tienes problemas llevando a cabo un proyecto con este script. Me encataria saber el uso que le da la gente.

Trackbacks / Pings

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

La moderación de comentarios está activada. Su comentario podría tardar cierto tiempo en aparecer.