## GstRTCPBuffer GstRTCPBuffer — Helper methods for dealing with RTCP buffers |

## Functions

GstBuffer * | gst_rtcp_buffer_new_take_data ()
GstBuffer * | gst_rtcp_buffer_new_copy_data ()
gboolean | gst_rtcp_buffer_validate_data_reduced ()
gboolean | gst_rtcp_buffer_validate_reduced ()
gboolean | gst_rtcp_buffer_validate_data ()
gboolean | gst_rtcp_buffer_validate ()
GstBuffer * | gst_rtcp_buffer_new ()
gboolean | gst_rtcp_buffer_map ()
gboolean | gst_rtcp_buffer_unmap ()
guint | gst_rtcp_buffer_get_packet_count ()
gboolean | gst_rtcp_buffer_get_first_packet ()
gboolean | gst_rtcp_packet_move_to_next ()
gboolean | gst_rtcp_buffer_add_packet ()
gboolean | gst_rtcp_packet_remove ()
gboolean | gst_rtcp_packet_get_padding ()
guint8 | gst_rtcp_packet_get_count ()
GstRTCPType | gst_rtcp_packet_get_type ()
guint16 | gst_rtcp_packet_get_length ()
void | gst_rtcp_packet_sr_get_sender_info ()
void | gst_rtcp_packet_sr_set_sender_info ()
guint32 | gst_rtcp_packet_rr_get_ssrc ()
void | gst_rtcp_packet_rr_set_ssrc ()
guint | gst_rtcp_packet_get_rb_count ()
void | gst_rtcp_packet_get_rb ()
gboolean | gst_rtcp_packet_add_rb ()
void | gst_rtcp_packet_set_rb ()
guint | gst_rtcp_packet_sdes_get_item_count ()
gboolean | gst_rtcp_packet_sdes_first_item ()
gboolean | gst_rtcp_packet_sdes_next_item ()
guint32 | gst_rtcp_packet_sdes_get_ssrc ()
gboolean | gst_rtcp_packet_sdes_first_entry ()
gboolean | gst_rtcp_packet_sdes_next_entry ()
gboolean | gst_rtcp_packet_sdes_get_entry ()
gboolean | gst_rtcp_packet_sdes_copy_entry ()
gboolean | gst_rtcp_packet_sdes_add_item ()
gboolean | gst_rtcp_packet_sdes_add_entry ()
guint | gst_rtcp_packet_bye_get_ssrc_count ()
guint32 | gst_rtcp_packet_bye_get_nth_ssrc ()
gboolean | gst_rtcp_packet_bye_add_ssrc ()
gboolean | gst_rtcp_packet_bye_add_ssrcs ()
guint8 | gst_rtcp_packet_bye_get_reason_len ()
gchar * | gst_rtcp_packet_bye_get_reason ()
gboolean | gst_rtcp_packet_bye_set_reason ()
GstRTCPFBType | gst_rtcp_packet_fb_get_type ()
void | gst_rtcp_packet_fb_set_type ()
guint32 | gst_rtcp_packet_fb_get_sender_ssrc ()
void | gst_rtcp_packet_fb_set_sender_ssrc ()
guint32 | gst_rtcp_packet_fb_get_media_ssrc ()
void | gst_rtcp_packet_fb_set_media_ssrc ()
guint16 | gst_rtcp_packet_fb_get_fci_length ()
gboolean | gst_rtcp_packet_fb_set_fci_length ()
guint8 * | gst_rtcp_packet_fb_get_fci ()
guint8 * | gst_rtcp_packet_app_get_data ()
guint16 | gst_rtcp_packet_app_get_data_length ()
const gchar * | gst_rtcp_packet_app_get_name ()
guint32 | gst_rtcp_packet_app_get_ssrc ()
guint8 | gst_rtcp_packet_app_get_subtype ()
gboolean | gst_rtcp_packet_app_set_data_length ()
void | gst_rtcp_packet_app_set_name ()
void | gst_rtcp_packet_app_set_ssrc ()
void | gst_rtcp_packet_app_set_subtype ()
gboolean | gst_rtcp_packet_copy_profile_specific_ext ()
gboolean | gst_rtcp_packet_get_profile_specific_ext ()
guint16 | gst_rtcp_packet_get_profile_specific_ext_length ()
guint64 | gst_rtcp_ntp_to_unix ()
guint64 | gst_rtcp_unix_to_ntp ()
GstRTCPSDESType | gst_rtcp_sdes_name_to_type ()
const gchar * | gst_rtcp_sdes_type_to_name ()

## Types and Values

#define | GST_RTCP_VERSION
#define | GST_RTCP_MAX_SDES
#define | GST_RTCP_MAX_BYE_SSRC_COUNT
#define | GST_RTCP_MAX_RB_COUNT
#define | GST_RTCP_MAX_SDES_ITEM_COUNT
#define | GST_RTCP_VALID_MASK
#define | GST_RTCP_VALID_VALUE
enum | GstRTCPType
struct | GstRTCPPacket
enum | GstRTCPSDESType
enum | GstRTCPFBType
struct | GstRTCPBuffer
#define | GST_RTCP_BUFFER_INIT

