Creating Internet Radio Station
Creating Internet Radio Station
Creating an
Internet
Radio Station
with Icecast
and Liquidsoap
Ever wanted to stream prerecorded music or a live event, such
as a lecture or concert for an internet audience? With Icecast
and Liquidsoap, you can set up a full-featured, flexible internet
radio station using free software and open standards.
BILL DENGLER
NEXT
PREVIOUS Feature: Linux
V
I
CECAST IS hA STREAMING MEDIA AUDIOVIDEO SERVER THAT CURRENTLY
SUPPORTS /GG 6ORBIS AND 4HEORA /PUS 7EB- AND -0 STREAMS )T
can be used to create an internet radio station or a privately running
jukebox and many things in between. It is very versatile in that new
FORMATS CAN BE ADDED RELATIVELY EASILY AND SUPPORTS OPEN STANDARDS FOR
COMMUNICATION AND INTERACTIONv
,IQUIDSOAP IS hA POWERFUL AND FLEXIBLE LANGUAGE FOR DESCRIBING YOUR
STREAMS )T OFFERS A RICH COLLECTION OF OPERATORS THAT YOU CAN COMBINE AT
WILL GIVING YOU MORE POWER THAN YOU NEED FOR CREATING OR TRANSFORMING
STREAMS "UT ,IQUIDSOAP IS STILL VERY LIGHT AND EASY TO USE IN THE 5.)8
TRADITION OF SIMPLE STRONG COMPONENTS WORKING TOGETHERv
7HEN COMBINED )CECAST AND ,IQUIDSOAP CAN CREATE A FLEXIBLE FEATURE
RICH INTERNET RADIO STATION )N THIS ARTICLE ) DESCRIBE HOW TO CONFIGURE
)CECAST TO HOST AN INTERNET RADIO STATION 4HEN ) EXPLAIN HOW TO INSTALL AND
CONFIGURE ,IQUIDSOAP TO CONNECT TO )CECAST ADDING RANDOM OR SEQUENTIAL
MUSIC PLAYBACK WITH SMART CROSS
FADING PRERECORDED RANDOMLY INSERTED
ANNOUNCEMENTS AND JINGLES A SONG REQUEST SYSTEM AND SUPPORT FOR LIVE
streams, with automated recording and seamless switching between live and
AUTOMATED PROGRAMMING ) ALSO SHOW HOW TO CONFIGURE THE SERVER TO SERVE
YOUR STREAM IN -0 /GG AND /PUS FORMATS FOR MAXIMUM PLAYER COMPATIBILITY
)CECAST 6ORBIS AND RELATED PROJECTS ARE MAINTAINED BY 8IPH/RG
https://www.xiph.org A NONPROFIT ORGANIZATION THAT DEVELOPS OPEN
MULTIMEDIA STANDARDS AND SOFTWARE 4O ENSURE THAT YOU ARE RUNNING THE
LATEST VERSION OF )CECAST WITH ALL OR MOST FEATURES YOU SHOULD INSTALL
FROM AN OFFICIAL 8IPH/RG REPOSITORY 6ISIT THE LIST OF OFFICIAL REPOSITORIES AT
HTTPSWIKIXIPHORG)CECAST?3ERVER)NSTALLING?LATEST?VERSION?OFFICIAL?8IPH?
REPOSITORIES AND FOLLOW THE INSTRUCTIONS ON THAT PAGE TO ADD THE )CECAST
REPOSITORY FOR YOUR DISTRIBUTION 4HEN INSTALL USING YOUR SYSTEMS PACKAGE
MANAGER /N $EBIAN
BASED SYSTEMS SUCH AS 5BUNTU YOU MAY BE ASKED
TO hCONFIGURE )CECASTv DURING PACKAGE INSTALLATION SELECT hNOv AS YOU WILL
CONFIGURE THE SERVER MANUALLY IF YOU ARE FOLLOWING ALONG WITH THIS ARTICLE
/PEN THE )CECAST CONFIGURATION FILE USING YOUR PREFERRED TEXT EDITOR /N
$EBIAN
BASED SYSTEMS THE FILE IS LOCATED AT ETCICECASTICECASTXML 4HE
LOCATION ON OTHER SYSTEMS MAY DIFFER CHECK YOUR PACKAGES DOCUMENTATION
FOR THE CORRECT PATH 4HE CONFIGURATION FILE IS IN 8-, FORMAT AND IS DIVIDED
INTO SEVERAL SECTIONS &IRST ENTER YOUR SERVERS LOCATION AND EMAIL INTO THE
LOCATION AND ADMIN FIELDS RESPECTIVELYFOR EXAMPLE
<sources>10</sources>
<burst-on-connect>0</burst-on-connect>
<burst-size>0</burst-size>
<source-password>dontpanic</source-password>
<relay-password>dontpanic42</relay-password>
<admin-user>zaphod</admin-user>
<admin-password>2Headsarebetterthanone!</admin-password>
%NTER YOUR SYSTEMS FULLY QUALIFIED DOMAIN NAME IN THE HOSTNAME FIELD
<hostname>example.com</hostname>
3AVE AND CLOSE THE FILE )F YOU EDITED THE FILE AS ROOT YOULL NEED TO RESET
ITS PERMISSIONS /N $EBIAN
BASED SYSTEMS )CECAST RUNS UNDER USER ICECAST
systems, the adduser and gpasswd utilities allow you to create users
AND ADD THEM TO GROUPS RESPECTIVELY /N $EBIAN
BASED SYSTEMS RUN THE
FOLLOWING COMMANDS AS ROOT TO ADD A NEW USER AND GRANT IT SUDO ACCESS
FOR OTHER SYSTEMS REFER TO THE DOCUMENTATION ,ET username represent
THE USER NAME OF THE NEW USER
adduser username
gpasswd -a username sudo
0ERFORMING AS YOUR NON
ROOT USER INITIALIZE THE /#AML 0ACKAGE -ANAGER
by running:
opam init
!NSWER hYESv WHEN ASKED TO MODIFY YOUR PROFILE THIS WILL PLACE
,IQUIDSOAP ON YOUR PATH AND ALLOW IT TO BE EXECUTED WHEN YOU TYPE ITS
NAME 4O APPLY OPAM CHANGES RUN
SYSTEMS PACKAGE MANAGER THEN RUN THE FOLLOWING AS YOUR NON ROOT USER
.OW OPEN THE FILE MAINLIQ IN THE LIQUIDSOAP
DAEMON DIRECTORY !T THIS
POINT THAT FILE JUST CONTAINS
output.dummy(blank())
#Settings
set("server.telnet", true)
set("server.telnet.port", 1234)
set("harbor.bind_addr","0.0.0.0")
# Music playlists
music1 = playlist("~/music/music1")
# Some jingles
jingles = playlist("~/music/jingles")
# If something goes wrong, we'll play this
security = single("~/music/default.ogg")
# Start building the feed with music
radio = random([music1])
# Add the security, requests and smart crossfade
radio = fallback(track_sensitive = false,
[smart_crossfade(fallback([request.queue(id="request"),
radio])),security])
# Now add some jingles
radio = random(weights = [1, 7],[jingles, radio]) # This plays
# a jingle once every approximately seven songs, change 7 to
# another number to change this
# Add a skip command for the music stream
server.register(
usage="skip",
description="Skip the current song.",
"skip",
fun(_) -> begin source.skip(radio) "Done!" end
#Add support for live streams.
live =
audio_to_stereo(input.harbor("live",port=8080,password=
"dontpanic1764",buffer=1.0)) #dontpanic1764 is the
# password used to connect a live stream; it can (and should) be
# different from the source-password in icecast.xml.
full = fallback(track_sensitive=false,
[live,radio])
# Dump archives
file_name = '~/archives/%Y-%m-%d-%H:%M:%S$(if $(title),
"-$(title)","").ogg'
output.file(%vorbis,file_name,live,fallible=true)
# Stream it out
output.icecast(%mp3.vbr,
host = "localhost", port = 8000,
password = "dontpanic", mount = "music.mp3",
name="myStation Music Service", description="This is the myStation
PLAYLIST ARE PLAYED 4O DO THIS CREATE DIRECTORIES UNDER MUSIC FOR EACH
PLAYLIST NAMED MUSIC MUSIC AND SO ON 4HEN JUST COPY THE music1
LINE IN THE MUSIC PLAYLISTS SECTION OF MAINLIQ CHANGING THE REFERENCE TO
music1 accordingly.
4O INSERT SONGS RANDOMLY FROM THE NEW PLAYLIST EVERY N SONGS IN
the stream, add a line below radio = random([music1]) , where n
REPRESENTS THE APPROXIMATE NUMBER OF SONGS TO PLAY BEFORE INSERTING A
SONG FROM THE NEW PLAYLIST
# Music playlists
music1 = playlist("~/music/music1")
music2 = playlist("~/music/music2")
music3 = playlist("~/music/music3")
...
radio = random([music1])
radio = random(weights = [1, 6],[music2, radio])
radio = random(weights = [1,12],[music3, radio])
File-Based Playlists
)N THE BASE CONFIGURATION ,IQUIDSOAP WILL SEARCH THE DIRECTORY
^MUSICMUSIC RECURSIVELY FOR SONGS TO PLAY (OWEVER YOU ALSO CAN GIVE
,IQUIDSOAP A NEWLINE
DELIMITED TEXT FILE OF PATHS TO SONGS EITHER LOCALLY
ON YOUR SYSTEM OR ON THE WEB 4O DO THIS SIMPLY CHANGE THE PATH TO A
DIRECTORY TO A PATH TO YOUR TEXT FILE LIKE THIS
music1 = playlist("~/music/music1.pls")
Sequential Playback
"Y DEFAULT ,IQUIDSOAP PLAYS TRACKS IN RANDOM ORDER )F YOU WANT TO PLAY TRACKS
SEQUENTIALLY ADD mode="sequential" TO YOUR PLAYLIST DEFINITION LIKE THIS
music1 = playlist("~/music/music1",mode="sequential")
3EQUENTIAL PLAYBACK IS BEST COMBINED WITH FILE
BASED PLAYLISTS AS THEY BOTH
GIVE YOU TOTAL CONTROL OVER THE ORDER IN WHICH TRACKS ARE PLAYED BY ,IQUIDSOAP
music1 = nrj(playlist("~/music/music1"))
Finishing Up
%DIT THE CONFIGURATION AS NECESSARY THEN SAVE AND CLOSE THE FILE
2ECORD A FILE TO ^MUSICDEFAULTOGG THIS FILE WILL BE PLAYED WHEN
,IQUIDSOAP CANNOT FIND OTHER TRACKS TO PLAY 4HE FILE SHOULD TELL LISTENERS
THAT THE STREAM IS DOWN AND GIVE THEM INFORMATION FOR CONTACTING YOU
TO NOTIFY YOU OF THE PROBLEM 0OPULATE THE PLAYLISTS WITH MUSIC THEN
START ,IQUIDSOAP WITH THE FOLLOWING COMMAND
%NABLE IT ON BOOT
Q Port: 8080
Q -OUNT MOUNTPOINT LIVE OR LIVE FOR A LIVE STREAM )F YOU ENABLED THE
ability to talk over automated programming, replace live with mic to
talk over the music.
Q USERNAME SOURCE SOME CLIENTS DONT PROMPT FOR A USER NAME IN WHICH
CASE SOURCE IS THE IMPLIED DEFAULT
9OU CAN STREAM IN /GG 6ORBIS OR -0 /GG /PUS MAY OR MAY NOT WORK
depending on your source client.
/NCE CONNECTED YOU CAN REQUEST A SONG WITH THE FOLLOWING WHERE
uri IS AN ABSOLUTE PATH TO AN AUDIO FILE ON YOUR SYSTEM OR A 52, OF AN
AUDIO FILE ON THE INTERNET
request.push uri
4O SKIP THE CURRENTLY PLAYING SONG AND IMMEDIATELY PLAY THE NEXT
one, simply type skip .
&OR A LIST OF ALL AVAILABLE COMMANDS TYPE help , or type help
FOLLOWED BY THE NAME OF A COMMAND FOR USAGE INFORMATION ON A
particular command.
4O END YOUR SESSION TYPE quit .
)N ADDITION TO ,IQUIDSOAPS TELNET INTERFACE )CECAST ALSO HAS
A WEB
BASED ADMINISTRATIVE INTERFACE THAT YOU CAN USE TO VIEW
LISTENER STATISTICS KILL ,IQUIDSOAPS STREAMS OR MOVE LISTENERS AMONG
Bill Dengler has been a Linux user and tinkerer since age nine. He was born totally blind due
to a rare genetic condition called Norrie Disease, so he relies on a screen reader to access his
computer. He is currently pursuing an International Baccalaureate diploma. Feel free to send
him questions and comments at [email protected].
RETURN TO CONTENTS