mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 04:01:08 +00:00
269 lines
9.2 KiB
XML
269 lines
9.2 KiB
XML
<?xml version='1.0'?>
|
|
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
|
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
|
|
<!ENTITY % image-entities SYSTEM "image.entities">
|
|
%image-entities;
|
|
<!ENTITY % version-entities SYSTEM "version.entities">
|
|
%version-entities;
|
|
<!ENTITY % url-entities SYSTEM "url.entities">
|
|
%url-entities;
|
|
|
|
<!ENTITY EXAFOOT "
|
|
<footnote>
|
|
<para>
|
|
The code for this example is automatically extracted from
|
|
the documentation and built under <filename>examples/manual</filename>
|
|
in the GStreamer tarball.
|
|
</para>
|
|
</footnote>
|
|
">
|
|
|
|
<!ENTITY TITLEPAGE SYSTEM "titlepage.xml">
|
|
|
|
<!-- Part 1: Overview -->
|
|
<!ENTITY INTRO SYSTEM "intro-preface.xml">
|
|
|
|
<!ENTITY GSTREAMER SYSTEM "intro-gstreamer.xml">
|
|
<!ENTITY MOTIVATION SYSTEM "intro-motivation.xml">
|
|
<!ENTITY CONCEPTS SYSTEM "intro-basics.xml">
|
|
|
|
<!-- Part 2: Basic Concepts -->
|
|
<!ENTITY INIT SYSTEM "basics-init.xml">
|
|
<!ENTITY ELEMENTS SYSTEM "basics-elements.xml">
|
|
<!ENTITY BINS SYSTEM "basics-bins.xml">
|
|
<!ENTITY BUS SYSTEM "basics-bus.xml">
|
|
<!ENTITY PADS SYSTEM "basics-pads.xml">
|
|
<!ENTITY DATA SYSTEM "basics-data.xml">
|
|
<!ENTITY HELLOWORLD SYSTEM "basics-helloworld.xml">
|
|
|
|
<!-- Part 3: Advanced Concepts -->
|
|
<!ENTITY QUERYEVENTS SYSTEM "advanced-position.xml">
|
|
<!ENTITY METADATA SYSTEM "advanced-metadata.xml">
|
|
<!ENTITY INTERFACES SYSTEM "advanced-interfaces.xml">
|
|
<!ENTITY CLOCKS SYSTEM "advanced-clocks.xml">
|
|
<!ENTITY BUFFERING SYSTEM "advanced-buffering.xml">
|
|
<!ENTITY DPARAMS SYSTEM "advanced-dparams.xml">
|
|
<!ENTITY THREADS SYSTEM "advanced-threads.xml">
|
|
<!ENTITY AUTOPLUGGING SYSTEM "advanced-autoplugging.xml">
|
|
<!ENTITY DATAACCESS SYSTEM "advanced-dataaccess.xml">
|
|
|
|
<!-- Part 4: Higher-level interfaces -->
|
|
<!ENTITY PLAYBACK SYSTEM "highlevel-playback.xml">
|
|
|
|
<!-- Appendices -->
|
|
<!ENTITY PROGRAMS SYSTEM "appendix-programs.xml">
|
|
<!ENTITY COMPILING SYSTEM "appendix-compiling.xml">
|
|
<!ENTITY CHECKLIST SYSTEM "appendix-checklist.xml">
|
|
<!ENTITY PORTING SYSTEM "appendix-porting.xml">
|
|
<!ENTITY INTEGRATION SYSTEM "appendix-integration.xml">
|
|
<!ENTITY LICENSING SYSTEM "appendix-licensing.xml">
|
|
<!ENTITY QUOTES SYSTEM "appendix-quotes.xml">
|
|
|
|
<!ENTITY GStreamer "<application>GStreamer</application>">
|
|
<!ENTITY GstPWG "<emphasis>GStreamer Plugin Writer's Guide</emphasis>">
|
|
]>
|
|
|
|
<book id="index">
|
|
&TITLEPAGE;
|
|
|
|
<!-- ############# Introduction ############### -->
|
|
|
|
<preface><title>Foreword</title>
|
|
<para><!-- synchronize with PWG -->
|
|
&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.
|
|
</para>
|
|
<para>
|
|
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.).
|
|
</para>
|
|
</preface>
|
|
|
|
|
|
<preface><title>Introduction</title>
|
|
|
|
&INTRO;
|
|
|
|
</preface>
|
|
|
|
<!-- ############# Overview - part ############### -->
|
|
|
|
<part id="part-introduction">
|
|
<title>About GStreamer</title>
|
|
<partintro>
|
|
<para>
|
|
This part gives you an overview of the technologies described in
|
|
this book.
|
|
</para>
|
|
</partintro>
|
|
|
|
&GSTREAMER;
|
|
&MOTIVATION;
|
|
&CONCEPTS;
|
|
|
|
</part>
|
|
|
|
<!-- ############ Basic concepts - part ############# -->
|
|
|
|
<part id="part-building">
|
|
<title>Building an Application</title>
|
|
<partintro>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
</partintro>
|
|
|
|
&INIT;
|
|
&ELEMENTS;
|
|
&BINS;
|
|
&BUS;
|
|
&PADS;
|
|
&DATA;
|
|
&HELLOWORLD;
|
|
|
|
</part>
|
|
|
|
<!-- ############ Advanced GStreamer - part ############# -->
|
|
|
|
<part id="part-advanced">
|
|
<title>Advanced &GStreamer; concepts</title>
|
|
<partintro>
|
|
<para>
|
|
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 <emphasis>simple</emphasis> 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;.
|
|
</para>
|
|
<para>
|
|
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.
|
|
</para>
|
|
</partintro>
|
|
|
|
&QUERYEVENTS;
|
|
&METADATA;
|
|
&INTERFACES;
|
|
&CLOCKS;
|
|
&BUFFERING;
|
|
&DPARAMS;
|
|
&THREADS;
|
|
&AUTOPLUGGING;
|
|
&DATAACCESS;
|
|
|
|
</part>
|
|
|
|
<!-- ############ Higher-level APIs in GStreamer - part ############# -->
|
|
|
|
<part id="part-highlevel">
|
|
<title>Higher-level interfaces for &GStreamer; applications</title>
|
|
<partintro>
|
|
<para>
|
|
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 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.
|
|
</para>
|
|
</partintro>
|
|
|
|
&PLAYBACK;
|
|
|
|
</part>
|
|
|
|
<!-- ############ Appendices - part ############# -->
|
|
|
|
<part id="part-appendices">
|
|
<title>Appendices</title>
|
|
<partintro>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
In addition, we also provide a porting guide which will explain
|
|
easily how to port &GStreamer;-0.10 applications to &GStreamer;-1.0.
|
|
</para>
|
|
</partintro>
|
|
|
|
<!--
|
|
Idea:
|
|
* Debugging and error handling
|
|
- 'error' signal in pipelines
|
|
- checking return values and how to handle them
|
|
- using signals for pipeline states
|
|
- gst-debug
|
|
- programs
|
|
* Desktop integration
|
|
- Linux/UNIX
|
|
. {x,xv}imagesink
|
|
. {oss,alsa}sink
|
|
. {v4l,v4l2,oss,alsa}src
|
|
- GNOME
|
|
. GConf ({video,audio}{src,sink})
|
|
. gnomevfssrc, gnomevfssink
|
|
. popt
|
|
. app examples (RB, Totem, gnome-media, ...)
|
|
- KDE
|
|
. kiosrc
|
|
. app examples (JuK, AmaroK)
|
|
. ask Scott/Mark
|
|
- Mac OS X
|
|
. native video/audio sink
|
|
- Windows
|
|
. build etc.
|
|
* Quotes from devs
|
|
- table please...
|
|
-->
|
|
|
|
&PROGRAMS;
|
|
&COMPILING;
|
|
&CHECKLIST;
|
|
&PORTING;
|
|
&INTEGRATION;
|
|
&LICENSING;
|
|
"ES;
|
|
|
|
</part>
|
|
</book>
|