Estructura

        La estructura del sistema funciona en base al modelo cliente/servidor, donde en el servidor se configura cierto directorio para inicializar el servicio y se espera por el ingreso de algún cliente. Luego, hay una serie de comunicación de comandos, sobre una conexión TCP, que permiten terminar la configuración del servidor y comenzar el streaming en una dirección predeterminada que será informada al cliente.
            Actualmente el servicio está diseñado como sistema de acceso remoto a multimedia personal, por lo tanto, el servidor permite solo una conexión a la vez, con la capacidad de reconfigurarse al término de una petición de streaming o al finalizar la conexión, para quedar en un estado que acepte nuevas peticiones.
            A continuación se tiene una explicación más precisa de lo que hace cada uno de los componentes durante el funcionamiento del servicio.

Implementación del Cliente

           Requerimientos en el lado del cliente:
- Poseer librerías y compilador java para ejecutar la aplicación.
- Poseer un reproductor de flash, en el estado actual de la aplicación esta debería estar instalada además como plug-in del explorador de internet por defecto.

           El flujo básico de etapas que se deben llevar a cabo en el cliente durante la correcta operación del servicio son las siguientes.
 - Se comienza con un “log in” simple que le da la libertad al usuario de elegir la dirección ip y el puerto al cual quiere realizar la conexión, con su respectiva clave que permita verificar la autenticidad del mismo.

 LogIn Pic


    - Esto nos llevara a un menú con diversas opciones de codificado tanto para audio como para video, con variables a elegir por el usuario como: bit rates de salida, tamaños de buffer a usar, ausencia de alguno de los 2 medios y , obviamente, el archivo que se desea visualizar o adquirir del servidor.

Config Pic

    - Una vez que todos los parámetros hayan sido enviados, y correctamente procesados por el servidor, se abrirá automáticamente nuestro “browser” por defecto en la dirección web correspondiente al streaming que el servidor ha iniciado y un panel de control que otorgue al usuario algunas funciones básicas para el control de la reproducción del stream (pausa y stop).

ConrtolPanel Pic


            En caso de errores, se tienen las siguientes posibilidades:
    - Si se ingresa algún dato erróneo en el log in, se comunicara por pantalla que esta fallando con “Can’t create socket” si la dirección IP o el puerto son incorrectos o “Incorrect Password” si dicho campo no coincide con los datos del lado del servidor.
   - Si en una de las 2 primeras etapas del cliente se cierra la aplicación (click en la caja X), se enviara automáticamente un mensaje de aviso al servidor sobre que la aplicación ha sido terminada.
   - Si la ventana Control Panel se cierra (click en caja X) o se elige la opción Stop, el cliente avisara al servidor de que el streaming en curso ha finalizado y volverá a darnos la posibilidad de variar los parámetros para la petición de un stream.
           Estas fases se pueden apreciar en el siguiente esquema simplificado del software realizado (no es un diagrama de flujos exacto, mas bien explicativo):

VideoClient Diagram


Implementación del Servidor



        Requerimientos en el lado servidor:
 - Poseer librerías y compilador java para ejecutar la aplicación.
 - Estar montado sobre un sistema operativo Unix.
 - Tener instalado ffmpeg y ffserver.
         El servidor, luego de ser inicializado, es básicamente un sistema pasivo dentro de la estructura, pues reacción automáticamente frente a la presencia de ciertos comandos o mensajes predefinidos que sean enviados desde un cliente.
       Posee una ventana para su interfaz grafica, la cual se muestra a continuación:

ServerControl Pic


            Durante el correcto funcionamiento del servidor, deberíamos tener las siguientes etapas bien definidas:
    - El servidor debe ser inicializado, única etapa en donde el usuario debe interactuar con el programa para elegir el directorio que desea compartir a través del servicio establecido. Una vez elegido este parámetro, el server puede inicializarse, quedando en modo de escucha en el puerto determinado.
    - Cuando un cliente logra conectarse y autentificarse (coincide el password recibido con el seteado manualmente por el usuario), el servidor pasara a un nuevo estado de espera de parámetros.
    - Cuando el cliente envié esta lista de parámetros (archivo a ser streameado, rates, etc.), el servidor procederá a invocar los procesos ffserver (generar el servidor de la aplicación) y posteriormente a ffmpeg (conversor de video) que generara el streaming de video a ser difundido por ffserver.
    - Al finalizar la conexión, el servidor volverá al modo de escucha en el puerto asignado por defecto (8191).
      
           Estas son las posibles acciones frente a errores en el procedimiento:
    - Si el servidor trata de inicializarse sin haber elegido un directorio a compartir, se avisara al usuario por pantalla
    - Si en cualquier momento el servidor recibe la señal de que el cliente ha finalizado (independiente de cómo finalizo), este procederá a pasar automáticamente al segundo de los estados previamente descritos.
    - En caso de recibir un mensaje de Stop del lado del cliente, el servidor procederá a finalizar el streaming en curso y a volver al segundo estado.
      
           Todos los cambios de estados previamente mencionados y situaciones especiales a resolver, serán presentados en la ventana del servidor para que el usuario, en caso de error, pueda tener alguna fuente de feedback para analizar la fuente de los problemas.
           Un resumen de la idea de estas operaciones, puede ser simplificado al siguiente diagrama (no es un diagrama de flujos exacto, mas bien explicativo):

VideoServer Diagram


                Los codigos fuentes de la aplicacion pueden encontrarse en la sección Implementación.