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
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
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:
El cliente o el servidor le comunican a la otra parte que opciones aceptan
EL cliente consigue una descripción de un contenido identificado por una URL RTSP
Actualiza la descripcion en tiempo real
El cliente le pregunta al servidor donde conseguir los datos
El cliente le pide al servidor que comience a mandarle los flujos configurados en SETUP
El cliente detiene el envío sin liberar los recursos en el servidor
El cliente solicita al servidor que detenga el envío del flujo especificado y libere todos los recursos asociados a él
consigue el valor de un parámetro de una presentación o flujo
Establece el valor de un parámetro de una presentación o flujo
EL servidor informa al cliente de que debe conectarse al servidor indicado en la cabecera
EL cliente comienza a grabar datos de la presentación
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
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.
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