Cuaderno de Campo

Apuntes, Ideas y Observaciones

Servir imágenes de Motion

20 de Julio, 2008

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):

CODE:
  1. gqcam /dev/video0
  2. o bien:
  3. mplayer -tv driver=v4l2;device=/dev/video0 tv://

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

CODE:
  1. cd ~
  2. 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ámetros

CODE:
  1. control_port 8888
  2. control_localhost off
  3. #personaliza la linea siguiente
  4. control_authentication mi_usuario:mi_contraseña
  5. 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:

CODE:
  1. videodevice /dev/video0
  2. webcam_port 8001

Llegados a este punto, ya puedes iniciar motion. Abre una consola, al ejecutar motion deberias ver algo como esto:

CODE:
  1. trebol-a@linux:~/>motion
  2. [0] Processing thread 0 - config file /home/trebol-a/.motion/motion.conf
  3. [0] Processing config file /home/trebol-a/.motion/camara1.conf
  4. [0] Motion 3.2.10 Started
  5. [0] Motion going to daemon mode
  6. 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:

CODE:
  1. 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:

CODE:
  1. http://127.0.0.1:8888

Administracion de motionEn 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:

CODE:
  1. su
  2. apache2ctl -M
  3. Loaded Modules:
  4. ...
  5. proxy_module (shared)
  6. proxy_http_module (shared)
  7. ...
  8. 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):

CODE:
  1. APACHE_MODULES="proxy proxy_http"

(en otros GNU/Linux probablemente el archivo a editar esté en /etc/apache2/modules.conf)
Reinicia apache

CODE:
  1. su
  2. /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 Directory

CODE:
  1. ServerName localhost
  2. DocumentRoot "/srv/www/htdocs"
  3. #nuevas líneas
  4. ProxyPass /camara1.cgi http://127.0.0.1:8001
  5. ProxyPassReverse /camara1.cgi http://127.0.0.1:8001
  6. #fin nuevas lineas
  7. <Directory "/srv/www/htdocs">
  8. ....

reinicia el servidor

CODE:
  1. su
  2. /etc/init.d/apache2 restart

motion2Ahora 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:

CODE:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Mi cámara</title>
  6. </head>
  7. <body>
  8. <h2>Imagenes desde mi Webcam</h2>
  9. <applet code="com.charliemouse.cambozola.Viewer" archive="cambozola.jar" width="320" height="240" MAYSCRIPT="MAYSCRIPT">
  10. <param name="url" value="camara1.cgi">
  11. </applet>
  12. </body>
  13. </html>

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.

Deja aquí tu comentario


« Refugios para Salamanquesas

La cena de las Salamanquesas, adivinanza »


Cuaderno de campo es un blog mantenido por Trebol-a y en el que escriben Trebol-a, Miguel y Mónica
Si quieres saber algo más sobre los autores acude a la página acerca-de, si quieres contactar con alguno de nosotros hazlo a través de contactar

Todo el contenido de la web (imágenes, textos, vídeos, a excepción de aquellas obras de otros autores enlazados por Cuaderno de Campo) se acoge a los términos de la licencia Creative Commons