Me han llegado muchas consultas al buzón acerca de la correcta configuración de Motion y el applet Cambozola para JAVA con el cual servir en streaming las imágenes capturas por Motion de alguna de nuestras webcam. Como no pretendo convertir mi buzón de correo personal en un consultorio técnico (sirva esto como disculpa a todos aquellos a los que no he respondido en privado) dejo por aqui los pasos a seguir para poder mostrar en una pagina web las imágenes y/o secuencia de imágenes capturadas usando el applet Cambozola.jar.

La mayor parte de los problemas están motivados por desconocimiento del funcionamiento de un servidor web público y problemas a la hora de permitir el acceso público a las imágenes servidas por Motion en un puerto diferente al 80. Siguiendo estas lineas deberías de estar en condiciones de mostrar públicamente las imágenes servidas por 1 webcam USB conectada a tu ordenador.

Evidentemente hay varias modos de hacer lo mismo. En los siguientes pasos detallo el modo por el cual yo opté en su momento. Probablemente debas adaptarlos a tu propia distribución GNU/Linux. Los siguientes pasos está hechos sobre un servidor Apache 2.1 corriendo en openSuSe 11.0.

Para mostrar en una web las imágenes «capturadas» por Motion de alguna de nuestras webcams necesitamos:

  • Una ó más webcam instaladas y funcionando
  • Motion 3.2.10
  • Servidor web apache con módulo Proxy cargado
  • el Applet JAVA cambozola.jar (la página oficial lleva varios dias caida. Podeis descargar el applet desde aqui)

Configurar Motion

Bien, ya tienes tu webcam conectada a tu Linux y funcionando. La webcam aparece montada por defecto como el dispositivo /dev/video0. Alguna de los siguientes ordenes muestra tu webcam (según los programas que tengas instalados):gqcam /dev/video0
o bien:
mplayer -tv driver=v4l2;device=/dev/video0 tv://

En el raiz de tu carpeta personal crea una nueva carpeta llamada .motioncd ~
mkdir .motion

Dentro de esta nueva carpeta copia o crea un archivo llamado motion.conf que contendrá los parámetros de configuración general válidos para todo el sistema motion (usuario y contraseña de administración, puerto html de administración, directorios de trabajo, etc…). En otro archivo que llamaremos camara1.conf introduciremos los parámetros de configuración específicos de cada una de las cámaras que vayamos a conectar (1 por el momento).

El contenido del archivo motion.conf puedes copiarlo de esta plantilla. Guardalo como motion.conf en tu carpeta .motion y personalizalo añadiendo/cambiando los siguientes parámetroscontrol_port 8888
control_localhost off
#personaliza la linea siguiente
control_authentication mi_usuario:mi_contraseña
thread /camara1.conf

El resto del archivo motion.conf puedes dejarlo tal y como aparece en la plantilla original.

Con un editor de textos crea un nuevo documento de texto vacio y guardalo en tu carpeta .motion con el nomebre camara1.conf y con el siguiente contenido:videodevice /dev/video0
webcam_port 8001

Llegados a este punto, ya puedes iniciar motion. Abre una consola, al ejecutar motion deberias ver algo como esto:
trebol-a@linux:~/>motion
{0} Processing thread 0 - config file /home/trebol-a/.motion/motion.conf
{0} Processing config file /home/trebol-a/.motion/camara1.conf
{0} Motion 3.2.10 Started
{0} Motion going to daemon mode
trebol-a@linux:~/>

Bien, motion pasa a ejecutarse como daemon en segundo plano, y dependiendo de como hayas dejado la configuración estará o no realizando capturas de JPG ó vídeo (si lo dejaste por defecto no estará capturando nada). Abre konqueror y en la barra de dirección escribes:http://127.0.0.1:8001
Konqueror debería mostrar una captura actual, un JPG, de tu webcam y muy probablemente (dependiendo de la configuración de tu sistema) esta imagen se recargue de forma autómatica.
Para acceder a la administración de motion, introduce en la barra de dirección de konqueror la dirección:http://127.0.0.1:8888
En este punto se te solicita usuario:contraseña que escribiste anteriormente. El puerto de administración por defecto es el 8080 a no ser que lo hayas personalizado en tu archivo motion.conf, en el parámetro webcontrol_port.
Desde estas páginas de administración accedes a los parametros de configuración de motion, y puedes cambiarlos en tiempo de ejecución sin necesidad de reiniciar motion. Navega por la configuración del sistema clickeando sobre los enlaces hasta llegar al parámetro que desees modificar.
Ojo: los cambios que aquí hagas tienen efecto inmediato pero no son guardados en los archivos de configuración de motion. Si deseas conservar los cambios realizados clickea hasta la sección http://localhost:8080/0/config/write, esto sobreescribe tus archivos (motion.conf y camara1.conf) con la configuración que tengas activa en ese momento.

