summaryrefslogtreecommitdiff
path: root/manual-gstreamer.md
blob: 3e51284bb36a799b5edf313c912bf86ad9b93254 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
---
title: What is GStreamer?
...

# What is GStreamer?

GStreamer is a framework for creating streaming media applications. The
fundamental design comes from the video pipeline at Oregon Graduate
Institute, as well as some ideas from DirectShow.

GStreamer's development framework makes it possible to write any type of
streaming multimedia application. The GStreamer framework is designed to
make it easy to write applications that handle audio or video or both.
It isn't restricted to audio and video, and can process any kind of data
flow. The pipeline design is made to have little overhead above what the
applied filters induce. This makes GStreamer a good framework for
designing even high-end audio applications which put high demands on
latency.

One of the most obvious uses of GStreamer is using it to build a media
player. GStreamer already includes components for building a media
player that can support a very wide variety of formats, including MP3,
Ogg/Vorbis, MPEG-1/2, AVI, Quicktime, mod, and more. GStreamer, however,
is much more than just another media player. Its main advantages are
that the pluggable components can be mixed and matched into arbitrary
pipelines so that it's possible to write a full-fledged video or audio
editing application.

The framework is based on plugins that will provide the various codec
and other functionality. The plugins can be linked and arranged in a
pipeline. This pipeline defines the flow of the data. Pipelines can also
be edited with a GUI editor and saved as XML so that pipeline libraries
can be made with a minimum of effort.

The GStreamer core function is to provide a framework for plugins, data
flow and media type handling/negotiation. It also provides an API to
write applications using the various plugins.

Specifically, GStreamer provides

  - an API for multimedia applications

  - a plugin architecture

  - a pipeline architecture

  - a mechanism for media type handling/negotiation

  - a mechanism for synchronization

  - over 250 plug-ins providing more than 1000 elements

  - a set of tools

GStreamer plug-ins could be classified into

  - protocols handling

  - sources: for audio and video (involves protocol plugins)

  - formats: parsers, formaters, muxers, demuxers, metadata, subtitles

  - codecs: coders and decoders

  - filters: converters, mixers, effects, ...

  - sinks: for audio and video (involves protocol plugins)

![GStreamer overview](images/gstreamer-overview.png "fig:")

GStreamer is packaged into

  - gstreamer: the core package

  - gst-plugins-base: an essential exemplary set of elements

  - gst-plugins-good: a set of good-quality plug-ins under LGPL

  - gst-plugins-ugly: a set of good-quality plug-ins that might pose
    distribution problems

  - gst-plugins-bad: a set of plug-ins that need more quality

  - gst-libav: a set of plug-ins that wrap libav for decoding and
    encoding

  - a few others packages