| This paper will present the GStreamer Media framework. We |
| explain briefly what a media framework is and what its advantages |
| 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. |
| |
| 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. |
| |
| 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. |