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.
- 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.
- 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).
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):
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:
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):
Los codigos fuentes de la aplicacion pueden encontrarse en la sección Implementación.