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.