| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | |
| <html> | |
| <head> | |
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | |
| <title>playbin3: GStreamer Base Plugins 1.0 Plugins Reference Manual</title> | |
| <meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> | |
| <link rel="home" href="index.html" title="GStreamer Base Plugins 1.0 Plugins Reference Manual"> | |
| <link rel="up" href="ch01.html" title="gst-plugins-base Elements"> | |
| <link rel="prev" href="gst-plugins-base-plugins-playbin.html" title="playbin"> | |
| <link rel="next" href="gst-plugins-base-plugins-playsink.html" title="playsink"> | |
| <meta name="generator" content="GTK-Doc V1.25 (XML mode)"> | |
| <link rel="stylesheet" href="style.css" type="text/css"> | |
| </head> | |
| <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> | |
| <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle"> | |
| <td width="100%" align="left" class="shortcuts"> | |
| <a href="#" class="shortcut">Top</a><span id="nav_description"> <span class="dim">|</span> | |
| <a href="#gst-plugins-base-plugins-playbin3.description" class="shortcut">Description</a></span> | |
| </td> | |
| <td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td> | |
| <td><a accesskey="u" href="ch01.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td> | |
| <td><a accesskey="p" href="gst-plugins-base-plugins-playbin.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td> | |
| <td><a accesskey="n" href="gst-plugins-base-plugins-playsink.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td> | |
| </tr></table> | |
| <div class="refentry"> | |
| <a name="gst-plugins-base-plugins-playbin3"></a><div class="titlepage"></div> | |
| <div class="refnamediv"><table width="100%"><tr> | |
| <td valign="top"> | |
| <h2><span class="refentrytitle"><a name="gst-plugins-base-plugins-playbin3.top_of_page"></a>playbin3</span></h2> | |
| <p>playbin3</p> | |
| </td> | |
| <td class="gallery_image" valign="top" align="right"></td> | |
| </tr></table></div> | |
| <div class="refsect1"> | |
| <a name="gst-plugins-base-plugins-playbin3.description"></a><h2>Description</h2> | |
| <p>playbin3 provides a stand-alone everything-in-one abstraction for an | |
| audio and/or video player. It differs from the previous playbin (playbin2) | |
| by supporting publication and selection of available streams via the | |
| <a href="/usr/share/gtk-doc/html/gstreamer-1.0gstreamer-GstStreamCollection.html#GstStreamCollection"><span class="type">GstStreamCollection</span></a> message and <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstEvent.html#GST-EVENT-SELECT-STREAMS:CAPS"><span class="type">GST_EVENT_SELECT_STREAMS</span></a> event API.</p> | |
| <p><span class="emphasis"><em>playbin3 is still experimental API and a technology preview. | |
| Its behaviour and exposed API is subject to change.</em></span></p> | |
| <p>playbin3 can handle both audio and video files and features</p> | |
| <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> | |
| <li class="listitem"> | |
| automatic file type recognition and based on that automatic | |
| selection and usage of the right audio/video/subtitle demuxers/decoders | |
| </li> | |
| <li class="listitem"> | |
| auxilliary files - such as external subtitles and audio tracks | |
| </li> | |
| <li class="listitem"> | |
| visualisations for audio files | |
| </li> | |
| <li class="listitem"> | |
| subtitle support for video files. Subtitles can be store in external | |
| files. | |
| </li> | |
| <li class="listitem"> | |
| stream selection between different video/audio/subtitles streams | |
| </li> | |
| <li class="listitem"> | |
| meta info (tag) extraction | |
| </li> | |
| <li class="listitem"> | |
| easy access to the last video sample | |
| </li> | |
| <li class="listitem"> | |
| buffering when playing streams over a network | |
| </li> | |
| <li class="listitem"> | |
| volume control with mute option | |
| </li> | |
| </ul></div> | |
| <div class="refsect2"> | |
| <a name="id-1.2.34.3.6"></a><h3>Usage</h3> | |
| <p> | |
| A playbin element can be created just like any other element using | |
| <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElementFactory.html#gst-element-factory-make"><code class="function">gst_element_factory_make()</code></a>. The file/URI to play should be set via the <span class="type">“uri”</span> | |
| property. This must be an absolute URI, relative file paths are not allowed. | |
| Example URIs are file:///home/joe/movie.avi or http://www.joedoe.com/foo.ogg | |
| Playbin3 is a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstPipeline.html#GstPipeline-struct"><span class="type">GstPipeline</span></a>. It will notify the application of everything | |
| that's happening (errors, end of stream, tags found, state changes, etc.) | |
| by posting messages on its <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBus.html#GstBus-struct"><span class="type">GstBus</span></a>. The application needs to watch the | |
| bus. | |
| Playback can be initiated by setting the element to PLAYING state using | |
| <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#gst-element-set-state"><code class="function">gst_element_set_state()</code></a>. Note that the state change will take place in | |
| the background in a separate thread, when the function returns playback | |
| is probably not happening yet and any errors might not have occured yet. | |
| Applications using playbin3 should ideally be written to deal with things | |
| completely asynchroneous. | |
| When playback has finished (an EOS message has been received on the bus) | |
| or an error has occured (an ERROR message has been received on the bus) or | |
| the user wants to play a different track, playbin3 should be set back to | |
| READY or NULL state, then the <span class="type">“uri”</span> property should be set to the | |
| new location and then playbin3 be set to PLAYING state again. | |
| Seeking can be done using <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#gst-element-seek-simple"><code class="function">gst_element_seek_simple()</code></a> or <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#gst-element-seek"><code class="function">gst_element_seek()</code></a> | |
| on the playbin3 element. Again, the seek will not be executed | |
| instantaneously, but will be done in a background thread. When the seek | |
| call returns the seek will most likely still be in process. An application | |
| may wait for the seek to finish (or fail) using <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#gst-element-get-state"><code class="function">gst_element_get_state()</code></a> with | |
| -1 as the timeout, but this will block the user interface and is not | |
| recommended at all. | |
| Applications may query the current position and duration of the stream | |
| via <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#gst-element-query-position"><code class="function">gst_element_query_position()</code></a> and <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElement.html#gst-element-query-duration"><code class="function">gst_element_query_duration()</code></a> and | |
| setting the format passed to GST_FORMAT_TIME. If the query was successful, | |
| the duration or position will have been returned in units of nanoseconds. | |
| </p> | |
| </div> | |
| <hr> | |
| <div class="refsect2"> | |
| <a name="id-1.2.34.3.7"></a><h3>Advanced Usage: specifying the audio and video sink</h3> | |
| <p> | |
| By default, if no audio sink or video sink has been specified via the | |
| <span class="type">“audio-sink”</span> or <span class="type">“video-sink”</span> property, playbin3 will use the autoaudiosink | |
| and autovideosink elements to find the first-best available output method. | |
| This should work in most cases, but is not always desirable. Often either | |
| the user or application might want to specify more explicitly what to use | |
| for audio and video output. | |
| If the application wants more control over how audio or video should be | |
| output, it may create the audio/video sink elements itself (for example | |
| using <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstElementFactory.html#gst-element-factory-make"><code class="function">gst_element_factory_make()</code></a>) and provide them to playbin3 using the | |
| <span class="type">“audio-sink”</span> or <span class="type">“video-sink”</span> property. | |
| GNOME-based applications, for example, will usually want to create | |
| gconfaudiosink and gconfvideosink elements and make playbin3 use those, | |
| so that output happens to whatever the user has configured in the GNOME | |
| Multimedia System Selector configuration dialog. | |
| The sink elements do not necessarily need to be ready-made sinks. It is | |
| possible to create container elements that look like a sink to playbin3, | |
| but in reality contain a number of custom elements linked together. This | |
| can be achieved by creating a <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstBin.html#GstBin-struct"><span class="type">GstBin</span></a> and putting elements in there and | |
| linking them, and then creating a sink <a href="/usr/share/gtk-doc/html/gstreamer-1.0GstGhostPad.html#GstGhostPad-struct"><span class="type">GstGhostPad</span></a> for the bin and pointing | |
| it to the sink pad of the first element within the bin. This can be used | |
| for a number of purposes, for example to force output to a particular | |
| format or to modify or observe the data before it is output. | |
| It is also possible to 'suppress' audio and/or video output by using | |
| 'fakesink' elements (or capture it from there using the fakesink element's | |
| "handoff" signal, which, nota bene, is fired from the streaming thread!). | |
| </p> | |
| </div> | |
| <hr> | |
| <div class="refsect2"> | |
| <a name="id-1.2.34.3.8"></a><h3>Retrieving Tags and Other Meta Data</h3> | |
| <p> | |
| Most of the common meta data (artist, title, etc.) can be retrieved by | |
| watching for TAG messages on the pipeline's bus (see above). | |
| Other more specific meta information like width/height/framerate of video | |
| streams or samplerate/number of channels of audio streams can be obtained | |
| from the negotiated caps on the sink pads of the sinks. | |
| </p> | |
| </div> | |
| <hr> | |
| <div class="refsect2"> | |
| <a name="id-1.2.34.3.9"></a><h3>Buffering</h3> | |
| Playbin3 handles buffering automatically for the most part, but applications | |
| need to handle parts of the buffering process as well. Whenever playbin3 is | |
| buffering, it will post BUFFERING messages on the bus with a percentage | |
| value that shows the progress of the buffering process. Applications need | |
| to set playbin3 to PLAYING or PAUSED state in response to these messages. | |
| They may also want to convey the buffering progress to the user in some | |
| way. Here is how to extract the percentage information from the message: | |
| <div class="informalexample"> | |
| <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> | |
| <tbody> | |
| <tr> | |
| <td class="listing_lines" align="right"><pre>1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
| 7 | |
| 8 | |
| 9</pre></td> | |
| <td class="listing_code"><pre class="programlisting"><span class="keyword">switch</span> <span class="gtkdoc opt">(</span><span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#GST-MESSAGE-TYPE:CAPS">GST_MESSAGE_TYPE</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">)) {</span> | |
| <span class="keyword">case</span> GST_MESSAGE_BUFFERING<span class="gtkdoc opt">: {</span> | |
| gint percent <span class="gtkdoc opt">=</span> <span class="number">0</span><span class="gtkdoc opt">;</span> | |
| <span class="function"><a href="/usr/share/gtk-doc/html/gstreamer-1.0GstMessage.html#gst-message-parse-buffering">gst_message_parse_buffering</a></span> <span class="gtkdoc opt">(</span>msg<span class="gtkdoc opt">, &</span>percent<span class="gtkdoc opt">);</span> | |
| <span class="function"><a href="/usr/share/gtk-doc/html/glibglib-Warnings-and-Assertions.html#g-print">g_print</a></span> <span class="gtkdoc opt">(</span><span class="string">"Buffering (%u percent done)"</span><span class="gtkdoc opt">,</span> percent<span class="gtkdoc opt">);</span> | |
| <span class="keyword">break</span><span class="gtkdoc opt">;</span> | |
| <span class="gtkdoc opt">}</span> | |
| <span class="gtkdoc opt">...</span> | |
| <span class="gtkdoc opt">}</span></pre></td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| </div> | |
| Note that applications should keep/set the pipeline in the PAUSED state when | |
| a BUFFERING message is received with a buffer percent value < 100 and set | |
| the pipeline back to PLAYING state when a BUFFERING message with a value | |
| of 100 percent is received (if PLAYING is the desired state, that is). | |
| </div> | |
| <hr> | |
| <div class="refsect2"> | |
| <a name="id-1.2.34.3.10"></a><h3>Embedding the video window in your application</h3> | |
| By default, playbin3 (or rather the video sinks used) will create their own | |
| window. Applications will usually want to force output to a window of their | |
| own, however. This can be done using the <a href="../html/gst-plugins-base-libs-gstvideooverlay.html#GstVideoOverlay-struct"><span class="type">GstVideoOverlay</span></a> interface, which most | |
| video sinks implement. See the documentation there for more details. | |
| </div> | |
| <hr> | |
| <div class="refsect2"> | |
| <a name="id-1.2.34.3.11"></a><h3>Specifying which CD/DVD device to use</h3> | |
| The device to use for CDs/DVDs needs to be set on the source element | |
| playbin3 creates before it is opened. The most generic way of doing this | |
| is to connect to playbin3's "source-setup" (or "notify::source") signal, | |
| which will be emitted by playbin3 when it has created the source element | |
| for a particular URI. In the signal callback you can check if the source | |
| element has a "device" property and set it appropriately. In some cases | |
| the device can also be set as part of the URI, but it depends on the | |
| elements involved if this will work or not. For example, for DVD menu | |
| playback, the following syntax might work (if the resindvd plugin is used): | |
| dvd://[/path/to/device] | |
| </div> | |
| <hr> | |
| <div class="refsect2"> | |
| <a name="id-1.2.34.3.12"></a><h3>Handling redirects</h3> | |
| <p> | |
| Some elements may post 'redirect' messages on the bus to tell the | |
| application to open another location. These are element messages containing | |
| a structure named 'redirect' along with a 'new-location' field of string | |
| type. The new location may be a relative or an absolute URI. Examples | |
| for such redirects can be found in many quicktime movie trailers. | |
| </p> | |
| </div> | |
| <hr> | |
| <div class="refsect2"> | |
| <a name="id-1.2.34.3.13"></a><h3>Examples</h3> | |
| <div class="informalexample"> | |
| <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> | |
| <tbody> | |
| <tr> | |
| <td class="listing_lines" align="right"><pre>1</pre></td> | |
| <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v playbin3 uri<span class="gtkdoc opt">=</span>file<span class="gtkdoc opt">:</span><span class="gtkdoc slc">///path/to/somefile.mp4</span></pre></td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| </div> | |
| This will play back the given AVI video file, given that the video and | |
| audio decoders required to decode the content are installed. Since no | |
| special audio sink or video sink is supplied (via playbin3's audio-sink or | |
| video-sink properties) playbin3 will try to find a suitable audio and | |
| video sink automatically using the autoaudiosink and autovideosink elements. | |
| <div class="informalexample"> | |
| <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> | |
| <tbody> | |
| <tr> | |
| <td class="listing_lines" align="right"><pre>1</pre></td> | |
| <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v playbin3 uri<span class="gtkdoc opt">=</span>cdda<span class="gtkdoc opt">:</span><span class="gtkdoc slc">//4</span></pre></td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| </div> | |
| This will play back track 4 on an audio CD in your disc drive (assuming | |
| the drive is detected automatically by the plugin). | |
| <div class="informalexample"> | |
| <table class="listing_frame" border="0" cellpadding="0" cellspacing="0"> | |
| <tbody> | |
| <tr> | |
| <td class="listing_lines" align="right"><pre>1</pre></td> | |
| <td class="listing_code"><pre class="programlisting">gst<span class="gtkdoc opt">-</span>launch<span class="gtkdoc opt">-</span><span class="number">1.0</span> <span class="gtkdoc opt">-</span>v playbin3 uri<span class="gtkdoc opt">=</span>dvd<span class="gtkdoc opt">:</span><span class="gtkdoc slc">//</span></pre></td> | |
| </tr> | |
| </tbody> | |
| </table> | |
| </div> | |
| This will play back the DVD in your disc drive (assuming | |
| the drive is detected automatically by the plugin). | |
| </div> | |
| <div class="refsynopsisdiv"> | |
| <h2>Synopsis</h2> | |
| <div class="refsect2"> | |
| <a name="id-1.2.34.3.14.1"></a><h3>Element Information</h3> | |
| <div class="variablelist"><table border="0" class="variablelist"> | |
| <colgroup> | |
| <col align="left" valign="top"> | |
| <col> | |
| </colgroup> | |
| <tbody> | |
| <tr> | |
| <td><p><span class="term">plugin</span></p></td> | |
| <td> | |
| <a class="link" href="gst-plugins-base-plugins-plugin-playback.html#plugin-playback">playback</a> | |
| </td> | |
| </tr> | |
| <tr> | |
| <td><p><span class="term">author</span></p></td> | |
| <td>Wim Taymans <wim.taymans@gmail.com></td> | |
| </tr> | |
| <tr> | |
| <td><p><span class="term">class</span></p></td> | |
| <td>Generic/Bin/Player</td> | |
| </tr> | |
| </tbody> | |
| </table></div> | |
| </div> | |
| <hr> | |
| <div class="refsect2"> | |
| <a name="id-1.2.34.3.14.2"></a><h3>Element Pads</h3> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="refsect1"> | |
| <a name="gst-plugins-base-plugins-playbin3.functions_details"></a><h2>Functions</h2> | |
| <p></p> | |
| </div> | |
| <div class="refsect1"> | |
| <a name="gst-plugins-base-plugins-playbin3.other_details"></a><h2>Types and Values</h2> | |
| </div> | |
| </div> | |
| <div class="footer"> | |
| <hr>Generated by GTK-Doc V1.25</div> | |
| </body> | |
| </html> |