Servir imágenes de Motion
domingo, 20 de julio de 2008Me 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
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
/etc/init.d/apache restartServerName 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.
edalmava
#1/ 24 de November/2008 a 15:40:22
Otros comentarios de «edalmava»
Entre utilizar MjpegProxyGrab o mod_proxy ¿Cuál recomendaría?
He implementado los dos y me funcionan perfectamente pero en cuestión de seguridad no se cuál opción sería más viable.
Además no se cuál de las dos opciones cargue más el sistema...
Trebol-A
#2/ 24 de November/2008 a 16:20:39
Otros comentarios de «Trebol-A»
Pues no te sé responder a ninguna de las dos. MjpegProxy no lo he probado ya que uso el módulo de Apache mod_proxy. Y respecto la diferencias de cargas en el sistema pues tampoco te sabría decir si hay alguna.
Al principio antes de empezar a usar mod_proxy estuve funcionando accediendo directamente al puerto en que cada una de las cámaras volcaba las imágenes. El siguiente paso fue activar mod_proxy y hacerlo a través del puerto 80 para todas. Entre el primer paso y el segundo no noté ninguna variación en rendimiento, velocidad, etc...
Ahora bién, si tuviera que elegir de nuevo probablemente me decantaría otra vez por el módulo de Apache por dos motivos:
- Al estar mucho más extendido su uso, está mucho más testeado y corregido.
- Al integrarse en la configuración de Apache es mucho más facil de integrar y combinar con otros módulos (como proxy_cache, modrewrite, etc) y realizar cambios sin que la URL final se altere, etc...
edalmava
#3/ 03 de December/2008 a 14:26:20
Otros comentarios de «edalmava»
Gracias Trebol-A por su aporte...
Utilizare el MjpegProxyGrab con algunos volcados para uso interno y mod_proxy con otros para uso externo.
Manuel
#4/ 27 de January/2009 a 21:09:18
Otros comentarios de «Manuel»
Hola, yo que soy medio principiante en estas cosas, me tocó "Googlear" un poco pero al final di con la solución de porque no conseguía hacer funcionar el mod_proxy, y es que me faltaba añadir en la configuración del apache (/etc/apache2/sites-available/default) (Debian) estas lineas:
Order deny,allow
Allow from all
Para después tener lo que apuntas tú, es decir:
DocumentRoot /var/www/
ProxyPass /camara1.cgi http://127.0.0.1:8001
ProxyPassReverse /camara1.cgi http://127.0.0.1:8001
Espero que le sirva a alguien.
Un saludo.
PD: otra forma de cargar módulos del apache de una manera rápida es tecleando en consola "a2enmod proxy", por ejemplo, para activar el módulo PROXY)
Alonso
#5/ 20 de February/2011 a 00:45:47
Otros comentarios de «Alonso»
Hola Trebol-A. Sabes que ya pude visualizar lo que me capturaba motion pero ahora estoy con el siguiente inconveniente. No puedo hecha a andar el módulo proxy.
Estoy trabajando con Ubuntu 10.04 y ya tengo instalado el modulo proxy, pero no sé en que archivo debo agregar lo que tu mencionas.
No sé si este sea el archivo en el que debo agregar: /etc/apache2/sites-available/default
Tengo lo siguiente
ServerAdmin webmaster@localhost
Options FollowSymLinks
AllowOverride None
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
Espero me puedas ayudarcon esto Trebol-A. Muchas gracias.
Trebol-A
#6/ 20 de February/2011 a 12:03:11
Otros comentarios de «Trebol-A»
Hola Alonso,
me alegro te funcione. En cuanto a cargar el módulo proxy dependerá de como tengas configurado tu servidor apache. Si lo no lo has personalizado y el servidor está funcionando tal cual se instala con Ubuntu pues apostaría que sí, que este contenido que muestras es donde deberías incluir la configuración de mod_proxy.
Primero asegurate de que el módulo proxy está cargado por Apache:
apache2ctl -t -D DUMP_MODULES|grep proxy
proxy_module (shared)
proxy_http_module (shared)
Syntax OK
y después inserta en tu documento las líneas que necesites (personalizadas a tu gusto, claro):
ProxyPass /camara1.cgi http://127.0.0.1:8910
ProxyPassReverse /camara1.cgi http://127.0.0.1:8910
Saludos
Alonso
#7/ 22 de February/2011 a 04:58:51
Otros comentarios de «Alonso»
Trebol-A muchas gracias por responder.
Tengo cargado correctamente el módulo proxy en Apache y lo tengo configurado tal como me lo configuró Ubuntu ;) Al parecer en el mensaje anterior no salio las etiquetas () que contiene mi archivo default. He colocado las siguientes líneas y coloque el símbolo # para que puedas ver toda la info.
#
# ServerAdmin alonso.anchapaxi@interactive.net.ec
#
# Order deny,allow
# Allow from all
#
# ProxyPass /camara1.cgi http://127.0.0.1:8081
# ProxyPassReverse /camara1.cgi http://127.0.0.1
#
Al reiniciar apache obtego lo siguiente:
alonso@alonso:~$ sudo /etc/init.d/apache2 restart
[sudo] password for alonso:
* Restarting web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
[ OK
Pongo a correr Motion y al ingresar al browser mediante localhost:8081 puedo ver todo lo que captura mi webcam. Pero al colocar localhost/camara1.cgi obtengo el siguiente error:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, alonso.anchapaxi@interactive.net.ec and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Apache/2.2.14 (Ubuntu) Server at 127.0.0.1 Port 80
He revisado los log de y se tiene lo siguiente:
[Mon Feb 21 22:57:15 2011] [warn] proxy: No protocol handler was valid for the URL /camara1.cgi. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
Trebol-A, de antemano te quedo muy agradecido por la ayudaque me puedas brindar. Saludos ;)
Alonso
#8/ 22 de February/2011 a 05:39:50
Otros comentarios de «Alonso»
Hola Trebol-A
Añadí lás líneas que tu me indicas al archivo "default". Reinicié apache y todo anda ok.
Al poner a funcionar Motion abro mi browser mediante localhost:8081 y puedo ver todo lo que mi webcam captura, pero al colocar localhost/camara1.cgi obtengo el siguiente error "Erro 403":
Forbidden
You don't have permission to access /camara1.cgi on this server.
Espero puedas ayudarme. Saludos.
Alonso
#9/ 22 de February/2011 a 05:54:21
Otros comentarios de «Alonso»
Adicionalmente la ir a revisar el log de apache (/var/apache2/log/error.log) se obtiene lo siguiente:
[Mon Feb 21 23:51:45 2011] [error] [client 127.0.0.1] client denied by server configuration: proxy:http://127.0.0.1:
Trebol-A
#10/ 22 de February/2011 a 09:49:12
Otros comentarios de «Trebol-A»
Hola Alonso,
en los comentarios están limitados algunos caracteres como < ó > por lo que el copy+paste de configuraciones puede no funcionar bien.
1. En unas lineas escribes 127.0.1.1 y en otras 127.0.0.1 no sé si es error tuyo al escribir ó qué, pero deberías revisarlo, la ip de tu máquina es 127.0.0.1
2. En la configuración que pegas, el nombre de los módulos ProxyPass y ProxyReseverse está precedido del simbolo almohadilla (#) es decir que son lineas comentadas, es decir que Apache las está ignorando. Debes descomentarlas, quitar el # de delante para que sean ejecutadas.
Suerte
Alonso
#11/ 07 de June/2011 a 06:48:54
Otros comentarios de «Alonso»
Hola Trebol-A, espero te encuentres bien. Nuevamente estoy tratando de hechar a andar Motion. Te comento en que estado estoy.
1.- He configurado el servidor web de apache desde cero y le instalé el modulo proxy, luego instalé motion. Todo anda correcto. Es decir puedo ver lo que captura mi webcam mediante http://localhost:8081 y cuando coloco la ip de mi PC desde otra PC puedo ver el mensaje de bienvenida que coloqupe en /var/www/index.html. Con esto puedo probar que motion y apache se encuentran funcinando correctamente.
2.1-- Ahora deseo poner a funcionar el múdulo proxy de apache. En el siguiente archivo /etc/apache2/sites-available/default coloqué lo siguiente:
ProxyPass /camara1 http://127.0.0.1:8081
ProxyPassReverse /camara1 http://127.0.0.1:8081
Reinicio apache y luego pongo a funcionar motion y cuando en el browser coloco: http://localhost/camara1 obtengo el siguiente error:
Forbidden
You don't have permission to access /camara1 on this server.
Apache/2.2.14 (Ubuntu) Server at localhost Port 80
Voy al archivo .log de apache ubicado en /var/log/apache2/error.log y el mensaje que se genera es el siguiente:
[error] [client 127.0.0.1] client denied by server configuration: proxy:http://127.0.0.1:8081
2.2.- Ahora si sigo la recomendacion Manuel y coloco:
Order deny,allow
Allow from all
ProxyPass /camara1 http://127.0.0.1:8081
ProxyPassReverse /camara1 http://127.0.0.1:8081
Reinicio nuevamente apache y luego pongo nuevamente a funcionar motion y al colocar en my browser http://localhost/camara1 obtengo el siguiente error:
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, webmaster@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
Apache/2.2.14 (Ubuntu) Server at localhost Port 80
Voy al archivo .log de apache y el nuevo mensaje que se genera es el siguiente:
[warn] proxy: No protocol handler was valid for the URL /camara1. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.
Trebol-A espero puedas guiarme como siempre para encontrar una soluciòn a este problema. Muchas gracias por la ayuda uqe me puedes brindar.
Trebol-A
#12/ 07 de June/2011 a 10:31:26
Otros comentarios de «Trebol-A»
Hola Alonso,
para evitar confusiones yo empezaría cambiando los nombres que has dado a las cámaras (camara1, camara2) por algo más descriptivo. Lo que sirve MOTION y lo que se va a encontrar el navegador que acuda a tu http://localhost/camara1 es un flujo de imagenes en formato MJPEG para evitarte problemas metele una extensión a tus nombres del PROXY para que indique esto ó que te permita redefinir algúm mimetype personalizado a tu gusto.
Es decir yo cambiaría camara1 a camara1.mjpeg, por ejemplo, ó camara1.video y define .video como image/mjpeg.
De este modo, además de mucho más claro (no hay confusión con un posible directorio llamado "camara1") le estas diciendo al navegador que es lo que se va a encontrar en camara1.mjpeg.
Una vez hecho esos cambios, si apuntas Firefox (en otros navegadores puede no funcionar) a tu http://localhost/camara1.mjpeg ¿ves la imagen de la cámara servida por MOTION?
Asegurate de no tener ningún .htaccess en el directorio principal de tu servidor que esté prohibiendo ó filtrando el acceso. Desactivalo al menos temporalmente o te puedes volver loco...
¿Si haces apache2ctl -M|grep proxy aparecen proxy_module y proxy_http_module cargados, no?
Saludos
Alonso
#13/ 09 de June/2011 a 07:10:03
Otros comentarios de «Alonso»
Hola Trebol-A.
Ante todo quiero darte las gracias por toda tu ayuda. Sabes que ya esta funcionando correctamente el mòdulo proxy de apache. GRACIAS NUEVAMENTE.
Mi error fue que no tenia cargado el módulo proxy_http. Para cargarlo fue necesario ejecutar: sudo a2enmod proxy_http (Por si a alguien le sirve). En este momento ya puedo ver localmente y desde otra PC lo que esta capturando mi webcam mediante: localhost/camara1.cgi o miIP/camara1.cgi
Ahora deseo entender más sobre el funcionamiento de cambozola ;-)
1.- En el siguiente archivo (/var/www/camara1.html) coloqué el siguiente código para poder ver lo de mi webcam localmente como desde otra PC:
Servidor web DESKTOP trabajando correctamente!
Como puedes ver son tus mismas lìneas de codigo agregadas un texto (Servidor web DESKTOP trabajando correctamente!) para guiarme sobre el funcionamiento de mi servidor web.
Cuando pongo a andar el servidor web y motion hago las siguientes pruebas:
a) coloco: localhost/camara1.cgi y capturo lo de mi webcam
b) coloco: localhost/camara1.html y solamente me imprime el mensaje: Servidor web DESKTOP trabajando correctamente!
Esto a pesar de que el cambozola.jar se encuentra ubicado en el mismo directorio que camara1.html, es decir esta ubicado en /var/www.
Espero puedas ayudarme a entender que esta sucediendo.
Muchas gracias.
Trebol-A
#14/ 09 de June/2011 a 15:26:58
Otros comentarios de «Trebol-A»
Hola Alonso,
echale un vistazo a registro log de errores de Apache a ver si te dá alguna pista. Sin ver este registro ni la página que has construido es complicado averiguar en donde se produce el fallo.
Asegurate de que el archivo cambozola.jar está en la misma carpeta del documento html y que en el código HTML aparece simplemente "cambozola.jar",(sin directorio).
La máquina desde la que te conectas debe tener JAVA instalado y funcionando. Puedes comprobarlo conectandote antes aquí: http://camara.trebol-a.com/camara/1 si puedes ver la conexión de mi cámara es que tiene JAVA y funciona de lo contrario el problema no está en tu servidor.
Saludos
Alonso
#15/ 10 de June/2011 a 06:13:17
Otros comentarios de «Alonso»
Trebol-A.
El error se debìa a que en ubuntu no tenìa instalado java. Al ingresar desde una PC con windows si pude visualizar lo que capturaba mi camara mediante cambozola.jar.
Algo adicional, en las lìneas que tu tienes para agregar cambozola en un archivo html lo tienes de la siguiente manera: value="camara1.cgi" hace falta colocar / por lo que la manera correcta serìa value="/camara1.cgi".
Espero sirva de ayuda a alguien.
Saludos.
Alonso
#16/ 14 de September/2011 a 07:43:31
Otros comentarios de «Alonso»
Hola Trebol-A,
Espero te encuentres bien, sabes que compré una cémara IP NC9800 (http://chinatime.itrademarket.com/1934812/ip-camera-wireless-nc9800.htm) y no sé que info colocar en netcam_url, pude revisar la pagina oficial de Motion y no tiene nada acerca de esta cámara.
Ya tuve experiencia con otra camara IP (http://www.emixt.com/portable-digital-color-ccd-ip-camera-silver-.html) y en el campo netcam_url colocaba: netcam_url http://192.168.5.223:8083/?user=admin&pwd=passy .Esta info la encontre en la pagina oficial de Motion y con esto podia acceder a mi camara IP sin ningún problema.
Ahora con la nueva camara IP cuando coloco esta misma información (cambiando IP y Puerto) en netcam_url tengo el siguiente error:
libjpeg decompression failure on first frame - giving up!
Este error pienso que se debe a que no estoy colocando de una manera adecuada netcam_url, este error ya se me presentó con la antigua cámara y luego de googlear pude encontrar la info correcta que debía colocar en netcam_url.
Esta vez no he podico encontrar la info para mi nueva camara IP por lo que recurro a tí.
Espero puedas ayudarme con este inconveniente.
Desde ya te quedo muy agradecido por tu ayuda.
Saludos.
Trebol-a
#17/ 14 de September/2011 a 09:45:46
Otros comentarios de «Trebol-a»
Hola Alonso,
ese error viene dado porque motion no recibe una imagen mjpeg como espera. Como dices la mayor parte de las veces porque la ruta está mal indicada. Normalmente la ruta a la imagen ó vídeo de la cámara suele terminar en video.cgi, image.cgi, mjpeg.cgi, video.mjpg ... tendrás que hacer pruebas ó consultar el manual de tu cámara, cada modelo suele tener su ruta particular.
Casi con toda seguridad la url a la imagen/video servido por la cámara NO es la ruta que commentas. Prueba a conectar con tu cámara poniendo en Firefox url como
http://192.168.5.223/image.cgi
http://192.168.5.223/image.mjpg
http://192.168.5.223/video.cgi
http://192.168.5.223/VIDEO/video.cgi
http://192.168.5.223/VIDEO/image.cgi
etc....
Por otro lado, estas cámaras suelen disponer de un sistema integrado de detección de movimientos por lo que conectarlas a Motion suele ser innecesario. Ten lo en cuenta.
Saludos
Alonso
#18/ 02 de January/2012 a 17:31:29
Otros comentarios de «Alonso»
Hola Trebol -A
Dando continuidad a este hilo, te comento que luego de Googlear y Googlear encontré la ruta para hacer funcionar la cámara IP wireless mencionada anteriormente. El url correcto es:
netcam_ur /DirecciónIP:puerto/tmpfs/auto.jpg (obtiene una captura de 170x144 px) ó
netcam_ur /DirecciónIP:puerto/tmpfs/snap.jpg (obtiene una captura de 640x480 px).
Espero sirva a alguien ;-)
Saludos.
CQ
#19/ 20 de April/2013 a 20:15:13
Otros comentarios de «CQ»
Que tal, buscando en google me encontre con este foro donde quiero pedir ayuda sobre mi problema con motion.
Tengo un applet (linux) que debe mostrar video desde una camara web (usb). Ya configure motion:
target_dir /srv/http
jpeg_filename imagen1
webcam_port 8080
webcam_localhost off
Tambien configure un servidor en windows: webcam xp, donde solo fue necesario indicarle el puerto 8080 y la direccion ip: 192...,
Cuando accedo a los servidores desde un navegador de internet (chromium, firefox, etc), solo coloco la direccion ip, el puerto y enter, por ejemplo: 192.168.222.234:8080/ ,con eso puedo ver el video desde ambos servidores.
Ahora cuando quiero ver el nombre de la imagen que se esta mostrando en el navegador de internet, solo doy clic derecho y veo el codigo.
* En el caso del video que ejecuta el servidor en windows, me dice que la imagen se llama cam1.jpg
* En el caso del video que ejecuta el servidor en linux, no me dice el nombre de la imagen, solo la direccion ip y el puerto.
En el applet, para poder ver el video del servidor en windows solo coloco 192.168.22.234:8080/cam1.jpg y se ve perfectamente.
Sin embargo para poder ver el video del servidor en linux, como no conozco el nombre de la imagen coloco lo siguiente:
* 192.168.222.234:8080/srv/http/imagen1.jpg o tambien
* 192.168.222.234:8080/imagen1.jpg
Cualquiera de las dos opciones, no muestran el video.
¿Alguien tendrá alguna idea de como hacer que se muestre la imagen que se esta capturando desde el servidor en linux (motion)?
Gracias.
Trebol-a
#20/ 20 de April/2013 a 23:08:55
Otros comentarios de «Trebol-a»
Hola CQ, no has llegado a un foro, sino a un blog, lo que pasa es que he escrito tantos apuntes sobre Motion por aquí que puede parecer un foro!! :D Date una vuelta por la web usando el buscador de arriba-derecha y busca apuntes sobre "Motion" y verás alguno que te pueda interesar.
A ver, MOTION sirve un flujo de imagen en formato MJPEG en la ip del ordenador que se está ejecutando y en el puerto definido en webcam_port del fichero de configuración de cada cámara.
En la configuración que indicas los parametros target_dir y jpeg_filename no tienen una utilidad directa para mostrar la imagen de webcam. Solo indican donde y como se llamarán las imágenes que guardará MOTION cuando detecte movimiento.
Los parámetros que te interesan son los webcam_***
Si como dices el archivo de configuración de tu cámara indica webcam_port = 8080
al abrir en Firefox la url http://127.0.0.1:8080
Verás un flujo de webcam_maxrate imágenes/segundo de tu webcam. (fijate que la dirección tiene nada más que IP:PUERTO sin jpg, http, ni nada más)
Ahora bien, si quieres verlo desde otro ordenador tendrás que cambiar la IP hacia la que apunta Firefox. Si es un ordenador en la misma intranet pues será algo
http://192.168.22.234:8080
Pero, claro, el ordenador que está mostrando la imagen tiene que tener el cortafuegos abierto para el puerto 8080 para que cualquier otro ordenador puede conectarse.
Si es un ordenador remoto pues tendrás que poner algo como http://64.123.45.678:8080
Como el puerto 8080 está normalmente dedicado a las conexiones HTTPS (seguras) te aconsejaría que usases otro puerto (p.ejemplo 8081) porque es posible que alguna navegador te de la lata con ese puerto o incluso el servidor Apache si lo tiene instalado o lo instalas en el futuro.
Por otro lado, como decía, el flujo de imagenes servidor por MOTION es un MJPEG (Multi-JPEG), Firefox lo interpreta normalmente bien, y creo que Google-Chrome tambien, pero InternetExplorer al menos en sus versiones 6-7 creo recordar que no lo cogía y simplemente se pone a descargar en lugar de visualizar la imagen.
Por esto se suele usar en HTML un visor tipo JAVA Cambozola.jar o tipo Flash para mostrar las webcam en una web y hacer PLAY/PAUSE, precargas, etc...
Si quieres coger este applet o ver como lo tengo yo montado pasate por :
http://camara.trebol-a.com/ Actualmente tengo 6 cámaras montadas.
Saludos.
CQ
#21/ 21 de April/2013 a 21:05:22
Otros comentarios de «CQ»
Hola Trebol-A
Agradezco bastante tu atensión. Ya visite el applet con tus 6 camaras, justamente yo deseo crear uno similar, bueno, no con tantas camaras solo 2 maximo. Aunque por ahora estoy buscando que funcione con una.
Sobre los parametros target_dir y jpeg_filename tal como lo mensionas no sirven para mostrar la imagen sino para la deteccion de movimiento. Ya cambie el puerto al 8081.
Mi computadora que contiene el servidor motion por ahora es accedida desde otras computadoras en una intranet. Cuando acceso al servidor desde otra computadora a travez de firefox o chromium, tal como lo mencionas escribo algo asi http://192. 168.222.145:8081/ y funciona perfectamente, sin embargo, necesito que ese streaming se muestre en un applet (como tu pagina con 6 camaras), por ello, en el codigo del applet tengo que colocar la url (http://192 .168.222.145:8081/) y el nombre de la imagen.
Aqui es donde surge mi duda debido a que no conozco el nombre de la imagen que utiliza motion para hacer el streaming; en otro servidor de video en Windows (webcam xp), puedo ver el codigo fuente del firefox o chromium, y el nombre de la imagen me la muestra como cam1.jpg; entonces en el applet coloco http://192. 168.222.145:8081/cam1.jpg y se muestra el streaming perfectamente. Al tratar de ver el codigo fuente en firefox o chromium cuando se esta mostrando el streaming de motion, no me dice cual es el nombre de la imagen.
Mi duda es: ¿cual es el nombre de la imagen que motion utiliza al hacer el streaming?, con eso yo podria colocar como url en el applet http://192. 168.222.145:8081/nombre_imagen
Te agradezco mucho dedicar un poco de tu tiempo a mi duda. Mientras seguiré analizando algunos apuntes de tu página.
Que estes bien.
Trebol-a
#22/ 22 de April/2013 a 09:55:45
Otros comentarios de «Trebol-a»
Hola CQ,
muchas cámaras comerciales, sobretodo cámaras IP, usan urls del tipo ip-computador/IMAGE.JPG ó ip-computadora/VIDEO.CGI , depende del software que gestiona esas cámara. MOTION no hace eso, no tiene ningún IMAGE.JPG ó VIDEO.CGI en tiempo real, simplemente devuelve el flujo de imágenes en formato MJPEG en el puerto que le digas, sin ningún tipo de "contenedor". Si necesitas un formato de url del tipo http: //192.168.222.145/ image.jpg tienes que hacerlo expresamente tu mismo
Si lo que te interesa es disponer de una imagen estática actualizada cada X segundos lo más cómodo sería que activases la opción de MOTION snapshot_interval e indicarle, por ejemplo, snapshot_interval = 10 y en la opcion on_picture_save = mv %f /mi/carpeta/servidor/html/imagenes/captura.jpg.
Con eso cada 10 segundos MOTION tomaría una imagen llamada como en snapshot_filename y la movería a tu carpeta para una vez ahí poder acceder a dicha imagen desde tus applets y con una url a tu gusto http: //192.168.222.145/ imagenes/captura.jpg.
Si quieres hacer algún postproceso a la imagen antes de subirla a la carpeta pública puedes poner directamente un script personalizado en on_picture_save = /home/user/manipular_imagen.sh %f (donde, %f corresponde a la imagen que acaba de capturar MOTION)
Saludos
CQ
#23/ 23 de April/2013 a 21:14:45
Otros comentarios de «CQ»
Que tal Trebol-A,
Ya hice las configuraciones que mencionas para acceder a la imagen estática actualizada cada cierto tiempo:
* snapshot_interval = 1
* on_picture_save = mv %f /srv/http/imagen.jpg
En la ruta /srv/http/ efectivamente se coloca la imagen cada segundo una vez que motion inicia el streaming; ahora en el applet coloco
- http://192. 168.222.145:8081/imagen.jpg o
- http://192. 168.222.145:8081/srv/http/imagen.jpg o
- http://192. 168.222.145/imagen.jpg o
- http://192. 168.222.145/srv/http/imagen.jpg
Pero lamentablemente el applet sigue sin mostrar la imagen; no se a que se deba, porque con el otro servidor de imagenes (webcam xp) se muestra perfectamente.
¿Ojala tengas alguna idea del porque?, ¿o de casualidad conoces otro servidor de streaming en linux similar al motion?. Muchas gracias.
Saludos.
Trebol-a
#24/ 23 de April/2013 a 21:33:24
Otros comentarios de «Trebol-a»
Hola CQ,
una vez la imagen esté movida las carpetas de tu servidor web la configuración de MOTION resulta indiferente por lo tanto en las urls que pones sobran los :8081, pasan a ser un documento más del servidor web y que sean o no accesibles dependen de la configuración que tengas en el servidor web. Digamos que MOTION ya hizo su trabajo, ¿porque no son accesibles desde otro ordenador y si desde el mismo servidor? pues tienen toda la pinta de ser un problema de permisos de acceso.
¿Cual es la ruta local donde estás moviendo las fotografías? veo que escribes /srv/http y normalmente suele ser /srv/www/htdocs, ¿si pones un archivo.txt en /srv/http/archivo.txt puedes verlo desde http://192. 168.222.145/archivo.txt?
Echa un vistazo a lo que te dice el archivo de errores de apache (normalmente /var/log/apache2/error_log) probablemente te esté diciendo algo como "image.jpg not found" porqué esté buscandola en alguna carpeta que no está.
saludos.
CQ
#25/ 24 de April/2013 a 20:57:01
Otros comentarios de «CQ»
Hola Trebol-A,
Espero no cansarte con mis dudas. Respecto a la accesibilidad de las imagenes, si puedo acceder a ellas desde otra computadora y desde la misma computadora a travez de algun explorador de internet.
* Si accedo por medio del puerto 8081 lo que escribo es http: //192.168.222.145:8081 en este caso se ve el flujo de imagenes como un video en tiempo real
* Si accedo por medio de la imagen lo que escribo es http://192. 168.222.145/imagen.jpg en este caso solo se muestra la imagen estática que accede en ese momento, para ver otra imagen necesito refrescar el explorador de internet
Ahora en mi applet cuando uso el servidor de windows es necesario colocarle el puerto (8081) para que se vea como un video en tiempo real, es decir, escribo lo siguiente http://192. 168.222.145:8081/cam1.jpg, pero si ahora escribo la direccion sin el puerto http://192. 168.222.145/imagen.jpg tal como configuramos a motion, la imagen no se muestra.
Respecto a la direccion /srv/www/htdocs yo no lo tengo, posiblemente sea porque mi distribucion es Archlinux, en mi caso tengo /srv/http. Ya revise el archivo de errores de apache y no tengo algun mensaje de que la imagen no se encuentre, ya que ciertamente si puedo acceder a las imagenes desde la computadora local y remotas.
Creo que tendre que revisar mas a fondo mi applet y/o hacer que motion pueda darme un nombre de imagen en el flujo de imagenes cuando esta haciendo streaming, ya que solo asi podre hacer que se muestre en mi applet. Si sabes de algun programa que me permita hacer eso, te pido me comentes. Muchas gracias por tu tiempo.
Saludos.
Trebol-a
#26/ 24 de April/2013 a 21:43:24
Otros comentarios de «Trebol-a»
Pues creo que con conforme avanzan los comentarios entiendo menos tu problema, dices:
-para que se vea como un video en tiempo real, es decir, escribo lo siguiente c
Si ahí ves el vídeo en tiempo real lo deberías ver tambien quitando "cam1.jpg", es decir en: http://192. 168.222.145:8081/cam1.jpg de la dirección ya que ese video en tiempo real lo sirve MOTION y este IGNORA lo de "cam1.jpg", como si le pones "camara33.jpg" seguirá mostrando el video en tiempo real.
Si al quitar el puerto 8081 ya no puedes acceder a la imagen, entonces OBLIGATORIAMENTE el problema está en el servidor web (en la configuración de Apache) y nada tiene que ver MOTION en ese problema y por lo tanto tienes que comprobar que la configuración de Apache es correcto, ya sea por problema de permisos o de firewall si estás copiando una imagen a una carpeta y no puedes acceder a ella...el problema es evidente que está en el servidor web.
Tienes que averiguar en que carpeta tienes que copiar las imagenes de MOTION para poder acceder a ellas desde fuera.
Si tu applet necesita que la url sirva un archivo JPG estático la única manera que tienes de hacerlo con MOTION es capturar fotogramas, copiarlos a una carpeta y ponerlos a disposición de tu applet. Si tu applet tolera un flujo de vídeo MJPEG y necesitas que la url sea algo como http://192. 168.222.145/mivideo.mjpeg deberias hacerlo usando las opciones del módulo de Apache MOD_PROXY con el que podrías decirle al servidor web que sirva el flujo de Motion en una url específica a tu gusto.
(hablo de memoria), haciendo algo como:
ProxyPass /mivideo.mjpeg http://127.0.0.1:8081
Mirate la información ProxyPass.
Saludos
22 de December, 2024 @ 02:52