Streaming RTSP/RTP

RTSP/RTP

Integrantes

Introduccion

Debido a la necesidad de transmitir información de tipo Audio-Visual de un equipo a otro, es que se ha desarrollado los protocolos de comunicación RTP y RTSP. Bajo esta línea, es preciso utilizar una aplicación de streaming de video como primer paso para transmitir video en tiempo real, hacia un dispositivo como es Oculus Rift, tomando en cuenta que existe gente que no tiene conocimiento de programación y desea usar este hardware o simplemente quiere transmitir vía streaming pero no sabe cómo hacerlo es que decidimos realizar el proyecto con software libre ya existente de manera que cualquier persona pueda realizar streaming

Funcionamiento RTP

RTP, es un protocolo de transporte en tiempo real que proporciona las condiciones adecuadas para que aplicaciones que transmiten datos en tiempo real,  tales como audio, video, puedan efectuarse.

RTP (y RTSP) han sido diseñados para ser independientes del protocolo de la capa de transporte o capa de red utilizada, por lo cual RTP incluso puede ser utilizado sobre IPV6.

RTP fue creado con los siguientes propósitos:

Además RTP posee diversas funciones. Algunas de estas son las siguientes

El esquema de un paquete RTP es el siguiente:

-Versión (V): Versión del protocolo. La versión 2 es la correspondiente a la versión actual.

-Padding (P): Utilizado para indicar a los algoritmos de cifrado el tamaño del Payload

-Extension (X): Si el bit de extensión está activado, la cabecera estará seguida de una extensión, la cual, permite la implementación de otros tipos de Payload que requieran información adicional.

-CSRC COUNT: Numero de fuentes que contribuyen

-Marker (M): Normalmente utilizado para notificar de eventos significativos

-Payload Type: Tipo de formato de la carga (Payload), puede cambiar durante la trasmisión.

-Sequence Number: Numero de secuencia del paquete, sirve para que el receptor pueda reordenar los paquetes que hubiesen llegado en desorden. El valor inicial es aleatorio para aumentar la seguridad al evitar ataques del tipo repetición de paquetes. Este número se incrementa en una unidad por cada paquete.

-Timestamp: Marca de tiempo que sirve para la sincronización de los datos, aumenta en función del tiempo trascurrido por el contenido del paquete.

-Syncronization soure identifier: Identificación de la fuente con la que se sincroniza.

-Contributing source identifiers: Identificación de las fuentes que componen el payload

-Payload: Hace referencia a los datos transportados por el paquete RTP

Peticiones RTSP

RTSP intenta dar los mismo servicio para audio y video que HTTP hace para texto y gráficos; y ha sido diseñado para que tenga una sintaxis y operaciones similares, a pesar de esto RTSP difiere en algunos aspectos con HTTP ya que este es un protocolo sin estados mientras que RTSP debe mantener el estado de las sesiones, ademas HTTP es un protocolo asimétrico donde el cliente hace peticiones y el servidor responde, mientras que en RTSP ambos pueden hacer peticiones. A continuación los comandos soportados:

Las peticiones RTSP son enviadas normalmente por un canal independiente al cana de los datos. Estos últimos pueden ser transmitidos por otro tipo de conexión

Conclusiones

Gracias a los distintos protocolos, es que se posibilita la comunicación entre dispositivos. La compatibilidad entre clientes y servidores de distintas plataformas y sistemas operativos hace que el streaming de contenido pueda realizarse desde y hacia cualquier lado del mundo, de forma segura y en tiempo real. En el proyecto, se demostró alguno de los conceptos básicos de cómo implementar un servidor basado en “streaming” de contenidos mediante los protocolos RTP/RTSP. Por supuesto, no es siempre necesario tener un completo funcionamiento de “streaming” para todo tipo de formatos tanto para video como audio y mecanismos de transporte. Si solo uno o un pequeño número de tipos de formatos es requerido, o “multicast” no es necesario o posible por el limitado número de clientes y suficiente ancho de banda, entonces el desafío en la implementación es crucial. Para el proyecto, no fue necesario incluir protocolos que garantizaran calidad de servicio, envíos a tiempo, etc. es por eso que se optó por RTP, que, funcionando con best effort, realiza la tarea que se precisaba, además de ofrecer servicio “multicast” y una cómoda forma de implementación.

Pruebas

Para realizar las pruebas de la conexión RTSP y transmitir datos vía streaming se utilizaron recursos que se encuentran disponible en la web.

Para el servidor se utilizó live 555 disponible su documentación en http://www.live555.com/liveMedia/ este es un servidor creado en C++ para realizar streaming usando los protocolos (RTP/RTCP, RTSP) en el caso que se describe a continuación se usó el servidor que se puede descargar de siguiente link http://www.live555.com/mediaServer/#downloading Para realizar el streaming se debe tener el servidor ( bajado de la página anterior) junto a lo que se desea transmitir en la misma carpeta y ejecutar el servidor, esto abrirá una consola en donde saldrá la dirección RTSP en donde está transmitiendo el servidor

 

Para el cliente utilizamos un programa reproductor también disponible en la web, el cual puede descargarse de http://www.videolan.org/vlc/ su página oficial, este reproductor tiene la opción de reproducir desde un medio en la web, en nuestro caso la dirección RTSP que genera nuestro servidor, como se muestra en la siguiente imagen.



Teniendo ya el servidor y el cliente funcionando se usa el programa Wireshark para ver los paquetes que se envían entre el cliente y el servidor Este programa se puede descargar de https://www.wireshark.org/download.html

Con todos los programas instalados y funcionando se hicieron las pruebas de correr el servidor y e cliente y enviar peticiones de play, pause y stop y se pueden ver esos comandos RTSP en las siguientes imágenes