Top |
#define | GST_RTP_VERSION |
struct | GstRTPBuffer |
#define | GST_RTP_BUFFER_INIT |
enum | GstRTPBufferFlags |
enum | GstRTPBufferMapFlags |
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.
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
.
buffer
must be writable and all previous memory in buffer
will be freed.
If pad_len
is >0, the padding bit will be set. All other RTP header fields
will be set to 0/FALSE.
GstBuffer * gst_rtp_buffer_new_take_data (gpointer data
,gsize 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.
GstBuffer * gst_rtp_buffer_new_copy_data (gconstpointer data
,gsize 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.
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.
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.
gboolean gst_rtp_buffer_map (GstBuffer *buffer
,GstMapFlags flags
,GstRTPBuffer *rtp
);
Map the contents of buffer
into rtp
.
void
gst_rtp_buffer_unmap (GstRTPBuffer *rtp
);
Unmap rtp
previously mapped with gst_rtp_buffer_map()
.
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.
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.
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.
void gst_rtp_buffer_set_packet_len (GstRTPBuffer *rtp
,guint len
);
Set the total rtp
size to len
. The data in the buffer will be made
larger if needed. Any padding will be removed from the packet.
guint
gst_rtp_buffer_get_packet_len (GstRTPBuffer *rtp
);
Return the total length of the packet in buffer
.
guint
gst_rtp_buffer_get_header_len (GstRTPBuffer *rtp
);
Return the total length of the header in buffer
. This include the length of
the fixed header, the CSRC list and the extension header.
guint8
gst_rtp_buffer_get_version (GstRTPBuffer *rtp
);
Get the version number of the RTP packet in buffer
.
void gst_rtp_buffer_set_version (GstRTPBuffer *rtp
,guint8 version
);
Set the version of the RTP packet in buffer
to version
.
gboolean
gst_rtp_buffer_get_padding (GstRTPBuffer *rtp
);
Check if the padding bit is set on the RTP packet in buffer
.
void gst_rtp_buffer_set_padding (GstRTPBuffer *rtp
,gboolean padding
);
Set the padding bit on the RTP packet in buffer
to padding
.
void gst_rtp_buffer_pad_to (GstRTPBuffer *rtp
,guint len
);
Set the amount of padding in the RTP packet in buffer
to
len
. If len
is 0, the padding is removed.
NOTE: This function does not work correctly.
gboolean
gst_rtp_buffer_get_extension (GstRTPBuffer *rtp
);
Check if the extension bit is set on the RTP packet in buffer
.
void gst_rtp_buffer_set_extension (GstRTPBuffer *rtp
,gboolean extension
);
Set the extension bit on the RTP packet in buffer
to extension
.
gboolean gst_rtp_buffer_get_extension_data (GstRTPBuffer *rtp
,guint16 *bits
,gpointer *data
,guint *wordlen
);
Get the extension data. bits
will contain the extension 16 bits of custom
data. data
will point to the data in the extension and wordlen
will contain
the length of data
in 32 bits words.
If buffer
did not contain an extension, this function will return FALSE
with bits
, data
and wordlen
unchanged.
[skip]
GBytes * gst_rtp_buffer_get_extension_bytes (GstRTPBuffer *rtp
,guint16 *bits
);
Similar to gst_rtp_buffer_get_extension_data, but more suitable for language
bindings usage. bits
will contain the extension 16 bits of custom data and
the extension data (not including the extension header) is placed in a new
GBytes structure.
If rtp
did not contain an extension, this function will return NULL
, with
bits
unchanged. If there is an extension header but no extension data then
an empty GBytes will be returned.
[rename-to gst_rtp_buffer_get_extension_data]
Since: 1.2
guint32
gst_rtp_buffer_get_ssrc (GstRTPBuffer *rtp
);
Get the SSRC of the RTP packet in buffer
.
void gst_rtp_buffer_set_ssrc (GstRTPBuffer *rtp
,guint32 ssrc
);
Set the SSRC on the RTP packet in buffer
to ssrc
.
guint8
gst_rtp_buffer_get_csrc_count (GstRTPBuffer *rtp
);
Get the CSRC count of the RTP packet in buffer
.
guint32 gst_rtp_buffer_get_csrc (GstRTPBuffer *rtp
,guint8 idx
);
Get the CSRC at index idx
in buffer
.
void gst_rtp_buffer_set_csrc (GstRTPBuffer *rtp
,guint8 idx
,guint32 csrc
);
Modify the CSRC at index idx
in buffer
to csrc
.
gboolean
gst_rtp_buffer_get_marker (GstRTPBuffer *rtp
);
Check if the marker bit is set on the RTP packet in buffer
.
void gst_rtp_buffer_set_marker (GstRTPBuffer *rtp
,gboolean marker
);
Set the marker bit on the RTP packet in buffer
to marker
.
guint8
gst_rtp_buffer_get_payload_type (GstRTPBuffer *rtp
);
Get the payload type of the RTP packet in buffer
.
void gst_rtp_buffer_set_payload_type (GstRTPBuffer *rtp
,guint8 payload_type
);
Set the payload type of the RTP packet in buffer
to payload_type
.
guint16
gst_rtp_buffer_get_seq (GstRTPBuffer *rtp
);
Get the sequence number of the RTP packet in buffer
.
void gst_rtp_buffer_set_seq (GstRTPBuffer *rtp
,guint16 seq
);
Set the sequence number of the RTP packet in buffer
to seq
.
guint32
gst_rtp_buffer_get_timestamp (GstRTPBuffer *rtp
);
Get the timestamp of the RTP packet in buffer
.
void gst_rtp_buffer_set_timestamp (GstRTPBuffer *rtp
,guint32 timestamp
);
Set the timestamp of the RTP packet in buffer
to timestamp
.
GstBuffer *
gst_rtp_buffer_get_payload_buffer (GstRTPBuffer *rtp
);
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.
GstBuffer * gst_rtp_buffer_get_payload_subbuffer (GstRTPBuffer *rtp
,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
is subbuffered.
guint
gst_rtp_buffer_get_payload_len (GstRTPBuffer *rtp
);
Get the length of the payload of the RTP packet in buffer
.
GBytes *
gst_rtp_buffer_get_payload_bytes (GstRTPBuffer *rtp
);
Similar to gst_rtp_buffer_get_payload, but more suitable for language
bindings usage. The return value is a pointer to a GBytes structure
containing the payload data in rtp
.
[rename-to gst_rtp_buffer_get_payload]
Since: 1.2
gpointer
gst_rtp_buffer_get_payload (GstRTPBuffer *rtp
);
Get a pointer to the payload data in buffer
. This pointer is valid as long
as a reference to buffer
is held.
[skip]
guint32
gst_rtp_buffer_default_clock_rate (guint8 payload_type
);
Get the default clock-rate for the static payload type payload_type
.
gint gst_rtp_buffer_compare_seqnum (guint16 seqnum1
,guint16 seqnum2
);
Compare two sequence numbers, taking care of wraparounds. This function
returns the difference between seqnum1
and seqnum2
.
guint64 gst_rtp_buffer_ext_timestamp (guint64 *exttimestamp
,guint32 timestamp
);
Update the exttimestamp
field with the extended timestamp of timestamp
For the first call of the method, exttimestamp
should point to a location
with a value of -1.
This function is able to handle both forward and backward timestamps taking into account:
timestamp wraparound making sure that the returned value is properly increased.
timestamp unwraparound making sure that the returned value is properly decreased.
gboolean gst_rtp_buffer_set_extension_data (GstRTPBuffer *rtp
,guint16 bits
,guint16 length
);
Set the extension bit of the rtp buffer and fill in the bits
and length
of the
extension header. If the existing extension data is not large enough, it will
be made larger.
gboolean gst_rtp_buffer_get_extension_onebyte_header (GstRTPBuffer *rtp
,guint8 id
,guint nth
,gpointer *data
,guint *size
);
Parses RFC 5285 style header extensions with a one byte header. It will return the nth extension with the requested id.
gboolean gst_rtp_buffer_get_extension_twobytes_header (GstRTPBuffer *rtp
,guint8 *appbits
,guint8 id
,guint nth
,gpointer *data
,guint *size
);
Parses RFC 5285 style header extensions with a two bytes header. It will return the nth extension with the requested id.
rtp |
the RTP packet |
|
appbits |
Application specific bits. |
[out] |
id |
The ID of the header extension to be read (between 1 and 14). |
|
nth |
Read the nth extension packet with the requested ID |
|
data |
location for data. |
[out][array length=size][element-type guint8][transfer none] |
size |
the size of the data in bytes. |
[out] |
gboolean gst_rtp_buffer_add_extension_onebyte_header (GstRTPBuffer *rtp
,guint8 id
,gconstpointer data
,guint size
);
Adds a RFC 5285 header extension with a one byte header to the end of the
RTP header. If there is already a RFC 5285 header extension with a one byte
header, the new extension will be appended.
It will not work if there is already a header extension that does not follow
the mecanism described in RFC 5285 or if there is a header extension with
a two bytes header as described in RFC 5285. In that case, use
gst_rtp_buffer_add_extension_twobytes_header()
gboolean gst_rtp_buffer_add_extension_twobytes_header (GstRTPBuffer *rtp
,guint8 appbits
,guint8 id
,gconstpointer data
,guint size
);
Adds a RFC 5285 header extension with a two bytes header to the end of the
RTP header. If there is already a RFC 5285 header extension with a two bytes
header, the new extension will be appended.
It will not work if there is already a header extension that does not follow
the mecanism described in RFC 5285 or if there is a header extension with
a one byte header as described in RFC 5285. In that case, use
gst_rtp_buffer_add_extension_onebyte_header()
struct GstRTPBuffer { GstBuffer *buffer; guint state; gpointer data[4]; gsize size[4]; GstMapInfo map[4]; };
Data structure that points to an RTP packet. The size of the structure is made public to allow stack allocations.
GstBuffer * |
pointer to RTP buffer |
|
guint |
internal state |
|
gpointer |
array of data |
|
gsize |
array of size |
|
GstMapInfo |
array of GstMapInfo |
Additional RTP buffer flags. These flags can potentially be used on any buffers carrying RTP packets.
Note that these are only valid for GstCaps of type: application/x-rtp (x-rtcp). They can conflict with other extended buffer flags.
The GstBuffer was once wrapped in a retransmitted packet as specified by RFC 4588. |
||
The packet represents redundant RTP packet. The flag is used in gstrtpstorage to be able to hold the packetback and use it only for recovery from packet loss. Since: 1.14 |
||
Offset to define more flags. |
Since: 1.10