TRANSMISIÓN EN INTERNET: STREAMING DE AUDIO Y VÍDEO

Anuncio
PRÁCTICAS
TXÓN. DATOS
MULTIMEDIA
TRANSMISIÓN EN INTERNET:
STREAMING DE AUDIO Y VÍDEO
1. Introducción
Una de las principales restricciones a la hora de trabajar con información multimedia
(principalmente en los medios de imagen, audio y sobre todo en vídeo) es la necesidad
de reducir el ancho de banda necesario para transmitir la información. De esta parte se
encarga el sistema compresor, que para optimizar su eficiencia suele ser específico del
medio (utilizando técnicas de codificación fuente o source coding). Este sistema
compresor se estudia en otras prácticas y por tanto en esta práctica vamos a suponer que
esta parte la tenemos ya resuelta, y nos vamos a centrar en la problemática de la
transmisión de la información multimedia desde un servidor hacia uno o varios clientes
usando como red de transporte Internet, que como sabemos está basada en la
arquitectura TCP/IP.
La alternativa más trivial a la hora de transmitir la información multimedia es tratarla
como el resto de información, usando así aplicaciones y servicios estándar de Internet
como por ejemplo ftp y http. Este tipo de servicios nos permiten visualizar el medio una
vez lo hayamos descargado completamente.
Una segunda alternativa, basada en los anteriores servicios (ftp, http, …), es realizar una
descarga progresiva de la información, de manera que cuando se empiece a disponer de
información, se pueda empezar a reproducir. En esta segunda alternativa la información
se descarga usando el máximo ancho de banda que disponen cliente y servidor, y no hay
ningún control para evitar cortes en la reproducción: el medio se va almacenando en
disco conforme se descarga, pero si el ancho de banda es más reducido que el necesario
para la reproducción, la información se reproduce “a saltos”, ya que se va
reproduciendo conforme llega.
La tercera alternativa es el uso de auténtico streaming, en el que se utilizan protocolos
para la transmisión de información multimedia en tiempo real (tal y como el protocolo
estándar RTP) con un control de sesión dinámico (como el que permite RTSP). Con esta
alternativa no se usa el máximo ancho de banda disponible por el cliente para descargar
y visualizar el medio, sino que tan sólo se usa el ancho de banda necesario para ir
reproduciendo el medio en tiempo real. Además no se produce una descarga completa
del medio, sino que conforme se descarga se va descartando una vez ha sido utilizado
para la reproducción. Eso sí, para paliar los posibles efectos perniciosos causados por la
variación del retardo (jitter), se aplica una etapa inicial de buffering en la que se
almacena una parte inicial del medio para disponer de información a reproducir en el
caso en el que el retardo aumente, evitando así cortes en la reproducción.
En esta práctica vamos a experimentar con el proceso de streaming, para lo que
instalaremos un cliente y un servidor con soporte de protocolos estándar para la
transmisión de información multimedia en Internet (básicamente RTP y RTSP). Para
esto vamos a usar en concreto la suite proporcionada por Apple denominada Quicktime.
Además realizaremos una captura de las tramas generadas, observando cómo los datos
1
multimedia se paquetizan dentro de datagramas IP, que a su vez contienen datagramas
de usuario UDP, y que finalmente transmiten paquetes RTP, de los que observaremos su
cabecera.
2. Streaming de información multimedia
El proceso de streaming consiste en la entrega de uno o varios medios multiplexados
hacia un cliente en tiempo real, y usando una red con un determinado ancho de banda
(que no tiene el porqué ser necesariamente grande). En el proceso de streaming NO hay
ningún fichero que se descarga al ordenador del cliente, sino que el medio se reproduce
conforme se está recibiendo, y a su vez el medio se recibe a la velocidad adecuada para
su reproducción. Esto contrasta con las descargas progresivas, en las que el fichero sí
queda descargado en disco y además se recibe a la mayor velocidad posible, con el fin
de terminar el proceso de descarga lo antes posible.
En un proceso de streaming estándar de audio y vídeo sincronizado, las peticiones de
servicio por parte de los clientes se pueden manejar utilizando el protocolo RTSP (RealTime Streaming Protocol). Este protocolo se encarga de controlar el stream de
contenido multimedia en dos direcciones, de forma que los clientes pueden pedir al
servidor hacer cosas como rebobinar la película, saltar al siguiente capítulo, etc. Esto se
puede conseguir con streaming ya que el medio no se descarga linealmente sino que se
reproduce conforme se obtiene, y se permiten saltos en la reproducción, consiguiendo
un acceso aleatorio al medio, incluso en saltos hacia delante.
Por otra parte, los datos del medio (el stream que contiene típicamente audio y vídeo
sincronizados) se pueden transportar usando el protocolo estándar RTP (Real-Time
Transport Protocol), que es un protocolo de transporte que permite la transmisión de
información multimedia en tiempo real sobre cualquier tipo de red (aunque su uso más
habitual es sobre redes usando el protocolo UDP).
2.1 Tipos de streaming
El proceso de streaming se puede dividir en dos categorías, en función de cómo se
obtiene la información a difundir: streaming en directo o bajo demanda.
-
El streaming en directo es aquel que transmite eventos que están sucediendo
justo en el momento de la difusión. Por ejemplo, la transmisión de conciertos
o de clases son eventos que típicamente se difunden usando este tipo de
streaming. La transmisión de radio y televisión por Internet también tiene
estas características, aunque en ocasiones parte de la información que se
difunde no parte de un evento en directo (por ejemplo, un programa que ha
sido grabado previamente, pero que se va a difundir en un momento
determinado).
En este tipo de transmisión empleamos el término difusión (broadcast)
porque realmente se está transmitiendo “en vivo” a todos los clientes la
misma información, que no es más que el evento que se está produciendo en
ese momento. Así, independientemente de cuando se conecta un cliente al
servidor, todos ven exactamente el mismo punto del stream en un instante
determinado (excepto las lógicas variaciones de los retardos en la red que
2
hacen que unos clientes reciban antes los datos que otros). Para poder
efectuar este tipo de transmisión no es suficiente con disponer de un servidor
de streaming, sino que también es necesario un equipo que realice el proceso
de captura y compresión en tiempo real (que a veces se conoce como difusor
o broadcaster). Este equipo puede estar instalado en la misma máquina que el
servidor de streaming si el número potencial de clientes no es grande, pero
para resultados profesionales, en un entorno con muchos clientes, es
conveniente separar ambos programas en dos máquinas distintas.
Además, para dar un servicio realmente eficiente de este tipo de streaming es
conveniente que la difusión se realice con técnicas de multicast.
-
En un stream multimedia bajo demanda, la transmisión del medio empieza
desde el inicio del evento a ser reproducido para cada uno de los clientes. El
medio a transmitir puede estar ya preparado desde el comienzo del proceso
en un fichero comprimido. En este caso no representa una ventaja adicional
el disponer de posibilidad del realizar multicast en la red, ya que cada cliente
recibe una parte distinta del stream y por lo tanto un paquete de datos
diferente.
2.2 Difusión de streaming a varios clientes usando multicast
En multicast, un único stream se comparte entre diferentes clientes, de forma que el
servidor envía la información una única vez, y ésta llega a todos los clientes que han
demandado el servicio. Como ya hemos comentado, esta técnica es ideal para la
difusión de medios en vivo (por ejemplo, radio en Internet) ya que todos los clientes
están dispuestos a recibir el mismo flujo de datos (por ejemplo, el audio que
corresponde al programa de radio que una emisora está difundiendo en un momento
determinado).
Esta técnica reduce claramente el tráfico en la red, y evita posible congestión en los
routers. Sin embargo, para llevarla a cabo es necesario tener acceso a una troncal con
soporte multicast (por ejemplo Mbone en Internet), o que el servidor y los clientes estén
conectados a una red o redes IP bajo un mismo dominio de administración en las que el
multicast esté habilitado y existan routers dispuestos a encaminar información multicast
(router multicast).
En la transmisión típica unicast, cada cliente inicia su propio stream,
independientemente de que todos los clientes estén interesados en el mismo stream de
datos (esto es, aunque sea una difusión “en vivo”), de forma que se inician muchas
conexiones uno-a-uno (una entre el servidor y el cliente por cada uno de los clientes).
Esta técnica causa que el servidor requiera de un ancho de banda mucho mayor que los
clientes y aumenta el tráfico en la red. Sin embargo, este método es el único cuya
disponibilidad está garantizada en Internet actualmente, ya que no necesita de acceso a
Mbone (cuya disponibilidad no está garantizada por todos los ISP) ni capacidad
multicast entre los clientes y el servidor.
En general, desde una línea tipo xDSL o cable módem no se dispone de suficiente
ancho de banda de inyección en la red (o de subida) para dar un buen servicio de
streaming en Internet. Además, en algunos casos, la instalación de este tipo de
3
servidores podría no estar permitida por parte del ISP y su uso puede ser razón de
ruptura del contrato.
Una solución intermedia para realizar una difusión en vivo de un stream multimedia es
el caso en el que todos los clientes se encuentran conectados a una misma red IP con
soporte multicast, y el equipo de difusión que realiza la captura se encuentra situado en
otra red distinta (por ejemplo, la difusión de un mensaje de una compañía a una filial
geográficamente separada). En este caso, la transmisión se puede hacer mediante
unicast entre el equipo de difusión (broadcaster) y la red en la que se encuentran los
clientes, y aplicar una difusión multicast en la red destino. Este esquema se conoce
como relaying media.
3. Instalación de un cliente y servidor de streaming
Para seguir el guión de esta práctica será necesario disponer de una máquina con
Windows XP instalado, y acceso a una cuenta con permisos de administrador. Sin
embargo, la mayor parte de los programas que vamos a utilizar también se encuentran
disponible para otros Sistemas Operativos (como Linux y Mac).
A lo largo de toda la práctica, para realizar el proceso de streaming, vamos a usar el
software proporcionado por Apple dentro de su suite QuickTime, principalmente debido
al compromiso de esta compañía por desarrollar software que siga los estándares y
RFCs. Así, la compresión de los vídeos se realiza siguiendo el estándar MPEG-4 y
H.264 (o MPEG-4 parte 10), el audio se comprime con AAC (una versión mejorada de
MPEG 1 parte 3 ó MP3) y la transmisión se realiza siguiendo los protocolos RTP (perfil
multimedia) y RTSP con RFC 1890 y 2326. Pese a esto, el software QuickTime
también tiene soporte para esquemas propietarios de Apple (por ejemplo, ficheros de
películas comprimidas .mov, o H.264 dentro de ficheros .mov).
Otras compañías proporcionan soluciones para streaming, pero algunas de ellas, como
Microsoft con Windows Media, hacen uso exclusivo de técnicas propietarias. Otras
compañías con productos importantes para streaming son Real Networks (con
RealMedia, RealAudio y RealVideo) y Nullsoft Streaming Video.
3.1 Instalación de un cliente QuickTime
En primer lugar vamos a instalar el programa QuickTime player, cuyas primeras
versiones simplemente incluían un reproductor de ficheros multimedia de los formatos
de Apple, que posteriormente dio soporte a reproducción con descarga progresiva y que
actualmente incluye también la capacidad de realizar streaming como cliente mediante
RTP y RTSP.
La descarga gratuita de la última versión de QuickTime en español se puede realizar
desde la página de Apple http://www.apple.com/es/quicktime/download/win.html. Una
vez bajado, la instalación resulta muy sencilla. Durante la instalación, no es necesario
instalar el apple software update, además, al realizar la configuración MIME, es
conveniente indicar que se use como reproductor predeterminado para secuencias
RTSP/RTP.A la hora de realizar la descarga, observarás que existe una versión que
incluye iTunes, un programa para organizar bibliotecas multimedia y comprar música
4
on-line que se suele usar en combinación con los iPod de Apple. En nuestro caso no
vamos a usar este programa así que puedes descargar la versión sin iTunes.
Una vez instalado el programa, ejecútalo e inicia una sesión de streaming abriendo un
nuevo URL (menú archivo, abrir URL) con una dirección que tenga la estructura
rtsp://servidor/video, y pulsando posteriormente la tecla play para iniciar la sesión.
Si en la máquina donde se ejecuta el cliente se encuentra instalado algún cortafuegos, al
iniciar la sesión por primera vez es posible que se visualice una pantalla de aviso del
cortafuegos indicando que se está intentando acceder a un puerto de acceso limitado, si
es así habrá que desbloquear dicho puerto.
Como ejemplo puedes probar un stream accesible mediante RSTP abriendo el URL
rtsp://zoidberg.disca.upv.es/sample_300kbit.mp4
NOTA: Es posible que el stream no se reproduzca correctamente la primera vez que
accedes a él si el cortafuegos estaba activado. En ese caso necesitarás volver a abrir el
URL para poder reproducirlo correctamente.
También puedes probar los siguientes URL
http://movies.apple.com/movies/picturehouse/the_orphanage/the_oprhanage-h.ref.mov
http://images.apple.com/movies/disney/piratesofthecaribbean3/piratesofthecaribbean3-fte_h480p.mov
que contienen trailers y making of de películas codificados con H.264 usando el
formato .mov propietario de Apple, y que se reproducen con la técnica de bajado
progresivo.
3.2 Instalación de perl
Durante esta práctica vamos a hacer uso del servidor de streaming de Apple
denominado Darwin Streaming Server (DSS). La principal ventaja de esta solución es
que se plantea como un proyecto de código abierto (open source), existiendo versiones
compiladas para se ejecutadas bajo distintos sistemas operativos. Sin embargo, uno de
los requerimientos de este servidor es tener instalado Perl, un lenguaje de scripts tipo
BCPL.
Windows XP no dispone de soporte para lenguaje Perl de forma nativa, así que el
siguiente paso será la instalación de ActivePerl, una implementación de Perl que se
encuentra disponible para Windows XP de forma gratuita en la web
http://www.activestate.com/products/activeperl/ (hay que pulsar “get activeperl”, y bajar
la versión gratuita del AS package de Windows x86). Además, para el correcto
funcionamiento del servidor de streaming DSS, la versión de ActivePerl a instalar debe
ser la 5.8.0 o posterior.
Una vez bajado y descomprimido el fichero que contiene el ActivePerl para Windows,
simplemente habrá que hacer doble clic en el fichero installer.bat, y afirmar que hemos
leído la licencia y estamos de acuerdo con ella (tecleando dos veces “yes”) y tomar el
resto de opciones que se nos ofrece por defecto (pulsando “enter” en cada opción).
Entonces se realizará la copia e instalación del programa, que terminará con el mensaje
5
“Press return to exit”. En este momento hay que salir del proceso de instalación
pulsando “enter” y a continuación reiniciar la máquina para actualizar correctamente
todas las variables de entorno. Es muy importante reiniciar la máquina en este
punto, si no se hiciera, la práctica no funcionaría, ni aunque se reinstalase el
ActivePerl.
3.3 Instalación de un servidor de streaming Darwin
Por último vamos a proceder a la instalación del servidor de streaming Darwin
Streaming Server (DSS) que se puede obtener directamente de la web de Apple en
http://developer.apple.com/opensource/server/streaming/index.html. En este enlace
puedes encontrar una descripción del servidor (que es conveniente leerse) y distintas
versiones (releases) disponibles para bajarse. En concreto nos interesa obtener la versión
ya compilada para Windows 2000/2003 server, que puede descargarse directamente del
enlace anterior, aunque para ello es necesario registrarse como usuario de “Apple Open
Source” (una versión ya descargada se encuentra disponible en la web de la asignatura).
Para la descompresión del fichero bajado simplemente hay que ejecutar el propio
fichero e indicar un directorio temporal en el que se almacenará (puedes usar la carpeta
que se indica por defecto). Una vez realizado esto hay que ir a la carpeta donde se
descomprimió y ejecutar install.bat. Se instalará el programa servidor y te pedirá que
crees un usuario y una contraseña para la posterior administración del servidor de
streaming. Introduce “rmm” como usuario y “streaming” como password. En este punto
el programa lanza una consola con una instancia del servidor. Mientras deseemos dar
servicio de streaming, debes de mantener la consola con el programa funcionando. Para
terminar su ejecución basta con pulsar “Control+C”.
Si en otro momento queremos volver a lanzar el servidor, se debe abrir una ventana de
consola e ir al directorio de instalación del DSS, para lanzarlo tecleando “perl
streamingadminserver.pl”.
ADVERTENCIA: Si la máquina en la que se encuentra instalado el servidor tiene un
cortafuegos instalado, hay que desactivarlo antes de empezar ejecutar el servidor
(aunque también debería ser suficiente si se habilita el uso de los puertos 554 de
TCP/UDP, que corresponde a RTSP).
3.4 Configuración de un servidor de streaming Darwin
Una vez instalado el servidor habrá que proceder a realizar su configuración vía web.
Para esto, debemos conectarnos usando un cliente de web al URL “http://dirIP:1220”,
donde dirIP se corresponde con la IP del servidor de streaming. Observa como la
configuración se puede realizar de esta forma desde cualquier máquina conectada a
Internet, y no sólo desde el propio servidor.
La primera vez que inicies el proceso de configuración se te solicitará un password para
la utilidad de difusión de MP3 (que no usaremos en esta práctica), se puede usar el
mismo que introdujimos previamente (“streaming”). Posteriormente se solicitará que se
indique si se va a usar encriptación a través de Secure Sockets Layer (SSL), luego se
debe introducir el directorio que contendrá los ficheros fuente a partir de los que hacer
streaming y por último se pregunta si el streaming se debe realizar por el puerto 80 (para
6
saltar cortafuegos en las redes intermedias o en los clientes). En todos los casos se debe
dejar la opción por defecto y pulsar Finish para terminar. En este momento queda
abierta una ventana que permite la configuración completa del servidor usando un menú
que se sitúa a la izquierda, y un botón en la esquina superior izquierda que permite
arrancar y parar el servidor.
El menú de configuración incluye:
-
-
-
Main: Datos generales sobre el servidor (como su nombre, el estado, la carga
de la CPU causada por el servidor, el número de conexiones a las que se les
está dando servicio y la productividad actual).
Connected Users: Identifica a los usuarios actualmente conectados,
facilitando su IP y estadísticas sobre cómo está siendo el servicio.
Relay Status y Relay Settings: Permiten implementar un servicio basado en
Relays.
Port Settings: Especifica si el servicio se ofrece por los puertos estándar de
streaming o por el puerto de web.
General Settings: Permite especificar el directorio donde se encuentran los
archivos multimedia a servir, indicar el máximo número de usuarios que se
pueden conectar simultáneamente y limitar el máximo ancho de banda que la
aplicación use. Además se puede variar los password de administración, y
especifica el tipo de autenticación para aquellos ficheros que requieran un
usuario para ser visualizados.
Playlist: Permite crear listas de medios a servir en un orden especificado
(ideal para radios en Internet).
El resto de opciones se usan para mantener un Log sobre el servidor.
A continuación asegúrate de que el servidor está en ejecución e intenta acceder desde un
cliente QuckTime player (desde otro ordenador de algún compañero tuyo) a uno de los
recursos de los que das servicio. Para esto abre el URL “rtsp://dirIP/recurso”, donde
dirIP es la IP de tu servidor y recurso es el nombre de alguno de los ficheros que estás
sirviendo, y que se encuentran en el “media directory” (ver general settings). Observa
como varían las estadísticas conforme se conectan más usuarios a tu servidor.
4. Captura de tramas de streaming
Por último, en la práctica vamos a realizar una captura de las tramas generadas por el
proceso de streaming, y a observar la encapsulación de los paquetes RTP en UDP así
como la información de la cabecera. Para esto será necesario un analizador de
protocolos que nos permita capturar las tramas que generemos y recibimos de la red. En
la práctica podremos usar el “Analyzer” del Politecnico di Torino, que hace uso de
WinPcap para el proceso de captura. Si no se encuentra disponible, otra opción será usar
el analizador de protocolos “Ethereal”.
Si se usa el “Analyzer”, después de lanzar la aplicación hay que pulsar sobre el icono
que muestra una tarjeta de red para lanzar la ventana de configuración de captura. En la
ventana “user-defined-filter” indica “ip and host cl_IP”, donde cl_IP se corresponde con
la dirección IP del host que contiene el cliente que vas a utilizar para acceder a tu
servidor (el ordenador de algún compañero) y pulsa OK. Después lanza una petición
desde el ordenador que tiene el cliente y captura unas cuantas tramas, y pulsa a stop. A
7
continuación aparecen las tramas capturadas. Analízalas y observarás como hay
peticiones RTSP por TCP, y paquetes RTP y RTCP encapsulados en datagramas UDP.
A continuación céntrate en una serie de paquetes RTP y analiza su cabecera, empleando
para ello las transparencias que hemos estudiado en clase de teoría, donde vimos el
significado de cada uno de los campos de la cabecera RTP. Observa como el número de
secuencia indica claramente la secuencia de los datos. Además puedes ver el SSRC y
como se indica que no hay ningún CSRC que contribuye a la fuente actual. El tipo de
carga viene indicada con un número. Analiza cuántos tipos de carga aparecen en las
tramas capturadas y compáralas con los tipos de carga que aparece en el estándar
(http://www.ietf.cnri.reston.va.us/rfc/rfc1890.txt).
Por último podemos utilizar el analizador de protocolos para capturar un stream de
audio de una radio en Internet. Para ello simplemente abre a través de Web cualquier
emisora de radio por Internet (por ejemplo, accediendo a http://www.cadenaser.com o
http://www.cope.es y pulsando en el botón escuchar). Cuando el audio empiece a sonar,
abre el analizador de protocolos y lanza una captura indicando como filtro únicamente
“IP”. Después de capturar unas cuantas tramas, pulsa “Stop” y analiza nuevamente el
contenido capturado. ¿Se está usando también RTP para realizar el proceso de
streaming “en vivo”?
5. Posible extensión de la práctica
Como posible ampliación de la práctica se puede hacer un análisis de otras plataformas
de streaming disponibles por medio de la modalidad código abierto (open source).
Una de las plataformas de streaming más famosas de código abierto es VideoLAN
(http://www.videolan.org/), siendo su producto estrella el reproductor multimedia VLC.
Entre las funcionalidades de este programa se encuentra poder realizar la función de
servidor de Video bajo Demanda (Video on Demand, VoN), como ya se ha mostrado en
trabajos de la asignatura en cursos anteriores (ver Web de la asignatura). Por tanto, una
posible ampliación es realizar análisis similares con otras capacidades del programa.
8
Descargar