2005-07-14 10:29:30 +00:00
|
|
|
The RTP libraries
|
|
|
|
---------------------
|
|
|
|
|
2006-05-18 23:00:02 +00:00
|
|
|
RTP Buffers
|
|
|
|
-----------
|
|
|
|
The real time protocol as described in RFC 3550 requires the use of special
|
|
|
|
packets containing an additional RTP header of at least 12 bytes. GStreamer
|
|
|
|
provides some helper functions for creating and parsing these RTP headers.
|
|
|
|
The result is a normal #GstBuffer with an additional RTP header.
|
|
|
|
|
|
|
|
RTP buffers are usually created with gst_rtp_buffer_new_allocate() or
|
|
|
|
gst_rtp_buffer_new_allocate_len(). These functions create buffers with a
|
|
|
|
preallocated space of memory. It will also ensure that enough memory
|
|
|
|
is allocated for the RTP header. The first function is used when the payload
|
|
|
|
size is known. gst_rtp_buffer_new_allocate_len() should be used when the size
|
|
|
|
of the whole RTP buffer (RTP header + payload) is known.
|
|
|
|
|
|
|
|
When receiving RTP buffers from a network, gst_rtp_buffer_new_take_data()
|
|
|
|
should be used when the user would like to parse that RTP packet. (TODO Ask
|
|
|
|
Wim what the real purpose of this function is as it seems to simply create a
|
|
|
|
duplicate GstBuffer with the same data as the previous one). The
|
|
|
|
function will create a new RTP buffer with the given data as the whole RTP
|
|
|
|
packet. Alternatively, gst_rtp_buffer_new_copy_data() can be used if the user
|
|
|
|
wishes to make a copy of the data before using it in the new RTP buffer. An
|
|
|
|
important function is gst_rtp_buffer_validate() that is used to verify that
|
|
|
|
the buffer a well formed RTP buffer.
|
|
|
|
|
|
|
|
It is now possible to use all the gst_rtp_buffer_get_*() or
|
|
|
|
gst_rtp_buffer_set_*() functions to read or write the different parts of the
|
|
|
|
RTP header such as the payload type, the sequence number or the RTP
|
|
|
|
timestamp. The use can also retreive a pointer to the actual RTP payload data
|
|
|
|
using the gst_rtp_buffer_get_payload() function.
|
2005-07-14 10:29:30 +00:00
|
|
|
|
2006-05-18 23:00:02 +00:00
|
|
|
RTP Base Payloader Class (GstBaseRTPPayload)
|
|
|
|
--------------------------------------------
|
|
|
|
|
|
|
|
All RTP payloader elements (audio or video) should derive from this class.
|
|
|
|
|
|
|
|
RTP Base Audio Payloader Class (GstBaseRTPAudioPayload)
|
|
|
|
-------------------------------------------------------
|
|
|
|
|
|
|
|
This base class can be tested through it's children classes. Here is an
|
|
|
|
example using the iLBC payloader (frame based).
|
|
|
|
|
|
|
|
For 20ms mode :
|
|
|
|
|
|
|
|
GST_DEBUG="basertpaudiopayload:5" gst-launch-0.10 fakesrc sizetype=2
|
|
|
|
sizemax=114 datarate=1900 ! audio/x-iLBC, mode=20 ! rtpilbcpay
|
|
|
|
max-ptime="40000000" ! fakesink
|
|
|
|
|
|
|
|
For 30ms mode :
|
|
|
|
|
|
|
|
GST_DEBUG="basertpaudiopayload:5" gst-launch-0.10 fakesrc sizetype=2
|
|
|
|
sizemax=150 datarate=1662 ! audio/x-iLBC, mode=30 ! rtpilbcpay
|
|
|
|
max-ptime="60000000" ! fakesink
|
|
|
|
|
|
|
|
Here is an example using the uLaw payloader (sample based).
|
|
|
|
|
|
|
|
GST_DEBUG="basertpaudiopayload:5" gst-launch-0.10 fakesrc sizetype=2
|
|
|
|
sizemax=150 datarate=8000 ! audio/x-mulaw ! rtppcmupay max-ptime="6000000" !
|
|
|
|
fakesink
|
|
|
|
|
|
|
|
RTP Base Depayloader Class (GstBaseRTPDepayload)
|
|
|
|
------------------------------------------------
|
|
|
|
|
|
|
|
All RTP depayloader elements (audio or video) should derive from this class.
|