gstrtpbuffer

gstrtpbuffer — Helper methods for dealing with RTP buffers

Synopsis


#include <gst/rtp/gstrtpbuffer.h>


enum                GstRTPPayload;
#define             GST_RTP_VERSION
void                gst_rtp_buffer_allocate_data        (GstBuffer *buffer,
                                                         guint payload_len,
                                                         guint8 pad_len,
                                                         guint8 csrc_count);
guint               gst_rtp_buffer_calc_header_len      (guint8 csrc_count);
guint               gst_rtp_buffer_calc_packet_len      (guint payload_len,
                                                         guint8 pad_len,
                                                         guint8 csrc_count);
guint               gst_rtp_buffer_calc_payload_len     (guint packet_len,
                                                         guint8 pad_len,
                                                         guint8 csrc_count);
guint32             gst_rtp_buffer_default_clock_rate   (guint8 payload_type);
guint32             gst_rtp_buffer_get_csrc             (GstBuffer *buffer,
                                                         guint8 idx);
guint8              gst_rtp_buffer_get_csrc_count       (GstBuffer *buffer);
gboolean            gst_rtp_buffer_get_extension        (GstBuffer *buffer);
gboolean            gst_rtp_buffer_get_marker           (GstBuffer *buffer);
guint               gst_rtp_buffer_get_packet_len       (GstBuffer *buffer);
gboolean            gst_rtp_buffer_get_padding          (GstBuffer *buffer);
gpointer            gst_rtp_buffer_get_payload          (GstBuffer *buffer);
GstBuffer*          gst_rtp_buffer_get_payload_buffer   (GstBuffer *buffer);
GstBuffer*          gst_rtp_buffer_get_payload_subbuffer
                                                        (GstBuffer *buffer,
                                                         guint offset,
                                                         guint len);
guint               gst_rtp_buffer_get_payload_len      (GstBuffer *buffer);
guint8              gst_rtp_buffer_get_payload_type     (GstBuffer *buffer);
guint16             gst_rtp_buffer_get_seq              (GstBuffer *buffer);
guint32             gst_rtp_buffer_get_ssrc             (GstBuffer *buffer);
guint32             gst_rtp_buffer_get_timestamp        (GstBuffer *buffer);
guint8              gst_rtp_buffer_get_version          (GstBuffer *buffer);
GstBuffer*          gst_rtp_buffer_new_allocate         (guint payload_len,
                                                         guint8 pad_len,
                                                         guint8 csrc_count);
GstBuffer*          gst_rtp_buffer_new_allocate_len     (guint packet_len,
                                                         guint8 pad_len,
                                                         guint8 csrc_count);
GstBuffer*          gst_rtp_buffer_new_copy_data        (gpointer data,
                                                         guint len);
GstBuffer*          gst_rtp_buffer_new_take_data        (gpointer data,
                                                         guint len);
void                gst_rtp_buffer_pad_to               (GstBuffer *buffer,
                                                         guint len);
void                gst_rtp_buffer_set_csrc             (GstBuffer *buffer,
                                                         guint8 idx,
                                                         guint32 csrc);
void                gst_rtp_buffer_set_extension        (GstBuffer *buffer,
                                                         gboolean extension);
void                gst_rtp_buffer_set_marker           (GstBuffer *buffer,
                                                         gboolean marker);
void                gst_rtp_buffer_set_packet_len       (GstBuffer *buffer,
                                                         guint len);
void                gst_rtp_buffer_set_padding          (GstBuffer *buffer,
                                                         gboolean padding);
void                gst_rtp_buffer_set_payload_type     (GstBuffer *buffer,
                                                         guint8 payload_type);
void                gst_rtp_buffer_set_seq              (GstBuffer *buffer,
                                                         guint16 seq);
void                gst_rtp_buffer_set_ssrc             (GstBuffer *buffer,
                                                         guint32 ssrc);
void                gst_rtp_buffer_set_timestamp        (GstBuffer *buffer,
                                                         guint32 timestamp);
void                gst_rtp_buffer_set_version          (GstBuffer *buffer,
                                                         guint8 version);
gboolean            gst_rtp_buffer_validate             (GstBuffer *buffer);
gboolean            gst_rtp_buffer_validate_data        (guint8 *data,
                                                         guint len);

