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