WHAT IT IS
----------
This is GStreamer, a framework for streaming media.

This package is in the 0.9.x series.  This means that this is a
development series leading up to a stable 0.10.x series.
You have been warned.

OVERVIEW
--------
GStreamer is split up over a number of modules, tarballs and packages:

- gstreamer:
  The core.  It contains the main library and header files, as well as
  some fundamental elements.  Every GStreamer project needs at least this
  installed.
- gst-plugins-base:
  A base set of plugins.  This set is the set we actively keep synchronized
  with the core and are also meant to serve as examples on how to write
  GStreamer elements.  It also contains a number of base classes for writing
  GStreamer elements.

INSTALLING FROM PACKAGES
------------------------
You should always prefer installing from packages first.  GStreamer is
well-maintained for a number of distributions, including Fedora, Debian,
Ubuntu, Mandrake, Gentoo, ...

Only in cases where you:
- want to hack on GStreamer
- want to verify that a bug has been fixed
- do not have a sane distribution
should you choose to build from source tarballs or CVS.

Find more information about the various packages at
http://gstreamer.freedesktop.org/download/

COMPILING FROM SOURCE TARBALLS
------------------------------
- again, make sure that you really need to install from source !
  If GStreamer is one of your first projects ever that you build from source,
  consider taking on an easier project.

- check output of ./configure --help to see if any options apply to you
- run
  ./configure
  make

  to build GStreamer.
- if you want to install it (not required), run
  make install
- You should create a registry for things to work.
  If you ran make install in the previous step, run
  gst-register
  as root.

  If you didn't install, run
  tools/gst-register
  as a normal user.

- try out a simple test:
  gst-launch fakesrc num_buffers=5 ! fakesink
  (If you didn't install GStreamer, again prefix gst-launch with tools/)

  If it outputs a bunch of messages from fakesrc and fakesink, everything is
  ok.

- After this, you're ready to install gst-plugins, which will provide the
  functionality you're probably looking for by now, so go on and read
  that README.

COMPILING FROM CVS
------------------
When building from CVS sources, you will need to run autogen.sh to generate 
the build system files.

You will need a set of additional tools typical for building from CVS,
including:
- autoconf
- automake
- libtool

autogen.sh will check for recent enough versions and complain if you don't have
them.  You can also specify specific versions of automake and autoconf with
--with-automake and --with-autoconf

Check autogen.sh options by running autogen.sh --help

autogen.sh can pass on arguments to configure - you just need to separate them
from autogen.sh with -- between the two.
prefix has been added to autogen.sh but will be passed on to configure because
some build scripts like that.

When you have done this once, you can use autoregen.sh to re-autogen with
the last passed options as a handy shortcut.  Use it.

After the autogen.sh stage, you can follow the directions listed in
"COMPILING FROM SOURCE"

You can also run your whole cvs stack uninstalled.  The script in
the gstreamer module /docs/faq/gst-uninstalled) is helpful in setting
up your environment for this.

PLUG-IN DEPENDENCIES AND LICENSES
---------------------------------
GStreamer is developed under the terms of the LGPL (see LICENSE file for
details). Some of our plug-ins however rely on libraries which are available
under other licenses. This means that if you are using an application which
has a non-GPL compatible license (for instance a closed-source application)
with GStreamer, you have to make sure not to use GPL-linked plug-ins.
When using GPL-linked plug-ins, GStreamer is for all practical reasons
under the GPL itself.

HISTORY
-------
The fundamental design comes from the video pipeline at Oregon Graduate
Institute, as well as some ideas from DirectMedia.  It's based on plug-ins that
will provide the various codec and other functionality.  The interface
hopefully is generic enough for various companies (ahem, Apple) to release
binary codecs for Linux, until such time as they get a clue and release the
source.
