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 .monitor
source associée . Vous pouvez ainsi émettre du son sur le icecast
récepteur et le traiter dans d'autres applications utilisant la icecast.monitor
source.
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, mplayer
se terminera également, alors enroulez-le dans un script shell à l'intérieur d'une while
boucle 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.monitor
de
ffmpeg -f alsa -i pulse ...
en utilisant pavucontrol
ou pamcd
pour sélectionner la bonne source, ou, si vous ffmpeg
compilez 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-aloop
pé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.