Eu interpreto o seu comentário como "usando Pulseaudio para fazer isso é ok". Eu não testei isso, mas aqui está o que eu faria:
Primeiro, crie um coletor "nulo" Pulseaudio:
pacmd load-module module-null-sink sink_name=icecast sink_properties=device.description=Icecast
No Pulseaudio, cada coletor tem uma fonte .monitor
associada, de modo que você pode emitir som para o icecast
sink e processar em outros aplicativos usando a icecast.monitor
source.
Se eu entendi corretamente, você precisa receber o stream icecast no seu computador. Para enviar o fluxo para o icecast
sink, faça algo como
mplayer http://your.icecast.server -ao pulse::icecast
Quando o fluxo icecast terminar, mplayer
também será encerrado, então coloque isso em um script de shell dentro de um loop while
infinito, etc.
Não tenho certeza se entendi o que você está tentando fazer com a parte "stream to udp via ffmpeg". De qualquer forma, agora você pode ler a partir de icecast.monitor
com
ffmpeg -f alsa -i pulse ...
ao usar pavucontrol
ou pamcd
para selecionar a fonte correta ou, se o seu ffmpeg
estiver compilado com o suporte pulseaudio, diretamente
ffmpeg -f pulse -i icecast.monitor ...
No entanto, se a ideia for "Eu quero distribuir esse fluxo icecast para outros computadores na minha rede doméstica", pode ser melhor usar um Módulo Pulseaudio RTP como o coletor em primeiro lugar.
Como eu disse, nada disso foi testado, você pode ter que ajustar partes para que funcione.
Editar
Eu também não tenho certeza se um dispositivo fictício da ALSA funcionaria, no meu entender, eles são apenas dispositivos "fictícios" e não fornecem loopback. Você teria que usar o dispositivo snd-aloop
loopback para isso, e este é um pouco trabalhoso, porque você constantemente se depara com problemas de taxa de amostragem, etc.
Então, é melhor usar a infraestrutura do Pulseaudio.