Configurar Apache con mod_proxy

Hasta el momento tenemos motion funcionando y podemos acceder a las imágenes a nivel local (localhost, 127.0.0.1, 192.168.0.1, etc..) pero actualmente no es posible visualizar las imágenes desde otro ordenador externo. Principalmente porque las imágenes están disponibles a través de un puerto no-público (8001) y que por seguridad no nos interesa que sea accesible desde el exterior. Entonces ¿como hacemos para servir imágenes públicamente desde una dirección privada? La respuesta es mod_proxy, un módulo para Apache que sirve perfectamente para este fín. El módulo proxy de Apache, cogerá las imágenes del puerto 8001 y las servirá como si estuviesen en el puerto 80 (que si es accesible desde el exterior).

Nota: Puesto que la configuración de Apache puede ser tan particular y variada, para el siguiente ejemplo supondré que la carpeta de tu servidor web se encuentra en el directorio por defecto /srv/www/htdocs (adapta las siguientes líneas según estes usando virtualhost, mod_user, etc…).

Comprueba si tu servidor apache tiene cargado el módulo proxy, en una consola escribe:su
apache2ctl -M
Loaded Modules:
...
proxy_module (shared)
proxy_http_module (shared)
...
Syntax OK

Si no aparecen estas dos líneas deberás incluir el modulo proxy en la configuración de apache. Para openSuSe: edita el archivo /etc/sysconfig/apache2 y asegurate de que en la directiva APACHE_MODULES aparecen (por supuesto, respeta los módulos que ahí aparezcan, solo aumenta la lista con estos):APACHE_MODULES="proxy proxy_http" (en otros GNU/Linux probablemente el archivo a editar esté en /etc/apache2/modules.conf)
Reinicia apachesu
/etc/init.d/apache restart
y de nuevo comprueba que están cargados correctamente. Una vez tengas instalados y cargados el módulo proxy edita el archivo de configuración del servidor, en openSuSe: /etc/apache2/default-server.conf (de nuevo, este archivo probablemente cambiará en otras distribuciones Linux, o si estás usando VirtualHost ó mod_user) e incorpora las siguientes líneas en tu directiva DirectoryServerName localhost
DocumentRoot "/srv/www/htdocs"
#nuevas líneas
ProxyPass /camara1.cgi http://127.0.0.1:8001
ProxyPassReverse /camara1.cgi http://127.0.0.1:8001
#fin nuevas lineas

.... reinicia el servidorsu
/etc/init.d/apache2 restart

Ahora apuntando el navegador a http://127.0.0.1/camara1.cgi deberias ver lo mismo que desde la anterior http://127.0.0.1:8001 excepto que esta nueva dirección sí es accesible desde el exterior.

Ahora puedes editar tu archivo html (por ejemplo: /srv/www/htdocs/camara.html) donde quieras servir las imágenes y hacer algo como:<applet code="com.charliemouse.cambozola.Viewer" archive="cambozola.jar" width="320" height="240" MAYSCRIPT="MAYSCRIPT"><param name="url" value="camara1.cgi"></applet>
Tal y como aparece en el código html anterior, el applet cambozola.jar debe encontrarse junto al archivo camara.html, al mismo nivel. Para visualizar tu nueva página apunta tu navegador a http://localhost/camara.html.
Quien desde el exterior desee conectar a tu webcam debería hacerlo hacia http://tu.numero.de.ip/camara.html (evidentemente reemplazando tu.numero.de.ip por tu IP actual ó el nombre que tengas registrado, por ejemplo en dyndns.org)
Listo, con esto ya tienes tu servidor web corriendo con mod_proxy, y a través de la página camara.html puedes conectar con la imagen servida por motion.

Notas

– Si deseas servír imágenes de más de una cámara solo necesitas crear un nuevo archivo como «camara1.conf» por cada cámara y cada uno con su configuración específica e insertarlo en tu «motion.conf» como Thread camara1.conf, thread camara2.conf, etc….
– Una alternativa al uso del módulo proxy de Apache es el uso de MjpegProxyGrab. Son dos pequeños programitas escritos en C que básicamente permiten hacer lo mismo que el módulo de Apache, distribuyendo las solicitudes de diferentes cámaras a diferentes puertos.
– Por comodidad y seguridad personaliza los números de los puertos aqui utilizados… y los usuarios y contraseñas que por defecto aparecen en los archivos.
– Evidentemente, si no lo tenías previamente abierto, es necesario abrir el puerto 80 (http) de tu cortafuegos y/o router, así como el puerto 8080 (o el que pongas) si deseas gestionar motion de forma remota.