Revista Do Linux
 


 
EDIÇÃO DO MÊS
 CD do Mês


 Capa
 Entrevista
 Estudo de Caso 1
 Estudo de Caso 2
 Desenvolvimento
 Programação
 Segurança
 REDES
 Comunidade
 Lançamento
 Internacional
 Mascote
 Corporativo
 Distro
assinantes
 

Alô alô, querido ouvinte!!!

Até pouco tempo atrás, montar uma ~Srádio virtual~T era privilégio de poucos. O gasto com equipamentos, links para conexão à Internet e software permitia que só as mais abastadas emissoras pudessem encarar um projeto deste tamanho. Mas atualmente, tudo o que você precisa para abrir sua própria emissora, seja para compartilhar suas músicas com os amigos, divulgar sua banda ou mesmo colocar sua rádio real na Internet, é de um PC com Linux, uma conexão de banda larga e do icecast, um sistema Open Source para streaming de áudio que se prova extremamente competente tanto para uso pessoal quanto profissional. Interessado? Então arregace a mangas, siga o nosso tutorial e boa sorte!

No ar e na rede

Por ser um software Open Source, de fácil instalação e operação e muito versátil, o uso do icecast vai muito além das transmissões amadoras entre amigos. Várias emissoras reais utilizam o icecast para retransmitir sua programação pela Internet, alcançando assim um público ouvinte muito além do permitido pelas ondas de rádio. É o caso da KWUR FM, fundada e ainda mantida por estudantes da Washington University em St. Louis, nos Estados Unidos, em 1961. Segundo Ben West, responsável pela parte técnica da emissora, as transmissões online começaram em setembro de 1998, quando o transmissor foi inesperadamente mudado de lugar pela Universidade, o que tirou a rádio do ar por alguns meses. Forçada a procurar alternativas, a emissora começou a transmitir online, utilizando inicialmente o RealAudio 5.0, produzido pela Real Networks, já que o encoder era de distribuição livre e podia sustentar até 60 ouvintes simultaneamente.

Infelizmente a generosidade da Real Networks não durou muito, e novas versões do encoder, que se tornou um produto comercial, suportavam menos conexões simultâneas e apresentavam problemas de estabilidade. A mudança para o icecast ocorreu em fevereiro de 2001, quando vários serviços da emissora começaram a ser migrados para software livre. O Apache foi escolhido como servidor web e o Post-Nuke, para gerenciamento de conteúdo do site. Nada mais natural do que também mudar o servidor usado para as transmissões via Internet. O icecast foi escolhido por ser livre, estável, não possuir limite no número de ouvintes, apresentar consumo relativamente baixo de CPU, mesmo com várias conexões simultâneas, ter bons serviços de gerenciamento e monitoramento remotos e qualidade de áudio superior ao sistema anteriormente utilizado. Atualmente, a KWUR FM mantém 3 streams de áudio, para usuários com conexões via modem, DSL ou T1. Considerando-se apenas as streams de baixa qualidade, a 24kbps, a emissora tem capacidade para servir algumas centenas de usuários simultaneamente. Conheça mais sobre a KWUR FM e ouça suas transmissões, em seu site oficial: kwur.wustl.edu.

Como funciona?

O funcionamento de um servidor de streaming baseado no icecast é simples e dividido em duas partes. O icecast é apenas o servidor propriamente dito, que se encarrega de atender conexões e entregar o áudio aos clientes. E para ler o conteúdo de sua estação (geralmente arquivos MP3 em seu disco) e repassá-lo ao servidor, há o streamer. Com diferentes streamers (há dezenas disponíveis) conseguem-se diferentes recursos: com o shout, são possíveis múltiplas transmissões em um mesmo servidor, o ices permite conversão automática do áudio para uma qualidade adequada à largura de banda do ouvinte e o liveice trabalha com material capturado das entradas de áudio da placa de som, tornando-o ideal para retransmissão de conteúdo ao vivo de uma rádio convencional pela Internet.

Para “sintonizar” sua estação, os ouvintes usam qualquer player de MP3 que suporte streaming, como o XMMS no Linux, WinAmp no Windows ou iTunes no Mac OS. No XMMS, basta teclar Ctrl+L, digitar o endereço do servidor e clicar em OK. O programa irá preencher um “buffer” com alguns segundos de áudio (caso a conexão ao servidor seja interrompida ou se torne lenta demais, o XMMS continua tocando o conteúdo do buffer, enquanto tenta restabelecer contato com o servidor) e começar a tocar.

Preparando o conteúdo