## Includes

    #include <gst/rtp/gstrtcpbuffer.h>

## Description

Note: The API in this module is not yet declared stable.

The GstRTPCBuffer helper functions makes it easy to parse and create regular GstBuffer objects that contain compound RTCP packets. These buffers are typically of 'application/x-rtcp' GstCaps.

An RTCP buffer consists of 1 or more GstRTCPPacket structures that you can retrieve with `gst_rtcp_buffer_get_first_packet()`. GstRTCPPacket acts as a pointer into the RTCP buffer; you can move to the next packet with `gst_rtcp_packet_move_to_next()`.

## Functions

### gst_rtcp_buffer_new_take_data ()

    GstBuffer *
    gst_rtcp_buffer_new_take_data (gpointer data,
                                   guint len);

Create a new buffer and set the data and size of the buffer to `data` and `len` respectively. `data` will be freed when the buffer is unreffed, so this function transfers ownership of `data` to the new buffer.

#### Parameters

data | data for the new buffer. | [array length=len][element-type guint8]
len | the length of data |

#### Returns

A newly allocated buffer with `data` and of size `len` .

### gst_rtcp_buffer_new_copy_data ()

    GstBuffer *
    gst_rtcp_buffer_new_copy_data (gconstpointer data,
                                   guint len);

Create a new buffer and set the data to a copy of `len` bytes of `data` and the size to `len` . The data will be freed when the buffer is freed.

#### Parameters

data | data for the new buffer. | [array length=len][element-type guint8]
len | the length of data |

#### Returns

A newly allocated buffer with a copy of `data` and of size `len` .

### gst_rtcp_buffer_validate_data_reduced ()

    gboolean
    gst_rtcp_buffer_validate_data_reduced (guint8 *data,
                                           guint len);

Check if the `data` and `size` point to the data of a valid RTCP packet. Use this function to validate a packet before using the other functions in this module.

This function is updated to support reduced size rtcp packets according to RFC 5506 and will validate full compound RTCP packets as well as reduced size RTCP packets.

#### Parameters

data | the data to validate. | [array length=len]
len | the length of `data` to validate |

#### Returns

TRUE if the data points to a valid RTCP packet.

Since: 1.6

### gst_rtcp_buffer_validate_reduced ()

    gboolean
    gst_rtcp_buffer_validate_reduced (GstBuffer *buffer);

Check if the data pointed to by `buffer` is a valid RTCP packet using `gst_rtcp_buffer_validate_reduced()`.

#### Parameters

buffer | the buffer to validate |

#### Returns

TRUE if `buffer` is a valid RTCP packet.

Since: 1.6

### gst_rtcp_buffer_validate_data ()

    gboolean
    gst_rtcp_buffer_validate_data (guint8 *data,
                                   guint len);

Check if the `data` and `size` point to the data of a valid compound, non-reduced size RTCP packet. Use this function to validate a packet before using the other functions in this module.

#### Parameters

data | the data to validate. | [array length=len]
len | the length of `data` to validate |

#### Returns

TRUE if the data points to a valid RTCP packet.

### gst_rtcp_buffer_validate ()

    gboolean
    gst_rtcp_buffer_validate (GstBuffer *buffer);

Check if the data pointed to by `buffer` is a valid RTCP packet using `gst_rtcp_buffer_validate_data()`.

#### Parameters

buffer | the buffer to validate |

#### Returns

TRUE if `buffer` is a valid RTCP packet.

### gst_rtcp_buffer_new ()

    GstBuffer *
    gst_rtcp_buffer_new (guint mtu);

Create a new buffer for constructing RTCP packets. The packet will have a maximum size of `mtu` .

#### Parameters

mtu | the maximum mtu size. |

#### Returns

A newly allocated buffer.

### gst_rtcp_buffer_map ()

    gboolean
    gst_rtcp_buffer_map (GstBuffer *buffer,
                         GstMapFlags flags,
                         GstRTCPBuffer *rtcp);

Open `buffer` for reading or writing, depending on `flags` . The resulting RTCP buffer state is stored in `rtcp` .

#### Parameters

buffer | a buffer with an RTCP packet |
flags | flags for the mapping |
rtcp | resulting GstRTCPBuffer |

### gst_rtcp_buffer_unmap ()

    gboolean
    gst_rtcp_buffer_unmap (GstRTCPBuffer *rtcp);

Finish `rtcp` after being constructed. This function is usually called after `gst_rtcp_buffer_map()` and after adding the RTCP items to the new buffer.

The function adjusts the size of `rtcp` with the total length of all the added packets.

#### Parameters

rtcp | a buffer with an RTCP packet |

### gst_rtcp_buffer_get_packet_count ()

    guint
    gst_rtcp_buffer_get_packet_count (GstRTCPBuffer *rtcp);

Get the number of RTCP packets in `rtcp` .

#### Parameters

rtcp | a valid RTCP buffer |

