## Goals of GStreamer Editing Services

The GStreamer multimedia framework and the accompanying GNonLin set of plugins for non-linear editing offer all the building blocks for:

- Decoding and encoding to a wide variety of formats, through all the available GStreamer plugins.

- Easily choosing segments of streams and arranging them through time through the GNonLin set of plugins.

But all those building blocks only offer stream-level access, which results in developers who want to write non-linear editors to write a consequent amount of code to get to the level of non-linear editing notions which are closer and more meaningful for the end-user (and therefore the application).

The GStreamer Editing Services (hereafter GES) aims to fill the gap between GStreamer/GNonLin and the application developer by offering a series of classes to simplify the creation of many kind of editing-related applications.

## Architecture

### Timeline and TimelinePipeline

The most top-level object encapsulating every other object is the GESTimeline. It is the central object for any editing project.

The `GESTimeline` is a `GstElement`. It can therefore be used in any GStreamer pipeline like any other object.

The GESTimeline can contain two types of objects (seen in Figure 1, “Layers and Tracks”):

- Layers - Corresponds to the user-visible layout of non-overlapping objects. A minimalistic timeline would only have one layer. A more complex editing application could use as many as needed.

- Tracks - Corresponds to the output stream formats. A typical GESTimeline would have a audio track and a video track. An audio editor would only require one single audio Track.

Figure 1. Layers and Tracks

In order to reduce even more the amount of GStreamer interaction the application developer has to deal with , a convenience GstPipeline has been made available specifically for Timelines : GESTimelinePipeline.

### Timeline layers

The layers are the end-user visible part of GES.

### Timeline Tracks

The tracks are the GStreamer-level components of a Timeline. They are a 1-to-1 relationship to the output streams.