# appsrc

The appsrc element can be used by applications to insert data into a GStreamer pipeline. Unlike most GStreamer elements, Appsrc provides external API functions.

For the documentation of the API, please see the

libgstapp section in the GStreamer Plugins Base Libraries documentation.

## Hierarchy

    GObject
        ╰──GInitiallyUnowned
            ╰──GstObject
                ╰──GstElement
                    ╰──GstBaseSrc
                        ╰──appsrc

## Implemented interfaces

    GstURIHandler

## Factory details

Authors: – David Schleef , Wim Taymans

Classification: – `Generic/Source`

Rank – none

Plugin – app

Package – GStreamer Base Plug-ins

## Pad Templates

### `src`

    ANY

Presence – always

Direction – src

Object type – GstPad

## Signals

### enough-data

    enough_data_callback (GstElement * appsrc,
                          gpointer udata)

    def enough_data_callback (appsrc, udata):
        #python callback for the 'enough-data' signal

    function enough_data_callback(appsrc: GstElement * appsrc, udata: gpointer udata): {
        // javascript callback for the 'enough-data' signal
    }

Signal that the source has enough data. It is recommended that the application stops calling push-buffer until the need-data signal is emitted again to avoid excessive buffer queueing.

Parameters:

`appsrc` –

the appsrc element that emitted the signal

`udata` –
No description available

Flags: Run Last

### need-data

    need_data_callback (GstElement * appsrc,
                        guint length,
                        gpointer udata)

    def need_data_callback (appsrc, length, udata):
        #python callback for the 'need-data' signal

    function need_data_callback(appsrc: GstElement * appsrc, length: guint length, udata: gpointer udata): {
        // javascript callback for the 'need-data' signal
    }

Signal that the source needs more data. In the callback or from another thread you should call push-buffer or end-of-stream.

length is just a hint and when it is set to -1, any number of bytes can be pushed into appsrc.

You can call push-buffer multiple times until the enough-data signal is fired.

Parameters:

`appsrc` –

the appsrc element that emitted the signal

`length` –

the amount of bytes needed.

`udata` –
No description available

Flags: Run Last

### seek-data

    gboolean
    seek_data_callback (GstElement * appsrc,
                        guint64 offset,
                        gpointer udata)

    def seek_data_callback (appsrc, offset, udata):
        #python callback for the 'seek-data' signal

    function seek_data_callback(appsrc: GstElement * appsrc, offset: guint64 offset, udata: gpointer udata): {
        // javascript callback for the 'seek-data' signal
    }

Seek to the given offset. The next push-buffer should produce buffers from the new offset. This callback is only called for seekable stream types.

Parameters:

`appsrc` –

the appsrc element that emitted the signal

`offset` –

the offset to seek to

`udata` –
No description available
Returns (gboolean) –

TRUE if the seek succeeded.

Flags: Run Last

## Action Signals

### end-of-stream

    g_signal_emit_by_name (appsrc, "end-of-stream", &ret);

    ret = appsrc.emit ("end-of-stream")

    let ret = appsrc.emit ("end-of-stream");

Notify appsrc that no more buffer are available.

Parameters:

`appsrc` (GstElement *) –

the appsrc

Returns (GstFlowReturn *) –
No description available

Flags: Run Last / Action

### push-buffer

    g_signal_emit_by_name (appsrc, "push-buffer", buffer, &ret);

    ret = appsrc.emit ("push-buffer", buffer)

    let ret = appsrc.emit ("push-buffer", buffer);

Adds a buffer to the queue of buffers that the appsrc element will push to its source pad.

This function does not take ownership of the buffer, but it takes a reference so the buffer can be unreffed at any time after calling this function.

When the block property is TRUE, this function can block until free space becomes available in the queue.

Parameters:

`appsrc` (GstElement *) –

the appsrc

`buffer` (GstBuffer *) –

a buffer to push

Returns (GstFlowReturn *) –
No description available

Flags: Run Last / Action

### push-buffer-list

    g_signal_emit_by_name (appsrc, "push-buffer-list", buffer_list, &ret);

    ret = appsrc.emit ("push-buffer-list", buffer_list)

    let ret = appsrc.emit ("push-buffer-list", buffer_list);

Adds a buffer list to the queue of buffers and buffer lists that the appsrc element will push to its source pad.

This function does not take ownership of the buffer list, but it takes a reference so the buffer list can be unreffed at any time after calling this function.

When the block property is TRUE, this function can block until free space becomes available in the queue.

Parameters:

`appsrc` (GstElement *) –

the appsrc

`buffer_list` (GstBufferList *) –

a buffer list to push

Returns (GstFlowReturn *) –
No description available

Flags: Run Last / Action

Since : 1.14