#### Returns

the number of RTCP packets in `rtcp` .

### gst_rtcp_buffer_get_first_packet ()

    gboolean
    gst_rtcp_buffer_get_first_packet (GstRTCPBuffer *rtcp,
                                      GstRTCPPacket *packet);

Initialize a new GstRTCPPacket pointer that points to the first packet in `rtcp` .

#### Parameters

rtcp | a valid RTCP buffer |
packet | a GstRTCPPacket |

#### Returns

TRUE if the packet existed in `rtcp` .

### gst_rtcp_packet_move_to_next ()

    gboolean
    gst_rtcp_packet_move_to_next (GstRTCPPacket *packet);

Move the packet pointer `packet` to the next packet in the payload. Use `gst_rtcp_buffer_get_first_packet()` to initialize `packet` .

#### Parameters

packet | a GstRTCPPacket |

#### Returns

TRUE if `packet` is pointing to a valid packet after calling this function.

### gst_rtcp_buffer_add_packet ()

    gboolean
    gst_rtcp_buffer_add_packet (GstRTCPBuffer *rtcp,
                                GstRTCPType type,
                                GstRTCPPacket *packet);

Add a new packet of `type` to `rtcp` . `packet` will point to the newly created packet.

#### Parameters

rtcp | a valid RTCP buffer |
type | the GstRTCPType of the new packet |
packet | pointer to new packet |

#### Returns

`TRUE` if the packet could be created. This function returns `FALSE` if the max mtu is exceeded for the buffer.

### gst_rtcp_packet_remove ()

    gboolean
    gst_rtcp_packet_remove (GstRTCPPacket *packet);

Removes the packet pointed to by `packet` and moves pointer to the next one

#### Parameters

packet | a GstRTCPPacket |

#### Returns

TRUE if `packet` is pointing to a valid packet after calling this function.

### gst_rtcp_packet_get_padding ()

    gboolean
    gst_rtcp_packet_get_padding (GstRTCPPacket *packet);

Get the packet padding of the packet pointed to by `packet` .

#### Parameters

packet | a valid GstRTCPPacket |

#### Returns

If the packet has the padding bit set.

### gst_rtcp_packet_get_count ()

    guint8
    gst_rtcp_packet_get_count (GstRTCPPacket *packet);

Get the count field in `packet` .

#### Parameters

packet | a valid GstRTCPPacket |

#### Returns

The count field in `packet` or -1 if `packet` does not point to a valid packet.

### gst_rtcp_packet_get_type ()

    GstRTCPType
    gst_rtcp_packet_get_type (GstRTCPPacket *packet);

Get the packet type of the packet pointed to by `packet` .

#### Parameters

packet | a valid GstRTCPPacket |

#### Returns

The packet type or GST_RTCP_TYPE_INVALID when `packet` is not pointing to a valid packet.

### gst_rtcp_packet_get_length ()

    guint16
    gst_rtcp_packet_get_length (GstRTCPPacket *packet);

Get the length field of `packet` . This is the length of the packet in 32-bit words minus one.

#### Parameters

packet | a valid GstRTCPPacket |

#### Returns

The length field of `packet` .

### gst_rtcp_packet_sr_get_sender_info ()

    void
    gst_rtcp_packet_sr_get_sender_info (GstRTCPPacket *packet,
                                        guint32 *ssrc,
                                        guint64 *ntptime,
                                        guint32 *rtptime,
                                        guint32 *packet_count,
                                        guint32 *octet_count);

Parse the SR sender info and store the values.

#### Parameters

packet | a valid SR GstRTCPPacket |
ssrc | result SSRC. | [out]
ntptime | result NTP time. | [out]
rtptime | result RTP time. | [out]
packet_count | result packet count. | [out]
octet_count | result octet count. | [out]

### gst_rtcp_packet_sr_set_sender_info ()

    void
    gst_rtcp_packet_sr_set_sender_info (GstRTCPPacket *packet,
                                        guint32 ssrc,
                                        guint64 ntptime,
                                        guint32 rtptime,
                                        guint32 packet_count,
                                        guint32 octet_count);

Set the given values in the SR packet `packet` .

#### Parameters

packet | a valid SR GstRTCPPacket |
ssrc | the SSRC |
ntptime | the NTP time |
rtptime | the RTP time |
packet_count | the packet count |
octet_count | the octet count |

### gst_rtcp_packet_rr_get_ssrc ()

    guint32
    gst_rtcp_packet_rr_get_ssrc (GstRTCPPacket *packet);

Get the ssrc field of the RR `packet` .

#### Parameters

packet | a valid RR GstRTCPPacket |

#### Returns

the ssrc.

### gst_rtcp_packet_rr_set_ssrc ()

    void
    gst_rtcp_packet_rr_set_ssrc (GstRTCPPacket *packet,
                                 guint32 ssrc);

Set the ssrc field of the RR `packet` .

#### Parameters

packet | a valid RR GstRTCPPacket |
ssrc | the SSRC to set |

