How do I setup an Icecast server for broadcasting audio in my network?

  • Broadcasting the output of the soundcard as an internet radio stream is a reliable way to stream audio in a network. This can nicely be used to e.g. transmit audio in a wireless LAN to another computer or any other device capable of playing internet radio streams.

    However I did not find an easy step by step guide on how to set this up.

  • Takkat

    Takkat Correct answer

    10 years ago

    Broadcast audio with Icecast2


    1. Install Icecast2 Install icecast2


    2. Edit Icecast2 configuration

    Open the file /etc/icecast2/icecast.xml as root in an editor. For security reasons you should setup passwords in the <authentication> section:

    <admin-user>admin</admin-user>
    <admin-password>hackme</admin-password> 
    

    If you changed the <source-password> or <relay-password> you need to do so on the source or relay side as well. That means leave it default or change it in the ices2.xml file (see below) as well. The same will need to be done in the Ices or Darkice configuration files.

    You also need to define the hostname where your stream can be reached:

    <hostname>localhost</hostname>
    

    Leave it as localhost (no need to give a resolved IP there) when you only want to stream in your local network. The default port to listen to is 8000. Change it only when needed.


    3. Edit defaults

    Open the /etc/default/icecast2 file as root in an editor. The last line needs to be changed to

    ENABLE=true
    

    That's all for Icecast2. Of course there are many more settings you can play with. In the configurations files there are explanatory notes on parameters.

    4. Start/Stop Icecast

    The server is started and stopped by the following commands:

    /etc/init.d/icecast2 start
    /etc/init.d/icecast2 stop
    

    While running the Icecast server can be administrated from any browser at http://localhost:8000/admin/ after entering your administrator credentials defined in step 1. Further documentation is available from Icecast.org.

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


    Ices2 Install ices2 for streaming OGG Vorbis audio from a local soundcard

    To set up of pulseaudio to enable recording from the soundcard see note for Darkice below.

    Make directories for Ices2

    mkdir /var/log/ices   # in case you need logfiles.  
    mkdir /etc/ices2      # for putting ices stuff in.  
    

    Edit the Ices2 configuration .xml

    Ices2 will run using an .xml file for settings. Verbous examples of configurations can be found in /usr/share/doc/ices2/examples/. These files need to be edited to meet your needs and can be copied anywhere, best in your home directory. Depending on the configuration file Ices2 uses a playlist in Ogg Vorbis format (ices-playlist.xml) or the output from your soundcard (ices-alsa.xml) as streaming source for Icecast2.

    In the section <input> you may need to replace the device if you have setup your sound system to PulseAudio. To do this edit the corresponding line to:

    <param name="device">pulse</param>
    

    The name of the stream for the receiving client is defined in the following section.

    <mount>/example1.ogg</mount>
    

    Start Streaming

    Streams from your soundcard will be started by first running the Icecast2 server, and then running Ices2 using the following commands:

    /etc/init.d/icecast2 start
    ices2 /home/user/somewhere/ices-pulse.xml # or any other name from .xml file
    

    Setup Receiver

    On the receiver side your radio "station" tunes on: <serverIP>:8000/example1.ogg where <serverIP> is the IP of your streaming server followed by the port you defined in the icecast.xml file (default 8000).

    Terminate Streaming

    Streams are terminated by killing Ices2 and/or stop running the Icecast2 server:

    killall ices2
    /etc/init.d/icecast2 stop
    

    Ices for broadcasting mp3 playlists

    Broadcasting a playlist containing mp3 files can not be done with Ices2. We need to install IceS, which we have to install from source.

    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:

    /etc/init.d/icecast2 start
    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 Install 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 Install pavucontrol. In the Recording tab choose Monitor of <your soundcard> 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          = default # or `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:

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

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

    Regarding the "Leave it as localhost when you only want to stream in your local network" part, does this not need to be a network-reachable IP or interface for other deviced to be able to connect?

    are the admin-user and admin-password related to the machine user/password?

    @Charbel: no, they are not related. Choose any password you like. You e.g. need them to access the icecast admin web interface (http://localhost:8000/admin/).

    This is a great answer, thank you. In a great many tutorials, I see icecast and mpd mentioned together, working together. I don't understand the relationship between icecast and mpd - would you be able to clarify? What role does each serve?

    @CoolUserName: Yeah, if you have an MPD server running you can configure the Icecast server as audio output there. You don't need Darkice then.

    Note, that the Icecast2 passwords are stored (and used in Darkice) as clear-text. Do not reuse your very secret passwords here.

    For ices, the mediubuntu link is down, but these days you can just use `sudo apt-get install ices2`. Wish I had known that earlier.

    @RaisinBranCrunch thank you - sad that Medibuntu is down again. Note that you can't stream **mp3** playlists with Ices2

    @Takkat what I should do if I wanna access Icecast outside the local network. I followed your tutorial, I used Icecast and Darkice together and it's working nice. But I have to use it out of my local network. Kindly provide help.

    @MuhammadSarmadMahmoodMalik: I believe you have to edit the config file (`icecast.xml`) to replace `localhost` with your public IP address. Then restart the Icecast server. If the listen socket port (defaults to 8000 but this is configurable) is open, forwarded to the Icecast server, and not blocked by a firewall you should be ready to go. It is years since I tried that but it should still work.

    @Takkat I enabled port forwarding in my router. Server IP Address: **192.168.10.16**, I used this address as it is the IP address of my raspberry pi. The port is **8000** as Icecast users this port. I found public IP using ``curl icanhazip.com`` command and replace the IP address in the **icecast.xml** file. After all this setup I reboot the system and trying to access Icecast using this public IP but not succeeded. Can you please tell me where I am doing wrong.

    @Takkat project is done! I was wrong in setting my port forwarding at router side. I was only doing in `NAT -> Virtual Server` but it was also required to port forwarding setting in `NAT -> Port Triggering` and `NAT -> DMZ Host`.

    @Muhammad: Cool! Nice job. Thanks for sharing.

License under CC-BY-SA with attribution


Content dated before 6/26/2020 9:53 AM