AzuraCast usa Icecast (atualmente Icecast 2.4.0-kh10-ac4) para transmitir rádio ao vivo.
O Icecast tem a opção de anexar um arquivo de mídia à transmissão ao vivo quando um novo ouvinte se conecta.
Isto é o que a documentação do Icecast tem a dizer sobre a <intro>
opção (meu negrito):
Um valor opcional que especificará o arquivo cujo conteúdo será enviado para novos ouvintes quando eles se conectarem, mas antes que o fluxo normal seja enviado. Certifique -se de que o formato do arquivo especificado corresponda ao formato de streaming . O arquivo especificado é anexado ao webroot antes de ser aberto.
mesmo formato
Para ter certeza absoluta de que o arquivo de introdução tinha exatamente o mesmo formato de codificação do stream, usei um pequeno despejo do stream ( mplayer -dumpstream <mountpoint_url>
) para usar como arquivo de introdução para teste.
Editando diretamente icecast.xml? Não.
Agora, o arquivo de configuração do Icecast para uma estação geralmente está localizado no /var/azuracast/stations/<station_slug>/config/icecast.xml
servidor no qual o AzuraCast está sendo executado (com configurações padrão).
O primeiro problema que encontrei é que o AzuraCast substitui o icecast.xml
arquivo toda vez que inicia ou reinicia o Icecast, portanto, não pode ser editado diretamente.
Alterando as configurações do Icecast de dentro do AzuraCast
Felizmente, consegui substituir (algumas das) configurações do Icecast inserindo JSON no campo Configuração personalizada (encontrado em Editar perfil > Transmissão ). Aqui está um exemplo:
{
"location" : "Overrides location",
"mount" : [{
"intro" : "/intro-128.mp3"
},{
"intro" : "/intro-64.aac"
}],
"paths" : {
"webroot" : "/usr/local/share/icecast/web"
},
"directory" : {
"yp-url-timeout" : "15",
"yp-url" : "http://dir.xiph.org/cgi-bin/yp-cgi"
}
}
E isso se traduz com sucesso em XML dentro icecast.xml
quando o Icecast é reiniciado (apenas mantendo as tags relevantes):
<icecast>
<location>Overrides location</location>
...
<mount type="normal">
<mount-name>/radio.mp3</mount-name>
...
<intro>/intro-128.mp3</intro>
</mount>
<mount type="normal">
<mount-name>/radio.aac</mount-name>
...
<intro>/intro-64.aac</intro>
</mount>
<paths>
<basedir>/usr/local/share/icecast</basedir>
<webroot>/usr/local/share/icecast/web</webroot>
...
</paths>
...
<directory>
<yp-url-timeout>15</yp-url-timeout>
<yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
</directory>
</icecast>
Mas não, não vai tocar...
Mas não consigo descobrir uma combinação de <intro>
e <webroot>
configurações para fazê-lo funcionar.
Ei! Webroot não existe!
Coisa estranha: o <webroot>
valor padrão nem existe no servidor. Tentei criar o caminho e colocar o arquivo de introdução lá, mas ele não tocava (mesmo depois de reiniciar o Icecast), nem aparecia quando você solicitava http://<host:port>/intro-128.mp3
diretamente (o que você esperaria, pois fica bem na raiz da web).
E quando mudei o valor de <webroot>
para outro diretório, o front-end da web do Icecast parou de funcionar (embora os fluxos ainda funcionassem) e solicitar diretamente o arquivo de introdução também não funcionou.
Isso me faz suspeitar que o AzuraCast de alguma forma "redireciona" as solicitações do Icecast para o sistema de arquivos.
Docker? Dentro ou fora?
Meu AzuraCast está rodando em uma instalação Docker, dentro de um VPS. Claro, todos esses caminhos e arquivos residem dentro do volume do Docker. Mas só para ter certeza , também tentei criar os caminhos diretamente no servidor host, sem sucesso até agora.
(Sim, as mudanças estão em vigor.)
Confirmo que as alterações icecast.xml
estão em vigor, pois posso ver o local substituído no Icecast e o fluxo é registrado em dir.xiph.org .