### gst_rtcp_packet_get_rb_count ()

    guint
    gst_rtcp_packet_get_rb_count (GstRTCPPacket *packet);

Get the number of report blocks in `packet` .

#### Parameters

packet | a valid SR or RR GstRTCPPacket |

#### Returns

The number of report blocks in `packet` .

### gst_rtcp_packet_get_rb ()

    void
    gst_rtcp_packet_get_rb (GstRTCPPacket *packet,
                            guint nth,
                            guint32 *ssrc,
                            guint8 *fractionlost,
                            gint32 *packetslost,
                            guint32 *exthighestseq,
                            guint32 *jitter,
                            guint32 *lsr,
                            guint32 *dlsr);

Parse the values of the `nth` report block in `packet` and store the result in the values.

#### Parameters

packet | a valid SR or RR GstRTCPPacket |
nth | the nth report block in `packet` |
ssrc | result for data source being reported. | [out]
fractionlost | result for fraction lost since last SR/RR. | [out]
packetslost | result for the cumululative number of packets lost. | [out]
exthighestseq | result for the extended last sequence number received. | [out]
jitter | result for the interarrival jitter. | [out]
lsr | result for the last SR packet from this source. | [out]
dlsr | result for the delay since last SR packet. | [out]

### gst_rtcp_packet_add_rb ()

    gboolean
    gst_rtcp_packet_add_rb (GstRTCPPacket *packet,
                            guint32 ssrc,
                            guint8 fractionlost,
                            gint32 packetslost,
                            guint32 exthighestseq,
                            guint32 jitter,
                            guint32 lsr,
                            guint32 dlsr);

Add a new report block to `packet` with the given values.

#### Parameters

packet | a valid SR or RR GstRTCPPacket |
ssrc | data source being reported |
fractionlost | fraction lost since last SR/RR |
packetslost | the cumululative number of packets lost |
exthighestseq | the extended last sequence number received |
jitter | the interarrival jitter |
lsr | the last SR packet from this source |
dlsr | the delay since last SR packet |

#### Returns

`TRUE` if the packet was created. This function can return `FALSE` if the max MTU is exceeded or the number of report blocks is greater than GST_RTCP_MAX_RB_COUNT.

### gst_rtcp_packet_set_rb ()

    void
    gst_rtcp_packet_set_rb (GstRTCPPacket *packet,
                            guint nth,
                            guint32 ssrc,
                            guint8 fractionlost,
                            gint32 packetslost,
                            guint32 exthighestseq,
                            guint32 jitter,
                            guint32 lsr,
                            guint32 dlsr);

Set the `nth` new report block in `packet` with the given values.

Note: Not implemented.

#### Parameters

packet | a valid SR or RR GstRTCPPacket |
nth | the nth report block to set |
ssrc | data source being reported |
fractionlost | fraction lost since last SR/RR |
packetslost | the cumululative number of packets lost |
exthighestseq | the extended last sequence number received |
jitter | the interarrival jitter |
lsr | the last SR packet from this source |
dlsr | the delay since last SR packet |

### gst_rtcp_packet_sdes_get_item_count ()

    guint
    gst_rtcp_packet_sdes_get_item_count (GstRTCPPacket *packet);

Get the number of items in the SDES packet `packet` .

#### Parameters

packet | a valid SDES GstRTCPPacket |

#### Returns

The number of items in `packet` .

### gst_rtcp_packet_sdes_first_item ()

    gboolean
    gst_rtcp_packet_sdes_first_item (GstRTCPPacket *packet);

Move to the first SDES item in `packet` .

#### Parameters

packet | a valid SDES GstRTCPPacket |

#### Returns

TRUE if there was a first item.

### gst_rtcp_packet_sdes_next_item ()

    gboolean
    gst_rtcp_packet_sdes_next_item (GstRTCPPacket *packet);

Move to the next SDES item in `packet` .

#### Parameters

packet | a valid SDES GstRTCPPacket |

#### Returns

TRUE if there was a next item.

### gst_rtcp_packet_sdes_get_ssrc ()

    guint32
    gst_rtcp_packet_sdes_get_ssrc (GstRTCPPacket *packet);

Get the SSRC of the current SDES item.

#### Parameters

packet | a valid SDES GstRTCPPacket |

#### Returns

the SSRC of the current item.

### gst_rtcp_packet_sdes_first_entry ()

    gboolean
    gst_rtcp_packet_sdes_first_entry (GstRTCPPacket *packet);

Move to the first SDES entry in the current item.

#### Parameters

packet | a valid SDES GstRTCPPacket |

#### Returns

`TRUE` if there was a first entry.

### gst_rtcp_packet_sdes_next_entry ()

    gboolean
    gst_rtcp_packet_sdes_next_entry (GstRTCPPacket *packet);

Move to the next SDES entry in the current item.

#### Parameters

packet | a valid SDES GstRTCPPacket |

#### Returns

`TRUE` if there was a next entry.

