La idea es montar un servidor streaming sobre Linux Mint 10 Julliet (que deberia de funcionar en cualquier otra distribución basada en Debian) un servidor que ofrezca contenidos de audio y video. En esta ocasión empezaremos por lo más fácil, que es hacer streaming de audio.

Para empezar hay que entender qué es Streaming, por definición Streaming consiste en distribuir audio o video por Internet, ó ambos; la palabra stream significa en español corriente, por lo que streaming se interpreta como “corriente directa” es decir sin interrupciones, si no utilizamos streaming para ofrecer contenido multimedia en Internet, se tendrían que descargar los archivos para después reproducirlos, lo que (dependiendo de la conexión) sería más lento. Entonces el streaming permite mostrar contenido multimedia de forma más rápida, mientras se descarga el archivo o incluso sin necesidad de descargar el archivo.

Formalmente el streaming funciona de la siguiente manera, una computadora cliente se conecta con el servidor, este último tiene el contenido multimedia y empieza a mandar el archivo, el cliente lo empieza a recibir y consturye una especia de buffer donde va guardando el contenido del archivo, cuando el buffer se llena, entonces es cuando se empieza a mostrar el archivo, pero simultaneamente la descarga sigue su marcha, esto es dependiendo del tipo de streaming que hayamos configurado, porque hay unos que no proporcionan la capacidad de descargar, si no simplemente de reproducir los archivos. Los que servidores streaming que tienen capacidad de ofrecer la descarga estan sincronizados para que en el momento que se ha terminando la descarga, tambien ya el usuario ha tenido la oportunidad de reproducir el archivo completamente. Si en algunos momentos hay cuellos de botella en la red, esto es que el Internet se te ponga lento, se empieza a usar la información que hay en el buffer (que aquí hay más avance), pero si la conexión se interrumpe demasiado, entonces se agota la información que hay en el buffer y la reproducción del archivo obviamente se corta, hasta que se reestablezca la conexión.

El primer paso que haremos es hacer un servidor streaming de audio, lo que se conoce como radio en Internet, hay muchas opciones para llevar a cabo esta tarea, pero en esta ocasión usaremos shoutcast, que es sencillo de configurar.

Ocuparemos dos programillas corriendo en nuestro servidor, uno que será propiamente el servidor encargado de administrar las conexiones de los clientes y otro que se encarga del manejo de los archivos de audio. Ambos los podemos obtener de la dirección http://www.shoutcast.com/ en el apartado “Broadcasting Tools”, buscamos el servidor para nuestra plataforma (Linux) que tiene por nombre “SHOUTcast DNAS 1.9.8 “ DNAS viene de Distributed Network Audio Server, hay disponible para varios sistemas operativos ademas de Linux, para Unix, Windows e incluso MacOS. El otro programa que se usa para administrar los archivos se llama “SHOUTcast Transcoder “ y esta disponible en la misma página; de este solo hay para Windows, MacOS y Linux.