Description

The GstRTPBuffer helper functions makes it easy to parse and create regular GstBuffer objects that contain RTP payloads. These buffers are typically of 'application/x-rtp' GstCaps.

Last reviewed on 2006-07-17 (0.10.10)

Details

enum GstRTPPayload

typedef enum
{
  /* Audio: */
  GST_RTP_PAYLOAD_PCMU = 0,
  GST_RTP_PAYLOAD_1016 = 1, /* RFC 3551 says reserved */
  GST_RTP_PAYLOAD_G721 = 2, /* RFC 3551 says reserved */
  GST_RTP_PAYLOAD_GSM = 3,
  GST_RTP_PAYLOAD_G723 = 4,
  GST_RTP_PAYLOAD_DVI4_8000 = 5,
  GST_RTP_PAYLOAD_DVI4_16000 = 6,
  GST_RTP_PAYLOAD_LPC = 7,
  GST_RTP_PAYLOAD_PCMA = 8,
  GST_RTP_PAYLOAD_G722 = 9,
  GST_RTP_PAYLOAD_L16_STEREO = 10,
  GST_RTP_PAYLOAD_L16_MONO = 11,
  GST_RTP_PAYLOAD_QCELP = 12,
  GST_RTP_PAYLOAD_CN = 13,
  GST_RTP_PAYLOAD_MPA = 14,
  GST_RTP_PAYLOAD_G728 = 15,
  GST_RTP_PAYLOAD_DVI4_11025 = 16,
  GST_RTP_PAYLOAD_DVI4_22050 = 17,
  GST_RTP_PAYLOAD_G729 = 18,   

  /* Video: */

  GST_RTP_PAYLOAD_CELLB = 25,
  GST_RTP_PAYLOAD_JPEG = 26,
  GST_RTP_PAYLOAD_NV = 28,
  GST_RTP_PAYLOAD_H261 = 31,
  GST_RTP_PAYLOAD_MPV = 32,
  GST_RTP_PAYLOAD_MP2T = 33,
  GST_RTP_PAYLOAD_H263 = 34,

  /* BOTH */
} GstRTPPayload;

Standard predefined fixed payload types.

The official list is at: http://www.iana.org/assignments/rtp-parameters

Audio: reserved: 19 unassigned: 20-23,

Video: unassigned: 24, 27, 29, 30, 35-71, 77-95 Reserved for RTCP conflict avoidance: 72-76

GST_RTP_PAYLOAD_PCMU

ITU-T G.711. mu-law audio (RFC 3551)

GST_RTP_PAYLOAD_1016

RFC 3551 says reserved

GST_RTP_PAYLOAD_G721

RFC 3551 says reserved

GST_RTP_PAYLOAD_GSM

GSM audio

GST_RTP_PAYLOAD_G723

ITU G.723.1 audio

GST_RTP_PAYLOAD_DVI4_8000

IMA ADPCM wave type (RFC 3551)

GST_RTP_PAYLOAD_DVI4_16000

IMA ADPCM wave type (RFC 3551)

GST_RTP_PAYLOAD_LPC

experimental linear predictive encoding

GST_RTP_PAYLOAD_PCMA

ITU-T G.711 A-law audio (RFC 3551)

GST_RTP_PAYLOAD_G722

ITU-T G.722 (RFC 3551)

GST_RTP_PAYLOAD_L16_STEREO

stereo PCM

GST_RTP_PAYLOAD_L16_MONO

mono PCM

GST_RTP_PAYLOAD_QCELP

EIA & TIA standard IS-733

GST_RTP_PAYLOAD_CN

Comfort Noise (RFC 3389)

GST_RTP_PAYLOAD_MPA

Audio MPEG 1-3.

GST_RTP_PAYLOAD_G728

ITU-T G.728 Speech coder (RFC 3551)

GST_RTP_PAYLOAD_DVI4_11025

IMA ADPCM wave type (RFC 3551)

GST_RTP_PAYLOAD_DVI4_22050

IMA ADPCM wave type (RFC 3551)

GST_RTP_PAYLOAD_G729

ITU-T G.729 Speech coder (RFC 3551)

GST_RTP_PAYLOAD_CELLB

See RFC 2029

GST_RTP_PAYLOAD_JPEG