### gst_rtcp_packet_sdes_get_entry ()

    gboolean
    gst_rtcp_packet_sdes_get_entry (GstRTCPPacket *packet,
                                    GstRTCPSDESType *type,
                                    guint8 *len,
                                    guint8 **data);

Get the data of the current SDES item entry. `type` (when not NULL) will contain the type of the entry. `data` (when not NULL) will point to `len` bytes.

When `type` refers to a text item, `data` will point to a UTF8 string. Note that this UTF8 string is NOT null-terminated. Use `gst_rtcp_packet_sdes_copy_entry()` to get a null-terminated copy of the entry.

#### Parameters

packet | a valid SDES GstRTCPPacket |
type | result of the entry type |
len | result length of the entry data. | [out]
data | result entry data. | [out][array length=len][transfer none]

#### Returns

`TRUE` if there was valid data.

### gst_rtcp_packet_sdes_copy_entry ()

    gboolean
    gst_rtcp_packet_sdes_copy_entry (GstRTCPPacket *packet,
                                     GstRTCPSDESType *type,
                                     guint8 *len,
                                     guint8 **data);

This function is like `gst_rtcp_packet_sdes_get_entry()` but it returns a null-terminated copy of the data instead. use `g_free()` after usage.

#### Parameters

packet | a valid SDES GstRTCPPacket |
type | result of the entry type |
len | result length of the entry data. | [out]
data | result entry data. | [out][array length=len]

#### Returns

`TRUE` if there was valid data.

### gst_rtcp_packet_sdes_add_item ()

    gboolean
    gst_rtcp_packet_sdes_add_item (GstRTCPPacket *packet,
                                   guint32 ssrc);

Add a new SDES item for `ssrc` to `packet` .

#### Parameters

packet | a valid SDES GstRTCPPacket |
ssrc | the SSRC of the new item to add |

#### Returns

`TRUE` if the item could be added, `FALSE` if the maximum amount of items has been exceeded for the SDES packet or the MTU has been reached.

### gst_rtcp_packet_sdes_add_entry ()

    gboolean
    gst_rtcp_packet_sdes_add_entry (GstRTCPPacket *packet,
                                    GstRTCPSDESType type,
                                    guint8 len,
                                    const guint8 *data);

Add a new SDES entry to the current item in `packet` .

#### Parameters

packet | a valid SDES GstRTCPPacket |
type | the GstRTCPSDESType of the SDES entry |
len | the data length |
data | the data. | [array length=len]

#### Returns

`TRUE` if the item could be added, `FALSE` if the MTU has been reached.

### gst_rtcp_packet_bye_get_ssrc_count ()

    guint
    gst_rtcp_packet_bye_get_ssrc_count (GstRTCPPacket *packet);

Get the number of SSRC fields in `packet` .

#### Parameters

packet | a valid BYE GstRTCPPacket |

#### Returns

The number of SSRC fields in `packet` .

### gst_rtcp_packet_bye_get_nth_ssrc ()

    guint32
    gst_rtcp_packet_bye_get_nth_ssrc (GstRTCPPacket *packet,
                                      guint nth);

Get the `nth` SSRC of the BYE `packet` .

#### Parameters

packet | a valid BYE GstRTCPPacket |
nth | the nth SSRC to get |

#### Returns

The `nth` SSRC of `packet` .

### gst_rtcp_packet_bye_add_ssrc ()

    gboolean
    gst_rtcp_packet_bye_add_ssrc (GstRTCPPacket *packet,
                                  guint32 ssrc);

Add `ssrc` to the BYE `packet` .

#### Parameters

packet | a valid BYE GstRTCPPacket |
ssrc | an SSRC to add |

#### Returns

`TRUE` if the ssrc was added. This function can return `FALSE` if the max MTU is exceeded or the number of sources blocks is greater than GST_RTCP_MAX_BYE_SSRC_COUNT.

### gst_rtcp_packet_bye_add_ssrcs ()

    gboolean
    gst_rtcp_packet_bye_add_ssrcs (GstRTCPPacket *packet,
                                   guint32 *ssrc,
                                   guint len);

Adds `len` SSRCs in `ssrc` to BYE `packet` .

#### Parameters

packet | a valid BYE GstRTCPPacket |
ssrc | an array of SSRCs to add. | [array length=len][transfer none]
len | number of elements in `ssrc` |

#### Returns

`TRUE` if the all the SSRCs were added. This function can return `FALSE` if the max MTU is exceeded or the number of sources blocks is greater than GST_RTCP_MAX_BYE_SSRC_COUNT.

### gst_rtcp_packet_bye_get_reason_len ()

    guint8
    gst_rtcp_packet_bye_get_reason_len (GstRTCPPacket *packet);

Get the length of the reason string.

#### Parameters

packet | a valid BYE GstRTCPPacket |

#### Returns

The length of the reason string or 0 when there is no reason string present.

### gst_rtcp_packet_bye_get_reason ()

    gchar *
    gst_rtcp_packet_bye_get_reason (GstRTCPPacket *packet);

Get the reason in `packet` .

#### Parameters

packet | a valid BYE GstRTCPPacket |

