{"id":1373,"date":"2009-06-15T23:49:52","date_gmt":"2009-06-15T21:49:52","guid":{"rendered":"http:\/\/bitacora.eniac2000.com\/?p=1373"},"modified":"2009-06-15T23:49:52","modified_gmt":"2009-06-15T21:49:52","slug":"streaming-de-webcam-para-monitorizacion-remota","status":"publish","type":"post","link":"https:\/\/bitacora.eniac2000.com\/?p=1373","title":{"rendered":"Streaming de webcam para monitorizaci\u00f3n remota"},"content":{"rendered":"<p>Una de las grandes ventajas de los sistemas linux es su flexibilidad: permiten desde realizar instalaciones est\u00e1ndar de escritorio hasta realizar instalaciones de grandes servidores de procesos de datos. Hoy voy a hablar de una posibilidad que permiten: realizar un sistema de monitorizaci\u00f3n remota mediante webcam. Esta aplicaci\u00f3n responder\u00eda al siguiente esquema:<\/p>\n<ul>\n<li>Una estaci\u00f3n remota, con un sistema linux b\u00e1sico con una instalaci\u00f3n en modo consola, y una webcam a\u00f1adida. Idealmente este equipo deber\u00eda ser de peque\u00f1o formato, como un <a href=\"http:\/\/www.mini-itx.com\/reviews\/pico-itx\/\">Pico-ITX<\/a>, pero cualquier equipo ser\u00eda v\u00e1lido. Con una instalaci\u00f3n b\u00e1sica de consola ser\u00eda m\u00e1s que suficiente.<\/li>\n<li>Un equipo de escritorio, dedicado a la monitorizaci\u00f3n. Este equipo, en desde el que se va a realizar el control de la estaci\u00f3n remota, requerir\u00eda disponer de un entorno gr\u00e1fico, a discreci\u00f3n del usuario<\/li>\n<\/ul>\n<p>El sistema operativo, obviamente, tendr\u00eda que ser linux. Cualquier distribuci\u00f3n valdr\u00eda, pero por mis preferencias personales he de recomendar <a href=\"http:\/\/www.debian.org\">Debian<\/a>, una magn\u00edfica distribuci\u00f3n con la flexibilidad suficiente como para permitir una sencilla instalaci\u00f3n de estos dos entornos tan diferentes.<\/p>\n<p>La piedra angular de esta instalaci\u00f3n es el programa <a href=\"http:\/\/en.wikipedia.org\/wiki\/Netcat\">netcat<\/a>, la <em>navaja suiza<\/em> de los administradores de sistemas. Esta herramienta tiene como principal caracter\u00edstica es su capacidad para abrir puertos TCP\/IP y redireccionar flujos de datos del sistema operativo por ellos. Tambi\u00e9n tiene una funci\u00f3n trascendental los t\u00faneles SSH, que permiten enlazar puertos en una m\u00e1quina remota (a la que se realiza la conexi\u00f3n SSH) con otra m\u00e1quina que est\u00e9 en la red local del sistema cliente (esto tambi\u00e9n incluye, obviamente, la propia m\u00e1quina cliente).<\/p>\n<p>Otra suposici\u00f3n de la que partimos es que el cliente y el servidor NO se encuentran en la misma red local, sino que se encuentran en redes separadas, ya sea porque hay alg\u00fan elemento como un cortafuegos interpuesto, o bien porque se encuentran enlazadas por una red WAN. En cualquier caso, algo impide impide que se pueda acceder a <em>cualquier<\/em> puerto entre el cliente y el servidor, estando limitado a accesos por puertos bien conocidos, como SSH.<\/p>\n<p>En primer lugar, habr\u00eda que configurar el sistema operativo del servidor para que reconozca la webcam. Esta tarea queda fuera de este mini-tutorial, por lo que me remito a internet para realizar esta labor. Sin embargo, en un sistema linux reciente, tendr\u00eda que ser m\u00e1s que suficiente con instalar Video For Linux 2, ya que los m\u00f3dulos necesarios suelen venir por defecto en el kernel. Esto deber\u00eda provocar que la webcam, al ser conectada al servidor, haga aparecer el dispositivo <em>\/dev\/video0<\/em> (o algo por el estilo).<\/p>\n<p>Una vez hecho esto, la idea en el servidor es la siguiente: recoger el flujo de datos de la webcam a trav\u00e9s del dispositivo correspondiente (\/dev\/video0,o el que corresponda), y mediante netcat, abrir un puerto (por ejemplo, el 2000) y dirigir el flujo de datos anterior a este puerto, que estar\u00e1 preparado para recibir conexiones. Esto se har\u00eda mediante el siguiente comando:<\/p>\n<blockquote><p>$ cat \/dev\/video0 | nc -l -p 2000<\/p><\/blockquote>\n<p>Por otro lado, en el cliente, habr\u00eda que realizar la siguiente operaci\u00f3n: realizar un t\u00fanel SSH al servidor, de tal manera que se enlace el puerto que hemos abierto en el servidor (en este caso, el 2000) con un puerto en la m\u00e1quina cliente (en este caso, el 270001). A continuaci\u00f3n, con netcat se recoge el flujo de datos del puerto 27001; por \u00faltimo, mediante un <em>pipe<\/em>, se recoge la salida del comando anterior (que ser\u00eda mostrada por la salida est\u00e1ndar) hacia un programa de visualizaci\u00f3n de v\u00eddeo adecuado, como mplayer o xine. La sucesi\u00f3n de comandos ser\u00eda la siguiente: <\/p>\n<blockquote><p>ssh -f -L 27001:127.0.0.1:2000 usuario@servidor  sleep 10;  nc 127.0.0.1 27001 | xine &#8211;<\/p><\/blockquote>\n<p>Un cutre-esquema de lo expuesto anteriormente ser\u00eda el siguiente:<\/p>\n<figure id=\"attachment_1416\" aria-describedby=\"caption-attachment-1416\" style=\"width: 400px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2009\/06\/diagrama1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/bitacora.eniac2000.com\/wp-content\/uploads\/2009\/06\/diagrama1-400x181.jpg\" alt=\"Diagrama de la instalaci\u00f3n\" title=\"Diagrama de la instalaci\u00f3n\" width=\"400\" height=\"181\" class=\"size-medium wp-image-1416\" \/><\/a><figcaption id=\"caption-attachment-1416\" class=\"wp-caption-text\">Diagrama de la instalaci\u00f3n<\/figcaption><\/figure>\n<p>Con toda esta pel\u00edcula conseguir\u00edamos visualizar desde el equipo cliente la webcam del servidor.<\/p>\n<p>Una peque\u00f1a variaci\u00f3n de lo anterior permite, por otro lado, hacer streaming de ficheros de v\u00eddeo (o audio). Con el siguiente comando abrir\u00edamos el puerto local 2000 para accesos desde un servidor remoto, que leer\u00edan del fichero <em>video.avi<\/em>:<\/p>\n<blockquote><p>nc -l -p 2000 < video.avi<\/p><\/blockquote>\n<p>Por la parte del cliente seguir\u00edamos usando el comando anterior.<\/p>\n<p>Existen algunos corolarios a este mini-tutorial. Uno de ellos consistir\u00eda en lograr que el acceso al servidor sea sin contrase\u00f1a, bas\u00e1ndonos en el uso de certificados de usuario. Pero eso ya quedar\u00e1 para otro d\u00eda.<\/p><\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Una de las grandes ventajas de los sistemas linux es<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[13],"tags":[517,986,1165,1270,1580,1598,1774],"series":[],"class_list":["post-1373","post","type-post","status-publish","format-standard","hentry","category-informatica","tag-debian","tag-linux","tag-netcat","tag-pico-itx","tag-streaming","tag-tunel-ssh","tag-webcam"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/1373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1373"}],"version-history":[{"count":0,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=\/wp\/v2\/posts\/1373\/revisions"}],"wp:attachment":[{"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1373"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1373"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/bitacora.eniac2000.com\/index.php?rest_route=%2Fwp%2Fv2%2Fseries&post=1373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}