En esta página (http://www.shoutcast.com) se encuentran los programas con las versiones más recientes, nosotros realizamos las pruebas con la versión más reciente del servidor este es el link de descarga http://yp.shoutcast.com/downloads/sc1-9-8/sc_serv_1.9.8_Linux.tar.gz y el otro programa se uso una versión más atrasada de la que esta en la página de shoutcast, ya que la que esta en dicha página es versión beta, el link de descarga de la versión que usamos es este: http://yp.shoutcast.com/downloads/sc_trans_posix_040.tgz .

Los archivos que descargamos son .tar.gz por lo que hay que descoprimirlos.

 

El archivo del servidor se llama sc_serv_1.9.8_Linux.tar.gz y el del programa que administra los archivos se llama sc_trans_posix_040.tgz. Descomprimamos el del servidor, aparecen tres archivos, vamos a crear un directorio llamado servidor y movemos los tres archivos dentro de ese directorio para no perderlos de vista:

Ahora descomprimimos el otro archivo, los archivos que se descomprimen de este quedan en automatico en un directorio llamado sc_trans_040:

 

Ahora tenemos los archivos del servidor en un directorio (servidor) y los del programa de manejo de archivos de audio en otro (sc_trans). Cada uno de los programas tiene un ejecutable y un archivo de configuración al cual le echaremos manos para configurar algunos parametros necesarios para que funcione adecuadamente.

 

En el servidor el ejectuable se llama sc_serv y el archivo de configuración se llama sc_serv.conf. En el otro programa el ejecutable se llama sc_trans_linux y el archivo de configuración se llama sc_trans_linux.

 

Vamos a configurar unicamente los parametros necesarios para que funcione en ambos archivos de configuración, empezando con el del servidor, pero dejaremos unas diapositivas en la parte final del post donde se explican las mayoria de los parametros contenidos en ambos archivos.

 

En el servidor los parametros más importantes son:

 

MaxUsers. Este es la cantidad de usuarios máxima que tendra tu servidor, es decir el número máximo de clientes que se podrán conectar a escuchar tu música. El número que coloques aquí obviamente depende la velocidad de conexión que tengas, para hacer el calculo se tiene que dividir el ancho de banda de tu conexión entre 24 y obtendras un aproximado de usuarios a los que puedes servir, por ejemplo mi conexión es de 1024 kbps, 1024/24 = 42.66, entonces podras atender a un máximo de 42 usuarios, pero para no caer en latencia de red y otros problemas como cuello de botella, la prueba la haremos con 30 usuarios.

MaxUsers=30

 

No dejes espacio entre el signo “=” y el valor asignado, si no causaría error el script.

Ahora buscamos el parametro Password, viene un password por defecto “changeme”, hay que cambiarlo ya que este password se valida con el otro archivo de configuracion (sc_trans.conf) deben de coincidir el password que suministras aquí con el que pones en ese archivo. Tampoco puedes dejar sin valor esta directiva.

Ahora busca la directiva PortBase que es donde especificamos el puerto que va a usar el servidor, por defecto viene asignado el puerto 8000, asi que este puerto será usado para escuchar las peticiones y en automatico el 8001 para el envío de archivos, aquí no tenemos que hacer nada, pero si quieres puedes cambiar el puerto, para probar, pero debes de tener cuidado de no usar un puerto inferior al 1024, ya que para usar estos puertos del 1024 hacía abajo necesitas ser root.

 

 

Dejamos los siguientes parrafos con los valores que tiene por defecto, así funciona correctamente y como ya se comento, en las diapositivas al final de este post explicamos que función tiene cada una de estas directivas. Más abajito del script ya en la sección “Network Configuration” viene la directiva SrcIP, aquí se especifica el IP desde donde vamos a transimitir, por defecto tiene el valor de ANY y se puede dejar así si queremos transmitir desde cualquier IP, aunque tambien podemos poner localhost porque estaremos emitiendo desde este mismo equipo ó bien el equivalene que sería 127.0.0.1 yo opte por dejar el valor any.

SrcIP=any

 

En el siguiente parrafo se configura el ip del destino, la directiva se llama DestIP, ahi por defecto viene el valor de any, y con ese valor lo dejaremos para que el servidor sea capaz de transmitir a cualquier dirección IP.

 

DestIP=any

 

El resto de los parrafos los podemos dejar tal y cual están, o podemos experimentar con ellos, con esto que hemos modificado la parte del servidor funcionará y vuelvo a repetir que la mayoría de las directivas serán explicadas en diapositivas al fnal del post para que puedas hacer tus pruebas.

 

Guardamos los cambios en el archivo y lo cerramos, ahora entra al otro directorio sc_trans_040 y abrimos con gedit el archivo de configuración sc_trans.conf.

 

Ya dentro de este archivo vamos a configurar la directiva ServerIP aquí le tenemos que asignar el mismo valor que pusimos en SrcIP del scrip pasado, pondremos 127.0.0.1 y también buscamos la directiva ServerPort que tendremos que ponerle el mismo valor que pusimos en PortBase del script pasado, es decir 8000, ambas directivas se encuentran juntas.

 

ServerIP=127.0.0.1
ServerPort=8000

 

Luego buscamos el parrafo donde dice StreamTitle/URL/Genre Aquí vamos a definir el titulo de la emisora, es decir de nuestra radio, el formato de la dirección de acceso y si queremos poner un genero musical de nuestra radio, estas tres cosas se hacen en las directivas StreamTitle, StreamURL y Genre respectivamente, yo suministre los siguientes valores:

 

StreamTitle=radioporpialcuadrado

StreamURL=http://127.0.0.1:8000

Genre=Cumbianchero

En el titulo realmente le puedes poner lo que quieras al igual que en el genero, pero en el StreamURL si tienes que seguir el formato ip:puerto, tal y como lo puedes apreciar en el parrafo anterior y en la siguiente captura:

 

 

Lo siguiente es crear la lista de reproducción que va a tomar este programa para hacer la “corriente continua”. Las pistas que formen la lista de reproducción pueden estar en cualquier directorio de nuestro /home e incluso fuera de este, solo hay que checar que los archivos de música tengan permiso de ejecución si no bastaría hacerles un “chmod +x “. Se tiene que generar una lista de reproducción con extensión .lst, dicha lista es un archivo de texto plano que contiene la “ruta absoluta” de cada uno de los archivos. Puedes crear el archivo y escribir una linea por cada ruta pero esto es engorroso (de weba) así que lo vamos a hacer a generar el archivo .lst en base a un redireccionamiento de salida desde la consola.

 

Ubiquemos el directorio donde estan las pistas, que no necesariamente tiene que ser uno solo, las pistas pueden estar dispersas en varios directorios, pero para efecto de este post las sacaremos todas de un mismo directorio.

Vamos a transmitir unas rolitas del máximo idolo musical de mi twitterfriend @goyitopuma además que a mi también me late un buen. Entonces ya sabiendo la ruta absoluta del directorio donde estan las canciones hacemos la siguiente instrucción:

find /ruta/de/tu/carpeta -type f -name “*.mp3” > playlist_filename.lst

Sustituye /ruta/de/tu/carpeta/ por la ruta absoluta donde están las canciones y playlist_filename por el nombre que quieras darle a la lista de reproducción.

 

Ahora dentro del mismo archivo sc_trans.conf buscamos la directiva PlaylistFile y le asignamos como valor la ruta donde esta nuestro archivo .lst, el archivo .lst puede estar en cualquier ruta, no necesariamente en el mismo directorio donde estan los archivos de audio.

 

Ya terminamos, solamente guarda los cambios y cierra el archivo, dirigete primeramente al directorio donde esta el servidor y lo corres:

./sc_serv

Te debe de aparecer unas líneas como en la captura anterior. Posteriormente entras al directorio donde esta el sc_trans y ejecutas el programa:

./sc_trans_linux

Te recomiendo que lo hagas en otra pestaña de la consola para que tengas a la vista ambos programas, de cualquier forma la consola desde donde lanzaste el servidor quedara bloqueada con el proceso y lo mismo ocurrira con la consola desde donde lances el sc_trans_linux

Si todo marcha bien tendrias que ver alo parecido a la captura anterior.

 

Ahora para que cualquier cliente se conecte desde tu red LAN tiene que poner en la ventana de su navegador, http://ipdelservidor:8000

Para que el cliente pueda empezar a escuchar debe elegir la opción “Listen” de la barra de menu y dependiendo del navegador, S.O. Usados puede ser que se embeba el reproductor en el navegador o se lance el reproductor que por defecto.

 

En la sección AdminLogin podremos realizar tareas administrativas del servidor, si nos conectamos debemos de proporcionar el AdminPassword que se puede definir en sc_serv.conf

Una vez dando clic en LISTEN en mi caso que uso Linux y como navegador Firefox, se embebe el reproductor en el mismo navegador.

 

En un post posterior haremos los ajustes para no usar una lista de reproducción desde archivo para servir el flujo, si no hacerlo desde algún reproductor multimedia GNU.

 

En las siguientes diapos checa el resto de las directivas del archivo de configuración.

 

 

Espero les sirva el post y SaluLINUX!

 

 

 

Powered By DT Author Box

Written by chris

Servidor Streaming Parte 1. (Radio)

14 thoughts on “Servidor Streaming Parte 1. (Radio)

  • Un buen post, neto que si…

    Sabe, yo hase unas semanas atras, estube buscando informacion con respecto a como hacer una estacion de radio… ammm esto puede que no sea exactamente lo mismo, pero me servira mucho, eso espero, ya mas o menos habia lehido algo similar, pero perdí el enlace, pero que chido que ahora pues me encuentre con esto bien explicado… De antemano Gracias, de parte de la comunidad informática…

    Esperaremos la segunda parte… Que ande de lo mejor…

    Salu-linux…

  • Ya esta el nuevo post, la parte 2, lo subí en la mañana, suerte con tu practica viejo y cualquier duda ya sabes que estamos a la orden.

    SaluLINUX

    1. Un honor leer tan buenos pot, neto que me servirá, por lo pronto, estaremos haciendo esto y espero despues hacer lo que tenia en mente… que aya un poco mas de tiempo… saludos y grax por la informacion…

  • Vamos paso a paso men, me gustaría q me dieran opiniones de servidores que quisieran montar, para que lo pruebe yo y ya lo hacemos en la clase, gracias por estar al pendiente del blog, un saludo!

    1. Jejeje, pues tiene razon, siento que me van a colgar si doy una sugerencia, pero como dicen el que no arriesga no gana.. jajaja… uno de los tipos de servidores que me llamo la atencion ha sido el Servidor Groupware, segun lehí es un sistema de apoyo a decisiones en grupos, sirve como interfaz en un entorno compartido, aun no me queda muy claro que es en si, pero psss es un punto de vista, no se si sea muy complicado esa honda porque tiene muchas caracteristicas (configuracion, creo)… bueno este es mi comentario, jajaj siento que me van a matar los demas por andar escribiendo lo que no devo jajajaj…

      salu-linux…

Leave a Reply

Follow

Get every new post delivered to your Inbox

Join other followers:

%d bloggers like this: