ICECAST: Streaming Static MP3 Playlist


A few days ago, I made mention on my configurations for Icecast/Ices using Ogg/Vorbis. Today, I'll go into a little detail on using the Ices (Mp3 Version) for MP3 streaming of MP3 files. Again: note that proper credit goes to someone else (Probably Kerry Cox for initial documentation efforts).

First off, it's important to note that there are two very different versions of Ices (the encoding portion of the Icecast/Ices server combination). Take a look at Xiph.org's http://www.icecast.org/ices.php page. It really explains it all. The only big problem is that if you do the configure / make / make install series of instructions for both, is that they will both try to write ices to the same /usr/bin location. So, after you compile one - do a

$ whereis ices
to locate the file. Then, rename it to ices-ogg or ices-mp3 as appropriate. I personally keep the ogg flavor named simply ices and I call the mp3 flavor ices-mp3. You're obviously free to do what you want.

Note that this icesmp3.xml configuration file corresponds to the icecast.conf file I have displayed here. In my example, I've downloaded some MP3 podcasts that are technology-specific, and I've created a streaming "radio station" for this content.

<?xml version="1.0"?>

<ices:Configuration xmlns:ices="http://www.icecast.org/projects/ices">

<Playlist>

<!-- This is the filename used as a playlist when using the builtin
playlist handler. -->
<File>/usr/local/share/icecast/conf/tech-playlist.txt</File>

<!-- Set this to 0 if you don't want to randomize your playlist, and to
1 if you do. -->
<Randomize>0</Randomize>

<!-- One of builtin, perl, or python. -->
<Type>builtin</Type>

<!-- Module name to pass to the playlist handler if using perl or python.
If you use the builtin playlist handler then this is ignored -->
<Module>ices</Module>

<!-- Value in Seconds if you'd like a nice crossfade effect between files. -->
<Crossfade>5</Crossfade>

</Playlist>

<Execution>

<!-- Set this to 1 if you want ices to launch in the background as a
daemon -->
<Background>0</Background>

<!-- Set this to 1 if you want to see more verbose output from ices -->
<Verbose>0</Verbose>

<!-- This directory specifies where ices should put the logfile, cue file
and pid file (if daemonizing). Don't use /tmp if you have l33t h4x0rz
on your server. -->
<BaseDirectory>/tmp</BaseDirectory>

</Execution>

<Stream>

<Server>

<!-- Hostname or ip of the icecast server you want to connect to -->
<Hostname>localhost</Hostname>

<!-- Port of the same -->
<Port>8000</Port>

<!-- Encoder password on the icecast server -->
<Password>sourcepwd</Password>

<!-- Header protocol to use when communicating with the server.
Shoutcast servers need "icy", icecast 1.x needs "xaudiocast", and
icecast 2.x needs "http". -->
<Protocol>http</Protocol>

</Server>

<!-- The name of the mountpoint on the icecast server -->
<Mountpoint>/tech</Mountpoint>

<!-- The name of you stream, not the name of the song! -->
<Name>sonniknet radio</Name>

<!-- Genre of your stream, be it rock or pop or whatever -->
<Genre>sonnik's tech mix</Genre>

<!-- Longer description of your stream -->
<Description>technology based podcasts</Description>

<!-- URL to a page describing your stream -->
<URL>http://localhost/</URL>

<!-- 0 if you don't want the icecast server to publish your stream on
the yp server, 1 if you do -->
<Public>0</Public>

<!-- Stream bitrate, used to specify bitrate if reencoding, otherwise
just used for display on YP and on the server. Try to keep it
accurate -->
<Bitrate>128</Bitrate>

<!-- If this is set to 1, and ices is compiled with liblame support,
ices will reencode the stream on the fly to the stream bitrate. -->
<Reencode>0</Reencode>

<!-- Number of channels to reencode to, 1 for mono or 2 for stereo -->
<Channels>2</Channels>

<!-- Sampe rate to reencode to in Hz. Leave out for LAME's best choice -->
<Samplerate>44100</Samplerate>

</Stream>

</ices:Configuration>



The configuration file references a path to the playlist. In this configuration file, it's /usr/local/share/icecast/conf/tech-playlist.txt. This is just a flat file with direct paths to each mp3 file. In this case, I have...

/usr/local/share/icecast/conf/tech-playlist.txt
/home/sonnik/audio/ljj.mp3
/home/sonnik/audio/olp.mp3
/home/sonnik/audio/twit53.mp3
Note that the playlist and the mp3 files themselves will need to have appropriate read permissions for whatever user you start the ices (or ices-mp3) process under.