Icecast – como usar
Este texto é uma adaptação dos textos Transmissão de Áudio pela Internet e Web Rádios, de Rhatto com colaboração de Rafael Diniz, e Streaming de áudio com icecast2 e darkice usando gnu/linux (v0.1), de Diogo Correia Gonzaga.
Configurando o Icecast
O arquivo de configuração do icecast2 é escrito no formato XML, e é dividido nas seções:
- Restrições (Limits)
- Autenticação (Authentication)
- Listagem de Diretório – Diretory (Páginas Amarelas)
- Configurações Gerais do Servidor
- Opções de Relay (Mount-point's)
- Arquivos e diretórios no servidor
- Registros de acessos (Logs)
- Segurança
Restrições (Limits)
A seção limits, como o próprio nome diz, regula os limites do servidor. Ela é composta das seguintes opções (as mais importantes estão em negrito):
Exemplo de configuração da seção “limits”:
- clients – Número total de clientes suportados pelo servidor. Este número se aplica, apenas, ao total de conexões que o servidor irá suportar como um todo, e não por “mountpoint”.
- sources – Número total de fontes de streaming suportadas pelo servidor. As fontes de streaming são, geralmente, sistemas de captura de áudio (Ex: Darkice) que enviam os dados da mídia capturada (áudio, no caso) para o servidor icecast2.
- threadpool – É o número de processos em paralelo, que serão iniciados no momento em que os clientes começarem a se conectar. Você só precisa se preocupar com esse número se o servidor enfrentar grande tráfego, i.e., muitos ouvintes.
- queue-size – Este é o tamanho máximo (em bytes) da fila do cliente (ouvinte). É comum que as conexões entre o cliente e o servidor retardem-se (lag) devido aos congestionamentos na rede. Neste caso, uma fila interna no servidor é mantida. Se a fila crescer de tal modo, e se tornar maior do que o valor especificado nesta opção, o ouvinte será desconectado do servidor.
- client-timeout – Tempo (em segundos) que o servidor aguarda pacotes de um ouvinte conectado.
- header-timeout – Tempo máximo (em segundos) para esperar um pedido do cliente, uma vez que este já fez a conexão.
- source-timeout – Se alguma origem de streaming (Ex.: Darkice) não enviar quaisquer dados em um determinado período (em segundos), então a conexão será encerrada pelo servidor icecast2.
- burst-on-connect – Quando habilitado, o cliente (ouvinte) recebe uma quantidade de pacotes superior à necessária, no intuito de fazer com que o tocador (do cliente) armazene um buffer inicial antes de ocorrer, de fato, o streaming em tempo real.
- burst-size – Representa (em bytes) a quantidade de dados que serão transmitidos para o cliente (ouvinte) antes que ocorra, de fato, o streaming em tempo real. O objetivo é que o tocador do cliente armazene um buffer do tamanho especificado nesta opção.
Autenticação (Authentication)
A autenticação lida com usuários e senhas gerais do servidor.
- source-password – É a senha para se conectar ao icecast2. Indica uma senha que será usada pela(s) origem(ns) do streaming para se conectar(em) no servidor icecast2.
- relay-password – Opção não utilizada atualmente.
- admin-user – usuário da interface de administração.
- admin-password – senha da interface de administração.
Listagem de Diretório – Diretory (Páginas Amarelas)
Esta seção contém os dados de uma ou mais páginas amarelas para webrádio – também conhecidas como YP, Yellow Pages. Existem apenas dois campos:
- yp-url-timeout – Indica o tempo máximo que o icecast2 irá aguardar pela resposta de algum servidor de diretório na rede.
- yp-url – Indica a URL que o icecast2 irá usar para se comunicar com o servidor de diretório na rede.
Configurações gerais
São as configurações genéricas do servidor, como porta, endereço etc:
- hostname – Hostname do servidor icecast2: nomedoseuservidor.org
- port – Porta (TCP) que será usada para aceitar conexões dos clientes. Geralmente são utilizadas as portas 8000, 8100 ou similares.
- bind-address – é um parâmetro opcional para o caso do seu computador possuir várias placas de rede e/ou vários números IPs; Indica o endereço IP de uma placa de rede que será usado para escutar as conexões dos clientes. Caso nenhum valor seja indicado, então o icecast2 irá utilizar o endereço associado com o “hostname” indicado no arquivo. Caso você o utilize certifique-se que você está colocando o seu IP externo, isto é, o IP da sua conexão com a internet e não o IP da sua rede externa, pois do contrário o acesso ao serviço estará restrito à sua rede interna; consulte o administrador da sua rede ou seu provedor para maiores detalhes ou não utilize este campo.
- shoutcast-compat – Esta opção, caso habilitada (1), fará com que o icecast2 opere de modo compatível com o shoutcast, permitindo que clientes SHOUTcast usem o servidor Icecast para fazer suas transmissões.
- fileserv – Esta opção, caso habilitada (1), fará com que o icecast2 trabalhe como um servidor de arquivos estático, isto é, também atue como um servidor para transmissões assíncronas. A localização destes arquivos pode ser especificada nas opções <paths><webroot>. Se você escolher 0 para o fileserve, então a transmissão de arquivos estáticos não estará disponível.
- shoutcast-mount – Indica um ponto de montagem (mountpoint) a ser usado ao receber conexões de clientes compatíveis com “shoutcast DSP”.
A seção de configurações gerais permite que mais de uma porta seja utilizada para o servidor e isso é feito a cada bloco:
Se as opções dadas acima estiverem fora de um bloco listen-socket, então o Icecast só permitirá um ouvinte no servidor, como por exemplo quando a seção de configurações gerais for assim:
O mais provável é que você queira mais de um ouvinte. Então uma configuração possível é:
Dessa forma você deixa o servidor esperando conexões na porta 8000. Outras portas podem ser adicionadas, bastando para isso escrever um outro bloco listen-socket:
Configurações de Relay
A seção de relay configura quais transmissões de áudio serão retransmitidas pelo seu servidor de Icecast. A utilidade imediata disso é a possibilidade de distribuição e balanço do uso da conexão com a internet. Um exemplo da parte de relay nas configurações do icecast é o seguinte:
Exemplo de configuração da seção relay:
Existe duas maneiras de se fazer relay: retransmitir todos os pontos de montagem de um servidor ou então retransmitir pontos de montagens específicos de vários servidores. A próxima figura mostra o caso de um servidor retransmitindo tudo o que um servidor transmite.
Para esse caso, as seguintes configurações são utilizadas:
- master-server: endereço do servidor mestre
- master-server-port: porta desse servidor
- master-update-interval: o intervalo de tempo a cada qual o servidor de relay pergunta ao servidor mestre por novos pontos de montagem
- master-password: senha para fazer o relay
O mais provável é fazermos relay de apenas um ou outro mountpoint de um dado servidor:
Nessa condição, utilizaremos um ou mais blocos do tipo
cujas opções são:
- erver: servidor onde está a transmissão de origem
- port: porta dessa transmissão
- mount: o ponto de montagem de origem
- local-mount: o ponto de montagem onde essa transmissão ficará no seu servidor
- username: usuário (caso necessário)
- password: senha (caso necessário)
- relay-shoutcast-metadata: copia a metadata do stream caso o servidor seja SHOUTcast; se o servidor for icecast, a cópia é automática.
Suponha que você queira retransmitir uma rádio, por exemplo a Rádio e Publicação Aberta do radiolivre.org, cujo endereço é http://orelha2.radiolivre.org:8080/radiolivre.ogg.m3u, sua seção relay ficaria então
Você ainda pode retransmitir outros streamings de outros servidores. Para cada retransmissão adicione um novo bloco relay. Lembre-se que transmissões em formato ogg precisam ter seus pontos de montagem terminando em .ogg.
Pontos de montagem
Geralmente é possível fazer transmissões utilizando a senha do servidor, definida na seção geral e escolhendo qualquer nome como ponto de montagem. O bloco
permite que sejam definidos pontos de montagem com senhas e configurações próprias, de modo a contextualizar a segurança do servidor. Você, como administrador de um serviço de webrádio, pode disponibilizar para que outras pessoas façam streaming usando apenas determinados pontos de montagem, cada qual definido num bloco mais ou menos assim:
- mount-name – O nome do ponto de montagem da seção.
- username – Campo opcional que define o usuário que será usado pela origem (source) para se conectar ao servidor e enviar o streaming associado ao mount-point.
- password – Campo que define a senha usada pela origem (source) para se conectar ao servidor e enviar o streaming associado ao mount-point.
- max-listeners – Número máximo de ouvintes suportados neste mountpoint.
- dump-file – Salva o streaming no arquivo especificado nesta opção.
- fallback-mount – Nome do mount-point para onde o usuário será redirecionado caso não seja possível conectar ao mount-point atual. Este deve apontar para um mountpoint no mesmo servidor icecast2.
- fallback-override – A opção habilitada (1) faz com que os clientes que foram redirecionados para o mountpoint especificado no “fallback-mount” sejam movidos para o mountpoint real, assim que este tornar-se novamente disponível.
- no-yp – A opção habilitada (1) impede que o mount-point seja anunciado no servidor de diretório (página amarela).
- hidden – A opção habilitada (1) previne que o mount-point seja mostrado nas páginas xsl que por acaso poderiam ser acessadas pelos ouvintes.
- burst-size – O valor especificado nesta opção substituirá o valor especificado na mesma opção, indicada na seção “limits”.
- authentication - Esse bloco, que fica dentro do bloco mount, define a forma de autenticação para que os ouvintes possam escutar a transmissão; a opção filename especifíca em qual arquivo está a senha e a opção allow_duplicate_users permite que mais de um ouvinte escute a transmissão com o mesmo par usuário/senha; para ouvir uma transmissão com senha, utiliza-se o método de autenticação padrão do HTTP, como por exemplo http://user:password@servidor:porta/ponto-de-montagem.ogg; você encontra aqui maiores informações sobre autenticação no icecast.
Arquivos e diretórios no servidor
Esta seção contém informações sobre os caminhos de vários arquivos utilizados no icecast, como a pasta onde residem os registros do servidor, a interface web e a de administração. O formato desse bloco é
- base-dir – Especifica o caminho do diretório padrão do icecast2. Indica qual a raiz do sistema a ser utilizada; normalmente o valor dessa opção é / (barra), a não ser que você rode o icecast em chroot, algo que será abordado na sessão “segurança”.
- log-dir – Especifica o diretório que será o usado para armazenar os arquivos de log: access.log e error.log. Geralmente em sistemas unix usa-se /var/log/icecast ou algo do tipo.
- pidfile – Arquivo que conterá o id do processo do servidor.
- webroot – Caminho do diretório usado para armazenar arquivos estáticos, juntamente com a interface web do servidor. Por exemplo: se em “/usr/local/share/icecast2/web” existir um arquivo chamado “teste.ogg”, eu poderei adicionar na playlist do meu player favorito (xmms, winamp, etc) o endereço do servidor icecast2 (http://servidoricecast2:porta/teste.ogg, por exemplo) para fazer o streaming do arquivo.
- adminroot – Caminho do diretório da interface web usado para armazenar arquivos de administração do servidor.
- alias – A alias é usada para criar múltiplos pontos de montagem que fazem referência a um mesmo caminho.
Registros (Logs)
Como qualquer software de servidor, o Icecast mantém registros de acessos, indicando quem e quando ouviu o quê, assim como os erros ocorridos e os alertas emitidos pelo icecast durante seu trabalho.
- accesslog – Nome do arquivo usado para registrar os acessos e pedidos ao servidor icecast2.
- errorlog – Nome do arquivo usado para registrar os erros do servidor icecast2.
- playlistlog – arquivo contendo os registro dos metadados dos arquivos de áudio enviados.
- loglevel – Indica o nível de depuração do servidor ao escrever os registros: nível de verbosidade dos logs (1 a 4); quanto maior, mais detalhado será o registro das atividades.
Os arquivos de registro gerados nessa seção ficarão na pasta definida na opção logdir da seção anterior.
Segurança
Existem duas opções de segurança no icecast e o bloco de segurança tem este aspecto:
- chroot – Indica se o servidor irá ou não iniciar em modo chroot. Caso habilitado (1) o diretório padrão, que é indicado na opção “basedir”, será usado como parâmetro do chroot no servidor.
- changeowner – Especifica o usuário e grupo donos do processo iniciado pelo servidor icecast2.
Exemplo de configuração do arquivo icecast.xml
A melhor coisa na hora de configurar seu servidor é partir de um arquivo de configuração já pronto e personalizar de acordo com sua necessidade. Dependendo de como você instalou seu icecast, ele já vem com um arquivo de configuração padrão em /etc/icecast.xml, e tudo o que você precisa fazer é editá-lo. Em outras ocasiões esse arquivo fica em /usr/share/icecast, /usr/share/icecast/doc ou em algum outro local do tipo /usr/share/icecast-VERSAO (onde VERSAO é a versão do seu icecast) ou /usr/local/share/icecast, e assim por diante. Nesses últimos casos, basta que você copie o icecast.xml.dist pra /etc/icecast.xml e edite.
Caso você não encontre esse arquivo, copie este que se segue para se seu /etc/icecast.xml:
Instalando a interface web
O Icecast possui uma interface web onde estão listadas todas as transmissões públicas do servidor, bem como a quantidade de ouvintes, e também onde é possível administrar os pontos de montagem atualmente existentes.
Existem duas interfaces web, a de administração e a comum, cada uma delas definidas respectivamente como adminroot e webroot na seção Arquivos e diretórios no servidor.
Se essas duas pastas não existem, crie-as e em cada uma delas copie os arquivos padrões da interface de administração que vem com o icecast. Supondo que seu webroot seja /var/www/icecast e seu adminroot seja /var/www/icecast/admin, dê os seguintes comandos:
cp /usr/share/icecast/web/* /var/www/icecast/
cp /usr/share/icecast/admin/* /var/www/icecast/admin/
Ambas interfaces não passam de arquivos XSL usados pelo icecast para exibir as informações sobre o servidor em páginas web. Se você quiser é possível editar esses arquivos para personalizar o modo de exibição dessas informações.
Rodando o Icecast no GNU/Linux
Agora que editou seu /etc/icecast.xml, basta iniciar o servidor. Existem muitas formas de rodar seu servidor icecast. A melhor delas é utilizar um script de inicialização. Se o seu sistema é Debian, provavelmente você tem um arquivo /etc/init.d/icecast2 e então basta dar o seguinte comando como superusuário:
/etc/init.d/icecast2 start
Caso você não tenha esse arquivo, aqui vão duas sugestões de script de inicialização, o primeiro pra Debian e outro que deve servir pra qualquer sistema:
Depois de criar seu script de inicialização, que dependendo do sistema que você usa ficará em /etc/init.d, em /etc/rc.d/ ou em outro lugar, dê permissão de execução:
chown root.root icecast2
chmod 755 icecast2
E pra rodar o servidor basta rodá-lo com o parâmetro start. Por exemplo, assumindo que ele está no /etc/rc.d e com o nome rc.icecast2, dê o seguinte comando como superusuário:
/etc/rc.d/rc.icecast2 start
Rodando o icecast automaticamente
É muito conveniente deixar seu sistema configurado para iniciar o icecast automaticamente quando o computador for ligado, sendo isso indispensável caso você esteja montando uma máquina servidora de webrádio.
No Debian, tudo o que você precisa fazer é dar o comando
ln -s /etc/init.d/icecast2 /etc/rc2.d/S21icecast2
Para mais detalhes, consulte a documentação referente ao sistema que você usa.
Testando o servidor
Depois de iniciado, o icecast deverá responder à conexões na porta em que foi configurado. Ele também deverá ser visto rodando caso você dê um comando do tipo
ps aux
Cuja resposta deve ser algo assim:
Isso indica que seu Icecast está rodando. Agora você precisa testar se ele está funcionando para conexões vindas do seu próprio computador e para conexões que vem de fora, da internet. Se você utiliza algum tipo de firewall, será preciso configurar para que ele permita conexões entrantes na porta que você configurou o Icecast.
Um outro teste é abrir seu navegador web e digitar http://localhost:porta/status.xsl ou então, caso você tenha instalado o Icecast num servidor que não é o seu computador pessoal, acesse http://ip-do-servidor:porta/status.xsl, onde ip-do-servidor é o ip do seu servidor e porta é a porta configurada para o Icecast. Se tudo der certo, você verá uma página com informações do tipo quantas transmissões estão sendo feitas, quais são e quantos ouvintes existem atualmente.
Para prosseguir com os testes, experimente conectar-se ao servidor utilizando tanto programas para fazer quanto para receber sua conexão, de acordo com o manual de webrádio. As transmissões devem estar disponíveis a partir da página web do Icecast.
Se as coisas aparentemente não estão funcionando, é hora de checar os arquivos de registro, como será explicado na seção seguinte.
Resolvendo problemas (arquivos de log)
Caso o seu servidor não esteja funcionando corretamente, é importante checar quais são as mensagens emitidas por ele.
Para isso, certifique-se que ele esteja rodando e que o diretório reservado aos seus registros logdir seja passível de escrita por parte do usuário e pelo grupo sob os quais o Icecast roda, por exemplo o usuário e o grupo nobody.
A seguir, abra dois terminais. No primeiro, dê o comando
tail -f /var/log/icecast/access.log
No segundo, dê o comando
tail -f /var/log/icecast/error.log
Dessa forma você verá as mensagens de erro do Icecast no momento em que são produzidas.
Agora, tudo o que você precisa fazer é tentar interagir com o Icecast e observar nesses dois arquivos as mensagens de aviso, de accesso e de erro. Lembre-se que o detalhamento dessas mensagens pode ser regulado com a opção loglevel.
Sabendo o tipo de erro produzido, você pode efetuar as alterações necessárias na sua configuração ou buscas por ajuda em listas de discussão especializadas, como a lista oficial do Icecast.
Domínios para IPs fixos e dinâmicos
Pode acontecer que você tenha uma conexão com a internet mas não tenha um domínio.
Mesmo que o seu IP seja dinâmico, é possível criar um domínio gratuito para ele. Existem alguns serviços gratuitos como o Dynamic Network Services e o FreeDNS, que oferecem subdomínios de alguns domínios específicos, do tipo seusite.homelinux.net. Basta que você crie uma conta nesse site e adicione domínios.
Caso seu IP seja fixo, basta apontar esses domínios para seu IP que tudo está resolvido.
Caso seu IP seja dinâmico, você ainda terá que baixar um pequeno script e rodá-lo a cada vez que seu computador recebe um novo IP. Para maiores detalhes, consulte o FreeDNS ou o DynDNS.
Interface de administração
O Icecast permite que tarefas administativas sejam efetuadas enquanto o servidor está rodando através de uma interface de administração.
Tais tarefas de modo algum são salvas no arquivo de configuração do Icecast e são perdidas quando as transmissões se encerram ou quando o servidor é desligado.
O acesso à interface é feito por requisições ao endereço http://ip-do-servidor:porta/admin juntamente com dados da tarefa que se deseja efetuar ou diretamente através da página http://ip-do-servidor:porta/admin/stats.xsl
O acesso é restrito a usuário e senha e as tarefas são:
1. Tarefas específicas a pontos de montagem
- Mudança nos metadados
- Mudança do ponto de fallback
- Listagem de clientes
- Mover clientes
- Matar clientes
- Matar ponto de montagem
2. Tarefas gerais:
- Estatísticas
- Listar pontos de montagem
1. Tarefas específicas a pontos de montagem
Mudança nos metadados
Essa tarefa permite que tanto o programa fonte de webrádio quanto um programa auxiliar atualizem os metadados da transmissão. Isso pode ser feito na página de administração, pelo endereço http://ip-do-servidor:porta/admin/ updatemetadata.xsl?mount=/minharadio onde minharadio é o ponto de montagem de interesse, ou diretamente através de uma requisição por HTTP, como por exemplo http://ip-do-servidor:porta/admin/metadata?mount= /minharadio&mode=updinfo&song=Nova+Musica
Nesse caso, a música listada nos metadados do ponto de montagem /minharadio será Nova Musica.
Mudança do ponto de fallback
Permite que seja mudada a opção fallback-mount, definida para cada ponto de montagem. A requisição HTTP para mudar o ponto de fallback da transmissão que está acontecendo no ponto de montagem minharadio para meufallback é a seguinte: http://ip-do-servidor:porta/admin/fallbacks?mount= /minharadio&fallback=/meufallback
Listagem de clientes
Retorna uma listagem em formato XML contendo os ouvintes atualmente conectados no ponto de montagem. Pode ser obtida através da requisição ao endereço
http://ip-do-servidor:porta/admin/listclients.xsl?mount=/minharadio
Mover clientes
Esta funcionalidade permite que sejam movidos os ouvintes de um ponto de montagem para outro sem que estes sejam desconectados. Isso é possível através do endereço
http://ip-do-servidor:porta/admin/admin/moveclients.xsl?mount=/minharadio
ou pela seguinte requisição:
http://ip-do-servidor:porta/admin/moveclients?mount= /minharadio&destination=/minhaoutraradio
Matar clientes
Com essa opção é possível desconectar determinados ouvintes de um ponto de montagem. Para matar um cliente, é necessário saber seu NUMERO, o que pode ser obtido na listagem de clientes daquele ponto de montagem. A requisição para desconectar um dado cliente é
http://ip-do-servidor:porta/admin/killclient?mount=/minharadio&id=NUMERO
Matar ponto de montagem
Permite que seja encerrada uma transmissão. A requisição é a seguinte:
http://ip-do-servidor:porta/admin/killsource?mount=/minharadio
2.Tarefas gerais
Estatísticas
Retorna o máximo de informações disponíveis sobre o servidor Icecast, como pontos de montagens, número de ouvintes, etc. A lista retornada está no formato XML e pode ser obtida pela requisição
http://ip-do-servidor:porta/admin/stats
Listar pontos de montagem
Há uma listagem de todos os pontos de montagem existentes no servidor através do endereço
http://ip-do-servidor:porta/admin/listmounts
Páginas de estatísticas
Há uma página de estatísticas padrão no Icecast disponível em http://ip-do-servidor/status.xsl e que pode ser personalizada. Esse arquivo XSL fica no diretório definido na opção webroot. Essa pasta ainda pode conter outros arquivos XSL personalizados, cada um deles exibindo as estatísticas de uma forma diferente. O acesso à essa página de estatísticas não requer usuário e senha, e tipicamente ela conterá informações de cada ponto de montagem. Consulte a documentação do Icecast para mais informações.
Distribuindo o uso da banda
O que fazer quando a sua conexão com a internet não é suficiente para o número de ouvintes que o servidor necessita?
Aumentar a largura da banda pode custar muito caro. Uma solução barata pode ser obtida com o auxílio das funcionalidades de relê do Icecast.
Ë perfeitamente possível utilizar vários Icecasts em servidores diferentes, cada um deles usando uma conexão com a internet. Esses servidores fazem um relê da transmissão originária de um servidor mestre.
Para distribuir os ouvintes entre os servidores de forma transparente, é possível utilizar algum script, em PHP ou Python, por exemplo, que gere uma playlist contendo o endereço da transmissão que esteja no servidor mais vazio.
Para isso, basta que quando o usuário faça a requisição da playlist ao script, o mesmo verifique através da página de estatísticas de cada servidor o número de ouvintes no ponto de montagem requisitado e a partir dessa informação escolha qual será o servidor enviado ao usuário.
Com esse esquema você pode juntar facilmente seus amigos e montar uma infra-estrutura barata para montar webrádios que aguentem diversos ouvintes, usando para isso algumas conexões de banda larga.
Icecast no Windows
Este manual foi escrito para a versão do Icecast para sistemas UNIX. No entanto, muitas das funcionalidades aqui descritas servem para a versão Windows. A principal diferença entre a versão UNIX e a Windows é que esta última possui uma interface gráfica.
Essa interface contém principalmente duas abas, uma com estatísticas do servidor e outra com estatísticas de cada ponto de montagem, e um menu onde é possível acessar as configurações do servidor. Nesse menu as configurações só podem ser alteradas se o servidor estiver desligado.
Existe uma descrição mais detalhada da interface Windows na documentação do Icecast.
Outras tecnologias
O Icecast não é a única opção de plataforma para streaming, principalmente se você deseja algo mais parecido com uma rede P2P (ponto a ponto). Aqui estão ótimas alternativas:
Mais informações
Se você está com dúvidas ou dificuldades para fazer sua prórpia rádio, escreva para a lista de discussão do Coletivo Técnico Projeto radiolivre.org, tech@radiolivreSTOPSPAM.org ou pelo email do Coletivo Técnico do CMI Brasil, cmi-brasil-tech@lists.indymediaSTOPSPAM.org.
|