|
|
IceGenerator is a direct streaming generator for Icecast/Shoutcast. It runs as a daemon.
Three child processes handle all the stuff. A fourth (optional) child cares about
telnet communication.
Main idea for this program is radio automation on a Icecast/Shoutcast server. If you have
many server processes and CPU saving is your priority, u can use IceGenerator.
Obviously mp3s/oggs will be already resampled to allow their streaming on your bandwidth
capability.
This is a pre-realease version, cause many big changes are in progress. I'd like
that you can test it along its development.
| · | Automatically put into playlist directories full of mp3s, or a MySQL table |
| · | No resampling is allowed, so CPU is saved |
| · | MP3s/OGGs are played randomly or in alphabetic order, without repeating twice a song |
| · | You can loop the whole playlist at its end |
| · | When IceGenerator quits, finish its last song first |
| · | IceGenerator status is optionally reported to syslog/log file |
| · | Very useful when used with crond |
| · | ID3 support |
| · | Linux 2.x/FreeBSD/NetBSD/MacOS/Solaris/OpenBSD |
| · | You have to install libshout2. You can find it here |
| · | For ID3 support, you have to install id3lib. You can find it here |
| · | An IceCast/Shoutcast server |
| · | An Intel 486-like CPU class (maybe a fast 386-like will work) |
| · | A good broadband connection |
Install
Just type:
./configure
make
make install
Configure options:
--with-id3 adds ID3 support
--with-mysql adds MySQL support
--with-pgsql adds PostGreSQL support
Binary is installed in /usr/local/bin as default.
It requires a configuration file, located in /usr/local/etc as default,
that indicates mp3s/oggs paths and all the stuff related to connection to Icecast.
A sample configuration file is in etc/ directory of this package.
All mp3s MUST HAVE .mp3 extension, and oggs MUST HAVE .ogg extension. Case is
irrilevant.
Configure your streaming server properly. The default user for Icecast-2.0 is "source",
but you can change as you want. You can also set a mount point different from "/", so you
an many instances of icegenerator at once (each one with a different mount point, obviously).
Then type "icegenerator" and put on your stream player (like XMMS). If you can't
hear music, maybe your volume is too low :-D
More options (like icegenerator.conf path, deamon start) are available
at command line. Type "icegeneator -h" for synopsys.
To quit this daemon, just run "killall icegenerator", and wait for last
song to finish.
Really simple, uh?
NOTE:
Some players (like WinAmp, XMMS, etc.) requires a valid mount point for OGG files. They
need .OGG extension, cause MIME header isn't evaluated. Keep in mind it ...
Configuration
All configuration options are listed in icegenerator.conf file that usually
resides in /usr/local/etc of your system.
Each line that starts with a '#' is treated as a comment.
| Section | Command | What is means |
| Server |
IP Required |
Specify here your IceCast/ShoutCast server IP |
|
PORT Required |
Specify here your IceCast/ShoutCast server port | |
|
SERVER Required |
Specify what protocol your IceCast/ShoutCast uses. Refer to your stream server documentation for further details. Only two protocols are supported, ICY and HTTP | |
|
MOUNT Required |
Specify mount point for clients, that is where they find your stream server in http path. For example, setting MOUNT as /my_stream requires that clients use URL http://your_server:your_port/my_stream. REMEMBER TO SET A VIRTUAL MOUNT POINT HERE FOR OGG STREAMING. MANY PLAYERS (LIKE WINAMP, XMMS, ETC.) CAN'T AUTO RECOGNIZE OGG STREAMING WITHOUT .OGG EXTENSION | |
| User |
USER Required |
Specify which user has streaming rights. As far as I know, IceCast uses "source" as default, but u can use anything else, cause it's ignored. However you can find more informations in your stream server documentation |
|
PASSWORD Required |
Specify password to connect to your stream server | |
| Playlist |
FORMAT Required |
Specify what type of audio data are you going to stream. Only MP3 and OGG files are allowed. Use "0" for OGG, "1" for MP3 |
|
MP3PATH Required |
Here is one of strong point of IceGenerator, its capability to accept many ways to search for audio songs. First three chars of this variable specify where are your audio songs, use "PTH" for directories, "SQL" for a MySQL table (only allowed if MySQL support is enabled during compilation), "PQL" for a PostGreSQL table (only allowed if PostGreSQL support is enabled during compilation), "PLS" for .PLS playlist file support, "M3U" for .M3U playlist file support. After a ':' character, you can specify all option that refers to way that you have chosen. It will be explain after. | |
| RECURSIVE | When this variable is set to 1, IceGenerator search for audio songs in subdirectories of directories specified in MP3PATH. Obviously, it is ignored when you use MySQL as source data | |
| DUMPFILE | Specify a file where stream is saved | |
| LOOP | If set, playlist is looped at its end | |
| SHUFFLE | If set, playlist is played randomly | |
| Information | NAME | Specify name, genre, description and URL of your stream |
| GENRE | ||
| DESCRIPTION | ||
| URL | ||
| BITRATE | Specify bitrate of your stream. This value is purely informational, it doesn't affect real bitrate | |
| PUBLIC | If set, your META is published into stream directory server(s) | |
| METAUPDATE | Specify delay (in seconds) between META information update that is sent to clients. A value of "0" disables META information change, and only NAME value is displayed | |
| MDFPATH | Specify path of your global MetaDataFile. It will be explained later | |
| Logging | LOG | Specify logging type. "0" means no logging at all, "1" logs to system log daemon, "2" logs to /var/log/icegenerator.log |
| Telnet | DATAPORT | Specify port used for telnet interface. If not specified at all, telnet interface will be disabled. A value of "0" sets default port (8796) |
MP3PATH command
As told before, here you specify where to look for audio songs. It accepts
three characters, that specify type of search, a ';', and then specific parameters
for that search, that are always separated by ';'.
| Type | Parameters | What it means |
| pth | You can specify one or more directories separated with ';'. Wrong paths will be skipped | |
|
pql PostGreSQL sql MySQL |
host | your SQL server ip or symbolic name |
| port | your SQL server port. If you specify "0", default port will be used | |
| user | SQL user that has access rights to database that you'll specify. Only SELECT right is required | |
| password | password for SQL user | |
| database | database name that contains table that contains audio songs paths | |
| table | table name that contains audio songs paths | |
| field | field name that contains audio songs paths | |
|
m3u pls |
you have to specify only a playlist file path | |
| · |
You have two directories full of OGG files, /path1/dir and
/my_audio/rock/80s. MP3PATH=pth:/path1/dir;/my_audio/rock/80s |
| · |
You have a MySQL server located at sql.mydomain.com, you have a database called
webextra with a table called songsdata and a column called songs. MySQL user
that has access rights is called john. MP3PATH=sql:sql.mydomain.com;0;john;secretpassword;webextra;songsdata;songs |
You can connect to IceGenerator during stream with a TCP connection like telnet.
Connection port is specified with DATAPORT option. After command is sent, an
answer is returned and connection is closed. Commands that not require an answer
have an "OK" string in return. All commands MUST HAVE a '.' character at their end.
Available command are reported in the following table:
| Command | What it means |
| TRACK | returns information about current track |
| LOOP | returns "1" or "0" if loop is active or not |
| SHUFFLE | returns "1" or "0" if shuffle is active or not |
| LOOPON | activates loop |
| LOOPOFF | deactivates loop |
| SHUFFLEON | deactivates shuffle |
| SHUFFLEOFF | returns "1" or "0" if shuffle is active or not |
This is main brand new feature added to IceGenerator, and it's called IceMetaL. Formerly it's a simple programming language that I've created, and it's used to customize META informations that appear on client software.
* LOOP [number]
This instruction starts a loop. It can be followed by an integer positive
number that specifies how many times we have to loop again. Remember that
number specifies OTHER passed before the first pass, so if you specify 3,
for example, it will make the first pass and loop again 3 times.
If number is not specified, the loop is an infinite loop (that is,
will loop until song is played).
| /home | ||||||
| - | /john | |||||
| | | -myglobalfile.mdf | |||||
| | | /streams | |||||
| | | -Genesis - Invisible touch.mp3 | |||||
| | | -REM - Shiny happy people.mp3 | |||||
| | | /Madonna | |||||
| | | -Like a virgin.mp3 | |||||
| | | -Like a virgin.mdf | |||||
| | | -Borderline.mp3 | |||||
| | | /Jackson | |||||
| | | -default.mdf | |||||
| | | -Billy Jean.mp3 | |||||
| | | -Smooth Criminal.mp3 | |||||
| | | -Bad.mp3 | |||||
| | | -Bad.mdf | |||||
When IceGenerator fetchs a songs, it looks for an .mdf file that have the same
name of song. If exists, it uses it, otherwise it looks for a "default.mdf" file
placed into the same dir of song. If a local .mdf file can't be found, it uses
global .mdf specified with MDFPATH variable. If a global .mdf file isn't set,
filename (without .mp3 or .ogg extension and path) will be sent.
So these are .mdf file for our songs:
| Genesis - Invisible touch.mp3 | myglobalfile.mdf | |
| REM - Shiny happy people.mp3 | myglobalfile.mdf | |
| Like a virgin.mp3 | Like a virgin.mdf | |
| Borderline.mp3 | myglobalfile.mdf | |
| Billy Jean.mp3 | default.mdf | |
| Smooth Criminal.mp3 | default.mdf | |
| Bad.mp3 | Bad.mdf |