Configuração alternativa para web rádios

Características da solução de web rádio baseada no software livre Ices2

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

I AttachmentSorted ascending Action Size Date Who Comment
xmlxml ices2_config_playlist.xml manage 4.2 K 02 Apr 2007 - 17:58 UnknownUser Configuração para executar uma playlist
xmlxml ices2_config_transmissao.xml manage 4.2 K 02 Apr 2007 - 17:59 UnknownUser Configuração para transmissões usando o microfone
txttxt playlist.txt manage 1.6 K 02 Apr 2007 - 17:32 UnknownUser Exemplo de playlist

Editar Anexar Versões Mais...

TableLess - Coerência, Simplicidade e Acessibilidade no código HTML TWiki - Ambiente Web Colaborativo
última revisão: r2 - 02 Apr 2007 - 19:35:48 - HilbertoCosta?     |     Copyleft Faced-UFBA