GstRTSPStream

## GstRTSPStream GstRTSPStream — A media stream |

## Synopsis

    struct              GstRTSPStream;
                        GstRTSPStreamClass;
    GstRTSPStream *     gst_rtsp_stream_new                 (guint idx,
                                                             GstElement *payloader,
                                                             GstPad *srcpad);
    guint               gst_rtsp_stream_get_index           (GstRTSPStream *stream);
    GstPad *            gst_rtsp_stream_get_srcpad          (GstRTSPStream *stream);
    gchar *             gst_rtsp_stream_get_control         (GstRTSPStream *stream);
    void                gst_rtsp_stream_set_control         (GstRTSPStream *stream,
                                                             const gchar *control);
    gboolean            gst_rtsp_stream_has_control         (GstRTSPStream *stream,
                                                             const gchar *control);
    guint               gst_rtsp_stream_get_mtu             (GstRTSPStream *stream);
    void                gst_rtsp_stream_set_mtu             (GstRTSPStream *stream,
                                                             guint mtu);
    gint                gst_rtsp_stream_get_dscp_qos        (GstRTSPStream *stream);
    void                gst_rtsp_stream_set_dscp_qos        (GstRTSPStream *stream,
                                                             gint dscp_qos);
    GstRTSPLowerTrans   gst_rtsp_stream_get_protocols       (GstRTSPStream *stream);
    void                gst_rtsp_stream_set_protocols       (GstRTSPStream *stream,
                                                             GstRTSPLowerTrans protocols);
    GstRTSPAddressPool * gst_rtsp_stream_get_address_pool   (GstRTSPStream *stream);
    void                gst_rtsp_stream_set_address_pool    (GstRTSPStream *stream,
                                                             GstRTSPAddressPool *pool);
    GstRTSPAddress *    gst_rtsp_stream_reserve_address     (GstRTSPStream *stream,
                                                             const gchar *address,
                                                             guint port,
                                                             guint n_ports,
                                                             guint ttl);
    gboolean            gst_rtsp_stream_join_bin            (GstRTSPStream *stream,
                                                             GstBin *bin,
                                                             GstElement *rtpbin,
                                                             GstState state);
    gboolean            gst_rtsp_stream_leave_bin           (GstRTSPStream *stream,
                                                             GstBin *bin,
                                                             GstElement *rtpbin);
    void                gst_rtsp_stream_get_server_port     (GstRTSPStream *stream,
                                                             GstRTSPRange *server_port,
                                                             GSocketFamily family);
    GstRTSPAddress *    gst_rtsp_stream_get_multicast_address
                                                            (GstRTSPStream *stream,
                                                             GSocketFamily family);
    GObject *           gst_rtsp_stream_get_rtpsession      (GstRTSPStream *stream);
    void                gst_rtsp_stream_get_ssrc            (GstRTSPStream *stream,
                                                             guint *ssrc);
    gboolean            gst_rtsp_stream_get_rtpinfo         (GstRTSPStream *stream,
                                                             guint *rtptime,
                                                             guint *seq,
                                                             guint *clock_rate,
                                                             GstClockTime *running_time);
    GstCaps *           gst_rtsp_stream_get_caps            (GstRTSPStream *stream);
    GstFlowReturn       gst_rtsp_stream_recv_rtcp           (GstRTSPStream *stream,
                                                             GstBuffer *buffer);
    GstFlowReturn       gst_rtsp_stream_recv_rtp            (GstRTSPStream *stream,
                                                             GstBuffer *buffer);
    gboolean            gst_rtsp_stream_add_transport       (GstRTSPStream *stream,
                                                             GstRTSPStreamTransport *trans);
    gboolean            gst_rtsp_stream_remove_transport    (GstRTSPStream *stream,
                                                             GstRTSPStreamTransport *trans);
    GSocket *           gst_rtsp_stream_get_rtp_socket      (GstRTSPStream *stream,
                                                             GSocketFamily family);
    GSocket *           gst_rtsp_stream_get_rtcp_socket     (GstRTSPStream *stream,
                                                             GSocketFamily family);
    GstRTSPFilterResult (*GstRTSPStreamTransportFilterFunc) (GstRTSPStream *stream,
                                                             GstRTSPStreamTransport *trans,
                                                             gpointer user_data);
    GList *             gst_rtsp_stream_transport_filter    (GstRTSPStream *stream,
                                                             GstRTSPStreamTransportFilterFunc func,
                                                             gpointer user_data);

## Object Hierarchy

      GObject
       +----GstRTSPStream

## Description

The GstRTSPStream object manages the data transport for one stream. It is created from a payloader element and a source pad that produce the RTP packets for the stream.

With `gst_rtsp_stream_join_bin()` the streaming elements are added to the bin and rtpbin. `gst_rtsp_stream_leave_bin()` removes the elements again.

