Top |
#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 |
enum | GstRTCPType |
struct | GstRTCPPacket |
enum | GstRTCPSDESType |
enum | GstRTCPFBType |
struct | GstRTCPBuffer |
#define | GST_RTCP_BUFFER_INIT |
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()
.
#define GST_RTCP_VALID_MASK (0xc000 | 0x2000 | 0xfe)
Mask for version, padding bit and packet type pair
#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.
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.
GstBuffer * gst_rtcp_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.
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.
Since: 1.6
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()
.
Since: 1.6
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.
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()
.
GstBuffer *
gst_rtcp_buffer_new (guint mtu
);
Create a new buffer for constructing RTCP packets. The packet will have a
maximum size of mtu
.
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
.
buffer |
a buffer with an RTCP packet |
|
flags |
flags for the mapping |
|
rtcp |
resulting GstRTCPBuffer |
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.
guint
gst_rtcp_buffer_get_packet_count (GstRTCPBuffer *rtcp
);
Get the number of RTCP packets in rtcp
.
gboolean gst_rtcp_buffer_get_first_packet (GstRTCPBuffer *rtcp
,GstRTCPPacket *packet
);
Initialize a new GstRTCPPacket pointer that points to the first packet in
rtcp
.
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
.
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.
rtcp |
a valid RTCP buffer |
|
type |
the GstRTCPType of the new packet |
|
packet |
pointer to new packet |
gboolean
gst_rtcp_packet_remove (GstRTCPPacket *packet
);
Removes the packet pointed to by packet
and moves pointer to the next one
gboolean
gst_rtcp_packet_get_padding (GstRTCPPacket *packet
);
Get the packet padding of the packet pointed to by packet
.
guint8
gst_rtcp_packet_get_count (GstRTCPPacket *packet
);
Get the count field in packet
.
GstRTCPType
gst_rtcp_packet_get_type (GstRTCPPacket *packet
);
Get the packet type of the packet pointed to by packet
.
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.
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.
packet |
a valid SR GstRTCPPacket |
|
ssrc |
result SSRC |
|
ntptime |
result NTP time |
|
rtptime |
result RTP time |
|
packet_count |
result packet count |
|
octet_count |
result octet count |
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
.
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 |
guint32
gst_rtcp_packet_rr_get_ssrc (GstRTCPPacket *packet
);
Get the ssrc field of the RR packet
.
void gst_rtcp_packet_rr_set_ssrc (GstRTCPPacket *packet
,guint32 ssrc
);
Set the ssrc field of the RR packet
.
guint
gst_rtcp_packet_get_rb_count (GstRTCPPacket *packet
);
Get the number of report blocks in packet
.
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.
packet |
a valid SR or RR GstRTCPPacket |
|
nth |
the nth report block in |
|
ssrc |
result for data source being reported |
|
fractionlost |
result for fraction lost since last SR/RR |
|
packetslost |
result for the cumululative number of packets lost |
|
exthighestseq |
result for the extended last sequence number received |
|
jitter |
result for the interarrival jitter |
|
lsr |
result for the last SR packet from this source |
|
dlsr |
result for the delay since last SR packet |
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.
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 |
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.
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.
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 |
guint
gst_rtcp_packet_sdes_get_item_count (GstRTCPPacket *packet
);
Get the number of items in the SDES packet packet
.
gboolean
gst_rtcp_packet_sdes_first_item (GstRTCPPacket *packet
);
Move to the first SDES item in packet
.
gboolean
gst_rtcp_packet_sdes_next_item (GstRTCPPacket *packet
);
Move to the next SDES item in packet
.
guint32
gst_rtcp_packet_sdes_get_ssrc (GstRTCPPacket *packet
);
Get the SSRC of the current SDES item.
gboolean
gst_rtcp_packet_sdes_first_entry (GstRTCPPacket *packet
);
Move to the first SDES entry in the current item.
gboolean
gst_rtcp_packet_sdes_next_entry (GstRTCPPacket *packet
);
Move to the next SDES entry in the current item.
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.
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] |
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.
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] |
gboolean gst_rtcp_packet_sdes_add_item (GstRTCPPacket *packet
,guint32 ssrc
);
Add a new SDES item for ssrc
to packet
.
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
.
packet |
a valid SDES GstRTCPPacket |
|
type |
the GstRTCPSDESType of the SDES entry |
|
len |
the data length |
|
data |
the data. |
[array length=len] |
guint
gst_rtcp_packet_bye_get_ssrc_count (GstRTCPPacket *packet
);
Get the number of SSRC fields in packet
.
guint32 gst_rtcp_packet_bye_get_nth_ssrc (GstRTCPPacket *packet
,guint nth
);
Get the nth
SSRC of the BYE packet
.
gboolean gst_rtcp_packet_bye_add_ssrc (GstRTCPPacket *packet
,guint32 ssrc
);
Add ssrc
to the BYE packet
.
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.
gboolean gst_rtcp_packet_bye_add_ssrcs (GstRTCPPacket *packet
,guint32 *ssrc
,guint len
);
Adds len
SSRCs in ssrc
to BYE packet
.
packet |
a valid BYE GstRTCPPacket |
|
ssrc |
an array of SSRCs to add |
|
len |
number of elements in |
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.
guint8
gst_rtcp_packet_bye_get_reason_len (GstRTCPPacket *packet
);
Get the length of the reason string.
gchar *
gst_rtcp_packet_bye_get_reason (GstRTCPPacket *packet
);
Get the reason in packet
.
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.
gboolean gst_rtcp_packet_bye_set_reason (GstRTCPPacket *packet
,const gchar *reason
);
Set the reason string to reason
in packet
.
GstRTCPFBType
gst_rtcp_packet_fb_get_type (GstRTCPPacket *packet
);
Get the feedback message type of the FB packet
.
void gst_rtcp_packet_fb_set_type (GstRTCPPacket *packet
,GstRTCPFBType type
);
Set the feedback message type of the FB packet
.
guint32
gst_rtcp_packet_fb_get_sender_ssrc (GstRTCPPacket *packet
);
Get the sender SSRC field of the RTPFB or PSFB packet
.
void gst_rtcp_packet_fb_set_sender_ssrc (GstRTCPPacket *packet
,guint32 ssrc
);
Set the sender SSRC field of the RTPFB or PSFB packet
.
guint32
gst_rtcp_packet_fb_get_media_ssrc (GstRTCPPacket *packet
);
Get the media SSRC field of the RTPFB or PSFB packet
.
void gst_rtcp_packet_fb_set_media_ssrc (GstRTCPPacket *packet
,guint32 ssrc
);
Set the media SSRC field of the RTPFB or PSFB packet
.
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
.
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
.
guint8 *
gst_rtcp_packet_fb_get_fci (GstRTCPPacket *packet
);
Get the Feedback Control Information attached to a RTPFB or PSFB packet
.
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.
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.
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.
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.
#define GST_RTCP_MAX_BYE_SSRC_COUNT 31
The maximum amount of SSRCs in a BYE packet.
#define GST_RTCP_MAX_RB_COUNT 31
The maximum amount of Receiver report blocks in RR and SR messages.
#define GST_RTCP_MAX_SDES_ITEM_COUNT 31
The maximum amount of SDES items.
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.
Different types of SDES content.
Different types of feedback messages.
Invalid type |
||
Generic NACK |
||
Temporary Maximum Media Stream Bit Rate Request |
||
Temporary Maximum Media Stream Bit Rate Notification |
||
Request an SR packet for early synchronization |
||
Picture Loss Indication |
||
Slice Loss Indication |
||
Reference Picture Selection Indication |
||
Application layer Feedback |
||
Full Intra Request Command |
||
Temporal-Spatial Trade-off Request |
||
Temporal-Spatial Trade-off Notification |
||
Video Back Channel Message |