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+.