The GstRTSPStream will use the configured addresspool, as set with `gst_rtsp_stream_set_address_pool()`, to allocate multicast addresses for the stream. With `gst_rtsp_stream_get_multicast_address()` you can get the configured address.

With `gst_rtsp_stream_get_server_port()` you can get the port that the server will use to receive RTCP. This is the part that the clients will use to send RTCP to.

With `gst_rtsp_stream_add_transport()` destinations can be added where the stream should be sent to. Use `gst_rtsp_stream_remove_transport()` to remove the destination again.

Last reviewed on 2013-07-16 (1.0.0)

## Details

### struct GstRTSPStream

    struct GstRTSPStream;

The definition of a media stream.

### GstRTSPStreamClass

    typedef struct _GstRTSPStreamClass GstRTSPStreamClass;

### gst_rtsp_stream_new ()

    GstRTSPStream *     gst_rtsp_stream_new                 (guint idx,
                                                             GstElement *payloader,
                                                             GstPad *srcpad);

Create a new media stream with index `idx` that handles RTP data on `srcpad` and has a payloader element `payloader`.

`idx` : | an index
`srcpad` : | a GstPad
`payloader` : | a GstElement
Returns : | a new GstRTSPStream

### gst_rtsp_stream_get_index ()

    guint               gst_rtsp_stream_get_index           (GstRTSPStream *stream);

Get the stream index.

Return: the stream index.

`stream` : | a GstRTSPStream

### gst_rtsp_stream_get_srcpad ()

    GstPad *            gst_rtsp_stream_get_srcpad          (GstRTSPStream *stream);

Get the srcpad associated with `stream`.

`stream` : | a GstRTSPStream
Returns : | the srcpad. Unref after usage. [transfer full]

### gst_rtsp_stream_get_control ()

    gchar *             gst_rtsp_stream_get_control         (GstRTSPStream *stream);

Get the control string to identify this stream.

`stream` : | a GstRTSPStream
Returns : | the control string. free after usage. [transfer full]

### gst_rtsp_stream_set_control ()

    void                gst_rtsp_stream_set_control         (GstRTSPStream *stream,
                                                             const gchar *control);

Set the control string in `stream`.

`stream` : | a GstRTSPStream
`control` : | a control string

### gst_rtsp_stream_has_control ()

    gboolean            gst_rtsp_stream_has_control         (GstRTSPStream *stream,
                                                             const gchar *control);

Check if `stream` has the control string `control`.

`stream` : | a GstRTSPStream
`control` : | a control string
Returns : | `TRUE` is `stream` has `control` as the control string

### gst_rtsp_stream_get_mtu ()

    guint               gst_rtsp_stream_get_mtu             (GstRTSPStream *stream);

Get the configured MTU in the payloader of `stream`.

`stream` : | a GstRTSPStream
Returns : | the MTU of the payloader.

### gst_rtsp_stream_set_mtu ()

    void                gst_rtsp_stream_set_mtu             (GstRTSPStream *stream,
                                                             guint mtu);

Configure the mtu in the payloader of `stream` to `mtu`.

`stream` : | a GstRTSPStream
`mtu` : | a new MTU

### gst_rtsp_stream_get_dscp_qos ()

    gint                gst_rtsp_stream_get_dscp_qos        (GstRTSPStream *stream);

Get the configured DSCP QoS in of the outgoing sockets.

`stream` : | a GstRTSPStream
Returns : | the DSCP QoS value of the outgoing sockets, or -1 if disbled.

### gst_rtsp_stream_set_dscp_qos ()

    void                gst_rtsp_stream_set_dscp_qos        (GstRTSPStream *stream,
                                                             gint dscp_qos);

Configure the dscp qos of the outgoing sockets to `dscp_qos`.

`stream` : | a GstRTSPStream
`dscp_qos` : | a new dscp qos value (0-63, or -1 to disable)

### gst_rtsp_stream_get_protocols ()

    GstRTSPLowerTrans   gst_rtsp_stream_get_protocols       (GstRTSPStream *stream);

Get the allowed protocols of `stream`.

`stream` : | a GstRTSPStream
Returns : | a GstRTSPLowerTrans

### gst_rtsp_stream_set_protocols ()

    void                gst_rtsp_stream_set_protocols       (GstRTSPStream *stream,
                                                             GstRTSPLowerTrans protocols);

Configure the allowed lower transport for `stream`.

`stream` : | a GstRTSPStream
`protocols` : | the new flags

### gst_rtsp_stream_get_address_pool ()

    GstRTSPAddressPool * gst_rtsp_stream_get_address_pool   (GstRTSPStream *stream);

Get the GstRTSPAddressPool used as the address pool of `stream`.

`stream` : | a GstRTSPStream
Returns : | the GstRTSPAddressPool of `stream`. `g_object_unref()` after usage. [transfer full]