### push-sample

    g_signal_emit_by_name (appsrc, "push-sample", sample, &ret);

    ret = appsrc.emit ("push-sample", sample)

    let ret = appsrc.emit ("push-sample", sample);

Extract a buffer from the provided sample and adds the extracted buffer to the queue of buffers that the appsrc element will push to its source pad. This function set the appsrc caps based on the caps in the sample and reset the caps if they change. Only the caps and the buffer of the provided sample are used and not for example the segment in the sample.

This function does not take ownership of the sample, but it takes a reference so the sample can be unreffed at any time after calling this function.

When the block property is TRUE, this function can block until free space becomes available in the queue.

Parameters:

`appsrc` (GstElement *) –

the appsrc

`sample` (GstSample *) –

a sample from which extract buffer to push

Returns (GstFlowReturn *) –
No description available

Flags: Run Last / Action

Since : 1.6

## Properties

### block

    “block” gboolean

When max-bytes are queued and after the enough-data signal has been emitted, block any further push-buffer calls until the amount of queued bytes drops below the max-bytes limit.

Flags : Read / Write

Default value : false

### caps

    “caps” GstCaps *

The GstCaps that will negotiated downstream and will be put on outgoing buffers.

Flags : Read / Write

### current-level-buffers

    “current-level-buffers” guint64

The number of currently queued buffers inside appsrc.

Flags : Read

Default value : 0

### current-level-bytes

    “current-level-bytes” guint64

The number of currently queued bytes inside appsrc.

Flags : Read

Default value : 0

### current-level-time

    “current-level-time” guint64

The amount of currently queued time inside appsrc.

Flags : Read

Default value : 0

### duration

    “duration” guint64

The total duration in nanoseconds of the data stream. If the total duration is known, it is recommended to configure it with this property.

Flags : Read / Write

Default value : 18446744073709551615

### emit-signals

    “emit-signals” gboolean

Make appsrc emit the "need-data", "enough-data" and "seek-data" signals. This option is by default enabled for backwards compatibility reasons but can disabled when needed because signal emission is expensive.

Flags : Read / Write

Default value : true

### format

    “format” GstFormat *

The format to use for segment events. When the source is producing timestamped buffers this property should be set to GST_FORMAT_TIME.

Flags : Read / Write

Default value : bytes (2)

### handle-segment-change

    “handle-segment-change” gboolean

When enabled, appsrc will check GstSegment in GstSample which was pushed via gst_app_src_push_sample or "push-sample" signal action. If a GstSegment is changed, corresponding segment event will be followed by next data flow.

FIXME: currently only GST_FORMAT_TIME format is supported and therefore GstAppSrc::format should be time. However, possibly GstAppSrc can support other formats.

Flags : Read / Write

Default value : false

### is-live

    “is-live” gboolean

Instruct the source to behave like a live source. This includes that it will only push out buffers in the PLAYING state.

Flags : Read / Write

Default value : false

### leaky-type

    “leaky-type” GstAppLeakyType *

When set to any other value than GST_APP_LEAKY_TYPE_NONE then the appsrc will drop any buffers that are pushed into it once its internal queue is full. The selected type defines whether to drop the oldest or new buffers.

Flags : Read / Write

Default value : none (0)

### max-buffers

    “max-buffers” guint64

The maximum amount of buffers that can be queued internally. After the maximum amount of buffers are queued, appsrc will emit the "enough-data" signal.

Flags : Read / Write

Default value : 0

### max-bytes

    “max-bytes” guint64

The maximum amount of bytes that can be queued internally. After the maximum amount of bytes are queued, appsrc will emit the "enough-data" signal.

Flags : Read / Write

Default value : 200000

### max-latency

    “max-latency” gint64

The maximum latency (-1 = unlimited)

Flags : Read / Write

Default value : 18446744073709551615

### max-time

    “max-time” guint64

The maximum amount of time that can be queued internally. After the maximum amount of time are queued, appsrc will emit the "enough-data" signal.

Flags : Read / Write

Default value : 0

### min-latency

    “min-latency” gint64

The minimum latency of the source. A value of -1 will use the default latency calculations of GstBaseSrc.

Flags : Read / Write

Default value : 18446744073709551615

### min-percent

    “min-percent” guint

Make appsrc emit the "need-data" signal when the amount of bytes in the queue drops below this percentage of max-bytes.

Flags : Read / Write

Default value : 0

### size

    “size” gint64

The total size in bytes of the data stream. If the total size is known, it is recommended to configure it with this property.

Flags : Read / Write

Default value : 18446744073709551615

### stream-type

    “stream-type” GstAppStreamType *

The type of stream that this source is producing. For seekable streams the application should connect to the seek-data signal.

Flags : Read / Write

Default value : stream (0)

The results of the search are