Antes de pensar em colocar sua rádio no ar, você deve preparar o conteúdo, as músicas que serão transmitidas. A primeira coisa a fazer é preencher corretamente as tags ID3 de cada música com nome, artista, álbum, número da faixa, gênero, etc. O servidor icecast, que usaremos para streaming das músicas, suporta o envio destas informações aos clientes e, com as tags corretas, seus ouvintes poderão saber qual música eles estão ouvindo. Para facilitar a tarefa, use um programa como o EasyTag, sobre o qual falamos com mais detalhes no artigo Aditivando o XMMS, publicado na edição 27.

Também é necessário verificar se suas músicas estão “inteiras”. Embora elas possam parecer normais quando tocadas no XMMS ou mpg123, pode ser que estejam um pouco fora da especificação do padrão MP3, o que pode causar problemas para o streamer que transmitirá o áudio para seu servidor. Um utilitário como o mp3_check é capaz de diagnosticar e, em muitos casos, resolver possíveis problemas.

A qualidade do áudio que será transmitido por sua rádio é limitada pela largura de banda para upload disponível em sua conexão à Internet. Não adianta querer transmitir a 128 Kbps, se sua conexão ADSL só lhe permite uploads a 64 Kbps. E a quantidade de ouvintes da rádio também deve ser levada em conta. Supondo que você tenha um link com 256 Kbps para upload e transmita áudio a 32 Kbps, cada ouvinte conectado à rádio vai consumir 32 Kbps de banda, o que limita o número de ouvintes simultâneos a oito.

Boa parte das rádios virtuais transmite áudio a 32 Kbps, 22.05 kHz, o que permite que até mesmo quem está conectado à Internet via modem de 56K possa apreciar sua programação. Portanto, você vai ter de converter suas MP3 para este formato. Alguns streamers, como o ices, podem fazer a conversão em tempo real, enquanto a música está sendo transmitida (mais sobre isso adiante), mas isto põe uma carga pesada sobre a CPU. Se você não pode (ou não quer) colocar esta carga extra sobre seu servidor, então terá de fazer a conversão manualmente.

Uma das formas é abrir o XMMS, fazer uma playlist com todas as músicas, selecionar o plugin Disk Writer como saída e depois utilizar os arquivos WAV gerados pelo XMMS para criar as novas MP3. Mas o jeito mais fácil é criar um script para fazer o “trabalho sujo” para você automaticamente, como o mostrado no Box 1 (você precisa ter o mpg123 e o lame instalados para que ele funcione). Digite-o em seu editor de textos preferido e salve o arquivo com o nome de radio_reencode.sh. Execute-o em um terminal, com o comando sh radio_reencode.sh . Para cada arquivo MP3, ele criará um arquivo com o mesmo nome, mais o sufixo - radio, já convertido para 32 Kbps, 22.05 KHZ, prontinho para ser transmitido pela Internet. Não esqueça de completar as tags ID3!

Você também precisará das “playlists” com as músicas a serem tocadas em sua rádio. Você pode criá-las com o editor de playlists embutido no próprio XMMS. Abra o XMMS e tecle Alt+E. Clique no botão +File e selecione os arquivos que entrarão na lista. Dê um OK, ordene as músicas a seu gosto (basta arrastá-las para cima e para baixo) e salve a playlist: Clique no botão Load List e, com o botão do mouse ainda apertado, selecione a opção Save List. Dê um nome para o arquivo e pronto.

Versões recentes do XMMS tem o péssimo costume de adicionar à playlist, além do nome das músicas, informações extras sobre os arquivos MP3. O streamer irá se perder se encontrar estas informações, portanto lembre-se de abrir o arquivo da playlist no seu editor de texto favorito e apagar todas as linhas que comecem com #EXTINF.

Botando a mão na massa. O servidor...

O icecast é o servidor que utilizaremos para transmissão de áudio. Ele foi originalmente desenvolvido como uma alternativa Open Source ao Shoutcast, de distribuição livre, mas licença proprietária, produzido pela Nullsoft (os mesmos criadores do player de MP3 WinAmp e do sistema de compartilhamento de arquivos Gnutella). Como resultado, os dois sistemas são totalmente compatíveis, e você pode utilizar um streamer desenvolvido para o Shoutcast com um servidor icecast e vice-versa.

A instalação e compilação do programa são muito simples. Basta pegar o código fonte no site oficial e seguir as instruções do Box 2. Se preferir, também há pacotes binários com o programa já compilado, no formato RPM, para download.