### gst_rtsp_stream_set_address_pool ()

    void                gst_rtsp_stream_set_address_pool    (GstRTSPStream *stream,
                                                             GstRTSPAddressPool *pool);

configure `pool` to be used as the address pool of `stream`.

`stream` : | a GstRTSPStream
`pool` : | a GstRTSPAddressPool

### gst_rtsp_stream_reserve_address ()

    GstRTSPAddress *    gst_rtsp_stream_reserve_address     (GstRTSPStream *stream,
                                                             const gchar *address,
                                                             guint port,
                                                             guint n_ports,
                                                             guint ttl);

Reserve `address` and `port` as the address and port of `stream`.

`stream` : | a GstRTSPStream
`address` : | an address
`port` : | a port
`n_ports` : | n_ports
`ttl` : | a TTL
Returns : | the GstRTSPAddress of `stream` or `NULL` when the address could be reserved. `gst_rtsp_address_free()` after usage.

### gst_rtsp_stream_join_bin ()

    gboolean            gst_rtsp_stream_join_bin            (GstRTSPStream *stream,
                                                             GstBin *bin,
                                                             GstElement *rtpbin,
                                                             GstState state);

Join the GstBin `bin` that contains the element `rtpbin`.

`stream` will link to `rtpbin`, which must be inside `bin`. The elements added to `bin` will be set to the state given in `state`.

`stream` : | a GstRTSPStream
`bin` : | a GstBin to join
`rtpbin` : | a rtpbin element in `bin`
`state` : | the target state of the new elements
Returns : | `TRUE` on success.

### gst_rtsp_stream_leave_bin ()

    gboolean            gst_rtsp_stream_leave_bin           (GstRTSPStream *stream,
                                                             GstBin *bin,
                                                             GstElement *rtpbin);

Remove the elements of `stream` from `bin`.

Return: `TRUE` on success.

`stream` : | a GstRTSPStream
`bin` : | a GstBin
`rtpbin` : | a rtpbin GstElement

### gst_rtsp_stream_get_server_port ()

    void                gst_rtsp_stream_get_server_port     (GstRTSPStream *stream,
                                                             GstRTSPRange *server_port,
                                                             GSocketFamily family);

Fill `server_port` with the port pair used by the server. This function can only be called when `stream` has been joined.

`stream` : | a GstRTSPStream
`server_port` : | result server port. [out]
`family` : | the port family to get

### gst_rtsp_stream_get_multicast_address ()

    GstRTSPAddress *    gst_rtsp_stream_get_multicast_address
                                                            (GstRTSPStream *stream,
                                                             GSocketFamily family);

Get the multicast address of `stream` for `family`.

`stream` : | a GstRTSPStream
`family` : | the GSocketFamily
Returns : | the GstRTSPAddress of `stream` or `NULL` when no address could be allocated. `gst_rtsp_address_free()` after usage.

### gst_rtsp_stream_get_rtpsession ()

    GObject *           gst_rtsp_stream_get_rtpsession      (GstRTSPStream *stream);

Get the RTP session of this stream.

`stream` : | a GstRTSPStream
Returns : | The RTP session of this stream. Unref after usage. [transfer full]

### gst_rtsp_stream_get_ssrc ()

    void                gst_rtsp_stream_get_ssrc            (GstRTSPStream *stream,
                                                             guint *ssrc);

Get the SSRC used by the RTP session of this stream. This function can only be called when `stream` has been joined.

`stream` : | a GstRTSPStream
`ssrc` : | result ssrc. [out]

### gst_rtsp_stream_get_rtpinfo ()

    gboolean            gst_rtsp_stream_get_rtpinfo         (GstRTSPStream *stream,
                                                             guint *rtptime,
                                                             guint *seq,
                                                             guint *clock_rate,
                                                             GstClockTime *running_time);

Retrieve the current rtptime, seq and running-time. This is used to construct a RTPInfo reply header.

`stream` : | a GstRTSPStream
`rtptime` : | result RTP timestamp. [allow-none]
`seq` : | result RTP seqnum. [allow-none]
`clock_rate` : | the clock rate
`running_time` : | result running-time. [allow-none]
Returns : | `TRUE` when rtptime, seq and running-time could be determined.

### gst_rtsp_stream_get_caps ()

    GstCaps *           gst_rtsp_stream_get_caps            (GstRTSPStream *stream);

Retrieve the current caps of `stream`.

`stream` : | a GstRTSPStream
Returns : | the GstCaps of `stream`. use `gst_caps_unref()` after usage. [transfer full]

### gst_rtsp_stream_recv_rtcp ()

    GstFlowReturn       gst_rtsp_stream_recv_rtcp           (GstRTSPStream *stream,
                                                             GstBuffer *buffer);

