Aplicación con uso de RTP

Descripción del trabajo práctico y detalles de la implementación

 

Este consiste en establecer una comunicación de tipo cliente-servidor mediante el protocolo RTP -RTSP, el primero será utilizado para la transmisión de datos multimedia (video y audio) y el segundo para el envió de los botones de SETUP, PLAY, PAUSE Y TEARDOWN presionados por el cliente para el control de la transmisión. Para poder llevar a cabo la implementación se recurre al lenguaje de programación orientado a objetos java con la ayuda de VLCJ, un proyecto de código abierto que permite acceder a las facilidades otorgadas por el reproductor VLC player para la reproducción de contenido multimedia vía streaming. En principio el servidor es un host que está a la espera de una petición de comunicación desde algún cliente proveniente desde internet por lo que se mantiene escuchando en el puerto 5555:

 

ServerSocket serverSocket = new ServerSocket(5555);

 

Una vez que la conexión es aceptada en este puerto el cliente es quien debe elegir que contenido multimedia quiere que sea transmitido, al presionar el botón SETUP se envía un mensaje a través del socket al puerto donde escuchar el servidor:

 

out.println("SETUP media.mp4 RTSP/1.0 Cseq:"+ Cseq + " " + "Transport: RTP/UDP; unicast; client_port= 5555");

 

Si el servidor ha recibido correctamente este mensaje sin ningún error entonces enviara un mensaje de reconocimiento de que haya llegado correctamente:

 

out.println("RTSP/1.0 200 OK; CSeq:" + Cseq + " Session: " + session);

 

A continuación el cliente podrá comenzar a reproducir el contenido del video apretando PLAY y enviando por el socket creado el siguiente mensaje de petición hacia el servidor:

 

out.println("PLAY media.mp4 RTSP/1.0 Cseq:"+ Cseq + " " +"Session:"+ sesion);

 

lo podrá pausar con el siguiente mensaje:

 

out.println("PAUSE media.mp4 RTSP/1.0 Cseq:"+ Cseq + " " +"Session:"+ sesion);

 

Podrá también setear el volumen al que se reproduce el contenido de audio:

 

mediaPlayer.setVolume(vol);

 

y podrá enviar una señal de stop para detener la reproducción de contenido actual:

 

out.println("TEARDOWN media.mp4 RTSP/1.0 Cseq:"+ Cseq + " " +"Session:"+ sesion);

 

a todos estos mensajes el servidor contestara con un mensaje RTSP/1.0 200 OK:

 

out.println("RTSP/1.0 200 OK; CSeq:" + Cseq + " Session: " + session);

 

 

Lo que se puede ver al correr la aplicación

 

El aspecto gráfico de lo que puede ver el cliente se puede ver en la siguiente imagen:

 

Interfaz gráfica de la aplicación.

 

Un detalle de los mensajes que ve el servidor es el siguiente:

 

Mensajes recibidos en el servidor

 

Se puede ver que el servidor responde a la petición hecha por el cliente enviando el número de secuencia correspondiente a cada paquete, así como también la tarea de crear un número de sesión aleatorio.

Y lo que ve el cliente:

 

Mensajes recibidos en el Cliente 1

 

El cliente en cambio envía las peticiones de reproducción al servidor con el número de sesión que le entrego el servidor en un comienzo y este último le contesta al cliente con mensajes de reconocimiento avisando que la petición fue recibida correctamente.

 

Al realizar un análisis con wireshark de lo que envía el servidor se pueden ver lo siguiente:

 

 

Aquí los campos destacados corresponden a los datos de información enviados.

 

Links de interes

 

Código Fuente

 

VLC

 

VLCJ