Ubuntu – Run Your Own Webradio Station

source : http://www.howtoforge.com/linux_webradio_with_icecast2_ices2

Install And Configure Icecast2

To install Icecast2 we simply run

sudo apt-get install icecast2

Afterwards we must edit /etc/icecast2/icecast.xml.

sudo gedit /etc/icecast2/icecast.xml

[...]
    <authentication>
        <!-- Sources log in with username 'source' -->
        <source-password>password1</source-password>
        <!-- Relays log in username 'relay' -->
        <relay-password>password2</relay-password>
        <!-- Admin logs in with the username given below -->
        <admin-user>admin</admin-user>
        <admin-password>password3</admin-password>
    </authentication>
[...]

Most default values should work fine for now, but you should change the passwords in the <authentication>…</authentication section. The source-password is the password that Ices2 will later on use to connect to Icecast2; the admin-password is the password that the admin will use in Icecast2’s web interface; we won’t use the relay-password, but anyway you should change it.

Afterwards edit /etc/default/icecast2

sudo gedit /etc/default/icecast2

and set ENABLE to true:

# Defaults for icecast2 initscript
# sourced by /etc/init.d/icecast2
# installed at /etc/default/icecast2 by the maintainer scripts
#
# This is a POSIX shell fragment
#
# Full path to the server configuration file
CONFIGFILE="/etc/icecast2/icecast.xml"
# Name or ID of the user and group the daemon should run under
USERID=icecast2
GROUPID=icecast
# Edit /etc/icecast2/icecast.xml and change at least the passwords.
# Change this to true when done to enable the init.d script
ENABLE=true

That’s it already, we can now start the Icecast2 server:

sudo /etc/init.d/icecast2 start

You can now direct your browser to http://192.168.0.100:8000/ (replace 192.168.0.100 with your own IP address or FQDN) and browse through the web interface:

Install And Configure Ices2

To install Ices2, we run

sudo apt-get install ices2

Next we create the directories /var/log/ices (for the Ices2 log files), /etc/ices2 (where we store our Ices2 configuration file), and /etc/ices2/music (where we store our .ogg files):

sudo mkdir /var/log/ices
sudo mkdir /etc/ices2
sudo mkdir /etc/ices2/music

The Ices2 package comes with three sample configuration files, /usr/share/doc/ices2/examples/ices-alsa.xml, /usr/share/doc/ices2/examples/ices-oss.xml, and /usr/share/doc/ices2/examples/ices-playlist.xml. We use the latter one because we will create a playlist of local .ogg files that we want to stream to listeners. Therefore we copy that file to /etc/ices2:

sudo cp /usr/share/doc/ices2/examples/ices-playlist.xml /etc/ices2

Next we edit /etc/ices2/ices-playlist.xml. Most default values should work, but we change <background>0</background> to <background>1</background> because we want Ices2 to run in the background (otherwise it would wait on the shell until you terminate it), we also change the data in the <metadata>…</metadata> section, we set the full path to our playlist file in the <input>…</input> section, and we set the correct source password for our Icecast2 server in the <instance>…</instance> section (you can also set the bitrate of your audio stream in that section):

sudo gedit  /etc/ices2/ices-playlist.xml

 

