J'interprète votre commentaire comme "utiliser Pulseaudio pour le faire est correct". Je n'ai pas testé cela, mais voici ce que je ferais:
Tout d’abord, créez un évier Pulseaudio "null":
pacmd load-module module-null-sink sink_name=icecast sink_properties=device.description=Icecast
Dans Pulseaudio, chaque récepteur a une .monitorsource associée . Vous pouvez ainsi émettre du son sur le icecastrécepteur et le traiter dans d'autres applications utilisant la icecast.monitorsource.
Si je vous ai bien compris, vous souhaitez recevoir le flux icecast sur votre ordinateur. Pour sortir le flux dans l’ icecastévier, procédez comme suit:
mplayer http://your.icecast.server -ao pulse::icecast
Lorsque le flux icecast se termine, mplayerse terminera également, alors enroulez-le dans un script shell à l'intérieur d'une whileboucle infinie , etc.
Je ne suis pas sûr de comprendre ce que vous essayez de faire avec la partie "stream to udp via ffmpeg". Dans tous les cas, vous pouvez maintenant lire à partir icecast.monitorde
ffmpeg -f alsa -i pulse ...
en utilisant pavucontrolou pamcdpour sélectionner la bonne source, ou, si vous ffmpegcompilez avec le support pulseaudio, directement
ffmpeg -f pulse -i icecast.monitor ...
Toutefois, si l’idée est "Je souhaite distribuer ce flux icecast à d’autres ordinateurs de mon réseau domestique", il peut être préférable d’utiliser un module RTP Pulseaudio comme récepteur .
Comme je l'ai dit, rien de tout cela n'a été testé, vous devrez peut-être ajuster les pièces pour que cela fonctionne.
Modifier
Je ne suis pas sûr non plus qu'un dispositif factice ALSA fonctionnerait en premier lieu, à ma connaissance, il ne s'agit en réalité que de dispositifs "factices" et ne fournit pas de boucle de rappel. Vous devez utiliser le snd-alooppériphérique de bouclage pour cela, et celui-ci est un peu pénible, car vous rencontrez constamment des problèmes de taux d'échantillonnage, etc.
Vous valez donc mieux utiliser l'infrastructure Pulseaudio.