Top | ![]() |
![]() |
![]() |
![]() |
GstElement * | audio-sink | Read / Write |
GstBuffer * | frame | Read |
gchar * | subtitle-font-desc | Write |
GstElement * | video-sink | Read / Write |
GstElement * | vis-plugin | Read / Write |
gdouble | volume | Read / Write |
guint | connection-speed | Read / Write |
GObject ╰── GstObject ╰── GstElement ╰── GstBin ╰── GstPipeline ╰── GstPlayBaseBin ╰── GstPlayBin
Playbin provides a stand-alone everything-in-one abstraction for an audio and/or video player.
It can handle both audio and video files and features
A playbin element can be created just like any other element using
gst_element_factory_make()
. The file/URI to play should be set via the “uri”
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
Playbin is a GstPipeline. It will notify the application of everything
that's happening (errors, end of stream, tags found, state changes, etc.)
by posting messages on its GstBus. The application needs to watch the
bus.
Playback can be initiated by setting the element to PLAYING state using
gst_element_set_state()
. 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 playbin 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, playbin should be set back to
READY or NULL state, then the “uri” property should be set to the
new location and then playbin be set to PLAYING state again.
Seeking can be done using gst_element_seek_simple()
or gst_element_seek()
on the playbin 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 gst_element_get_state()
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 gst_element_query_position()
and gst_element_query_duration()
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.
By default, if no audio sink or video sink has been specified via the
“audio-sink” or “video-sink” property, playbin 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 gst_element_factory_make()
) and provide them to playbin using the
“audio-sink” or “video-sink” property.
GNOME-based applications, for example, will usually want to create
gconfaudiosink and gconfvideosink elements and make playbin 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 playbin,
but in reality contain a number of custom elements linked together. This
can be achieved by creating a GstBin and putting elements in there and
linking them, and then creating a sink GstGhostPad 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!).
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
using the “stream-info” property, which will return a GList of
stream info objects, one for each stream. These are opaque objects that can
only be accessed via the standard GObject property interface, ie. g_object_get()
.
Each stream info object has the following properties:
Stream information from the “stream-info” property is best queried once playbin has changed into PAUSED or PLAYING state (which can be detected via a state-changed message on the GstBus where old_state=READY and new_state=PAUSED), since before that the list might not be complete yet or not contain all available information (like language-codes).
1 2 3 4 5 6 7 8 9 |
switch (GST_MESSAGE_TYPE (msg)) { case GST_MESSAGE_BUFFERING: { gint percent = 0; gst_message_parse_buffering (msg, &percent); g_print ("Buffering (%%u percent done)", percent); break; } ... } |
1 |
gst-launch -v playbin uri=file:///path/to/somefile.avi |
1 |
gst-launch -v playbin uri=cdda://4 |
1 |
gst-launch -v playbin uri=dvd://1 |
plugin |
playback |
author |
Wim Taymans <wim.taymans@gmail.com> |
class |
Generic/Bin/Player |
“audio-sink”
property“audio-sink” GstElement *
the audio output element to use (NULL = default sink).
Flags: Read / Write
“subtitle-font-desc”
property“subtitle-font-desc” gchar *
Pango font description of font to be used for subtitle rendering.
Flags: Write
Default value: NULL
“video-sink”
property“video-sink” GstElement *
the video output element to use (NULL = default sink).
Flags: Read / Write
“vis-plugin”
property“vis-plugin” GstElement *
the visualization element to use (NULL = none).
Flags: Read / Write
“volume”
property“volume” gdouble
Get or set the current audio stream volume. 1.0 means 100%, 0.0 means mute. This uses a linear volume scale.
Flags: Read / Write
Allowed values: [0,10]
Default value: 1
“connection-speed”
property“connection-speed” guint
Network connection speed in kbps (0 = unknown).
Flags: Read / Write
Default value: 0