Streaming verso icecast/shoutcast da linux
La tecnologia di streaming audio può essere fatta con protocolli diversi ma principalmente Icecast e Shoutcast, mentre questo post non vuole evidenziare i pro e i contro dell’uno rispetto all’altro, vogliamo condividere una soluzione per i client di streaming su Linux, tramite terminale. Linux è un sistema operativo non facile, ma con molte funzionalità e soluzioni. Ed è gratuito quindi vale la pena spendere un po’ più di tempo (intendo ore e giorni) cercando di trovare una buona soluzione per le tue esigenze. La mia esigenza era un client in streaming audio mp3 da un server senza un’interfaccia utente a un server Icecast ed ad un server Shoutcast.
Ho bisogno di un client Linux in grado di eseguire lo streaming di una playlist di file su Icecast e/o Shoutcast
Esistono diverse soluzioni che possono farlo:
- Ezstream è un client Linux, ma funziona solo con il server Icecast
- Liquidsoap può gestire sia Icecast che Shoutcast, ma il processo di installazione può essere complicato (più complicato di quanto mi aspettassi) su una macchina CentoOS
- Darkice può riprodurre in streaming sia Icecast che Shoutcast ma non consente lo streaming di una playlist
- mpd/mpc soluzione fattibile, ma non è così facile da configurare
- Butt è uno strumento grafico e da terminale non può fare tutto ciò di cui abbiamo bisogno. E non consente lo streaming di una playlist
Ecco i miei vincoli: prima di tutto il sistema operativo è una distro Linux CentOS, e questo non può essere cambiato. Poi ho bisogno di qualcosa che possa gestire una playlist di file, infatti il mio caso d’uso è lo stop estivo, o di vacanza, di una web radio (https://www.radiocittaperta.it dove ho anche un programma Katzenjammer). I file sono i podcast di tutti gli spettacoli registrati durante l’anno, e il server è il computer dove si trova il sito web.
Quindi, dopo aver scavato e cercato su Google, ho scoperto che la soluzione perfetta e più semplice è usare VLC. VLC è un noto software per riprodurre quasi tutti i tipi di file, ma forse non tutti sanno che può essere utilizzato anche per lo streaming su un server Icecast o Shoutcast e, inoltre, può essere utilizzato senza un’interfaccia grafica. Quindi ecco la riga di comando utilizzata per lo streaming.
cvlc --color dshow://dshow-adev="" "/path/playlist.m3u" --loop --sout-keep --sout "#std{access=shout{name=your radio name,description=your radio description,url=https://www.yourwebsite.com,mp3=1,bitrate=128},mux=mp3,dst=source:admin@your-icecast-host:your-icecast-port/your-endpoint}"
Dove:
cvlc
la versione senza user interface di vlc
playlist.m3u
il file playlist
loop
finita la playlist, ricominica da capo
sout-keep
significa “suona e non ti fermare se è finito il file”
name=your radio name
il nome della tua radio
description=your description
la descrizione della tua radio
url=https://www.yourwebsite.com
il sito web della tua radio, se ne ha uno
mp3=1
questo è necessario per fare streaming di file mp3
bitrate=128
stream bitrate
dst=source:admin@your-icecast-host:your-icecast-port/your-endpoint
questi sono tutti l’host, la porta, l’endpoint, il nome utente e la password del server icecast.
Questo eseguirà semplicemente lo streaming su un server, supponiamo che sia un server Icecast, quindi se vuoi anche eseguire lo streaming su un server icecast dovresti raddoppiare questo comando ma, fortunatamente per noi, c’è un comando più avanzato che può farlo per noi:
/usr/bin/cvlc --color dshow://dshow-adev="" "/home/admin56306114/playlist.m3u" --loop --sout-keep --sout '#duplicate{dst=std{access=shout{name=your radio name,description=your radio description,url=https://www.yourwebsite.com,mp3=1,bitrate=128},mux=mp3,dst=source:admin@your-icecast-host:your-icecast-port/your-icecastcast-endpoint},dst=std{access=shout{name=your radio name,description=your radio description,url=https://www.yourwebsite.com,mp3=1,bitrate=128},mux=mp3,dst=source:admin@your-shoutcast-host:your-shoutcast-port/your-shoutcast-endpoint}}' > /dev/null 2>&1 &
> /dev/null 2>&1 &
significa: fallo in background e non disturbarmi con righe di log inutili!
Grazie all’opzione duplicata possiamo inviare lo stesso flusso a più server. Opzioni e valori sono facili da capire e configurare.