O diretório /usr/local/icecast será criado e, dentro dele, uma hierarquia de subdiretórios. Os binários ficam em bin/ e os exemplos de arquivos de configuração, em conf/. O arquivo de configuração do icecast é o icecast.conf, e um exemplo, chamado icecast.conf.dist, está disponível para ser usado como ponto de partida, bastando renomeá-lo e alterar seu conteúdo de acordo com suas necessidades. O arquivo é extensamente comentado, de modo a não restarem dúvidas sobre as funções de cada opção. De qualquer forma, listamos aqui as mais importantes:

  • max_clients - O número máximo de ouvintes que podem estar conectados simultaneamente ao seu servidor.
  • max_clients_persource - Você pode ter múltiplas “estações” (sources) em um único servidor, e esta opção limita o número máximo de ouvintes por estação.
  • max_sources - O número máximo de estações em seu servidor.
  • max_admins - O número máximo de administradores que podem estar logados simultaneamente no sistema.
  • throttle - O icecast possui um sistema interno para medição do consumo de banda. O valor especificado em throttle é o máximo de banda (em megabits, 8 Megabits = 1 Megabyte) que sua rádio pode consumir. Caso este limite seja atingido, novas conexões ao servidor serão recusadas, até que o consumo caia abaixo do valor aqui especificado. Por exemplo, throttle 10 especifica que o máximo de banda que sua rádio pode consumir durante as transmissões é de 10 Megabits por segundo.
  • encoder_password - A senha que será usada pelos streamers para se conectar ao seu servidor. Pode ser criptografada, assim como as senhas abaixo (veja os comentários no arquivo de configuração para mais detalhes).
  • admin_password - A senha para o administrador do servidor. Administradores possuem poderes limitados e não podem realizar todas as tarefas de um operador.
  • oper_password - A senha para o operador do sistema. O operador tem poderes absolutos, como o usuário root em um sistema Linux. Escolha-a com cuidado e use uma senha criptografada, para maior segurança.
  • hostname - Se quiser que o icecast só “escute” pedidos de conexão em uma interface de rede específica, coloque seu IP aqui. Caso contrário, o icecast irá escutar pedidos de conexão em todas as interfaces de rede disponíveis.
  • port - A porta do servidor na qual os clientes irão se conectar. O valor padrão é 8000, mas pode ser modificado de acordo com suas necessidades. Geralmente se define a opção port duas vezes, no formato porta e porta+1 (exemplo: port 8000, port 8001), para fins de compatibilidade com o sistema Shoutcast
  • server_name - O nome de seu servidor (exemplo: máquina.minharede.com.br). Nem pense em colocar um nome que não aponte para o IP da máquina onde o servidor icecast está rodando, e não coloque um endereço IP. Se você usa uma conexão com IP dinâmico, use o valor dynamic
  • acl_policy - Define o controle de acesso ao seu servidor. Você pode criar regras que permitam ou neguem o acesso de determinadas máquinas ou redes. Colocando este valor em 1, conexões que não sejam explicitamente permitidas por uma das regras serão negadas. Colocando em 0, o comportamento é o inverso - qualquer conexão que não seja explicitamente negada por uma das regras será permitida. Uma configuração comum para um servidor público é:
    acl_policy 1
    allow all *
    

O arquivo de configuração do icecast contém vários parâmetros extras, e recomendamos a leitura completa de seus comentários para que você possa entender como as coisas funcionam.

Agora devemos garantir um nível de segurança básico ao nosso sistema. Quando iniciado, o icecast coloca na Internet uma interface para administração de seu servidor, no endereço máquina.domínio:8000/admin. Queremos proteger este diretório, de modo que só usuários autorizados possam fazer alterações e ver as estatísticas do servidor. Para isso, alteramos os arquivos groups.aut, users.aut e mounts.aut, que devem ficar em /usr/local/icecast/conf. Arquivos de exemplo, chamados users.aut.dist, groups.aut.dist e mounts.aut.dist estão disponíveis neste diretório, e você pode usá-los como ponto de partida para a configuração. Edite o arquivo users.aut, e crie um usuário e uma senha qualquer para quem será o administrador. Basta adicionar uma linha no formato usuário:senha ao arquivo. Por exemplo: bigboss:totalcontrol. Ou seja, criamos um usuário chamado bigboss, cuja senha é totalcontrol.

Agora vamos criar um grupo, que poderá administrar o sistema, e colocar nosso usuário bigboss neste grupo. Edite o arquivo groups.aut e adicione um novo grupo, no formato nome_do_grupo:usuários. Por exemplo, admins:bigboss. Com isto, estamos criando um grupo chamado admins, do qual o usuário bigboss faz parte.

