Hola compañer@s,<div><br></div><div>Tras varias semanas invistigando sobre el tema y rastreando la web al final encontré la solución (quizas hay otras, pero desde luego creo que es la más sencilla). Para la parte de comunicar el servidor web con el TrafficMonitor al final he utilizado PHP+Python y Ice. Cuando el usuario cambia algun parametro de configuración, llamo a un script de PHP que a su vez llama a un script de Python que se encarga de ejectuar la llamada Remota con ICE y cambiar la configuración utlizando los nuevos datos recibidos. El script PHP despude de ejecutar el script de Python, genera dinamicamente la nueva configuración.<br>

<div><br></div><div>Para mostrar el video &quot;enrequicido&quot; (video recibido desde el cameraserver + cosas que dibujo utilizando GDK) lo que hago es lo siguiente:</div><div><br></div><div>1) Guardar el buffer de dibujo de GDK utilizando el metodo &quot;save&quot; de la clase PixBuff en una imagen jpeg, el codigo queda mas o menos como lo siguiente:</div>

<div><br></div><div><div>         // Create a Gdk::Drawable from pixmap</div><div>         Glib::RefPtr&lt; Gdk::Drawable &gt; drawable(window);</div><div>         const colorspaces::Image&amp; img = model.getImage();</div>

<div>         Glib::RefPtr&lt;Gdk::Pixbuf&gt; pix_buff = Gdk::Pixbuf::create(drawable,</div><div>                                                                  0,</div><div>                                                                  0,</div>

<div>                                                                  320,   // tamaño de la iamgen</div><div>                                                                  240);  //</div><div><br></div><div>        pix_buff-&gt;save( &quot;image.jpeg&quot;, &quot;jpeg&quot; );</div>

</div><div><br></div><div>Este código vuelta la imagen que hemos generado (con los dibujos y todo) al fichero image.jpeg</div><div><br></div><div>Ahora queda la parte de generación del video y servirlo al navegador. Para ello al final o que he utilizado es un formato llamado MJPEG, que es básicamente un stream de video hecho a base de imagenes sucesivas JPEG. Este formato se basa en el content-type &quot;multipart&quot;. </div>

<div><br></div><div><a href="http://en.wikipedia.org/wiki/Motion_JPEG">http://en.wikipedia.org/wiki/Motion_JPEG</a></div><div><a href="http://en.wikipedia.org/wiki/MIME#Multipart_messages">http://en.wikipedia.org/wiki/MIME#Multipart_messages</a></div>

<div><br></div><div>Para ver este &quot;video&quot; en una web basta con hacer lo siguiente:</div><div><br></div><div><ul><li>En el HTML incluir un img src que como &quot;src&quot; llama a un script Python: </li></ul><div>

        &lt;IMG id=&quot;myimage&quot; <font color="#ff6666">src=&quot;/cgi-bin/get_picture.py&quot; </font>border=&quot;1&quot; width=&quot;640&quot; heigth=&quot;480&quot;&gt;</div></div><div><ul><li>El script de Python <font color="#3366ff">get_picture.py </font>tiene un bucle infinito, que básicamente lee la imagen y la sirve:</li>

</ul></div><div><br></div><div><div><font color="#3366ff">#!/usr/bin/python</font></div><div><font color="#3366ff">import os</font></div><div><font color="#3366ff">from time import sleep</font></div><div><font color="#3366ff"><br>

</font></div><div><font color="#3366ff">img_path = path_de_la_imagen_generada</font></div><div><font color="#3366ff"><br></font></div><div><font color="#3366ff">print &quot;Content-Type: multipart/x-mixed-replace; boundary=CCT_Boundary\n&quot;</font></div>

<div><font color="#3366ff">while True:</font></div><div><font color="#3366ff">    data = open(img_path, &#39;rb&#39;).read()</font></div><div><font color="#3366ff">    print &quot;&quot;&quot; </font></div><div><font color="#3366ff">    --CCT_Boundary</font></div>

<div><font color="#3366ff">    Content-Type: image/jpeg</font></div><div><font color="#3366ff">    Content-length: %s\n&quot;&quot;&quot; % str(len(data))</font></div><div><font color="#3366ff">    print data</font></div>

<div><font color="#3366ff">    sleep(0.05)</font></div></div><div><br></div><div><br></div><div>Saludos,</div><div>Redo.</div><div><br><br><div class="gmail_quote">2012/2/19 redouane kachach <span dir="ltr">&lt;<a href="mailto:redo.robot@gmail.com">redo.robot@gmail.com</a>&gt;</span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Buenos días compañer@s,<div><br></div><div>Estos días estos explorando alternativas para desarrollar una interfaz web para la aplicación TrafficMonitor. La idea es desarrollar una interfaz web para facilitar el acceso a la aplicación desde cualquier sitio. Todo esto manteniendo la Gui existente de GTK.</div>


<div><br></div><div><a href="http://www.youtube.com/watch?v=MvPY1CBapE4" target="_blank">http://www.youtube.com/watch?v=MvPY1CBapE4</a></div><div><a href="http://www.jderobot.org/index.php/User:Redo" target="_blank">http://www.jderobot.org/index.php/User:Redo</a></div>


<div><br></div><div>La actual interfaz hecha en GTK consiste (como podéis ver en el vídeo) en un conjunto de checkboxes para hablitar/deshabilitar las diferentes funcionalidades de la aplicación, con alguno que otro slide. Para la parte de configuración tengo las siguientes dudas:</div>


<div><br></div><div>1) Como conectar el servidor Web con la applicación del TrafficMonitor: En este apartado habia pensado en utilizar CGI + PHP o Javascript para procesar la configuración y luego mandarla a la app del TrafficMonitor. En cuanto a la interfaz entre el script CGI y el TrafficMonitor no tengo claro que utilizar. En este caso se me occuren las siguientes alternativas:</div>


<div><div><ul><li>Una interfaz XML para describir los distintos parametros de configuración</li><li>Una interfaz propia con algun protocolo propio para mandar los distintos parametros de configuración</li></ul></div></div>


<div><div><br></div></div><div>2) La segunda duda que tengo es como mandar el video que genero para mostrarlo en la interfaz web). El video es básicamente el mismo que viene desde el cameraserver + cosas que dibujo por encima utilizando Cairo. Hasta el momento he conseguido volcar el video del DrawingArea a una imagen (JPEG, pero hay más formatos disponibles). Aqui no sé cual es la mejor opción:</div>


