2002-05-08 20:06:20 +00:00
|
|
|
This paper will present the GStreamer Media framework. We
|
2002-01-24 22:24:45 +00:00
|
|
|
explain briefly what a media framework is and what its advantages
|
2002-05-08 20:06:20 +00:00
|
|
|
are. This introduction presents the basic design of GStreamer
|
|
|
|
and how the modularity can provide many benefits when building
|
|
|
|
multimedia applications ranging from simple audio/video players
|
|
|
|
to complex audio/video mixing and non linear editing.
|
2002-01-24 22:24:45 +00:00
|
|
|
|
2002-05-08 20:06:20 +00:00
|
|
|
We then go into more detail about the different components of
|
|
|
|
the framework and how specific problems were solved.
|
|
|
|
State changes are covered first as they bring the pipeline with
|
|
|
|
all its components from a sleeping to a running state. The most
|
|
|
|
interesting problem here is error recovery and thread interlocking.
|
2002-01-24 22:24:45 +00:00
|
|
|
|
2002-05-08 20:06:20 +00:00
|
|
|
We expand on the scheduler that is responsible for making sure all
|
|
|
|
of the components don't step on eachothers toes as they pass along
|
|
|
|
data. We explain one of the possible scheduling methods using
|
|
|
|
cothreads and expand on how the number of cothread switches can
|
|
|
|
be reduced in order to make the data flow as fast as possible.
|
|
|
|
|
|
|
|
Since GStreamer is a very open system that can basically handle
|
|
|
|
any media type, a mechanism is provided to negotiate the media
|
|
|
|
types between plugins. We continue with an explanation of how
|
|
|
|
this type negotiation is done.
|
|
|
|
|
|
|
|
Events are the mechanism to indicate changes in the data that is
|
|
|
|
flowing through the pipeline, such as End Of Stream notification
|
|
|
|
or seek and flush events. We explain how these events work and
|
|
|
|
how they interact with the scheduler.
|
|
|
|
|
|
|
|
We finally cover some of the interesting libraries that are
|
|
|
|
provided with GStreamer, such as the bytestream library. We
|
|
|
|
explain how all the pieces fit together and how we combine different
|
|
|
|
techniques to create a very fast read API.
|