Agora só falta limitar o acesso. Edite o arquivo mounts.aut e encontre a linha que controla o acesso ao diretório de administração (/admin). Do jeito que está, não há nenhum limite de acesso ao diretório. Para fazer que somente membros do grupo admins possam acessar a interface de administração, altere a linha para /admin:admins. Pronto! Agora, sempre que tentarmos acessar a interface de administração via web, um nome de usuário e senha serão pedidos.

Com toda a configuração feita, é hora de iniciar o servidor. Vá até o diretório /usr/local/icecast/bin e dê o comando ./icecast. Se tudo correr bem, você deve ver uma mensagem semelhante a esta:

Icecast Version 1.3.11 Initializing...
Icecast comes with NO WARRANTY, to the extent permitted by law.
You may redistribute copies of Icecast under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.
Starting thread engine...
[21/Mar/2002:16:14:05] Icecast Version 1.3.11 Starting..

O que significa que seu servidor de streaming já está no ar. Se você receber uma mensagem de erro semelhante a esta:

[21/Mar/2002:16:13:44] Damn, could not write log file [/usr/local/icecast/logs/stats.log]. Exiting.

verifique se o seu usuário possui permissões de escrita em /usr/local/icecast/logs. Por padrão, somente o usuário root pode acessar estes diretórios.

... e o streamer

Com a configuração feita, abra o XMMS e tente se conectar ao seu servidor (o endereço será nome_ou_ip_do_servidor:8000). Aperte o play. O que aconteceu? Nada? Não se preocupe, você não fez nada errado. Como dissemos acima, o servidor icecast, sozinho, não faz absolutamente nada. Você precisa de um outro programa, chamado de source ou streamer, para decodificar o áudio dos arquivos MP3 e repassá-lo ao servidor, que irá distribuí-lo a todos os seus ouvintes. Dois dos streamers mais populares, e simples de usar, são o shout e o ices, desenvolvidos pela mesma equipe do icecast. Vamos detalhar a compilação e configuração do ices, sucessor do shout, que possui recursos muito interessantes.

Para compilar o ices você precisará da libxml (se não estiver instalada em sua máquina, baixe-a em xmlsoft.net), para que o ices possa ler seus arquivos de configuração e, caso queira utilizar o recurso de reencoding, da liblame, parte do lame (baixe-o em www.mp3dev.org/mp3). Compile o programa de acordo com as instruções no Box 3.

O binário do programa será instalado em /usr/local/icecast/bin, e o arquivo de configuração, ices.conf deve ficar em /usr/local/icecast/etc/ (Se o diretório não existir, crie-o). Há um modelo, chamado ices.conf.dist, em /usr/local/icecast/conf. Assim como o arquivo de configuração do icecast, o arquivo de configuração do ices, escrito em XML, contém extensos comentários que explicam claramente o significado de cada opção. Mostramos as mais importantes:

  • <:File> - Indique aqui o nome e caminho completo até a playlist a ser usada em seu servidor. Por exemplo: /usr/local/icecast/etc/minha_playlist.m3u
  • <:Randomize> - Coloque esta opção em 1 se quiser que o ices escolha aleatoriamente a ordem das músicas. Coloque em 0 se quiser que ele respeite a ordem de sua playlist.
  • <:Hostname> - Hostname ou IP do seu servidor icecast.
  • <:Port> - A porta do servidor icecast onde o ices deverá se conectar.
  • <:Password> - A senha que você definiu em encoder_password no arquivo icecast.conf
  • <:Reencode> - Quando compilado com suporte à liblame, o ices pode fazer o reencoding de suas músicas para um bitrate desejado antes de enviá-las ao servidor icecast. Coloque 0 se não quiser este recurso, 1 se quiser.
  • <:Bitrate> - Se você habilitar o reencoding, ele será feito com o valor deste parâmetro. Por exemplo, colocando 32 suas MP3 serão convertidas para 32 Kbps, 64 para 64 Kbps, e assim por diante.

Aqui vale mencionar uma coisa sobre o ices: O processo de reencoding é pesado e, em nossos testes, chegou a consumir quase 50% da CPU de um AMD K6-2 450 com 64 MB de RAM. Utilize-o somente se sua máquina puder “agüentar o tranco”. Caso contrário, é melhor fazer o reencoding das músicas manualmente, como mostrado no início deste artigo. Também é muito importante verificar a integridade de suas MP3 (novamente, veja o começo deste artigo), já que alguns arquivos fora do padrão podem simplesmente derrubar o ices.

