Je souhaite transmettre un flux icecast à udp via FFmpeg, mais si le flux icecast doit être supprimé, FFmpeg est également supprimé. Je suppose que si je pouvais acheminer le flux icecast vers un autre appareil factice, je pourrais en obtenir les données via FFmpeg. Par exemple:
ffmpeg -f alsa -i hw:Dummy,0 -f mpegts udp://ip:port
Ensuite, en cas de chute du flux icecast, le flux de sortie udp sera lu en mode silencieux et continuera à être lu jusqu'à ce que ce flux soit à nouveau disponible. (Ceci est mon hypothèse).
Existe-t-il un moyen de router le flux icecast vers un autre appareil factice? Ou existe-t-il une autre variante permettant de router le flux icecast vers udp afin de le lire en mode silencieux en cas d'abandon du flux icecast, puis de revenir automatiquement à la lecture normale lorsque le flux icecast est à nouveau disponible?
Réponses:
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":
Dans Pulseaudio, chaque récepteur a une
.monitor
source associée . Vous pouvez ainsi émettre du son sur leicecast
récepteur et le traiter dans d'autres applications utilisant laicecast.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:Lorsque le flux icecast se termine,
mplayer
se terminera également, alors enroulez-le dans un script shell à l'intérieur d'unewhile
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
deen utilisant
pavucontrol
oupamcd
pour sélectionner la bonne source, ou, si vousffmpeg
compilez avec le support pulseaudio, directementToutefois, 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.
la source
Vous pouvez utiliser le périphérique de bouclage au lieu du périphérique factice.
Le périphérique Loopback n'étant pas activé par défaut, vous devez d'abord charger le module de noyau snd-aloop avec des arguments pour spécifier le type et le nombre de sous-flux souhaités:
Ensuite, au lieu d’acheminer icecast vers
hw:Dummy,0
, vous pouvez l’acheminerhw:Loopback,0,0
et lire ce flux dans ffmpeg depuishw:Loopback,1,0
.la source
mpv --audio-device=alsa/hw:Loopback,0,0 http://example.com/path/to/icecast/stream
ou avec SoX, vous le feriezsox http://example.com/path/to/icecast/stream -t alsa hw:Loopback,1,0
.