Como Instalar tu Propia Radio en Internet Gratis usando Linux

0
1287

Este tutorial explica cómo crear su propio servidor de transmisión de audio con Icecast (OGG / MP3). Icecast fue diseñado para transmitir cualquier archivo de audio si hay un cliente de transmisión adecuado disponible. Para OGG / Vorbis puede usar ices y para MP3 icegenerator. Aquí hay un pequeño tutorial sobre cómo configurar Icecast para transmitir OGG / Vorbis y MP3.

Paso #1:

Configurando el servidor: Icecast

Primero descarga e instala el software:

apt-get install icecast2

Luego debemos editar /etc/icecast2/icecast.xml. La mayoría de los valores predeterminados deberían funcionar bien por ahora, pero debe cambiar las contraseñas en la sección <authentication> … </authentication>. La contraseña de origen es la contraseña que Ices2 utilizará más adelante para conectarse a Icecast2; la contraseña de administrador es la contraseña que el administrador utilizará en la interfaz web de Icecast2; No usaremos la contraseña de retransmisión, pero de todos modos debe cambiarla.

nano /etc/icecast2/icecast.xml
[...]
    <authentication>
        <!-- Sources log in with username 'source' -->
        <source-password>password1</source-password>
        <!-- Relays log in username 'relay' -->
        <relay-password>password2</relay-password>

        <!-- Admin logs in with the username given below -->
        <admin-user>admin</admin-user>
        <admin-password>password3</admin-password>
    </authentication>
[...]

Despues editar /etc/default/icecast2 y establecer el parametro “ENABLE” a “true”:

nano /etc/default/icecast2
# Defaults for icecast2 initscript
# sourced by /etc/init.d/icecast2
# installed at /etc/default/icecast2 by the maintainer scripts

#
# This is a POSIX shell fragment
#

# Full path to the server configuration file
CONFIGFILE="/etc/icecast2/icecast.xml"

# Name or ID of the user and group the daemon should run under
USERID=icecast2
GROUPID=icecast

# Edit /etc/icecast2/icecast.xml and change at least the passwords.
# Change this to true when done to enable the init.d script
ENABLE=true

Eso es todo, ya podemos iniciar el servidor Icecast2:

/etc/init.d/icecast2 start

Ahora puede dirigir su navegador a http://192.168.0.100:8000/ (reemplace 192.168.0.100 con su propia dirección IP o FQDN) y navegar a través de la interfaz web:

Paso #2:

Instalar y configurar Ices2

Para instalar Ices2, ejecutamos

apt-get install ices2

A continuación, creamos los directorios /var/log/ices (para los archivos de registro Ices2), /etc/ices2 (donde almacenamos nuestro archivo de configuración Ices2), y /etc/ices2/ music (donde almacenamos nuestros archivos .ogg):

mkdir /var/log/ices
mkdir /etc/ices2
mkdir /etc/ices2/music
El paquete Ices2 viene con tres archivos de configuración de muestra, /usr/share/doc/ices2/examples/ices-alsa.xml, /usr/share/doc/ices2/examples/ices-oss.xml, y /usr/share/doc/ices2/examples/ices-playlist.xml. 

Usamos este último porque crearemos una lista de reproducción de archivos .ogg locales que queremos transmitir a los oyentes. Por lo tanto, copiamos ese archivo a /etc/ices2:

cp /usr/share/doc/ices2/examples/ices-playlist.xml /etc/ices2

A continuación editamos /etc/ices2/ices-playlist.xml. La mayoría de los valores predeterminados deberían funcionar, pero cambiamos <background> 0 </background> a <background> 1 </background> porque queremos que Ices2 se ejecute en segundo plano (de lo contrario, esperaría en el shell hasta que lo finalice), También cambiamos los datos en la sección <metadata> … </metadata>, establecemos la ruta completa a nuestro archivo de lista de reproducción en la sección <input> … </input> y establecemos la contraseña de origen correcta para nuestra Servidor Icecast2 en la sección <instancia> … </instancia> (también puede establecer la tasa de bits de su transmisión de audio en esa sección):

