Fluid Streaming Server, Final Version, is a media streaming server
software and development API built on the Java Platform. The first
version (Beta1) was built in 1998 and released as Open Source (Beta2)
in 2000. It has since then undergone quite a few changes. The
previous release (RC2) has been used as a base for several other
The latest version comes with a redesign of the architecture.
Fluid is now built using robust patterns and with a symmetry in how
it handles the stream. Several other additions have been made to
support features that were not available in the earlier releases,
such as buffering and on demand service of media.
The architecture is based on the assumption that you want to
connect some kind of media source with a target for the same media.
To do so it uses input and output connectors, which more or less
wrap input and output streams with the extra handling needed for
different kinds of connections to the source and target. Using the
listener pattern the connectors can exchange stream events. This
provides the basis for on demand service of media or sending media
descriptors back to the client. On the next level the frame reader
and writer is found, responsible for handling the media dependent
frames. Media may be read in one format and encapsulated in another
before written to the output. Adding support for new media formats
is done through inheritance and easily included using dynamic class
loading. On top of that are two media independent engines; one for
reading and one for writing. They are implemented in a
producer-consumer pattern and run in their own threads sharing a
constrainable frame buffer. All inter-thread communication is
handled through the mutex-like transceiver. In the middle of it all
is the configuration, which uses an observer pattern to notify all
the other parts whenever a change has been made. This way the
configuration is not limited to be read at startup, but can be
changed in run time. All in all a very flexible framework for
building media servers.