Plugging a 64 GB USB stick with directories full of MP3 / OGG files into an always-on Raspberry Pi running Pi-Hole, one can use Icecast to stream them for clients on the LAN, so as to avoid over-the-Intertubes streaming issues.
The only changes in the /etc/icecast2/icecast.xml
file cover passwords, the number of source streams, and the hostname
. It’s that simple, really.
Given a directory of files, generate a file-per-line playlist:
find /mnt/music/goodmusic/ -name \*mp3 | sort > /mnt/music/goodmusic/playlist.m3u
Then set up a corresponding Ezstream XML file, perhaps imaginatively named goodmusic.xml
:
<ezstream> <url>http://localhost:8000/goodmusic</url> <sourcepassword>make-up-your-own</sourcepassword> <format>MP3</format> <filename>/mnt/music/goodmusic/playlist.m3u</filename> <shuffle>1</shuffle> <stream_once>0</stream_once> <svrinfoname>Good Music</svrinfoname> <svrinfourl>pihole.local</svrinfourl> <svrinfogenre>Good Music Streaming 24x7</svrinfogenre> <svrinfodescription>Techno Dub</svrinfodescription> <svrinfobitrate>128</svrinfobitrate> <svrinfochannels>2</svrinfochannels> <svrinfosamplerate>44100</svrinfosamplerate> <svrinfopublic>1</svrinfopublic> </ezstream>
Fire off the source stream in /etc/rc.local
:
ezstream -c /home/pi/Icecast/goodmusic.xml &
The ampersand tells Bash to fire-and-forget the process, so it runs all the time. One could, I suppose, put it in crontab
to start after each boot or puzzle out the corresponding systemd
incantation, but …
Add the station to your streaming media player:
'KEY_KP5' : ['Good Music',False,['mplayer','-playlist','http://192.168.1.2:8000/goodmusic.m3u']],
And then It Just Works™.