nano /etc/ices2/ices-playlist.xml
<?xml version="1.0"?>
<ices>
    <!-- run in background -->
    <background>1</background>
    <!-- where logs, etc go. -->
    <logpath>/var/log/ices</logpath>
    <logfile>ices.log</logfile>
    <!-- 1=error,2=warn,3=info,4=debug -->
    <loglevel>4</loglevel>
    <!-- set this to 1 to log to the console instead of to the file above -->
    <consolelog>0</consolelog>

    <!-- optional filename to write process id to -->
    <!-- <pidfile>/home/ices/ices.pid</pidfile> -->

    <stream>
        <!-- metadata used for stream listing (not currently used) -->
        <metadata>
            <name>Example stream name</name>
            <genre>Example genre</genre>
            <description>A short description of your stream</description>
        </metadata>

        <!-- input module

            The module used here is the playlist module - it has
            'submodules' for different types of playlist. There are
            two currently implemented, 'basic', which is a simple
            file-based playlist, and 'script' which invokes a command
            to returns a filename to start playing. -->

        <input>
            <module>playlist</module>
            <param name="type">basic</param>
            <param name="file">/etc/ices2/playlist.txt</param>
            <!-- random play -->
            <param name="random">0</param>
            <!-- if the playlist get updated that start at the beginning -->
            <param name="restart-after-reread">0</param>
            <!-- if set to 1 , plays once through, then exits. -->
            <param name="once">0</param>
        </input>

                <!-- Stream instance
            You may have one or more instances here. This allows you to
            send the same input data to one or more servers (or to different
            mountpoints on the same server). Each of them can have different
            parameters. This is primarily useful for a) relaying to multiple
            independent servers, and b) encoding/reencoding to multiple
            bitrates.
            If one instance fails (for example, the associated server goes
            down, etc), the others will continue to function correctly.
            This example defines two instances as two mountpoints on the
            same server.  -->
        <instance>
            <!-- Server details:
                You define hostname and port for the server here, along with
                the source password and mountpoint.  -->
            <hostname>localhost</hostname>
            <port>8000</port>
            <password>password1</password>
            <mount>/example1.ogg</mount>

            <!-- Reconnect parameters:
                When something goes wrong (e.g. the server crashes, or the
                network drops) and ices disconnects from the server, these
                control how often it tries to reconnect, and how many times
                it tries to reconnect. Delay is in seconds.
                If you set reconnectattempts to -1, it will continue
                indefinately. Suggest setting reconnectdelay to a large value
                if you do this.
            -->
            <reconnectdelay>2</reconnectdelay>
            <reconnectattempts>5</reconnectattempts>

            <!-- maxqueuelength:
            This describes how long the internal data queues may be.   This basically lets you control how much data gets buffered before
ices decides it can't send to the server fast enough, and either 
shuts down or flushes the queue (dropping the data)
                and continues.  For advanced users only.
            -->
            <maxqueuelength>80</maxqueuelength>

            <!-- Live encoding/reencoding:
               Currrently, the parameters given here for encoding MUST
               match the input data for channels and sample rate. That
                restriction will be relaxed in the future.
            -->
            <encode>
                <nominal-bitrate>64000</nominal-bitrate> 
                <!-- bps. e.g. 64000 for 64 kbps -->
                <samplerate>44100</samplerate>
                <channels>2</channels>
            </encode>
        </instance>

        </stream>
</ices>
Luego coloque sus archivos .ogg en el directorio / etc / ices2 / music (pero tenga cuidado con las licencias de los archivos de audio que desea transmitir; es posible que tenga que pagar dinero para obtener el derecho de transmitirlos), por ejemplo. Con una herramienta como WinSCP.
Luego cree el archivo /etc/ices2/playlist.txt y coloque en él las rutas completas a sus archivos .ogg, una línea por archivo .ogg:
vi /etc/ices2/playlist.txt
[...]
/etc/ices2/music/1vs0_JuniorGroove.ogg
/etc/ices2/music/1vs0_TheWavechangerSuperhero.ogg
[...]

Ya podemos iniciar Ices2:

ices2 /etc/ices2/ices-playlist.xml