<?xml version="1.0"?>
<ices>
    <!-- run in background -->
    <background>1</background>
    <!-- where logs, etc go. -->
    <logpath>/var/log/ices</logpath>
    <logfile>ices.log</logfile>
    <!-- 1=error,2=warn,3=info,4=debug -->
    <loglevel>4</loglevel>
    <!-- set this to 1 to log to the console instead of to the file above -->
    <consolelog>0</consolelog>
    <!-- optional filename to write process id to -->
    <!-- <pidfile>/home/ices/ices.pid</pidfile> -->
    <stream>
        <!-- metadata used for stream listing (not currently used) -->
        <metadata>
            <name>Example stream name</name>
            <genre>Example genre</genre>
            <description>A short description of your stream</description>
        </metadata>
        <!-- input module
            The module used here is the playlist module - it has
            'submodules' for different types of playlist. There are
            two currently implemented, 'basic', which is a simple
            file-based playlist, and 'script' which invokes a command
            to returns a filename to start playing. -->
        <input>
            <module>playlist</module>
            <param name="type">basic</param>
            <param name="file">/etc/ices2/playlist.txt</param>
            <!-- random play -->
            <param name="random">0</param>
            <!-- if the playlist get updated that start at the beginning -->
            <param name="restart-after-reread">0</param>
            <!-- if set to 1 , plays once through, then exits. -->
            <param name="once">0</param>
        </input>
                <!-- Stream instance
            You may have one or more instances here. This allows you to
            send the same input data to one or more servers (or to different
            mountpoints on the same server). Each of them can have different
            parameters. This is primarily useful for a) relaying to multiple
            independent servers, and b) encoding/reencoding to multiple
            bitrates.
            If one instance fails (for example, the associated server goes
            down, etc), the others will continue to function correctly.
            This example defines two instances as two mountpoints on the
            same server.  -->
        <instance>
            <!-- Server details:
                You define hostname and port for the server here, along with
                the source password and mountpoint.  -->
            <hostname>localhost</hostname>
            <port>8000</port>
            <password>password1</password>
            <mount>/example1.ogg</mount>
            <!-- Reconnect parameters:
                When something goes wrong (e.g. the server crashes, or the
                network drops) and ices disconnects from the server, these
                control how often it tries to reconnect, and how many times
                it tries to reconnect. Delay is in seconds.
                If you set reconnectattempts to -1, it will continue
                indefinately. Suggest setting reconnectdelay to a large value
                if you do this.
            -->
            <reconnectdelay>2</reconnectdelay>
            <reconnectattempts>5</reconnectattempts>
            <!-- maxqueuelength:
                This describes how long the internal data queues may be. This
                basically lets you control how much data gets buffered before
                ices decides it can't send to the server fast enough, and
                either shuts down or flushes the queue (dropping the data)
                and continues.
                For advanced users only.
            -->
            <maxqueuelength>80</maxqueuelength>
            <!-- Live encoding/reencoding:
                Currrently, the parameters given here for encoding MUST
                match the input data for channels and sample rate. That
                restriction will be relaxed in the future.
            -->
            <encode>
                <nominal-bitrate>64000</nominal-bitrate> <!-- bps. e.g. 64000 for 64 kbps -->
                <samplerate>44100</samplerate>
                <channels>2</channels>
            </encode>
        </instance>
        </stream>
</ices>

Afterwards put your .ogg files into the /etc/ices2/music directory (but take care about the licenses of the audio files you want to stream.

Click here to find 
out more!

Afterwards create the file /etc/ices2/playlist.txt and put the full paths to your .ogg files into it, one line per .ogg file:

sudo gedit /etc/ices2/playlist.txt

[...]
/etc/ices2/music/1vs0_JuniorGroove.ogg
/etc/ices2/music/1vs0_TheWavechangerSuperhero.ogg
[...]

Then start Ices2:

sudo ices2 /etc/ices2/ices-playlist.xml

In the Icecast2 web interface you should now find a link to your new audio stream (Click to Listen -> http://192.168.0.100:8000/example1.ogg.m3u, but http://192.168.0.100:8000/example1.ogg works as well):

Open the link with your favourite audio player, for example WinAMP:

If you want to stop Ices2, just run

sudo kill -9 `pidof ices2`

4 Modify The Icecast2 Init Script

Ices2 doesn’t come with an init script which means we must start/stop it independently from Icecast2. Icecast2 comes with an init script which means it starts automatically at boot time, but Ices2 does not which can become annoying. Therefore we modify the Icecast2 init script and add sections for Ices2 to it.

sudo gedit /etc/init.d/icecast2

#! /bin/sh
#
# icecast2
#
#                Written by Miquel van Smoorenburg <miquels@cistron.nl>.
#                Modified for Debian
#                by Ian Murdock <imurdock@gnu.ai.mit.edu>.
#
#                Further modified by Keegan Quinn <ice@thebasement.org>
#                for use with Icecast 2
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/icecast2
NAME=icecast2
DESC=icecast2
ICES=/usr/bin/ices2
ICES_CONFIGFILE=/etc/ices2/ices-playlist.xml
test -x $DAEMON || exit 0
# Defaults
CONFIGFILE="/etc/icecast2/icecast.xml"
CONFIGDEFAULTFILE="/etc/default/icecast2"
USERID=icecast2
GROUPID=icecast
ENABLE="false"
# Reads config file (will override defaults above)
[ -r "$CONFIGDEFAULTFILE" ] && . $CONFIGDEFAULTFILE
if [ "$ENABLE" != "true" ]; then
        echo "$NAME daemon disabled - read $CONFIGDEFAULTFILE."
        exit 0
fi
set -e
case "$1" in
  start)
        echo -n "Starting $DESC: "
        start-stop-daemon --start --quiet --chuid $USERID:$GROUPID \
                --exec $DAEMON -- -b -c $CONFIGFILE
        sleep 3
        start-stop-daemon --start --quiet --exec $ICES $ICES_CONFIGFILE
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --oknodo --quiet --exec $ICES
        start-stop-daemon --stop --oknodo --quiet --exec $DAEMON
        echo "$NAME."
        ;;
  reload|force-reload)
        echo "Reloading $DESC configuration files."
        start-stop-daemon --stop --oknodo --quiet --exec $ICES
        start-stop-daemon --stop --signal 1 --quiet --exec $DAEMON
        sleep 3
        start-stop-daemon --start --quiet --exec $ICES $ICES_CONFIGFILE
        ;;
  restart)
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --oknodo --quiet --exec $ICES
        start-stop-daemon --stop --oknodo --quiet --exec $DAEMON
        sleep 3
        start-stop-daemon --start --quiet --chuid $USERID:$GROUPID \
                --exec $DAEMON -- -b -c $CONFIGFILE
        sleep 3
        start-stop-daemon --start --quiet --exec $ICES $ICES_CONFIGFILE
        echo "$NAME."
        ;;
  *)
        echo "Usage: $0 {start|stop|restart|reload|force-reload}" >&2
        exit 1
        ;;