#### Returns

The reason for the BYE `packet` or NULL if the packet did not contain a reason string. The string must be freed with `g_free()` after usage.

### gst_rtcp_packet_bye_set_reason ()

    gboolean
    gst_rtcp_packet_bye_set_reason (GstRTCPPacket *packet,
                                    const gchar *reason);

Set the reason string to `reason` in `packet` .

#### Parameters

packet | a valid BYE GstRTCPPacket |
reason | a reason string |

#### Returns

TRUE if the string could be set.

### gst_rtcp_packet_fb_get_type ()

    GstRTCPFBType
    gst_rtcp_packet_fb_get_type (GstRTCPPacket *packet);

Get the feedback message type of the FB `packet` .

#### Parameters

packet | a valid RTPFB or PSFB GstRTCPPacket |

#### Returns

The feedback message type.

### gst_rtcp_packet_fb_set_type ()

    void
    gst_rtcp_packet_fb_set_type (GstRTCPPacket *packet,
                                 GstRTCPFBType type);

Set the feedback message type of the FB `packet` .

#### Parameters

packet | a valid RTPFB or PSFB GstRTCPPacket |
type | the GstRTCPFBType to set |

### gst_rtcp_packet_fb_get_sender_ssrc ()

    guint32
    gst_rtcp_packet_fb_get_sender_ssrc (GstRTCPPacket *packet);

Get the sender SSRC field of the RTPFB or PSFB `packet` .

#### Parameters

packet | a valid RTPFB or PSFB GstRTCPPacket |

#### Returns

the sender SSRC.

### gst_rtcp_packet_fb_set_sender_ssrc ()

    void
    gst_rtcp_packet_fb_set_sender_ssrc (GstRTCPPacket *packet,
                                        guint32 ssrc);

Set the sender SSRC field of the RTPFB or PSFB `packet` .

#### Parameters

packet | a valid RTPFB or PSFB GstRTCPPacket |
ssrc | a sender SSRC |

### gst_rtcp_packet_fb_get_media_ssrc ()

    guint32
    gst_rtcp_packet_fb_get_media_ssrc (GstRTCPPacket *packet);

Get the media SSRC field of the RTPFB or PSFB `packet` .

#### Parameters

packet | a valid RTPFB or PSFB GstRTCPPacket |

#### Returns

the media SSRC.

### gst_rtcp_packet_fb_set_media_ssrc ()

    void
    gst_rtcp_packet_fb_set_media_ssrc (GstRTCPPacket *packet,
                                       guint32 ssrc);

Set the media SSRC field of the RTPFB or PSFB `packet` .

#### Parameters

packet | a valid RTPFB or PSFB GstRTCPPacket |
ssrc | a media SSRC |

### gst_rtcp_packet_fb_get_fci_length ()

    guint16
    gst_rtcp_packet_fb_get_fci_length (GstRTCPPacket *packet);

Get the length of the Feedback Control Information attached to a RTPFB or PSFB `packet` .

#### Parameters

packet | a valid RTPFB or PSFB GstRTCPPacket |

#### Returns

The length of the FCI in 32-bit words.

### gst_rtcp_packet_fb_set_fci_length ()

    gboolean
    gst_rtcp_packet_fb_set_fci_length (GstRTCPPacket *packet,
                                       guint16 wordlen);

Set the length of the Feedback Control Information attached to a RTPFB or PSFB `packet` .

#### Parameters

packet | a valid RTPFB or PSFB GstRTCPPacket |
wordlen | Length of the FCI in 32-bit words |

#### Returns

`TRUE` if there was enough space in the packet to add this much FCI

### gst_rtcp_packet_fb_get_fci ()

    guint8 *
    gst_rtcp_packet_fb_get_fci (GstRTCPPacket *packet);

Get the Feedback Control Information attached to a RTPFB or PSFB `packet` .

#### Parameters

packet | a valid RTPFB or PSFB GstRTCPPacket |

#### Returns

a pointer to the FCI

### gst_rtcp_packet_app_get_data ()

    guint8 *
    gst_rtcp_packet_app_get_data (GstRTCPPacket *packet);

Get the application-dependent data attached to a RTPFB or PSFB `packet` .

#### Parameters

packet | a valid APP GstRTCPPacket |

#### Returns

A pointer to the data

Since: 1.10

### gst_rtcp_packet_app_get_data_length ()

    guint16
    gst_rtcp_packet_app_get_data_length (GstRTCPPacket *packet);

Get the length of the application-dependent data attached to an APP `packet` .

#### Parameters

packet | a valid APP GstRTCPPacket |

#### Returns

The length of data in 32-bit words.

Since: 1.10

### gst_rtcp_packet_app_get_name ()

    const gchar *
    gst_rtcp_packet_app_get_name (GstRTCPPacket *packet);

Get the name field of the APP `packet` .

#### Parameters

packet | a valid APP GstRTCPPacket |

#### Returns

The 4-byte name field, not zero-terminated.

Since: 1.10

