Configuração alternativa para web rádios
Características da solução de web rádio baseada no software livre Ices2
- Viabiliza a utilização de computadores de baixo custo.
- Simplifica o processo de instalação (apt-get).
- Permite a automação da operação.
- Compatível com codec de áudio livre de patente (Ogg Vorbis).
- Permite a execução de uma web rádio em um computador utilizado simultaneamente para tarefas básicas de escritório.
- Execução simultânea de várias rádios web em um mesmo computador.
- Opera com ou sem interface gráfica independete do ambiente desktop escolhido.
- Grava automaticamente toda a transmissão feita ao vivo em arquivos Ogg Vorbis no mesmo computador onde o Ices2 é executado.
- Torna desnecessária a utilização de um tocador de mídia (xmms, etc) na máquina de transmissão da rádio.
Antes de começar...
Realizei todos os testes utilizando um computador configurado com Debian GNU/Linux Etch 4.0 RC1, sendo que o subsistema de som integrado na placa-mãe foi configurado com o alsaconf.
Instalação do Ices2
Execute o comando:
apt-get install ices2
Pronto. Ices2 instalado.
Arquivos de configuração do Ices2
Abaixo seguem exemplos de arquivos de configuração do Ices2 trabalhando com o Icecast2 para tocar uma playlist e para fazer transmissão ao vivo gravando no disco local. É preciso editar os parâmetros hostname e password em cada arquivo para a conexão com o servidor icecast2 de sua preferência. Esses arquivos estão disponíveis para download no final dessa página. (Falta traduzir e ampliar os comentários desses arquivos)
Playlist
<?xml version="1.0"?>
<ices>
<!-- run in background -->
<background>0</background>
<!-- where logs, etc go. -->
<logpath>.</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>./ices.pid</pidfile> -->
<stream>
<!-- metadata used for stream listing (not currently used) -->
<metadata>
<name>RadioLeve</name>
<genre>Desenvolvimento</genre>
<description>Configuracao leve para ser adicionada a configuracoes de desktops</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">./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>xxxxxxxxxxx</hostname>
<port>8000</port>
<password>xxxxxx</password>
<mount>/radioleve.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>32000</nominal-bitrate> <!-- bps. e.g. 64000 for 64 kbps -->
<samplerate>11025</samplerate>
<channels>1</channels>
</encode>
</instance>
</stream>
</ices>
Transmissão ao vivo
<?xml version="1.0"?>
<ices>
<!-- run in background -->
<background>0</background>
<!-- where logs, etc go. -->
<logpath>.</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>./ices.pid</pidfile> -->
<stream>
<!-- metadata used for stream listing (not currently used) -->
<metadata>
<name>RadioLeve</name>
<genre>Desenvolvimento</genre>
<description>Configuracao leve para ser adicionada a configuracoes de desktops</description>
</metadata>
<!-- Input module.
This example uses the 'alsa' module. It takes input from the
audio device (e.g. line-in), and processes it for live
encoding. -->
<input>
<module>alsa</module>
<param name="rate">48000</param>
<param name="channels">2</param>
<param name="device">hw:0,0</param>
<!-- Read metadata (from stdin by default, or -->
<!-- filename defined below (if the latter, only on SIGUSR1) -->
<param name="metadata">1</param>
<param name="metadatafilename">test</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>xxxxxxxxxxx</hostname>
<port>8000</port>
<password>xxxxxxx</password>
<mount>/radioleve_aovivo.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>32000</nominal-bitrate> <!-- bps. e.g. 64000 for 64 kbps -->
<samplerate>11025</samplerate>
<channels>1</channels>
</encode>
<downmix>1</downmix>
<resample>
<in-rate>48000</in-rate>
<out-rate>11025</out-rate>
</resample>
<savefile>./gravacao_transmissao01.ogg</savefile>
</instance>
</stream>
</ices>
Exemplo de lista de músicas (playlist.txt)
Para gerar esse arquivo a partir de sua coleção de músicas em formato ogg vorbis guardadas na pasta musicas_ogg execute o comando:
find musicas_ogg/ > playlist.txt
musicas_ogg/musica01.ogg
musicas_ogg/musica02.ogg
musicas_ogg/musica03.ogg
Iniciando uma transmissão de web rádio com o Ices2
Para transmitir uma playlist basta executar o comando:
ices2 ices2_config_playlist.xml
Acesse a página de administração do seu servidor icecast2 e verifique o link radioleve. Copie esse link no VLC Media PLayer e escute a transmissão. As músicas listadas no arquivo playlist.txt serão executadas. Para interromper a transmissão basta pressionar a combinação de teclas CRTL+C no terminal onde o ices2 estiver sendo executado.
Para transmitir ao vivo vai ser preciso ter um microfone e executar o comando:
ices2 ices2_config_transmissao.xml
Pode ser preciso ajustar o volume do microfone com o mixer de sua preferência. Sugerimos o alsamixer em um terminal.
Acesse a página de administração do seu servidor icecast2 e verifique o link radioleve_aovivo. Copie esse link no VLC Media PLayer e escute a transmissão. A transmissão ao vivo será gravada no arquivo gravacao_transmissao01.ogg. É importante renomear esse arquivo ao final de cada transmissão, pois quando for iniciada uma nova transmissão ele será apagado.
Múltiplas instâncias do Ices2 em um mesmo computador
É possível ter mais de uma rádio transmitindo em um mesmo computador. Basta abrir um novo terminal e executar os comandos já vistos. Entretando é necessário editar os arquivos de configuração para que não sejam utilizados os mesmos nomes para os pontos de montagem no servidor icecast2. Se a primeira instância do ices2 usa o ponto de montagem /radioleve então outra instância pode usar /radioleve_clone01. E assim por diante.
Obs.: Essa documentação ainda está em fase inicial. Todas as contribuições para sua melhoria são benvindas.
--
HilbertoCosta - 02 Apr 2007