&TITLEPAGE;

## Foreword

&GStreamer; is an extremely powerful and versatile framework for creating streaming media applications. Many of the virtues of the &GStreamer; framework come from its modularity: &GStreamer; can seamlessly incorporate new plugin modules. But because modularity and power often come at a cost of greater complexity, writing new applications is not always easy.

This guide is intended to help you understand the &GStreamer; framework (version &GST_VERSION;) so you can develop applications based on it. The first chapters will focus on development of a simple audio player, with much effort going into helping you understand &GStreamer; concepts. Later chapters will go into more advanced topics related to media playback, but also at other forms of media processing (capture, editing, etc.).

## Introduction

&INTRO;

## About GStreamer

This part gives you an overview of the technologies described in this book.

&GSTREAMER; &MOTIVATION; &CONCEPTS;

## Building an Application

In these chapters, we will discuss the basic concepts of &GStreamer; and the most-used objects, such as elements, pads and buffers. We will use a visual representation of these objects so that we can visualize the more complex pipelines you will learn to build later on. You will get a first glance at the &GStreamer; API, which should be enough for building elementary applications. Later on in this part, you will also learn to build a basic command-line application.

Note that this part will give a look into the low-level API and concepts of &GStreamer;. Once you're going to build applications, you might want to use higher-level APIs. Those will be discussed later on in this manual.

&INIT; &ELEMENTS; &BINS; &BUS; &PADS; &DATA; &HELLOWORLD;

## Advanced &GStreamer; concepts

In this part we will cover the more advanced features of &GStreamer;. With the basics you learned in the previous part you should be able to create a simple application. However, &GStreamer; provides much more candy than just the basics of playing back audio files. In this chapter, you will learn more of the low-level features and internals of &GStreamer;.

Some parts of this part will serve mostly as an explanation of how &GStreamer; works internally; they are not actually needed for actual application development. This includes chapters such as the ones covering scheduling, autoplugging and synchronization. Other chapters, however, discuss more advanced ways of pipeline-application interaction, and can turn out to be very useful for certain applications. This includes the chapters on metadata, querying and events, interfaces, dynamic parameters and pipeline data manipulation.

&QUERYEVENTS; &METADATA; &INTERFACES; &CLOCKS; &DPARAMS; &THREADS; &AUTOPLUGGING; &DATAACCESS;

## Higher-level interfaces for &GStreamer; applications

In the previous two parts, you have learned many of the internals and their corresponding low-level interfaces into &GStreamer; application programming. Many people will, however, not need so much control (and as much code), but will prefer to use a standard playback interface that does most of the difficult internals for them. In this chapter, we will introduce you into the concept of autopluggers, playback managing elements, XML-based pipelines and other such things. Those higher-level interfaces are intended to simplify &GStreamer;-based application programming. They do, however, also reduce the flexibility. It is up to the application developer to choose which interface he will want to use.

&COMPONENTS; &XML;

## Appendices

By now, you've learned all about the internals of &GStreamer; and application programming using the &GStreamer; framework. This part will go into some random bits that are useful to know if you're going to use &GStreamer; for serious application programming. It will touch upon things related to integration with popular desktop environments that we run on (GNOME, KDE, OS X, Windows), it will shortly explain how applications included with &GStreamer; can help making your life easier, and some information on debugging.

In addition, we also provide a porting guide which will explain easily how to port &GStreamer;-0.8 applications to &GStreamer;-0.10.

&CHECKLIST; &PORTING; &INTEGRATION; &LICENSING; "ES;