At the heart of GStreamer lies the concept of a 'filter graph', which is simply a number of objects tied together into a circuit of sorts. Arbitrary filter graphs can be constructed using type checking to verify the graph.
Containers can contain filter graphs themselves, allowing for nesting and transparent threading.
Plugins are used almost exclusively to provide filters. The core GStreamer package comes with numerous filters ranging from a simple file source to mp3 decoders to visualization plugins. All filter types are registered by name, along with the types of data they can deal with, which will make it possible in the future to automatically create filter graphs. GStreamer was written in response to the various problems I saw arising in the software used at OGI, where I'm a staff research programmer. Each of these has their own way of doing the actual decode of the MP3, ranging from using mpg123 via pipes to incorporating the code into their programs.