ISO Standards 10918-1 and 10918-2 (RFC 2435)

GST_RTP_PAYLOAD_NV

nv encoding by Ron Frederick

GST_RTP_PAYLOAD_H261

ITU-T Recommendation H.261 (RFC 2032)

GST_RTP_PAYLOAD_MPV

Video MPEG 1 & 2 (RFC 2250)

GST_RTP_PAYLOAD_MP2T

MPEG-2 transport stream (RFC 2250)

GST_RTP_PAYLOAD_H263

Video H263 (RFC 2190)

GST_RTP_VERSION

#define GST_RTP_VERSION 2

The supported RTP version 2.


gst_rtp_buffer_allocate_data ()

void                gst_rtp_buffer_allocate_data        (GstBuffer *buffer,
                                                         guint payload_len,
                                                         guint8 pad_len,
                                                         guint8 csrc_count);

Allocate enough data in buffer to hold an RTP packet with csrc_count CSRCs, a payload length of payload_len and padding of pad_len. MALLOCDATA of buffer will be overwritten and will not be freed. All other RTP header fields will be set to 0/FALSE.

buffer :

a GstBuffer

payload_len :

the length of the payload

pad_len :

the amount of padding

csrc_count :

the number of CSRC entries

gst_rtp_buffer_calc_header_len ()

guint               gst_rtp_buffer_calc_header_len      (guint8 csrc_count);

Calculate the header length of an RTP packet with csrc_count CSRC entries. An RTP packet can have at most 15 CSRC entries.

csrc_count :

the number of CSRC entries

Returns :

The length of an RTP header with csrc_count CSRC entries.

gst_rtp_buffer_calc_packet_len ()

guint               gst_rtp_buffer_calc_packet_len      (guint payload_len,
                                                         guint8 pad_len,
                                                         guint8 csrc_count);

Calculate the total length of an RTP packet with a payload size of payload_len, a padding of pad_len and a csrc_count CSRC entries.

payload_len :

the length of the payload

pad_len :

the amount of padding

csrc_count :

the number of CSRC entries

Returns :

The total length of an RTP header with given parameters.

gst_rtp_buffer_calc_payload_len ()

guint               gst_rtp_buffer_calc_payload_len     (guint packet_len,
                                                         guint8 pad_len,
                                                         guint8 csrc_count);

Calculate the length of the payload of an RTP packet with size packet_len, a padding of pad_len and a csrc_count CSRC entries.

packet_len :

the length of the total RTP packet

pad_len :

the amount of padding

csrc_count :

the number of CSRC entries

Returns :

The length of the payload of an RTP packet with given parameters.

gst_rtp_buffer_default_clock_rate ()

guint32             gst_rtp_buffer_default_clock_rate   (guint8 payload_type);

Get the default clock-rate for the static payload type payload_type.

payload_type :

the static payload type

Returns :

the default clock rate or -1 if the payload type is not static or the clock-rate is undefined.

Since 0.10.13


gst_rtp_buffer_get_csrc ()

guint32             gst_rtp_buffer_get_csrc             (GstBuffer *buffer,
                                                         guint8 idx);

Get the CSRC at index idx in buffer.

buffer :

the buffer

idx :

the index of the CSRC to get

Returns :

the CSRC at index idx in host order.

gst_rtp_buffer_get_csrc_count ()

guint8              gst_rtp_buffer_get_csrc_count       (GstBuffer *buffer);

Get the CSRC count of the RTP packet in buffer.

buffer :

the buffer

Returns :

the CSRC count of buffer.

gst_rtp_buffer_get_extension ()

gboolean            gst_rtp_buffer_get_extension        (GstBuffer *buffer);

Check if the extension bit is set on the RTP packet in buffer.

buffer :

the buffer

Returns :

TRUE if buffer has the extension bit set.

gst_rtp_buffer_get_marker ()

gboolean            gst_rtp_buffer_get_marker           (GstBuffer *buffer);

Check if the marker bit is set on the RTP packet in buffer.

buffer :

the buffer

Returns :

TRUE if buffer has the marker bit set.

gst_rtp_buffer_get_packet_len ()

guint               gst_rtp_buffer_get_packet_len       (GstBuffer *buffer);

Return the total length of the packet in buffer.

buffer :

the buffer

Returns :

The total length of the packet in buffer.

