The goal of the GstPlay library is to ease the integration of multimedia playback features in applications. Thus, if you need to build a media player from the ground-up, GstPlay provides the features you will most likely need. An example player is available in gst-examples/playback/player/gst-play/. Internally the GstPlay makes use of the `playbin3` element. The legacy `playbin2` can be selected if the `GST_PLAY_USE_PLAYBIN3=0` environment variable has been set. **Important note**: If your application relies on the GstBus to get notifications from GstPlay, you need to add some explicit clean-up code in order to prevent the GstPlay object from leaking. See below for the details. If you use the GstPlaySignalAdapter, no special clean-up is required. When the GstPlaySignalAdapter is not used, the GstBus owned by GstPlay should be set to flushing state before any attempt to drop the last reference of the GstPlay object. An example in C: ```c ... GstBus *bus = gst_play_get_message_bus (player); gst_bus_set_flushing (bus, TRUE); gst_object_unref (bus); gst_object_unref (player); ``` The messages managed by the player contain a reference to itself, and if the bus watch is just removed together with dropping the player then the bus will simply keep them around forever (and the bus never goes away because the player has a strong reference to it, so there's a reference cycle as long as there are messages). Setting the bus to flushing state forces it to get rid of its queued messages, thus breaking any possible reference cycle. Creates a new #GstPlay instance. Video is going to be rendered by @video_renderer, or if %NULL is provided no special video set up will be done and some default handling will be performed. This also initializes GStreamer via `gst_init()` on the first call if this didn't happen before. a new #GstPlay instance GstPlayVideoRenderer to use %TRUE if pipeline dumps are included in #GstPlay error message details. a #GstPlay configuration current position update interval in milliseconds a #GstPlay configuration %TRUE if accurate seeking is enabled a #GstPlay configuration Return the user agent which has been configured using gst_play_config_set_user_agent() if any. the configured agent, or %NULL a #GstPlay configuration When enabled, the error message emitted by #GstPlay will include a pipeline dump (in Graphviz DOT format) in the error details #GstStructure. The field name is `pipeline-dump`. This option is disabled by default. a #GstPlay configuration Include pipeline dumps in error details, or not. Set desired interval in milliseconds between two position-updated messages. Pass 0 to stop updating the position. a #GstPlay configuration interval in ms Enable or disable accurate seeking. When enabled, elements will try harder to seek as accurately as possible to the requested seek position. Generally it will be slower especially for formats that don't have any indexes or timestamp markers in the stream. If accurate seeking is disabled, elements will seek as close as the request position without slowing down seeking too much. Accurate seeking is disabled by default. a #GstPlay configuration accurate seek or not Set the user agent to pass to the server if @play needs to connect to a server during playback. This is typically used when playing HTTP or RTSP streams. a #GstPlay configuration the string to use as user agent A #GList of matching #GstPlayAudioInfo. a #GstPlayMediaInfo A #GList of matching #GstPlaySubtitleInfo. a #GstPlayMediaInfo A #GList of matching #GstPlayVideoInfo. a #GstPlayMediaInfo A #gboolean indicating whether the passed message represents a #GstPlay message or not. A #GstMessage Frees a %NULL terminated array of #GstPlayVisualization. a %NULL terminated array of #GstPlayVisualization to free a %NULL terminated array containing all available visualizations. Use gst_play_visualizations_free() after usage. Retrieve the current value of audio-video-offset property The current value of audio-video-offset in nanoseconds #GstPlay instance Retrieve the current value of the indicated @type. The current value of @type, between [0,1]. In case of error -1 is returned. #GstPlay instance #GstPlayColorBalanceType Get a copy of the current configuration of the play. This configuration can either be modified and used for the gst_play_set_config() call or it must be freed after usage. a copy of the current configuration of @play. Use gst_structure_free() after usage or gst_play_set_config(). #GstPlay instance A Function to get current audio #GstPlayAudioInfo instance. current audio track. The caller should free it with g_object_unref() #GstPlay instance A Function to get current subtitle #GstPlaySubtitleInfo instance. current subtitle track. The caller should free it with g_object_unref() #GstPlay instance A Function to get current video #GstPlayVideoInfo instance. current video track. The caller should free it with g_object_unref() #GstPlay instance Name of the currently enabled visualization. g_free() after usage. #GstPlay instance Retrieves the duration of the media stream that self represents. the duration of the currently-playing media stream, in nanoseconds. #GstPlay instance A Function to get the current media info #GstPlayMediaInfo instance. media info instance. The caller should free it with g_object_unref() #GstPlay instance GstPlay API exposes a #GstBus instance which purpose is to provide data structures representing play-internal events in form of #GstMessage<!-- -->s of type GST_MESSAGE_APPLICATION. Each message carries a "play-message" field of type #GstPlayMessage. Further fields of the message data are specific to each possible value of that enumeration. Applications can consume the messages asynchronously within their own event-loop / UI-thread etc. Note that in case the application does not consume the messages, the bus will accumulate these internally and eventually fill memory. To avoid that, the bus has to be set "flushing". The play message bus instance #GstPlay instance Retrieve the current value of the indicated @type. The current value of @type, Default: 0x00000000 "none #GstPlay instance Retrieve the current value of the indicated @type. The current value of @type, Default: -1 "none" #GstPlay instance %TRUE if the currently-playing stream is muted. #GstPlay instance The internal playbin instance. The caller should free it with g_object_unref() #GstPlay instance the absolute position time, in nanoseconds, of the currently-playing stream. #GstPlay instance current playback rate #GstPlay instance Current subtitle URI URI of the current external subtitle. g_free() after usage. #GstPlay instance Retrieve the current value of subtitle-video-offset property The current value of subtitle-video-offset in nanoseconds #GstPlay instance Gets the URI of the currently-playing stream. a string containing the URI of the currently-playing stream. g_free() after usage. #GstPlay instance Get a snapshot of the currently selected video stream, if any. The format can be selected with @format and optional configuration is possible with @config. Currently supported settings are: - width, height of type G_TYPE_INT - pixel-aspect-ratio of type GST_TYPE_FRACTION Except for GST_PLAY_THUMBNAIL_RAW_NATIVE format, if no config is set, pixel-aspect-ratio would be 1/1 Current video snapshot sample or %NULL on failure #GstPlay instance output format of the video snapshot Additional configuration Returns the current volume level, as a percentage between 0 and 1. the volume as percentage between 0 and 1. #GstPlay instance Checks whether the @play has color balance support available. %TRUE if @play has color balance support. Otherwise, %FALSE. #GstPlay instance Pauses the current stream. #GstPlay instance Request to play the loaded stream. #GstPlay instance Seeks the currently-playing stream to the absolute @position time in nanoseconds. #GstPlay instance position to seek in nanoseconds %TRUE or %FALSE Sets the audio track @stream_index. #GstPlay instance stream index Enable or disable the current audio track. #GstPlay instance TRUE or FALSE Sets audio-video-offset property by value of @offset #GstPlay instance #gint64 in nanoseconds Sets the current value of the indicated channel @type to the passed value. #GstPlay instance #GstPlayColorBalanceType The new value for the @type, ranged [0,1] Set the configuration of the play. If the play is already configured, and the configuration hasn't changed, this function will return %TRUE. If the play is not in the GST_PLAY_STATE_STOPPED, this method will return %FALSE and active configuration will remain. @config is a #GstStructure that contains the configuration parameters for the play. This function takes ownership of @config. %TRUE when the configuration could be set. #GstPlay instance a #GstStructure Sets the current value of the indicated mode @type to the passed value. #GstPlay instance The new value for the @type Sets the current value of the indicated mode @type to the passed value. #GstPlay instance The new value for the @type %TRUE if the currently-playing stream should be muted. #GstPlay instance Mute state the should be set Playback at specified rate #GstPlay instance playback rate %TRUE or %FALSE Sets the subtitle stack @stream_index. #GstPlay instance stream index Enable or disable the current subtitle track. #GstPlay instance TRUE or FALSE Sets the external subtitle URI. This should be combined with a call to gst_play_set_subtitle_track_enabled(@play, TRUE) so the subtitles are actually rendered. #GstPlay instance subtitle URI Sets subtitle-video-offset property by value of @offset #GstPlay instance #gint64 in nanoseconds Sets the next URI to play. #GstPlay instance next URI to play. %TRUE or %FALSE Sets the video track @stream_index. #GstPlay instance stream index Enable or disable the current video track. #GstPlay instance TRUE or FALSE %TRUE if the visualization was set correctly. Otherwise, %FALSE. #GstPlay instance visualization element obtained from #gst_play_visualizations_get() Enable or disable the visualization. #GstPlay instance TRUE or FALSE Sets the volume level of the stream as a percentage between 0 and 1. #GstPlay instance the new volume level, as a percentage between 0 and 1 Stops playing the current stream and resets to the first position in the stream. #GstPlay instance #GstPlayStreamInfo specific to audio streams. the audio bitrate in #GstPlayAudioInfo or -1 if unknown. a #GstPlayAudioInfo the number of audio channels in #GstPlayAudioInfo or 0 if unknown. a #GstPlayAudioInfo the language of the stream, or %NULL if unknown. a #GstPlayAudioInfo the audio maximum bitrate in #GstPlayAudioInfo or -1 if unknown. a #GstPlayAudioInfo the audio sample rate in #GstPlayAudioInfo or 0 if unknown. a #GstPlayAudioInfo hue or color balance. brightness or black level. color saturation or chroma gain. contrast or luma gain. Gets a string representing the given color balance type. a string with the name of the color balance type. a #GstPlayColorBalanceType generic error. Gets a string representing the given error. a string with the given error. a #GstPlayError Structure containing the media information of a URI. A #GList of matching #GstPlayAudioInfo. a #GstPlayMediaInfo the container format or %NULL if unknown. a #GstPlayMediaInfo duration of the media. a #GstPlayMediaInfo Function to get the image (or preview-image) stored in taglist. Application can use `gst_sample_*_()` API's to get caps, buffer etc. GstSample or %NULL. a #GstPlayMediaInfo number of audio streams. a #GstPlayMediaInfo number of total streams. a #GstPlayMediaInfo number of subtitle streams. a #GstPlayMediaInfo number of video streams. a #GstPlayMediaInfo A #GList of matching #GstPlayStreamInfo. a #GstPlayMediaInfo A #GList of matching #GstPlaySubtitleInfo. a #GstPlayMediaInfo the tags contained in media info. a #GstPlayMediaInfo the media title or %NULL if unknown. a #GstPlayMediaInfo the URI associated with #GstPlayMediaInfo. a #GstPlayMediaInfo A #GList of matching #GstPlayVideoInfo. a #GstPlayMediaInfo %TRUE if the media is live. a #GstPlayMediaInfo %TRUE if the media is seekable. a #GstPlayMediaInfo Types of messages that will be posted on the play API bus. See also #gst_play_get_message_bus() Source element was initalized for set URI Sink position changed Duration of stream changed State changed, see #GstPlayState Pipeline is in buffering state, message contains the percentage value of the decoding buffer Sink has received EOS Message contains an error Message contains an error Video sink received format in different dimensions than before A media-info property has changed, message contains current #GstPlayMediaInfo The volume of the audio ouput has changed Audio muting flag has been toggled Any pending seeking operation has been completed a string with the name of the message. a #GstPlayMessage Parse the given buffering @msg and extract the corresponding value A #GstMessage the resulting buffering percent Parse the given buffering @msg and extract the corresponding value Use gst_play_message_parse_buffering(). A #GstMessage the resulting buffering percent Parse the given duration-changed @msg and extract the corresponding #GstClockTime A #GstMessage the resulting duration Parse the given duration-changed @msg and extract the corresponding #GstClockTime Use gst_play_message_parse_duration_changed(). A #GstMessage the resulting duration Parse the given error @msg and extract the corresponding #GError A #GstMessage the resulting error A #GstStructure containing additional details about the error Parse the given media-info-updated @msg and extract the corresponding media information A #GstMessage the resulting media info Parse the given mute-changed @msg and extract the corresponding audio muted state A #GstMessage the resulting audio muted state Parse the given position-updated @msg and extract the corresponding #GstClockTime A #GstMessage the resulting position Parse the given seek-done @msg and extract the corresponding #GstClockTime A #GstMessage the resulting position Parse the given state-changed @msg and extract the corresponding #GstPlayState A #GstMessage the resulting play state Parse the given @msg and extract its #GstPlayMessage type. A #GstMessage the resulting message type Parse the given uri-loaded @msg and extract the corresponding value A #GstMessage the resulting URI Parse the given video-dimensions-changed @msg and extract the corresponding video dimensions A #GstMessage the resulting video width the resulting video height Parse the given volume-changed @msg and extract the corresponding audio volume A #GstMessage the resulting audio volume Parse the given warning @msg and extract the corresponding #GError A #GstMessage the resulting warning A #GstStructure containing additional details about the warning A bus-watching #GSource will be created and attached to the the thread-default #GMainContext. The attached callback will emit the corresponding signal for the message received. Matching signals for play messages from the bus will be emitted by it on the created adapter object. A new #GstPlaySignalAdapter to connect signal handlers to. #GstPlay instance to emit signals for. Create an adapter that synchronously emits its signals, from the thread in which the messages have been posted. A new #GstPlaySignalAdapter to connect signal handlers to. #GstPlay instance to emit signals for. A bus-watching #GSource will be created and attached to the @context. The attached callback will emit the corresponding signal for the message received. Matching signals for play messages from the bus will be emitted by it on the created adapter object. A new #GstPlaySignalAdapter to connect signal handlers to. #GstPlay instance to emit signals for. A #GMainContext on which the main-loop will process play bus messages on. The #GstPlay owning this signal adapter. #GstPlaySignalAdapter instance Emitted on errors. The error Additional error details Emitted on warnings. The warning Additional warning details raw native format. raw xRGB format. raw BGRx format. jpeg format. png format. the play is stopped. the play is buffering. the play is paused. the play is currently playing a stream. Gets a string representing the given state. a string with the name of the state. a #GstPlayState Base structure for information concerning a media stream. Depending on the stream type, one can find more media-specific information in #GstPlayVideoInfo, #GstPlayAudioInfo, #GstPlaySubtitleInfo. the #GstCaps of the stream or %NULL if unknown. a #GstPlayStreamInfo A string describing codec used in #GstPlayStreamInfo. codec string or %NULL on unknown. a #GstPlayStreamInfo Function to get stream index from #GstPlayStreamInfo instance or -1 if unknown. the stream index of this stream. a #GstPlayStreamInfo Function to return human readable name for the stream type of the given @info (ex: "audio", "video", "subtitle") a human readable name a #GstPlayStreamInfo the tags contained in this stream. a #GstPlayStreamInfo #GstPlayStreamInfo specific to subtitle streams. the language of the stream, or %NULL if unknown. a #GstPlaySubtitleInfo #GstPlayStreamInfo specific to video streams. the current bitrate of video in #GstPlayVideoInfo or -1 if unknown. a #GstPlayVideoInfo a #GstPlayVideoInfo Numerator of frame rate Denominator of frame rate the height of video in #GstPlayVideoInfo or -1 if unknown. a #GstPlayVideoInfo the maximum bitrate of video in #GstPlayVideoInfo or -1 if unknown. a #GstPlayVideoInfo Returns the pixel aspect ratio in @par_n and @par_d a #GstPlayVideoInfo numerator denominator the width of video in #GstPlayVideoInfo or -1 if unknown. a #GstPlayVideoInfo Window handle to use or %NULL Window handle to use or %NULL the custom video_sink element to be set for the video renderer Tell an overlay that it has been exposed. This will redraw the current frame in the drawable even if the pipeline is PAUSED. a #GstPlayVideoOverlayVideoRenderer instance. Return the currently configured render rectangle. See gst_play_video_overlay_video_renderer_set_render_rectangle() for details. a #GstPlayVideoOverlayVideoRenderer instance the horizontal offset of the render area inside the window the vertical offset of the render area inside the window the width of the render area inside the window the height of the render area inside the window The currently set, platform specific window handle #GstPlayVideoRenderer instance Configure a subregion as a video target within the window set by gst_play_video_overlay_video_renderer_set_window_handle(). If this is not used or not supported the video will fill the area of the window set as the overlay to 100%. By specifying the rectangle, the video can be overlaid to a specific region of that window only. After setting the new rectangle one should call gst_play_video_overlay_video_renderer_expose() to force a redraw. To unset the region pass -1 for the @width and @height parameters. This method is needed for non fullscreen video overlay in UI toolkits that do not support subwindows. a #GstPlayVideoOverlayVideoRenderer instance the horizontal offset of the render area inside the window the vertical offset of the render area inside the window the width of the render area inside the window the height of the render area inside the window Sets the platform specific window handle into which the video should be rendered #GstPlayVideoRenderer instance handle referencing to the platform specific window A #GstPlayVisualization descriptor. name of the visualization. description of the visualization. Makes a copy of the #GstPlayVisualization. The result must be freed using gst_play_visualization_free(). an allocated copy of @vis. #GstPlayVisualization instance Frees a #GstPlayVisualization. #GstPlayVisualization instance Gets a string representing the given color balance type. a string with the name of the color balance type. a #GstPlayColorBalanceType Gets a string representing the given error. a string with the given error. a #GstPlayError a string with the name of the message. a #GstPlayMessage Parse the given buffering @msg and extract the corresponding value A #GstMessage the resulting buffering percent Parse the given buffering @msg and extract the corresponding value Use gst_play_message_parse_buffering(). A #GstMessage the resulting buffering percent Parse the given duration-changed @msg and extract the corresponding #GstClockTime A #GstMessage the resulting duration Parse the given duration-changed @msg and extract the corresponding #GstClockTime Use gst_play_message_parse_duration_changed(). A #GstMessage the resulting duration Parse the given error @msg and extract the corresponding #GError A #GstMessage the resulting error A #GstStructure containing additional details about the error Parse the given media-info-updated @msg and extract the corresponding media information A #GstMessage the resulting media info Parse the given mute-changed @msg and extract the corresponding audio muted state A #GstMessage the resulting audio muted state Parse the given position-updated @msg and extract the corresponding #GstClockTime A #GstMessage the resulting position Parse the given seek-done @msg and extract the corresponding #GstClockTime A #GstMessage the resulting position Parse the given state-changed @msg and extract the corresponding #GstPlayState A #GstMessage the resulting play state Parse the given @msg and extract its #GstPlayMessage type. A #GstMessage the resulting message type Parse the given uri-loaded @msg and extract the corresponding value A #GstMessage the resulting URI Parse the given video-dimensions-changed @msg and extract the corresponding video dimensions A #GstMessage the resulting video width the resulting video height Parse the given volume-changed @msg and extract the corresponding audio volume A #GstMessage the resulting audio volume Parse the given warning @msg and extract the corresponding #GError A #GstMessage the resulting warning A #GstStructure containing additional details about the warning Gets a string representing the given state. a string with the name of the state. a #GstPlayState