### gst_rtcp_packet_app_get_ssrc ()

    guint32
    gst_rtcp_packet_app_get_ssrc (GstRTCPPacket *packet);

Get the SSRC/CSRC field of the APP `packet` .

#### Parameters

packet | a valid APP GstRTCPPacket |

#### Returns

The SSRC/CSRC.

Since: 1.10

### gst_rtcp_packet_app_get_subtype ()

    guint8
    gst_rtcp_packet_app_get_subtype (GstRTCPPacket *packet);

Get the subtype field of the APP `packet` .

#### Parameters

packet | a valid APP GstRTCPPacket |

#### Returns

The subtype.

Since: 1.10

### gst_rtcp_packet_app_set_data_length ()

    gboolean
    gst_rtcp_packet_app_set_data_length (GstRTCPPacket *packet,
                                         guint16 wordlen);

Set the length of the application-dependent data attached to an APP `packet` .

#### Parameters

packet | a valid APP GstRTCPPacket |
wordlen | Length of the data in 32-bit words |

#### Returns

`TRUE` if there was enough space in the packet to add this much data.

Since: 1.10

### gst_rtcp_packet_app_set_name ()

    void
    gst_rtcp_packet_app_set_name (GstRTCPPacket *packet,
                                  const gchar *name);

Set the name field of the APP `packet` .

#### Parameters

packet | a valid APP GstRTCPPacket |
name | 4-byte ASCII name |

Since: 1.10

### gst_rtcp_packet_app_set_ssrc ()

    void
    gst_rtcp_packet_app_set_ssrc (GstRTCPPacket *packet,
                                  guint32 ssrc);

Set the SSRC/CSRC field of the APP `packet` .

#### Parameters

packet | a valid APP GstRTCPPacket |
ssrc | SSRC/CSRC of the packet |

Since: 1.10

### gst_rtcp_packet_app_set_subtype ()

    void
    gst_rtcp_packet_app_set_subtype (GstRTCPPacket *packet,
                                     guint8 subtype);

Set the subtype field of the APP `packet` .

#### Parameters

packet | a valid APP GstRTCPPacket |
subtype | subtype of the packet |

Since: 1.10

### gst_rtcp_packet_copy_profile_specific_ext ()

    gboolean
    gst_rtcp_packet_copy_profile_specific_ext
                                   (GstRTCPPacket *packet,
                                    guint8 **data,
                                    guint *len);

The profile-specific extension data is copied into a new allocated memory area `data` . This must be freed with `g_free()` after usage.

#### Parameters

packet | a valid SR or RR GstRTCPPacket |
data | result profile-specific data. | [out][array length=len]
len | length of the profile-specific extension data. | [out]

#### Returns

`TRUE` if there was valid data.

### gst_rtcp_packet_get_profile_specific_ext ()

    gboolean
    gst_rtcp_packet_get_profile_specific_ext
                                   (GstRTCPPacket *packet,
                                    guint8 **data,
                                    guint *len);

#### Parameters

packet | a valid SR or RR GstRTCPPacket |
data | result profile-specific data. | [out][array length=len][transfer none]
len | result length of the profile-specific data. | [out]

#### Returns

`TRUE` if there was valid data.

### gst_rtcp_packet_get_profile_specific_ext_length ()

    guint16
    gst_rtcp_packet_get_profile_specific_ext_length
                                   (GstRTCPPacket *packet);

#### Parameters

packet | a valid SR or RR GstRTCPPacket |

#### Returns

The number of 32-bit words containing profile-specific extension data from `packet` .

### gst_rtcp_ntp_to_unix ()

    guint64
    gst_rtcp_ntp_to_unix (guint64 ntptime);

Converts an NTP time to UNIX nanoseconds. `ntptime` can typically be the NTP time of an SR RTCP message and contains, in the upper 32 bits, the number of seconds since 1900 and, in the lower 32 bits, the fractional seconds. The resulting value will be the number of nanoseconds since 1970.

#### Parameters

ntptime | an NTP timestamp |

#### Returns

the UNIX time for `ntptime` in nanoseconds.

### gst_rtcp_unix_to_ntp ()

    guint64
    gst_rtcp_unix_to_ntp (guint64 unixtime);

Converts a UNIX timestamp in nanoseconds to an NTP time. The caller should pass a value with nanoseconds since 1970. The NTP time will, in the upper 32 bits, contain the number of seconds since 1900 and, in the lower 32 bits, the fractional seconds. The resulting value can be used as an ntptime for constructing SR RTCP packets.

#### Parameters

unixtime | an UNIX timestamp in nanoseconds |

#### Returns

the NTP time for `unixtime` .

### gst_rtcp_sdes_name_to_type ()

    GstRTCPSDESType
    gst_rtcp_sdes_name_to_type (const gchar *name);

Convert `name` into a `GstRTCPSDESType` . `name` is typically a key in a GstStructure containing SDES items.

#### Parameters

name | a SDES name |

#### Returns

the GstRTCPSDESType for `name` or GST_RTCP_SDES_PRIV when `name` is a private sdes item.