gst_rtp_buffer_get_padding ()

gboolean            gst_rtp_buffer_get_padding          (GstBuffer *buffer);

Check if the padding bit is set on the RTP packet in buffer.

buffer :

the buffer

Returns :

TRUE if buffer has the padding bit set.

gst_rtp_buffer_get_payload ()

gpointer            gst_rtp_buffer_get_payload          (GstBuffer *buffer);

Get a pointer to the payload data in buffer. This pointer is valid as long as a reference to buffer is held.

buffer :

the buffer

Returns :

A pointer to the payload data in buffer.

gst_rtp_buffer_get_payload_buffer ()

GstBuffer*          gst_rtp_buffer_get_payload_buffer   (GstBuffer *buffer);

Create a buffer of the payload of the RTP packet in buffer. This function will internally create a subbuffer of buffer so that a memcpy can be avoided.

buffer :

the buffer

Returns :

A new buffer with the data of the payload.

gst_rtp_buffer_get_payload_subbuffer ()

GstBuffer*          gst_rtp_buffer_get_payload_subbuffer
                                                        (GstBuffer *buffer,
                                                         guint offset,
                                                         guint len);

Create a subbuffer of the payload of the RTP packet in buffer. offset bytes are skipped in the payload and the subbuffer will be of size len. If len is -1 the total payload starting from offset if subbuffered.

buffer :

the buffer

offset :

the offset in the payload

len :

the length in the payload

Returns :

A new buffer with the specified data of the payload.

Since 0.10.10


gst_rtp_buffer_get_payload_len ()

guint               gst_rtp_buffer_get_payload_len      (GstBuffer *buffer);

Get the length of the payload of the RTP packet in buffer.

buffer :

the buffer

Returns :

The length of the payload in buffer.

gst_rtp_buffer_get_payload_type ()

guint8              gst_rtp_buffer_get_payload_type     (GstBuffer *buffer);

Get the payload type of the RTP packet in buffer.

buffer :

the buffer

Returns :

The payload type.

gst_rtp_buffer_get_seq ()

guint16             gst_rtp_buffer_get_seq              (GstBuffer *buffer);

Get the sequence number of the RTP packet in buffer.

buffer :

the buffer

Returns :

The sequence number in host order.

gst_rtp_buffer_get_ssrc ()

guint32             gst_rtp_buffer_get_ssrc             (GstBuffer *buffer);

Get the SSRC of the RTP packet in buffer.

buffer :

the buffer

Returns :

the SSRC of buffer in host order.

gst_rtp_buffer_get_timestamp ()

guint32             gst_rtp_buffer_get_timestamp        (GstBuffer *buffer);

Get the timestamp of the RTP packet in buffer.

buffer :

the buffer

Returns :

The timestamp in host order.

gst_rtp_buffer_get_version ()

guint8              gst_rtp_buffer_get_version          (GstBuffer *buffer);

Get the version number of the RTP packet in buffer.

buffer :

the buffer

Returns :

The version of buffer.

gst_rtp_buffer_new_allocate ()

GstBuffer*          gst_rtp_buffer_new_allocate         (guint payload_len,
                                                         guint8 pad_len,
                                                         guint8 csrc_count);

Allocate a new Gstbuffer with enough data to hold an RTP packet with csrc_count CSRCs, a payload length of payload_len and padding of pad_len. All other RTP header fields will be set to 0/FALSE.

payload_len :

the length of the payload

pad_len :

the amount of padding

csrc_count :

the number of CSRC entries

Returns :

A newly allocated buffer that can hold an RTP packet with given parameters.

gst_rtp_buffer_new_allocate_len ()

GstBuffer*          gst_rtp_buffer_new_allocate_len     (guint packet_len,
                                                         guint8 pad_len,
                                                         guint8 csrc_count);

Create a new GstBuffer that can hold an RTP packet that is exactly packet_len long. The length of the payload depends on pad_len and csrc_count and can be calculated with gst_rtp_buffer_calc_payload_len(). All RTP header fields will be set to 0/FALSE.

packet_len :

the total length of the packet

pad_len :

the amount of padding

csrc_count :

the number of CSRC entries

Returns :

A newly allocated buffer that can hold an RTP packet of packet_len.

gst_rtp_buffer_new_copy_data ()

