• No se han encontrado resultados

3.3 Arquitectura de videoconferencia Web

3.3.6 Arquitectura de compartición de escritorio

Una de las funcionalidades más populares hoy en día para las aplicaciones colaborativas en tiempo

real es la posibilidad de mostrar el escritorio de manera que el resto de participantes de la sesión puedan seguir una presentación.

No obstante, al mismo tiempo, es un potencial agujero de seguridad. Es imprescindible que el usuario consienta explícitamente a mostrar su pantalla y sea consciente en todo momento de qué

está compartiendo. En un entorno Web, este problema, como muchos de seguridad, se complica. El hecho de que únicamente por acceder a una Web nuestro escritorio sea publicado es preocupante. Ante este problema, el sandbox de Flash impide a las aplicaciones de esta

tecnología capturar el escritorio del usuario.

En este apartado propongo una solución a ambos problemas, por un lado se debe conseguir la

3.3. ARQUITECTURA DE VIDEOCONFERENCIA WEB

real a la Web y, por otro lado, se debe garantizar que el usuario acepta publicar en la sala su información.

Debido a esta limitación decidimos dividir la funcionalidad de compartición de escritorio en

el cliente en dos partes: emisor y receptor. Entre las alternativas tecnológicas existentes para implementarlo, optamos por VNC o Virtual Network Computing, basado en el protocolo RFB.

Esta solución, además de estar ampliamente extendida y existir una amplia variedad de implementaciones, nos permite controlar el escritorio remoto además de verlo.

Receptor

El objetivo principal del receptor es conseguir que se integre de la manera más transparente posible

en el interfaz. Para ello, lo ideal es que sea un componente más de la arquitectura de cliente basada en Flash. A diferencia del emisor, el receptor no requiere capturar la pantalla. Por otro lado, ya

que los emisores no podrán ser implementados dentro de la plataforma Flash, decidimos no utilizar RTMP como protocolo para encapsular los datos RFB y optamos por utilizar TCP. Flash permite

conectarse como cliente a servidores TCP siempre que éstos estén configurados correctamente según las políticas de seguridad que dicta la plataforma.

Así, siguiendo con el objetivo de utilizar componentes de código libre, se utilizó FVNCicomo

base para el visor. Esta librería provee un componente de fácil integración dentro del marco de Flex, siendo necesario como parámetro la dirección del emisor y las credenciales de acceso. Para

la integración con Marte 3.0, se realizaron modificaciones para permitir el cambio de tamaño del componente de manera dinámica.

Emisor

El problema del emisor es considerablemente más complejo. En definitiva el problema es intentar

ejecutar un servidor que comparte el escritorio sin que el usuario tenga que instalar nada. Las limitaciones que imponen los mecanismos de seguridad de la plataforma Flash hacen que sea

imposible implementar esta funcionalidad de manera nativa en este entorno. Como alternativa, Se decidió utilizar un Applet de Java. Los Applets de Java tienen sus propias condiciones de

seguridad pero, en este caso, es posible tanto capturar la pantalla como abrir sockets de servidor

TCP si el Applet está firmado digitalmente. De esta manera, el usuario puede saber de manera segura el origen del programa y aceptarlo si así lo decide.

No obstante, esto hace la aplicación algo más pesada y, además, requiere la instalación adicional del plug-in necesario para correr este tipo de contenidos pero es un mal totalmente

necesario en este caso en el caso en el que se quiera compartir pantalla. Sin olvidar que se puede recibir los contenidos sin necesidad de instalar ningún componente.

El Applet de Java utilizado es una versión básica de un servidor VNC. Se permite únicamente la codificación básica, dividiendo la pantalla en 16 regiones que se envían a los clientes de manera

inteligente si éstas van cambiando. El código está basado en VNCJi, fuertemente modificado para añadir compresión en las imágenes y adaptarlo a las necesidades del proyecto.

La solución queda integrada dentro de la misma página Web que contiene la aplicación Flash de Marte 3.0. Una de las posibilidades de Flex es la de ejecutar métodos de JavaScript que se

encuentren en el HTML que aloja el archivo .swf contenedor de la aplicación. Se hace uso de esta herramienta para arrancar o parar el servidor VNC cuando sea necesario. Así, cuando un

usuario desea compartir su escritorio se dispara este mecanismo y el servidor es iniciado con la configuración adecuada.

VNC Reflector

Los componentes que acabo de explicar: emisor y receptor, apuntan a una comunicación entre pares en la que los clientes que quisieran ver el escritorio de un participante conectarían su receptor

al emisor de éste. Sin embargo esto plantea problemas desde varios puntos: en primer lugar, esto rompe el esquema centralizado, volviendo a introducir el problema de los NATs en la ecuación.

Además, esto implicaría multiplicar el ancho de banda de subida requerido por el número de receptores que se conectan.

Entre las alternativas, se optó por utilizar VNC Reflectoriien el servidor. VNC Reflector es un servidor especial de VNC que actúa como proxy entre un servidor de VNC y los clientes, evitando

efectivamente el problema planteado, ya que los clientes pasan a conectarse, a la hora de compartir el escritorio, directamente a la misma dirección en la que se encuentra el Red5. Esto obliga a crear

una capa entre la aplicación de servidor existente en Red5 y dicho VNC Reflector para arrancarlo

ihttp://emblemparade.net/projects/vncj/ iihttp://sourceforge.net/projects/vnc-reflector/

3.3. ARQUITECTURA DE VIDEOCONFERENCIA WEB

con los parámetros adecuados (los puertos de a los que deben conectarse el cliente que comparte su escritorio y el resto) e informar sobre los servidores existentes y las correspondencias necesarias.

En la figura 3.3 vemos un ejemplo de flujo de llamadas para el establecimiento de la sesión

VNC. En el momento en el que el cliente emisor quiere publicar su escritorio, la aplicación Flash de cliente envía el mensaje addVNCServer al servidor de Marte 3.0, éste ejecuta el método

createProxyVNC en el controlador de VNC. El Controlador guarda un registro de los puertos disponibles para configurar VNC Reflector, con esta información arranca VNC Reflector. Una

vez se propagan los mensajes de éxito, el cliente emisor sabe dónde debe conectarse para iniciar su sesión VNC. Cuando esta operación se completa, el resto de clientes son informados de que

está disponible un nuevo escritorio compartido, con el puerto al que se deben conectar para recibirlo.

Como resultado final, el Applet de Java que hace las veces de servidor VNC obtiene la dirección y el puerto al que debe conectarse (los del VNC reflector) y el módulo FVNC del resto

de participantes se conecta de manera transparente para usuario permitiendo, de mantera efectiva el uso del escritorio compartido.