Add para_fsck.
[paraslash.git] / README
diff --git a/README b/README
index 8297a97..b311307 100644 (file)
--- a/README
+++ b/README
-Paraslash README
-================
+README
+======
+
+----
 Paraslash is an acronym for
 
-       Play, archive, rate and stream large audio sets happily
+_Play, archive, rate and stream large audio sets happily_
 
 It contains the following programs:
 
-- para_server (obligatory):
+-----------------------
+para_server (obligatory)
+-----------------------
+
+para_server streams binary audio data (mp3/oggvorbis/m4a files)
+over local and/or remote networks. It listens on a tcp port and
+accepts commands such as play, stop, pause, next from authenticated
+clients. However, there are many more commands.
+
+It supports three builtin network streaming methods (senders): http, dccp,
+or rtp.
 
-       This server listens on a tcp port and accepts commands such as
-       play, stop, pause, next from authenticated clients.
+       * The http sender is recommended for public streams that can be played
+         by any player like mpg123, xmms, itunes, winamp...
 
-       For audio streaming, at least one of the three supported senders
-       of para_server  must be activated:
+       * The dccp sender is experimental and requires kernel support for the
+         rather new datagram congestion control protocol.
 
-       The http sender is recommended for public streams that can
-       be played by any player like mpg123, xmms, winamp...
+       * The ortp sender is recommended for multicast LAN streaming
 
-       The dccp sender is experimental and requires kernel support
-       for the rather new datagram congestion control protocol.
+It is possible to activate more than one sender simultaneously.
 
-       The ortp sender is recommended for LAN streaming and for
-       private streams that require authentication.
+para_server needs an audio file selector to work, mainly to determine
+which audio file to stream next. The following three selectors are
+built in:
 
-       It is possible to activate more than one sender simultaneously.
-       All senders have the same set of commands that allow to
-       control the access permissions of the stream.
+       * The random selector chooses audio files out of a given directory
+         by random
 
-       para_server needs an "audio file selector" to work, mainly
-       to determine which song to stream next. There are three
-       selectors available: random, playlist and mysql. The former
-       chooses audio files randomly and  playlist can handle, well,
-       playlists. Both are always supported.
+       * The playlist selector chooses files from a specified playlist
 
-       The optional mysql selector connects to a mysql server which
-       holds information on your audio files. It has several unusual
-       features, see README.mysql for details.
+       * The (optional) mysql selector is more involved.  It connects
+         to a mysql server which holds information on your audio files
+         and maintains statistics on the available audio files. Audio
+         file selection works by sending a user-defined sql-query
+         to the mysql server. This allows rather sophisticated
+         configurations and is explained in detail in README.mysql.
 
-- para_client (obligatory):
+It is possible to switch between all supported selectors at any time.
 
-       The client program to connect to para_server.
+Despite of all these features, paraslash is lightweight. The
+stripped binary of para_server with all its features compiled in
+(mysql/random/playlist selector, mp3/ogg/aac support, http/dccp/ortp
+support) is about 120K on i386 under Linux. para_audiod (see below)
+is even smaller.
 
-- para_recv (optional)
+------------------------
+para_client (obligatory)
+------------------------
 
-       A command line http/dccp/rtp stream grabber.
+The client program to connect to para_server.  paraslash commands
+are sent to para_server and the response is dumped to stdout. This
+can be used by any scripting language to produce user interfaces with
+little programming effort.
 
-- para_filter (optional)
+All connections between para_server and para_client are encrypted by
+default.  For each user of paraslash you must create a public/secret
+key pair for authentication. The (authenticated) connection is crypted
+with a symmetric rc4 session key.
 
-       A filter program that converts from stdin and writes to
-       stdout. This one is independent from the rest of paraslash,
-       so it might be useful also for different purposes.
+--------------------
+para_recv (optional)
+--------------------
 
-       para_filter combines an mp3 decoder an oggvorbis decoder
-       and a volume normalzer. New filters can be added easily due
-       to the modular design. If more than one filter is specified,
-       the given filters are 'piped' together in-memory, i.e. without
-       calling any of the read(2)/write(2)/select(2) etc. functions.
+A command line http/dccp/rtp stream grabber. The http mode of this tool
+can be used to receive date from any http streaming source.
 
-- para_write (obligatory)
+----------------------
+para_filter (optional)
+----------------------
 
-       A modular audio stream writer. It supports a simple file
-       writer output plugin and an optional wav/raw player for alsa.
-       Debian package: libasound2-dev
+A filter program that converts from stdin and writes to stdout. It
+is completely independent from the rest of paraslash, so it might be
+useful also for different purposes.
 
-- para_audiod (optional, but recommended):
+para_filter combines several decoders (mp3, oggvorbis, aac) and a
+volume normalzer. New filters can be added easily due to the modular
+design. If more than one filter is specified, the given filters
+are 'piped' together in-memory, i.e. without calling any of the
+read(2)/write(2)/select(2) etc. functions.
 
