While one of its main goodies is the abstraction of audio/video codecs,
gstreamer is a lot more than a codec plugin infrastructure. It's primary feature is that it's graph-(or node-)based, meaning that you can setup basically arbitrary media processing pipelines.
The graph-based approach resembles the idea of M$'s
DirectX,
SGI's Digital Media lib,
BeOS's
MediaKit and others. In this respect, it is similar to what you see in
Max/
MSP, Miller Puckette's
pd and quite some audio apps.
some example pipelines using the
gst-launch prototyping tool:
- gst-launch filesrc location=test.mp3 ! mad ! osssink
- gst-launch v4lsrc width=320 height=240 ! shagadelicTV ! xvideosink disable-xv=true
A single filter in gstreamer is called an "element". It has zero or more input "pad"s ("sink"s) and zero or more output pads ("source"s, or "src"s). It might well also have a bunch of parameters (
GObject properties), and
GTK-like "signals" (eg, filesrc will signal an
EOF).
gstreamer is written following the
GLib/
GObject paradigm, meaning it is
object-oriented, but in plain
C, bringing all the good (
portability, language bindings) and bad (code that needs some getting-used-to) that also comes with
GTK+.