Com o ices configurado, basta iniciá-lo. Vá para o diretório /usr/local/icecast/bin/ e execute o comando ./ices. Você deve ver uma mensagem semelhante a esta:

Into the land of the dreaded daemons we go... pid: 1428

Mensagens de “erro” como Unknown playlist keyword, Unknown Server keyword ou Unknown Execution keyword podem ser ignoradas.

Agora repita o teste que fizemos acima. Abra o XMMS e tente se conectar ao seu servidor. Está ouvindo suas músicas? Ótimo, isso significa que sua primeira rádio virtual está no ar. Parabéns!

Mas se você não ouvir nada, verifique se o ices realmente está rodando, com o comando ps aux | grep ices. Você deve ver algo como:

root   1448 ...  S  17:27 0:00 ./ices -c /usr/lo
root   1450 ...  S  17:27 0:00 ./ices -c /usr/lo

Caso contrário, significa que o ices não “subiu” por algum motivo. Edite o arquivo de configuração, deixe em 0 o valor <:Background>, em 1 o valor <:Verbose>, inicie o ices novamente e tente analisar as mensagens de erro. Pode ser que ele não tenha encontrado a playlist, o servidor, ou que a senha do streamer esteja errada.

Divulgando!

A última etapa da construção de sua rádio é a divulgação. De nada adianta ter um excelente conteúdo se não tiver nenhum ouvinte. Você pode até conseguir bons resultados avisando os amigos por e-mail ou através da velha, e ainda eficiente, propaganda boca-a-boca, mas se realmente quiser atrair ouvintes precisará de um outro método. Uma opção com excelentes resultados são os serviços de diretório oferecidos pelos sites icecast.org e shoutcast.com, que listam as estações virtuais, seu gênero, largura de banda, número de ouvintes, há quanto tempo estão online, entre outras características. Listar sua rádio num destes serviços é fácil e gratuito. Edite o arquivo icecast.conf, “descomente” a linha directory yp.icecast.org, para listar sua rádio no icecast.org, e adicione a linha directory yp.shoutcast.com para listá-la no Shoutcast. Você pode usar os dois serviços simultaneamente, sem problemas. Agora edite o arquivo ices.conf e coloque em 1 a opção <:Public>. Pronto! Reinicie sua rádio (“mate” os processos do icecast e ices com o comando kill e reinicie os programas), aguarde alguns minutos e dê uma olhada na listagem de estações dos dois sites. Sua estação já deve estar lá. E se você criar uma rádio virtual seguindo nossas instruções, não esqueça de nos enviar o endereço, que o publicaremos em uma futura edição da RdL.

Icecast

O Icecast é um sistema de transmissão de áudio (streaming) via Internet. Com ele é possível criar uma "rádio virtual" e transmitir música, ou mesmo programação ao vivo, a partir de seu PC para qualquer ouvinte que esteja conectado à Internet.


Box 1


#!/bin/bash

# Para alterar a qualidade do áudio do arquivo final, altere os valores
# dos parâmetros -b -B e --resample. Consulte a documentação do lame
# para maiores detalhes.

while [ $# -gt 0 ]; do
	mp3_file='echo “$1” | sed 's/\.[A-Za-z0-9]*$/\-radio.mp3/''
	mpg123 -w - “$1” | lame -m auto -h -F -b 32 -B 32 —resample 22.05 - “$mp3_file”
	shift
done

Box 02

Compilando o icecast

  • Descompacte o arquivo com o código fonte:
    tar -zxvf icecast-1.3.11.tar.gz
    

  • Entre no diretório recém-criado e compile o programa:
    cd icecast-1.3.11
    ./configure
    make
    make install (como root)
    

    Box 03

    Compilando o ices

    Descompacte o arquivo contendo o código fonte do ices:

    tar -zxvf ices-0.1.0.tar.gz
    

    Vá para o diretório recém-criado e compile o programa:

    cd ices-0.1.0
    ./configure —with-lame
    make
    make install (como root))
    

    Saiba mais:

    Icecast - www.icecast.org

    Shoutcast - www.shoutcast.com

    mp3_check - mp3check.sourceforge.net


    Rafael Rigues - rigues@RevistaDoLinux.com.br


  • A Revista do Linux é editada pela Conectiva S/A
    Todos os Direitos Reservados.

    Política de Privacidade
    Anuncie na Revista do Linux