-       The local daemon that collects information from para_server. It
-       starts an appropriate receiver, filter and player as soon
-       as para_server announces the availability (and the type) of
-       an audio stream. para_audiod listens on a local socket and
-       sends status information about para_server and para_audiod
-       to local clients on request.
+-----------------------
+para_write (obligatory)
+-----------------------
 
-- para_audioc (optional, but recommended)
+A modular audio stream writer. It supports a simple file writer
+output plugin and optional wav/raw players for alsa (linux-only,
+Debian package: libasound2-dev) and Mac OS. para_write can also be
+used as a stand-alone wav or raw audio player.
 
-       The client program which talks with para_audiod. Used to
-       control para_audiod, to receive status info, or to grab the
-       stream at any point in the filter chain.
+---------------------------------------
+para_audiod (optional, but recommended)
+---------------------------------------
 
-       para_audioc (hence para_audiod) is needed by para_gui,
-       para_sdl_gui and para_krell, see below.
+The local daemon that collects information from para_server.
 
-- para_gui (optional):
+It runs on the client side and connects to para_server. The audio stream is
+read from the network and sent through any of paraslash's filters (decoder,
+volume normalizer). The resulting stream is written to an output plugin
+(writer), e.g. the alsa writer on linux systems. It is possible to capture the
+stream at any position in the filter chain.
 
-       Themable ncurses-based gui. It calls para_audioc and presents
-       the obtained information in an ncurses window. para_gui
-       provides key-bindings for the most common commands and new
-       key-bindings can be added easily.
+para_audiod starts an appropriate receiver, filter and player as soon as
+para_server announces the availability (and the type) of an audio stream.
+Moreover, it listens on a local socket and sends status information about
+para_server and para_audiod to local clients on request.
 
-- para_sdl_gui (optional):
+--------------------------------------
+para_audioc (optional, but recommended)
+--------------------------------------
 
-       SDL-based gui. Similar to para_gui but presents its output
-       in an X window (fullscreen mode is also available) and can
-       display jpg images on a per song basis. para_sdl_gui provides
-       an input prompt to enter arbitrary commands. However, it
-       can also be used non-interactively (e.g. as a screen saver)
-       via the -i switch.
+The client program which talks with para_audiod. Used to control
+para_audiod, to receive status info, or to grab the stream at any
+point in the filter chain.
 
-- para_krell (optional, only useful in conjunction with the mysql selector):
+para_audioc (hence para_audiod) is needed by para_gui, para_sdl_gui
+and para_krell, see below.
 
-       A plugin for gkrellm which shows small pictures of the
-       current song. It allows you to launch 27 different commands
-       by clicking in different areas of its picture (9 small squares
-       x 3 mouse buttons).
+-------------------
+para_gui (optional)
+-------------------
 
-- para_fade (optional):
+Themable ncurses-based gui. It calls para_audioc and presents
+the obtained information in an ncurses window. para_gui provides
+key-bindings for the most common commands and new key-bindings can
+be added easily.
+
+-----------------------
+para_sdl_gui (optional)
+-----------------------
+
+SDL-based gui. Similar to para_gui but presents its output in an X
+window (fullscreen mode is also available) and can display jpg images
+on a per song basis. para_sdl_gui provides an input prompt to enter
+arbitrary commands. However, it can also be used non-interactively
+(e.g. as a screen saver) via the -i switch.
 
-       A (Linux-only) alarm clock and volume-fader.
+-------------------------------------------------------------------------
+para_krell (optional, only useful in conjunction with the mysql selector)
+-------------------------------------------------------------------------
+
+A plugin for gkrellm which shows small pictures of the current song. It
+allows you to launch 27 different commands by clicking in different
+areas of its picture (9 small squares x 3 mouse buttons).
 
-- para_dbadm (optional, only useful in conjunction with the mysql selector):
+--------------------
+para_fade (optional)
+--------------------
 
-       Very simple curses-based frontend which uses libmenu. Useful
-       for quickly changing the attributes of the current song
-       (e.g. from para_gui as an external command).
+A (Linux-only) alarm clock and volume-fader.
+
+-------------------------------------------------------------------------
+para_dbadm (optional, only useful in conjunction with the mysql selector)
+-------------------------------------------------------------------------
 
-- para_slider (optional, only useful in conjunction with the mysql selector):
+Very simple curses-based frontend which uses libmenu. Useful for
+quickly changing the attributes of the current song (e.g. from para_gui
+as an external command).
 
-       A small X application which shows a scrollbar for each
-       attribute defined in the mysql database. It creates a stream
-       definition from the values of the scrollbars. This allows
-       to smoothly change the mood of the given stream without any
-       file editing.
+--------------------------------------------------------------------------
+para_slider (optional, only useful in conjunction with the mysql selector)
+--------------------------------------------------------------------------
 