### gst_rtcp_sdes_type_to_name ()

    const gchar *
    gst_rtcp_sdes_type_to_name (GstRTCPSDESType type);

Converts `type` to the string equivalent. The string is typically used as a key in a GstStructure containing SDES items.

#### Parameters

type | a GstRTCPSDESType |

#### Returns

the string equivalent of `type`

## Types and Values

### GST_RTCP_VERSION

    #define GST_RTCP_VERSION 2

The supported RTCP version 2.

### GST_RTCP_MAX_SDES

    #define GST_RTCP_MAX_SDES 255

The maximum text length for an SDES item.

### GST_RTCP_MAX_BYE_SSRC_COUNT

    #define GST_RTCP_MAX_BYE_SSRC_COUNT   31

The maximum amount of SSRCs in a BYE packet.

### GST_RTCP_MAX_RB_COUNT

    #define GST_RTCP_MAX_RB_COUNT   31

The maximum amount of Receiver report blocks in RR and SR messages.

### GST_RTCP_MAX_SDES_ITEM_COUNT

    #define GST_RTCP_MAX_SDES_ITEM_COUNT   31

The maximum amount of SDES items.

### GST_RTCP_VALID_MASK

    #define GST_RTCP_VALID_MASK (0xc000 | 0x2000 | 0xfe)

Mask for version, padding bit and packet type pair

### GST_RTCP_VALID_VALUE

    #define GST_RTCP_VALID_VALUE ((GST_RTCP_VERSION << 14) | GST_RTCP_TYPE_SR)

Valid value for the first two bytes of an RTCP packet after applying GST_RTCP_VALID_MASK to them.

### enum GstRTCPType

Different RTCP packet types.

#### Members

GST_RTCP_TYPE_INVALID | Invalid type |
GST_RTCP_TYPE_SR | Sender report |
GST_RTCP_TYPE_RR | Receiver report |
GST_RTCP_TYPE_SDES | Source description |
GST_RTCP_TYPE_BYE | Goodbye |
GST_RTCP_TYPE_APP | Application defined |
GST_RTCP_TYPE_RTPFB | Transport layer feedback. |
GST_RTCP_TYPE_PSFB | Payload-specific feedback. |
GST_RTCP_TYPE_XR | Extended report. |

### struct GstRTCPPacket

    struct GstRTCPPacket {
      GstRTCPBuffer *rtcp;
      guint          offset;
    };

Data structure that points to a packet at `offset` in `buffer` . The size of the structure is made public to allow stack allocations.

#### Members

GstRTCPBuffer *`rtcp`; | pointer to RTCP buffer |
guint `offset`; | offset of packet in buffer data |

### enum GstRTCPSDESType

Different types of SDES content.

#### Members

GST_RTCP_SDES_INVALID | Invalid SDES entry |
GST_RTCP_SDES_END | End of SDES list |
GST_RTCP_SDES_CNAME | Canonical name |
GST_RTCP_SDES_NAME | User name |
GST_RTCP_SDES_EMAIL | User's electronic mail address |
GST_RTCP_SDES_PHONE | User's phone number |
GST_RTCP_SDES_LOC | Geographic user location |
GST_RTCP_SDES_TOOL | Name of application or tool |
GST_RTCP_SDES_NOTE | Notice about the source |
GST_RTCP_SDES_PRIV | Private extensions |

### enum GstRTCPFBType

Different types of feedback messages.

#### Members

GST_RTCP_FB_TYPE_INVALID | Invalid type |
GST_RTCP_RTPFB_TYPE_NACK | Generic NACK |
GST_RTCP_RTPFB_TYPE_TMMBR | Temporary Maximum Media Stream Bit Rate Request |
GST_RTCP_RTPFB_TYPE_TMMBN | Temporary Maximum Media Stream Bit Rate Notification |
GST_RTCP_RTPFB_TYPE_RTCP_SR_REQ | Request an SR packet for early synchronization |
GST_RTCP_PSFB_TYPE_PLI | Picture Loss Indication |
GST_RTCP_PSFB_TYPE_SLI | Slice Loss Indication |
GST_RTCP_PSFB_TYPE_RPSI | Reference Picture Selection Indication |
GST_RTCP_PSFB_TYPE_AFB | Application layer Feedback |
GST_RTCP_PSFB_TYPE_FIR | Full Intra Request Command |
GST_RTCP_PSFB_TYPE_TSTR | Temporal-Spatial Trade-off Request |
GST_RTCP_PSFB_TYPE_TSTN | Temporal-Spatial Trade-off Notification |
GST_RTCP_PSFB_TYPE_VBCN | Video Back Channel Message |

### struct GstRTCPBuffer

    struct GstRTCPBuffer {
      GstBuffer   *buffer;
      GstMapInfo   map;
    };

### GST_RTCP_BUFFER_INIT

    #define GST_RTCP_BUFFER_INIT { NULL, GST_MAP_INFO_INIT }

## See Also

GstRTPBasePayload, GstRTPBaseDepayload, gstrtpbuffer