1 Objetivos Conocer toda la configuración necesaria para montar un servicio de Streaming Audio/Video en el Sistema operativo Ubuntu 12.04 junto a los paquetes necesarios para la configuración de este. Instalar los paquetes necesarios para la configuración e implementación de Apache2 (http), php y codecs multimedia. Configurar el icecast, programa para la gestión de streaming, con el fin de transmitir exitosamente video y audio, según sea necesario. 2 Marco Teórico Servicio Streaming El streaming es la distribución de multimedia a través de una red de computadoras de manera que el usuario consume el producto al mismo tiempo que se descarga. La palabra streaming se refiere a que se trata de una corriente continua (sin interrupción). Este tipo de tecnología funciona mediante un búfer de datos que va almacenando lo que se va descargando para luego mostrarse al usuario que lo usa. Esto se contrapone al mecanismo de descarga de archivos, que requiere que el usuario descargue los archivos por completo para poder acceder a los archivos. El término se aplica habitualmente a la difusión de audio o vídeo. El streaming requiere una conexión por lo menos de igual ancho de banda que la tasa de transmisión del servicio. El streaming de vídeo se popularizó a fines de la década de 2000, cuando el ancho de banda se hizo lo suficientemente barato para gran parte de la población. Para poder proporcionar un acceso claro, convincente, continuo y sin interrupciones ni cambios, el streaming se apoya en las siguientes tecnologías: Codec Bitstream Transport Control Los enlaces de escucha o alimentación de audio de la estación suelen ser http://, pnm://, .asx, .pls, m3u, etc. 4 Códecs: Son archivos residentes en el ordenador que permiten a uno o varios programas descifrar o interpretar el contenido de un determinado tipo de archivo multimedia. Se suelen emplear MP3, Vorbis o AAC para el audio y H.264 o VP8 para el video. Bitstream: Las emisiones de audio y video en códecs se ensamblan en un contenedor bitstream como FLV, WebM, ASF o ISMA. Transporte: El bitstream se distribuye desde un servidor streaming a un cliente streaming utilizando un protocolo de transporte, como MMS o RTP. Control: El cliente de streaming puede interactuar con el servidor streaming utilizando un protocolo de control, como MMS o RTSP. Protocolos ligeros UDP y RTSP (los protocolos empleados por algunas tecnologías de "streaming") hacen que las entregas de paquetes de datos desde el servidor a quien reproduce el archivo se hagan con una velocidad mucho mayor que la que se obtiene por TCP y HTTP. Esta eficiencia es alcanzada por una modalidad que favorece el flujo continuo de paquetes de datos. Cuando TCP y HTTP sufren un error de transmisión, siguen intentando transmitir los paquetes de datos perdidos hasta conseguir una confirmación de que la información llegó en su totalidad. Sin embargo, UDP continúa mandando los datos sin tomar en cuenta interrupciones, ya que en una aplicación multimedia estas pérdidas son casi imperceptibles. Precarga La entrega de datos desde el servidor a quien ve la página puede estar sujeta a demoras conocidas como lag (retraso, en inglés), un fenómeno ocasionado cuando los datos escasean (debido a interrupciones en la conexión o sobrecarga en el ancho de banda). Por tanto, los reproductores multimedia precargan o almacenan en el buffer, que es una especie de memoria, los datos que van recibiendo para así disponer de una reserva de datos y evitar que la reproducción se detenga. Esto es similar a lo que ocurre en un reproductor de CD portátil, que evita los saltos bruscos y los silencios ocasionados por interrupciones en la lectura debidos a vibraciones o traqueteos, almacenando los datos antes de que el usuario tenga acceso a ellos. Red de acceso de contenido Si un determinado contenido comienza a atraer una cantidad de usuarios mayor que su capacidad de ancho de banda, estos usuarios sufrirán cortes o lag. 5 Finalmente, se llega a un punto en que la calidad del stream es pésima. Ofreciendo soluciones, surgen empresas y organizaciones que se encargan de proveer ancho de banda exclusivamente para streaming, y de apoyar y desarrollar estos servicios. Usos Radio por Internet La ventaja para la emisora de radio por Internet es que puede llegar a un gran público objetivo que, por diversos motivos (como el alcance territorial limitado de la señal radiofónica), desconocían una emisora de otro lugar. Cabe aclarar que no sólo las emisoras de radio AM y FM transmiten por Internet; en los últimos tres (3) años están creciendo exponencialmente las radios digitales, que transmiten exclusivamente por Internet. Televisión por Internet Desde finales de los 90, los intentos de televisión por Internet habían fracasado, por el considerable ancho de banda requerido por la señal de vídeo; sin embargo, resurge el interés en este tipo de comunicación pública con el gran éxito de Youtube y la expansión del ADSL. Acerca de Ubuntu 12.04 Ubuntu es un sistema operativo basado en Debian y que se distribuye como software libre y gratuito, el cual incluye su propio entorno de escritorio denominado Unity. Está orientado al usuario novel y promedio, con un fuerte enfoque en la facilidad de uso y en mejorar la experiencia de usuario. Está compuesto de múltiple software normalmente distribuido bajo una licencia libre o de código abierto. Estadísticas web sugieren que la cuota de mercado de Ubuntu dentro de las "distribuciones Linux" es, aproximadamente, del 49%, y con una tendencia a aumentar como servidor web.5 Y un importante incremento activo de 20 millones de usuarios para fines del 2011. Acerca de Apache (http) El servidor HTTP Apache es un servidor web HTTP de código abierto, para plataformas Unix (BSD, GNU/Linux, etc.), Microsoft Windows, Macintosh y otras, que implementa el protocolo HTTP y la noción de sitio virtual. Cuando comenzó su desarrollo en 1995 se basó inicialmente en código del popular NCSA HTTPD, pero más tarde fue reescrito por completo. Su nombre se debe a que Behelendorf quería que tuviese la connotación de algo que es firme y enérgico pero no agresivo, y la tribu Apache fue la última en rendirse al que pronto se convertiría en gobierno de EEUU, y en esos momentos la preocupación de su grupo era que 6 llegasen las empresas y "civilizasen" el paisaje que habían creado los primeros ingenieros de internet. Además Apache consistía solamente en un conjunto de parches a aplicar al servidor de NCSA. En inglés, a patchy server (un servidor "parcheado") suena igual que Apache Server. El servidor Apache se desarrolla dentro del proyecto HTTP Server (httpd) de la Apache Software Foundation. Acerca de PHP PHP es un lenguaje de programación de uso general de código del lado del servidor originalmente diseñado para el desarrollo web de contenido dinámico. Fue uno de los primeros lenguajes de programación del lado del servidor que se podían incorporar directamente en el documento HTML en lugar de llamar a un archivo externo que procese los datos. El código es interpretado por un servidor web con un módulo de procesador de PHP que genera la página Web resultante. PHP ha evolucionado por lo que ahora incluye también una interfaz de línea de comandos que puede ser usada en aplicaciones gráficas independientes. PHP puede ser usado en la mayoría de los servidores web al igual que en casi todos los sistemas operativos y plataformas sin ningún costo. Acerca de Icecast Icecast es un proyecto para streaming de medios mantenido por la Fundación Xiph.Org. Puede ser utilizado para crear una estación de radio en Internet o para uso privado entre otras cosas. Es muy versátil en lo relativamente fácil que admite nuevos formatos, y además, soporta estándares abiertos para comunicación e interacción. El mismo término, es también usado para referirse específicamente al programa servidor que es parte del proyecto. Actualmente el servidor Icecast soporta en sus últimas versiones streams Ogg Vorbis, MP3, Ogg Speex, Ogg FLAC, Ogg Theora y AAC. 3 Desarrollo De la Práctica Para lograr el correcto funcionamiento del servidor de Streaming Audio/Video debemos cumplir con ciertos requerimientos mínimos: 1. Servidor linux, en nuestro Caso Ubuntu 12.04 2. Apache (http) 3. Icecast2 1. Ubuntu 12.04 Correctamente Instalado 7 Ilustracion N°1 2. Instalación de Servidor Apache (http) Abrir una terminal/consola, primero instalamos el servidor web Apache: sudo apt-get install apache2 Lo podemos comprobar abriendo un navegador en la dirección: http://127.0.0.1 Ilustracion N°2 3. Instalación y configuración Icecast2 Abrir una terminal/consola, primero instalamos el servidor web Apache: sudo apt-get install icecast2 Ilustración N°3 8 Cuando aparezca la ventana que nos pregunta si deseamos configurar el Icecas2, marcamos que no, puesto que lo configuraremos más tarde. Ilustración N°5 Luego que el Icecast2 esté instalado, procedemos a pararnos sobre su directorio dentro de la terminal, digitamos: cd /etc/icecast2/ Ilustración N°6 Dentro de este directorio se encuentra el archivo de configuración del Icecast2 llamado icecast.xml, procederemos a modificarlo, digitamos en la consola sudo gedit icecast.xml Ilustración N°7 9 Nos saldrá en pantalla el siguiente documento, el cual debemos modificar los siguientes ítems del listado llamado <limite>: <clientes> 100 </clientes> que indica la cantidad de clientes permitidos en tu servidor, para nuestra practica dejaremos solo 5, entonces el ítem debe quedar de la siguiente manera: <clientes> 5 </clientes>. NOTA: se debe tener en cuenta el ancho de banda, puesto que se transmite 32 Kbps a cada cliente, y si excedes tu ancho de banda probablemente se pondrá muy lenta tu transmisión streaming. <source> 2 </source> indica el número de fuentes de donde se va a recibir el contenido, este ítem lo dejamos como esta. Las demás opciones de ese listado inicial que corresponden a tiempo de conexión y desconexión de clientes, entre otras opciones, las dejaremos intactas. Ilustración N°8 10 Ilustración N°9 Luego bajamos un poco y encontraremos otro fragmento de configuración denominado <authentication>, del cual modificaremos: <source – password> hackne </source-password> junto a <relay – password> hacknet </relay – password> la primera consisten en la contraseña usada para transmitir y la segunda será la delegada a los servidores que deseen retransmitir, cambiaremos los datos hacknet en ambas casillas según sean nuestras necesidades. Más abajo encontraremos los mismos datos pero para un usuario administrador que será el encargado de modificar el icecast desde la interfaz: <admin – password> admin </admin-password> junto a <admin – password> hacknet </admin – password> también se pueden modificar los datos según sea requerido. 11 Ilustración N°10 Nos desplazamos un poco más para abajo en el archivo de configuración y encontraremos otra directiva llamada: listing. … <hostname> localhost </hostname>, la cual la debemos modificar según la modificación que le hayas hecho al servidor Apache, se puede asignar un dominio como tal: <hostname> diana.asor.local </hostname>, o tu ip. Más abajo esta la opción <listen-sockert> que contiene <port> 8000 </port> por defecto, el cual es el puerto del equipo que el servidor de streaming utilizara para realizar la transmisión, se recomienda dejar la opción por defecto pero puedes modificarla según sean tus necesidades. 12 Ilustración N°11 Finalmente guardamos los cambios hechos al documento y salimos de la carpeta del icecast hasta la ruta raíz digitando: sudo cd .. Cambiaremos al usuario root para realizar una modificación al icecast, digitando: sudo su y digitamos el siguiente comando para editar: sudo gedit /etc/default/icecast2 13 Ilustración N°12 En el documento que aparece en pantalla, iremos a la última línea visible y modificaremos el parámetro ENABLE=false a ENABLE=true para activar el script init.d. Que da soporte a los scripts. Guardamos y cerramos el documento. Ilustración N°13 14 Modificando el valor: Ilustración N°14 4. Iniciando servicio y transmisión Finalmente terminadas las configuraciones básicas procedemos a iniciar el servidor de streaming icecast2, digitamos lo siguiente en la consola: sudo service icecast2 start Ilustración N°15 si todo esta correcto debería correr la línea sin problemas, ahora verificamos que realmente haya iniciado el servidor, entra a nuestro navegador de internet y digitando en la barra de dirección nuestra ip o dominio seguido de dos puntos y el puerto por donde transmitirá el icecast2, todo esto configurado anteriormente: diana.asor.local:8000 Nos deberá aparecer lo siguiente en el navegador: 15 Ilustración N°16 Luego pinchamos e botón de Administración, iniciamos sesión usando los datos que configuramos anteriormente: Ilustración N°17 16 Nos aparece una ventana con el estado del servidor, clientes conectados, datos transmitidos, nombre del administrador, entre otros datos. Ilustración N°18 5. Instalación de Codecs Para lograr transmitir video mediante el servicio de streaming debemos de instalar un par de programas que se encargaran de codificar nuestro multimedia para que sea más accesible en la web. Primero instalaremos ffmpeg2theora escribiendo lo siguiente en la terminal: sudo apt-get install ffmpeg2theora Ilustración N°19 Finalmente instalaremos oggfwd digitando en la consola lo siguiente: sudo apt-get install oggfwd Ilustración N°20 6. Preparando el Multimedia Ya que se tiene todo preparado para comenzar la transmision via streaming, se debe decidir y configurar lo que se va a transmitir. Crearemos una carpeta donde almacenaremos los videos a transmitir, la alojaremos en un sitio de fácil acceso, en nuestra práctica será en la carpeta personal: 17 Ilustración N°21 Para transmitir de manera eficiente el multimedia debemos convertir o codificarlo a un tipo de archivo ligero y libre como el .ogg para el audio y el .ogv para el video, para eso haremos lo siguiente: Primero nos pararemos en la carpeta que almacena los videos: cd /videos luego inicializaremos el icecast2 con el siguiente comando: sudo service icecast2 start nos pedirá el password que configuramos anteriormente en la directiva source, lo digitamos y enter. Luego reinicializamos el servicio digitando lo siguiente: sudo service icecast2 restart Para convertir el multimedia al formato mencionado anteriormente debemos digital lo siguiente en la consola: ffmpeg2theora a.mpg –o /dev/stdout | oggfwd diana.asor.local 8000 diana /out.ogv a.mpg video que se desea transmitir diana.asor.local dominio diana contraseña de admininistrador /out.ogv nombre de la ruta 18 Ilustración N°22 Luego empezara la transmisión de la señal y nos mostrara lo siguiente la consola, que nos indica que se está enviando multimedia: Ilustración N°23 A continuación iremos al navegador del Sistema Operativo, digitamos nuestra dirección junto al puerto y el archivo que transmitimos: Ilustración N°24 Cualquier maquina en nuestra red que pueda acceder a nuestra ip podrá ser capaz de ver la transmisión. 19 Icecast2, Transmitir audio 1.- Instalamos ices2 y herramientas vorbis para manejo de formatos de audio libres (ogg). Nos vamos a una terminal y tecleamos sudo apt-get install ices2 vorbis-tools Ahora vamos a la barra de direcciones del navegador web y tecleamos http://diana.asor.local:8000/admin/listmounts.xsl Como vemos aún no tenemos ningún Active Mountpoints, lo cual conseguiremos tras instalar el cliente ices2 y establezcamos las "lista de canciones" 2. Configuración del cliente ices2 para icecast2 Ices2 no viene con archivos de configuración por defecto. Lo que si trae en /usr/share/doc/ices2/examples son archivos de ejemplo para configuraciones de alsa (ices-alsa.xml), oss (ices-oss.xml) y playlist (ices-playlist.xml). Se va a utilizar esta última: se crea una carpeta en /etc llamada ices2 ,copiamos allí el archivo y le otorgamos permisos sudo mkdir /etc/ices2 sudo cp /usr/share/doc/ices2/examples/ices-playlist.xml /etc/ices2/ sudo chmod +x /etc/ices2/ices-playlist.xml A continuación editamos el archivo y lo configuramos sudo gedit /etc/ices2/ices-playlist.xml 20 Es muy sencillo, vamos a ir viéndolo por secciones: ♦ En la sección <background> cambiamos el 0 por 1, de esta forma evitaremos que se mantenga la terminal abierta hasta que lo cerremos. <background>1</background> ♦ En la sección <metadata> configuramos: <metadata> <name>NOMBRE ESTACION</name> <genre>GENERO ESTACION</genre> <description>DESCRIPCION ESTACION</description> </metadata> 21 ♦ En la sección <input> configuramos: <param name="file">/miruta/playlist.txt</param> <param name="random">1</param> <param name="once">0</param> Establecemos la /miruta/playlist.txt ruta al archivo que contiene la lista de canciones: Random: indicamos si queremos que la reproducción de los archivos sea secuencial (0) o aleatoria (1). Once: Indicamos si queremos que la emisora deje de emitir al terminar la lista de reproducción (1) o que continúe emitiendo sin interrupción (0). ♦ En la sección <instance> configuramos: <hostname>localhost</hostname> <port>8000</port> <password>PASSWORD_FUENTES</password> <mount>/lista_de_reproduccion.ogg</mount> 22 La dirección del servidor: dominio El puerto: por defecto trae 8000 (lo dejamos tal cual) El password de las fuentes: PASSWORD_FUENTES (es el mismo password que hemos puesto en /etc/icecast2/icecast.xml) En <mount></mount> debemos escojer el ‘mount point’ que queramos para emitir. Podemos poner algo descriptivo (sin espacios y acabado en .ogg), por ejemplo lista_de_reproduccion.ogg Creamos la carpeta para el archivo log para ices sudo mkdir /var/log/ices y le damos permisos, si no lo hacemos al arrancar ices2 nos lanzará un ERROR sudo chmod 777 /var/log/ices 3. Configuración del archivo de canciones a reproducir Para ello tenemos dos opciones: 23 Opción a) Creamos la ruta hacia un archivo con la lista de canciones con el comando siguiente sudo find /RUTA_DONDE_ESTAN_LAS_CANCIONES -name "*.ogg" > /RUTA_DONDE_TENGO_EL_ARCHIVO_LISTA/LISTA.TXT Opción b) Editamos el archivo y tecleamos la ruta completa para cada canción sudo gedit /RUTA_DONDE_TENGO_EL_ARCHIVO_LISTA/LISTA.TXT /RUTA_DONDE_ESTAN_LAS_CANCIONES/nombre_cancion1.ogg /RUTA_DONDE_ESTAN_LAS_CANCIONES/nombre_cancion2.ogg ….. 4. arrancar ices2 Tecleando en consola sudo ices2 /etc/ices2/ices-playlist.xml & Si ahora nos vamos a la página http://diana.asor.local:8000/lista_de_reproduccion.ogg, con el que podemos conectarnos a la radio. 24 Mp3 a ogg Cuando se configura una estación de radio con Icecast e Ices una de las preguntas que primero surge es: ¿Cómo convierto un Mp3 a ogg? La respuesta es muy sencilla para nuestro consuelo, para convertir un Mp3 a ogg en linux basta un comando de consola pero antes asegúrate de tener instalados estos paquetes si aún no los tienes: sudo apt-get install mpg321 vorbis-tools Ahora para convertir un mp3 a ogg: mpg321 music.mp3 -w - | oggenc -o music.ogg – music.mp3 ruta de donde se encuentra el archivo mp3 music.ogg ruta de donde se se desea guardar el archivo ogg 25 4 Conclusiones El servidor streaming se basa en un buffer que almacena previamente el multimedia a transmitirse y al mismo instante lo va cargando en el reproductor del navegador o aplicación que esté recibiendo la transmisión. Es absolutamente recomendable codificar los archivos a transmitir en archivos ligeros y libres para evitar colapso de la transmisión y problemas legales, archivos tales como .ogg para audio y .ogv para video. 26 5 Referencias http://es.wikipedia.org/wiki/Streaming http://es.wikipedia.org/wiki/Servidor_HTTP_Apache http://es.wikipedia.org/wiki/Ubuntu http://es.wikipedia.org/wiki/Icecast http://es.wikipedia.org/wiki/PHP http://fraterneo.blogspot.com/2013/01/como-configurar-un-servidor-de.html http://angelvg.blogspot.com/2009/07/freebsd-icecast2-theora.html http://www.fresymetal.com/como-instalar-icecast2-para-video-streaminggnulinux/ http://www.howtoforge.com/installing-apache2-with-php5-and-mysqlsupport-on-fedora-18-lamp http://www.youtube.com/watch?v=b7geBiQKOr4 27