En la interfaz web de Icecast2 ahora debería encontrar un enlace a su nueva transmisión de audio (Haga clic para escuchar -> http://192.168.0.100:8000/example1.ogg.m3u, pero http://192.168.0.100:8000/example1.ogg también funciona):

Abra el enlace con su reproductor de audio favorito, por ejemplo, WinAMP:

Si quieres detener Ices2, solo ejecuta

kill -9 `PID de ices2`

Paso #3:

Modificar la secuencia de comandos de inicio de Icecast2

Ices2 no viene con un script de inicio, lo que significa que debemos iniciarlo / detenerlo independientemente de Icecast2. Icecast2 viene con una secuencia de comandos de inicio, lo que significa que se inicia automáticamente en el momento del arranque, pero Ices2 no puede ser molesto. Por lo tanto, modificamos el script de inicio de Icecast2 y le agregamos secciones para Ices2.

El script de inicio de Icecast2 se ve así:

vi /etc/init.d/icecast2
#! /bin/sh
#
# icecast2
#
#                Written by Miquel van Smoorenburg <miquels@cistron.nl>.
#                Modified for Debian
#                by Ian Murdock <imurdock@gnu.ai.mit.edu>.
#
#                Further modified by Keegan Quinn <ice@thebasement.org>
#                for use with Icecast 2
#

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/icecast2
NAME=icecast2
DESC=icecast2

test -x $DAEMON || exit 0

# Defaults
CONFIGFILE="/etc/icecast2/icecast.xml"
CONFIGDEFAULTFILE="/etc/default/icecast2"
USERID=icecast2
GROUPID=icecast
ENABLE="false"

# Reads config file (will override defaults above)
[ -r "$CONFIGDEFAULTFILE" ] && . $CONFIGDEFAULTFILE

if [ "$ENABLE" != "true" ]; then
        echo "$NAME daemon disabled - read $CONFIGDEFAULTFILE."
        exit 0
fi

set -e

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start-stop-daemon --start --quiet --chuid $USERID:$GROUPID \
                --exec $DAEMON -- -b -c $CONFIGFILE
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --oknodo --quiet --exec $DAEMON
        echo "$NAME."
        ;;
  reload|force-reload)
        echo "Reloading $DESC configuration files."
        start-stop-daemon --stop --signal 1 --quiet --exec $DAEMON
        ;;
  restart)
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --oknodo --quiet --exec $DAEMON
        sleep 1
        start-stop-daemon --start --quiet --chuid $USERID:$GROUPID \
                --exec $DAEMON -- -b -c $CONFIGFILE
        echo "$NAME."
        ;;
  *)
        echo "Usage: $0 {start|stop|restart|reload|force-reload}" >&2
        exit 1
        ;;
esac

exit 0

Lo modificamos para que se vea así:

vi /etc/init.d/icecast2
#! /bin/sh
#
# icecast2
#
#                Written by Miquel van Smoorenburg <miquels@cistron.nl>.
#                Modified for Debian
#                by Ian Murdock <imurdock@gnu.ai.mit.edu>.
#
#                Further modified by Keegan Quinn <ice@thebasement.org>
#                for use with Icecast 2
#

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/icecast2
NAME=icecast2
DESC=icecast2
ICES=/usr/bin/ices2
ICES_CONFIGFILE=/etc/ices2/ices-playlist.xml

test -x $DAEMON || exit 0

# Defaults
CONFIGFILE="/etc/icecast2/icecast.xml"
CONFIGDEFAULTFILE="/etc/default/icecast2"
USERID=icecast2
GROUPID=icecast
ENABLE="false"

# Reads config file (will override defaults above)
[ -r "$CONFIGDEFAULTFILE" ] && . $CONFIGDEFAULTFILE

if [ "$ENABLE" != "true" ]; then
        echo "$NAME daemon disabled - read $CONFIGDEFAULTFILE."
        exit 0
fi

set -e

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start-stop-daemon --start --quiet --chuid $USERID:$GROUPID \
                --exec $DAEMON -- -b -c $CONFIGFILE
        sleep 3
        start-stop-daemon --start --quiet --exec $ICES $ICES_CONFIGFILE
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --oknodo --quiet --exec $ICES

        start-stop-daemon --stop --oknodo --quiet --exec $DAEMON
        echo "$NAME."
        ;;
  reload|force-reload)
        echo "Reloading $DESC configuration files."
        start-stop-daemon --stop --oknodo --quiet --exec $ICES
        start-stop-daemon --stop --signal 1 --quiet --exec $DAEMON
        sleep 3
        start-stop-daemon --start --quiet --exec $ICES $ICES_CONFIGFILE
        ;;
  restart)
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --oknodo --quiet --exec $ICES

        start-stop-daemon --stop --oknodo --quiet --exec $DAEMON
        sleep 3
        start-stop-daemon --start --quiet --chuid $USERID:$GROUPID \
                --exec $DAEMON -- -b -c $CONFIGFILE
        sleep 3
        start-stop-daemon --start --quiet --exec $ICES $ICES_CONFIGFILE
        echo "$NAME."
        ;;
  *)
        echo "Usage: $0 {start|stop|restart|reload|force-reload}" >&2
        exit 1
        ;;
esac

exit 0

Ahora Ices2 iniciará / detendrá / reiniciará siempre que lo haga Icecast2, y también se iniciará en el momento del arranque.

Ahora ya podremos reproducir música en su propia radio o conectarnos a través de nuestro winamp y transmitir audio con nuestro micrófono.