Rivulet (aka rindle) is a system for scheduling and organising net
radio broadcasts using linux. It's been written as an open framework
that you can add to rather than a 'one size fits all tool' - all of
the back end stream control functions are done by scripts which you
can change yourself to modify the way the system operates. For example,
you could add a line to upload recorded shows to an external server
after they have finished broadcasting. You are not recommended to
use it unless you have some programming experience - it would be suitable
for someone who has fairly good linux sysadmin skills, and at least
some knowledge of perl, bash and php, but is not meant for a complete
novice.
Also, don't take this documentation as a complete guide to the system
- it's just meant as a general guide to what rivulet can do and how
to set it up. If you want to use it in earnest, expect to spend some
time getting to know the code and adapting it to your own needs. You
should be aware that rivulet is not being actively used or developed
at the moment, so don't expect too much in the way of ongoing support.
However, if you like it and want to develop it further, feel free
to get in touch through the contact addresses on the web site and
in the 'AUTHORS' file, and we will do what we can to help.
Rivulet is not meant to replace or compete with professional playout
systems like myriad, which have an interface for playing a series
of tracks from an 'audio wall' - the different stream sources are
meant to apply to a programme as a whole, not to individual segments
within a programme. In other words, you can use it to schedule programmes,
but you'll need something else for putting the individual shows together.
The general concept is that for each programme that goes out, you
have a choice of one of several audio sources which plays into one
or more streams. There are several audio sources defined at the moment,
and you can add your own by writing suitable scripts. Some of the
sources take parameters which you define when you choose that source.
The sources are:
- live - plays from the sound card's line-in input. No parameters.
- prerec - play a prerecorded file that has been put on the hard disk
previously. The file name is the only parameter.
- repeat - play a repeat of a show (from whatever source), that has
gone out previously. The parameters are the time, date, etc of the
show.
- relay - relay the audio from an http stream (mp3 or ogg vorbis). This
can be used to do outside broadcasts. The parameter is the url.
- loop - loop backwards through the list of previously played shows.
This is meant as a simple way to run repeats overnight without having
to schedule them.
- stop - no audio.
The system has been set up to work with several different stream clients.
The best developed one is ices, which streams to an icecast server
in ogg vorbis format, but you can also stream in mp3 using darkice
or shoutcast. Any stream client which can be persuaded to take its
input from the jack audio daemon should be usable with rivulet. There
is also a built in stream which will simply relay the audio to the
sound card's line out.
There are several parts to rivulet:
- The scheduling daemon. This is the heart of the system - it reads
in a list of shows to play, and then loops, waiting until it is time
for the next one to go out. This is written in perl. When a show starts
or stops, it calls one of ...
- The back end scripts. These are called by the scheduler to start and
stop shows, and streams. Each audio source type has its own script,
and each stream type has its own section of the stream script. They
are written in bash, which is a shell language meant for interfacing
with external programs. They are meant to be easy to modify to change
the way the system works. The scripts themselves don't do very much
- the work of actually running the stream is done by ...
- The audio / streaming programs. At the moment, rivulet is using the
following programs to run the stream:
jackd - routes raw audio between the other programs.
ecasound - used for adding filters and effects to the stream. E.g.
a compressor.
alsaplayer - an audio player, which is used to play prerecorded shows
and http streams.
ices - a stream client, which sends the stream to an icecast server.
The scripts start and stop these programs and send them signals in
order to play the right show at the right time. E.g. ices is signalled
to update its metadata whenever a new show starts, so that the stream
always shows the name of the current show. One adavantage of having
done it this way is that the choice of backend programs is still fairly
flexible, so the system could be adapted to work with different streaming
systems if you take the time to rewrite the scripts.
- The front end. Rivulet is controlled using a php / mysql front end
web interface. This lets you enter shows in different time slots,
store them in a database, and send them to the scheduler daemon to
be played out. There is also a controller page which interfaces more
directly with the scheduler and lets you do things like see which
shows are coming up next, start and stop shows manually, signal that
a show has ended, and so on.
- The online schedule. Having put all the show information into a database,
you can then use this information to generate an online version of
the schedule, and rivulet includes a set of php scripts which will
do this. You may want to re-write these to suit your own website.
andy
2006-03-26