esac
exit 0

Now Ices2 will start/stop/restart whenever Icecast2 does, and it will also start at boot time.

 

Ices for broadcasting mp3 playlists

Broadcasting a playlist containing mp3 files can not be done with Ices2. We need to install IceS, which is also available from the Medibuntu repository.

After having set up the configuration file with server address, password and streaming properties (well documented example will be found in /usr/share/doc/ices/examples) we can stream mp3 audio files from playlists (e.g. in .m3u format) over an Icecast2 server by:

sudo /etc/init.d/icecast2 start
sudo ices -c <path_to_config_file> -F <path_to_playlist>

For further options read the documentation in the quite elaborate man page from man ices.

 

Darkice  for live streaming

We can stream the output of the local sound card as OGG Vorbis or as mp3 stream using Darkice. To enable streaming of the local soundcard we may need to define the recording device for Darkice in pulseaudio first. This can be done with pavucontrol. In the Recording tab choose Monitor of for the “ALSA plug-in [darkice]”.

The configuration file (well documented example given in /usr/share/doc/darkice/examples) needs to be adapted to the Icecast server and the local sound environment:

[general]
duration = 0 # duration in s, 0 forever
bufferSecs = 1 # buffer, in seconds
reconnect = yes # reconnect if disconnected

[input]
device = pulse # for Pulseaudio
sampleRate = 44100 # sample rate 11025, 22050 or 44100
bitsPerSample = 16 # bits
channel = 2 # 2 = stereo

[icecast2-0]
bitrateMode = vbr # variable bit rate (‘cbr’ constant, ‘abr’ average)
quality = 1.0 # 1.0 is best quality
format = mp3 # format. Choose ‘vorbis’ for OGG Vorbis
bitrate = 256 # bitrate
server = localhost # or IP
port = 8000 # port for IceCast2 access
password = hackme # source password to the IceCast2 server
mountPoint = mystream.mp3 # mount point on the IceCast2 server .mp3 or .ogg
name = mystream

After saving this configuration (e.g. in ~/music/darkice.cfg) we first run the Icecast server and are then able to stream pulseaudio output from the local sound card by invoking:

sudo /etc/init.d/icecast2 start
sudo darkice -c ~/music/darkice.cfg

On the receiver we tune to http://:8000/mystream.mp3 for listening. is the IP of the Icecast server.

 

Stream2ip is a graphical frontend to quickly start and stop streams where a basic setup for Ices2, Ices or Darkice has already been done.

 

LINKS

How To Install A Streaming Audio Server With Icecast 2.3.3 On CentOS 6.3 x86_64 Linux

http://www.masternewmedia.org/audio_music_publishing/internet-radio/how-to-create-your-own-web-radio-station-guide-20070314.htm

http://en.wikipedia.org/wiki/Internet_radio

http://www.korokithakis.net/tutorials/icecast

http://www.shoutcast.com/

http://radio.about.com/od/createinternetradio/a/How-to-Create-Your-Own-Internet-Radio-Station_3.htm

http://www.excellencegateway.org.uk/page.aspx?o=ferl.aclearn.resource.id14178