Handle an RTCP buffer for the stream. This method is usually called when a message has been received from a client using the TCP transport.

This function takes ownership of `buffer`.

`stream` : | a GstRTSPStream
`buffer` : | a GstBuffer. [transfer full]
Returns : | a GstFlowReturn.

### gst_rtsp_stream_recv_rtp ()

    GstFlowReturn       gst_rtsp_stream_recv_rtp            (GstRTSPStream *stream,
                                                             GstBuffer *buffer);

Handle an RTP buffer for the stream. This method is usually called when a message has been received from a client using the TCP transport.

This function takes ownership of `buffer`.

`stream` : | a GstRTSPStream
`buffer` : | a GstBuffer. [transfer full]
Returns : | a GstFlowReturn.

### gst_rtsp_stream_add_transport ()

    gboolean            gst_rtsp_stream_add_transport       (GstRTSPStream *stream,
                                                             GstRTSPStreamTransport *trans);

Add the transport in `trans` to `stream`. The media of `stream` will then also be send to the values configured in `trans`.

`stream` must be joined to a bin.

`trans` must contain a valid GstRTSPTransport.

`stream` : | a GstRTSPStream
`trans` : | a GstRTSPStreamTransport
Returns : | `TRUE` if `trans` was added

### gst_rtsp_stream_remove_transport ()

    gboolean            gst_rtsp_stream_remove_transport    (GstRTSPStream *stream,
                                                             GstRTSPStreamTransport *trans);

Remove the transport in `trans` from `stream`. The media of `stream` will not be sent to the values configured in `trans`.

`stream` must be joined to a bin.

`trans` must contain a valid GstRTSPTransport.

`stream` : | a GstRTSPStream
`trans` : | a GstRTSPStreamTransport
Returns : | `TRUE` if `trans` was removed

### gst_rtsp_stream_get_rtp_socket ()

    GSocket *           gst_rtsp_stream_get_rtp_socket      (GstRTSPStream *stream,
                                                             GSocketFamily family);

Get the RTP socket from `stream` for a `family`.

`stream` must be joined to a bin.

`stream` : | a GstRTSPStream
`family` : | the socket family
Returns : | the RTP socket or `NULL` if no socket could be allocated for `family`. Unref after usage

### gst_rtsp_stream_get_rtcp_socket ()

    GSocket *           gst_rtsp_stream_get_rtcp_socket     (GstRTSPStream *stream,
                                                             GSocketFamily family);

Get the RTCP socket from `stream` for a `family`.

`stream` must be joined to a bin.

`stream` : | a GstRTSPStream
`family` : | the socket family
Returns : | the RTCP socket or `NULL` if no socket could be allocated for `family`. Unref after usage

### GstRTSPStreamTransportFilterFunc ()

    GstRTSPFilterResult (*GstRTSPStreamTransportFilterFunc) (GstRTSPStream *stream,
                                                             GstRTSPStreamTransport *trans,
                                                             gpointer user_data);

This function will be called by the `gst_rtsp_stream_transport_filter()`. An implementation should return a value of GstRTSPFilterResult.

When this function returns GST_RTSP_FILTER_REMOVE, `trans` will be removed from `stream`.

A return value of GST_RTSP_FILTER_KEEP will leave `trans` untouched in `stream`.

A value of GST_RTSP_FILTER_REF will add `trans` to the result GList of `gst_rtsp_stream_transport_filter()`.

`stream` : | a GstRTSPStream object
`trans` : | a GstRTSPStreamTransport in `stream`
`user_data` : | user data that has been given to `gst_rtsp_stream_transport_filter()`
Returns : | a GstRTSPFilterResult.

### gst_rtsp_stream_transport_filter ()

    GList *             gst_rtsp_stream_transport_filter    (GstRTSPStream *stream,
                                                             GstRTSPStreamTransportFilterFunc func,
                                                             gpointer user_data);

Call `func` for each transport managed by `stream`. The result value of `func` determines what happens to the transport. `func` will be called with `stream` locked so no further actions on `stream` can be performed from `func`.

If `func` returns GST_RTSP_FILTER_REMOVE, the transport will be removed from `stream`.

If `func` returns GST_RTSP_FILTER_KEEP, the transport will remain in `stream`.

If `func` returns GST_RTSP_FILTER_REF, the transport will remain in `stream` but will also be added with an additional ref to the result GList of this function..

When `func` is `NULL`, GST_RTSP_FILTER_REF will be assumed for each transport.

`stream` : | a GstRTSPStream
`func` : | a callback. [scope call][allow-none]
`user_data` : | user data passed to `func`
Returns : | a GList with all transports for which `func` returned GST_RTSP_FILTER_REF. After usage, each element in the GList should be unreffed before the list is freed. [element-type GstRTSPStreamTransport][transfer full]

## See Also

GstRTSPMedia