-- bash_completion (optional):
+A small X application which shows a scrollbar for each attribute
+defined in the mysql database. It creates a stream definition from
+the values of the scrollbars. This allows to smoothly change the mood
+of the given stream without any file editing.
+
+--------------------------
+bash_completion (optional)
+--------------------------
+
+A small bash script for inclusion in ~/.bashrc. It gives you command
+line completion for some paraslash commands.
 
-       A small bash script for inclusion in ~/.bashrc. It gives you
-       command line completion for some paraslash commands.
+------------
+Requirements
+------------
 
-REQUIREMENTS:
-~~~~~~~~~~~~~
 In any case you need
 
        - gcc, the gnu compiler collection (shipped with distro): gcc-3.3
-       or newer is required.
-
+         or newer is required.
        - openssl (needed by server, client): usually shipped with
-       distro, but you might have to install the "development"
-       package as well
-
-               http://www.openssl.org/
-
+         distro, but you might have to install the "development package"
+         (called libssl-dev on debian systems) as well:
+         http://www.openssl.org/
        - software mixing, e.g. ALSA and the direct mixing plugin (dmix)
 
 If you want to use the mysql-based audio file selector, you also need
@@ -151,72 +206,45 @@ If you want to use the mysql-based audio file selector, you also need
 These are usually shipped with the distro but probably not installed
 by default.
 
-The mp3 decoder of para_filter is based on libmad:
-
-               http://www.underbit.com/products/mad/
-
-If you prefer to use the libmad package provided by your distributor,
-make sure to install the corresponding development package as well.
-
-If you want to stream ogg vorbis files you'll need:
-
-       - libogg, libvorbis, libvorbisfile, and a command line ogg vorbis
-               decoder, e.g. para_filter or ogg123.
-
-               http://www.xiph.org/downloads/
+The mp3 decoder of para_filter is based on libmad: If you prefer to
+use the libmad package provided by your distributor, make sure to
+install the corresponding development package as well.  Otherwise,
+just download libmad from http://www.underbit.com/products/mad/
 
-Debian packages: libogg-dev libvorbis-dev
+For ogg vorbis streams you'll need libogg, libvorbis, libvorbisfile,
+The corresponding Debian packages are called libogg-dev libvorbis-dev,
+other distributors chose similar names.  All of these are also
+available at http://www.xiph.org/downloads/
 
-Note that para_audiod still works even if neither mp3 nor ogg support
-was compiled in. You'll have to use the --no_default_filters option
-in this case (and e.g. "mpg123 -" as the stream write command).
-
-If you intend to use the optional ortp streamer:
-
-       - libortp
-
-               http://www.linphone.org/ortp/
+For aac files (m4a) you'll need libfaad. Get it at
+http://www.audiocoding.com/modules/wiki/?page=AAC
 
+If you intend to use the optional ortp streamer, you'll need libortp:
+http://www.linphone.org/ortp/
 
 For the optional SDL-based gui, the following packages must be installed:
 
-       - X (usually shipped with distro)
-
-               http://www.x.org/
-
-       - libSDL (usually shipped with distro)
-
-               http://www.libsdl.org/index.php
+       - X (usually shipped with distro): http://www.x.org/
+       - libSDL (usually shipped with distro): http://www.libsdl.org/index.php
+       - SDL_image: http://www.libsdl.org/projects/SDL_image/
 
-       - SDL_image
-
-               http://www.libsdl.org/projects/SDL_image/
-
-For para_slider, the zero memory widget library is neccessary. Get it at
-
-               http://www710.univ-lyon1.fr/~exco/ZMW/
+For para_slider, the zero memory widget library is neccessary:
+http://www710.univ-lyon1.fr/~exco/ZMW/
 
 Finally, para_krell needs
 
-       - gtk2
-
-               http://www.gtk.org/
-
-       - gkrellm2
+       - gtk2: http://www.gtk.org/
+       - gkrellm2: http://members.dslextreme.com/users/billw/gkrellm/gkrellm.html
 
-               http://members.dslextreme.com/users/billw/gkrellm/gkrellm.html
+-------
+LICENSE
+-------
 
-LICENSE:
-~~~~~~~~
 Distribution of paraslash is covered by the GNU GPL. See file COPYING.
 
-LIMITATIONS:
-~~~~~~~~~~~~
-The mysql selector assumes that the basenames of your audio files are
-unique. If this is not the case, don't use this selector, rename your
-files, or create your own one.
+----------
+THE AUTHOR
+----------
 
-THE AUTHOR:
-~~~~~~~~~~~
-Author: Andre Noll <maan@systemlinux.org>
+Andre Noll <maan@systemlinux.org>
 Comments and bug reports are welcome.