Fork me on GitHub

JStreamer v1.0

¿Qué problemas resuelve JStreamer?

Se propone la siguiente situación. En una casa generalemente se cuenta de un sistema de multimedia (home theater, equipo de música, etc) y para poder reproducir contenidos multimedias solo es posible mediante las entredas de éste (CD/DVD, HDMI, AUX, conector RCA, etc). Esto obliga a que todo dispositivo del cual una persona quiera reproducir un contenido multimedia deba hacerlo fisicamente muy cerca del sistema multimedia. JStreamer soluciona la dependencia de cercanía física con el sistema multimedia dado que transmite de forma inalámbrica el contenido multimedia.

La Solución

La solución a nuestro problema contempla que cada sistema multimedia sea conectado a un ordenador de placa reducida de bajo costo (Ej: Raspberry pi), en el cual corra algún sistema operativo como linux que sea capaz de poder correr programas multimedia que para este caso son vlc, gstreamer y la máquina virtual de JAVA. Desde algún otro dispositivo se debe correr un programa el cual realize un streaming mediante internet al sistema multimedia de los datos que se quieren reproducir.

Sistema

Diagrama general del sistema
Fig1. Diagrama general del sistema

Palabras Claves:

  • Cliente: Dispositivo que requiere reproducir un archivo multimedia Ej: Laptop
  • Servidor: Dispositivo conectado directamente al sistema multimedia Ej: RPi conectado a Home Theater
  • Como se aprecia en la figura de arriba, el sistema funciona en base a dos conexiones. La primera permite el envío de datos de control desde el cliente hacia el servidor y viceversa. Esta conexión se realiza siempre bajo el protocolo TCP/IP. Entre los parametros de control importantes se encuentran, el tipo de dato a enviar (audio o video) y el puerto UDP de escucha que se envía desde el Servidor al Cliente.

    La segunda conexión la realizan los programas encargados de realizar el streaming que en este caso son VLC para archivos de video y GStreamer para archivos de audio. Para el caso de archivos de audio, la conexión se realiza por medio del protocolo TCP/IP para no perder fidelidad. En cambio los archivos de video son enviados por UDP/IP.

    Además, cabe destacar que tanto el cliente como el servidor realizan un fork/exec de los programas ocuapados para realizar streaming.

    Lenguaje de Desarrollo

    Toda la programación de este sistema fué realizada bajo JAVA, debido a la facilidad de programación de interfaces gráficas, manejo de procesos e hilos y uso de socket. Además el sistema no es tan complejo, por lo tanto, el uso de un lenguaje de alto nivel es bastante aceptable.

    Esquema de funcionamiento del cliente

    Diagrama del Cliente
    Fig2. Diagrama de Funcionamiento Cliente

    Interfaz de ingreso de datos de conexión

    En este punto se realiza la elección de tipo de archivo a realizar streaming, además de configurar la dirección IP del servidor y el puerto de escucha de la conexión de configuración.

    interfaz datos de conexión
    Fig3. Interfaz de ingreso de datos de conexión

    Inicio de conexión de control TCP con server

    Al presionar el boton next en la ventana descrita anteriormente, se realiza la conexión de control con el servidor. Acá el cliente le envía el tipo de dato al cual se realizará streaming (Audio o video). El servidor envía devuelta el puerto en que él escuchara por la conexión de streaming.

    Interfaz de ingreso de archivos

    Al presionar el botón "open" se desplega una ventana en la cual se puede escoger el archivo multimedia a realizar streaming.

    interfaz ingreso de archivos
    Fig4. Interfaz de ingreso de archivos

    EXEC a VLC o GStreamer

    Al presionar el boton "Start" el programa hace un "fork y exec" para ejecutar el proceso VLC o GStreamer.

    Esquema de funcionamiento del servidor

    Diagrama del Server
    Fig5. Diagrama de Funcionamiento Servidor

    El servidor inicia un socket TCP y se queda a la escucha de alguna conexión. Cuando el cliente se conecta, este recibe el tipo de dato a recibir streaming. Además este envía al cliente el puerto donde escuchará los datos de streaming. Luego de esto el servidor crea el proceso correspondiete (VLC o GStreamer) para la reproducción de los datos.

    Descargar

    Referencias

    Creado por Cristóbal Badilla C. & Roberto Farías C. - Programación de Sistemas 2014 - Departamento de Electrónica UTFSM