| <?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>tests/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> |