GstBuffer*          gst_rtp_buffer_new_copy_data        (gpointer 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.

data :

data for the new buffer

len :

the length of data

Returns :

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

gst_rtp_buffer_new_take_data ()

GstBuffer*          gst_rtp_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.

data :

data for the new buffer

len :

the length of data

Returns :

A newly allocated buffer with data and of size len.

gst_rtp_buffer_pad_to ()

void                gst_rtp_buffer_pad_to               (GstBuffer *buffer,
                                                         guint len);

Set the amount of padding in the RTP packing in buffer to len. If len is 0, the padding is removed.

NOTE: This function does not work correctly.

buffer :

the buffer

len :

the new amount of padding

gst_rtp_buffer_set_csrc ()

void                gst_rtp_buffer_set_csrc             (GstBuffer *buffer,
                                                         guint8 idx,
                                                         guint32 csrc);

Modify the CSRC at index idx in buffer to csrc.

buffer :

the buffer

idx :

the CSRC index to set

csrc :

the CSRC in host order to set at idx

gst_rtp_buffer_set_extension ()

void                gst_rtp_buffer_set_extension        (GstBuffer *buffer,
                                                         gboolean extension);

Set the extension bit on the RTP packet in buffer to extension.

buffer :

the buffer

extension :

the new extension

gst_rtp_buffer_set_marker ()

void                gst_rtp_buffer_set_marker           (GstBuffer *buffer,
                                                         gboolean marker);

Set the marker bit on the RTP packet in buffer to marker.

buffer :

the buffer

marker :

the new marker

gst_rtp_buffer_set_packet_len ()

void                gst_rtp_buffer_set_packet_len       (GstBuffer *buffer,
                                                         guint len);

Set the total buffer size to len. The data in the buffer will be made larger if needed. Any padding will be removed from the packet.

buffer :

the buffer

len :

the new packet length

gst_rtp_buffer_set_padding ()

void                gst_rtp_buffer_set_padding          (GstBuffer *buffer,
                                                         gboolean padding);

Set the padding bit on the RTP packet in buffer to padding.

buffer :

the buffer

padding :

the new padding

gst_rtp_buffer_set_payload_type ()

void                gst_rtp_buffer_set_payload_type     (GstBuffer *buffer,
                                                         guint8 payload_type);

Set the payload type of the RTP packet in buffer to payload_type.

buffer :

the buffer

payload_type :

the new type

gst_rtp_buffer_set_seq ()

void                gst_rtp_buffer_set_seq              (GstBuffer *buffer,
                                                         guint16 seq);

Set the sequence number of the RTP packet in buffer to seq.

buffer :

the buffer

seq :

the new sequence number

gst_rtp_buffer_set_ssrc ()

void                gst_rtp_buffer_set_ssrc             (GstBuffer *buffer,
                                                         guint32 ssrc);

Set the SSRC on the RTP packet in buffer to ssrc.

buffer :

the buffer

ssrc :

the new SSRC

gst_rtp_buffer_set_timestamp ()

void                gst_rtp_buffer_set_timestamp        (GstBuffer *buffer,
                                                         guint32 timestamp);

Set the timestamp of the RTP packet in buffer to timestamp.

buffer :

the buffer

timestamp :

the new timestamp

gst_rtp_buffer_set_version ()

void                gst_rtp_buffer_set_version          (GstBuffer *buffer,
                                                         guint8 version);

Set the version of the RTP packet in buffer to version.

buffer :

the buffer

version :

the new version

gst_rtp_buffer_validate ()

gboolean            gst_rtp_buffer_validate             (GstBuffer *buffer);

Check if the data pointed to by buffer is a valid RTP packet using gst_rtp_buffer_validate_data().

buffer :

the buffer to validate

Returns :

TRUE if buffer is a valid RTP packet.

gst_rtp_buffer_validate_data ()

gboolean            gst_rtp_buffer_validate_data        (guint8 *data,
                                                         guint len);

Check if the data and size point to the data of a valid RTP packet. This function checks the length, version and padding of the packet data. Use this function to validate a packet before using the other functions in this module.

data :

the data to validate

len :

the length of data to validate

Returns :

TRUE if the data points to a valid RTP packet.

See Also

gstbasertppayload, gstbasertpdepayload