<div><ul><li>Utilizar el snapshot + algun opcion de refresco (javascript o PHP) para forzar el servidor a que refreseque solo la imagen en la interfaz. He hecho unas pruebas báscicas con esta opción y no me acaba de gustar. El video &quot;parpadea&quot; por mucho que baje el rate de refresco. El problema persiste incluso haciendo uso de dos imagenes con un link symbolico para alternar entre una y otra a medida que se van construyendo.</li>


<li>No sé si es posible generar un stream de video del snapshot que voy guardando. Si esto es posible, se podra utilizar algun protocol standard de streaming para mostrar el video en la interfaz Web.</li></ul><div><br></div>


</div><div>Otra alternativa que he visto por hay es utilizar Websevices (sobre todo para implementar la interfaz 1)). Ahora bien, no he entrado mucho en detalle para ver que cosas se pueden hacer con esta tecnologia. </div>


<div><br></div><div>La solución eligida al final me gustaria que respete los siguientes criterios:</div><div><ol><li>Lo más estandard posible y que dependa de tecnologias/SW ampliamente soportado.</li><li>El cliente no tenga que instalar nada raro. Deberia poder acceder a la interfaz con un simple browser.</li>


<li>Tiempo real (sobre todo para el video que se esta mostrando en la web).</li><li>Los compnentes/modulos SW deberian esta disponible bajo la GPL o una licenacia compatible.</li></ol></div><div><br></div><div>En cuanto al servidor Web pienso utilizar <b>lighthttpd </b>(<a href="http://www.lighttpd.net/" target="_blank">http://www.lighttpd.net/</a>) he liedo buena critica del mismo, lo he probado y la verdad el setup básico no requiere mucha configuración. Otra alternativa es Apache, pero quizas para lo que necesito no me hace falta tanta potencia.</div>


<div><br></div><div>Cualquier ayuda/sugerencia/alternativa es más que bienvenida.</div><div><br></div><div>Muchas gracias de antemano,</div><div>Redo.</div><div><br></div><div><br></div><div><br></div>
</blockquote></div><br></div></div>