Lenguajes

En este programa se desarrolló en lenguaje Python y la interfaz gráfica fue hecha con GTK, además se ocuparon los modulos Poppler para el tratado de archivos pdf y el framework Gstreamer para el streaming de audio

Las ventajas que esto proponen es la posibilidad de desarrollar los programas multiplataforma, además de que el framework gstreamer es la utilizada por defecto en todos los proyectos opensource que tratan con audio y video, tanto en streaming como local, logrando así una abstracción del canal de transmisión y solo programando los datos a transmitir.

Desarrollo

La arquitectura de este programa se basa en un solo ejecutable que hace tanto de servidor como de cliente de las presentaciones dependiendo de los argumentos con los que se inicia. Simplemente si el programa se ejecuta con la opcion --file-pdf=archivo.pdf, el programa se ejecutara como servidor y hosteara el archivo dado a la dirección multicast. Un listado mas extenso de las opciones se dan a continuación

Opciones

  • -m, --multicast-host The multicast address group
  • -p, --port The multicast port group
  • -f, --file-pdf The file to serve
  • -a, --audio-on Enable the audio server
  • -h, --help This help!

Luego de iniciado el entorno gráfico, solo bastará conectar a algún cliente a la dirección multicast para poder recibir cada una de las diapositivas y la voz del expositor como se verá a continuación.Se pueden apreciar además los botones de avance y retroceso en la interfaz de servidor, y abajo el area de chat.


Interfaz Servidor


Interfaz Cliente

A un modo más detallado, se dispone de un diagrama UML de la implementación de esta solución

La lógica de funcionamiento es sencilla, el servidor recibe mediante parámetro el archivo PDF a hostear, este crea una instancia de PDFConvert para obtener las imágenes de las diapositivas siguientes y anteriores de acuerdo a la página actual que se esta hosteando. El Controller se encarga de enlazar los botones con los métodos de la clase PDFConvert y los envía a los clientes multicast gracias al objeto ServerHandler. Este último también se encarga de compartir tanto el texto, el audio y las imágenes a la dirección multicast y de crear los objetos Listener (manejados por hebras), encargados de recibir en caso de ser un cliente.