# RTP and RTSP support
GStreamer has excellent support for both RTP and RTSP, and its RTP/RTSP
stack has proved itself over years of being widely used in production use
in a variety of mission-critical and low-latency scenarios, from small
embedded devices to large-scale videoconferencing and command-and-control
systems.
## GStreamer RTSP Server
GStreamer's RTSP server (gst-rtsp-server) is a featureful and easy-to-use
library that allows applications to implement a complete RTSP server with
just a couple of lines of code.
It is multi-threaded, scalable and flexible, and provides support for
static or dynamic mount points, authentication, retransmission (rtx),
encryption (srtp, secure RTP), UDP unicast and multicast as well as
TCP interleaving, seeking, and optionally also cgroup integration for
advanced resource management and control. It can also distribute a
GStreamer net client clock to GStreamer RTSP clients to facilitate
multi-device synchronization.
## GStreamer RTSP Client
The GStreamer rtspsrc element from gst-plugins-good is GStreamer's
high-level RTSP client abstraction. It can be used as a standalone element
directly, or can be used via playbin by passing an rtsp:// URI to
playbin. rtspsrc features a number of GObject properties that allow
you to configure it in all kinds of different ways, most notably a
"latency" property to configure the default jitterbuffer latency,
which you may want to configure to a lower value to achieve lower latency.
## RTP components
Most of GStreamer's key RTP components live in gst-plugins-good:
* The rtpmanager
plugin contains elements like
rtpbin and
rtpjitterbuffer
* The rtp plugin
contains RTP payloading and depayloading elements for many different
codecs and container formats
with some lower-level libraries in gst-plugins-base:
* The GStreamer RTP library
contains things such as RTP payloader/depayloader base classes and functions to handle RTP and RTCP buffers
* The GStreamer MIKEY library
contains helper functions to deal with MIKEY messages for secure RTP
* The GStreamer RTSP library
contains low-level RTSP functionality used by gst-rtsp-server and higher-level objects such as rtspsrc.
* The GStreamer SDP library
contains utility functions for SDP message parsing and creation.
Some of the main components are:
* rtpbin
is the high-level RTP component and supports sending
and receiving, just sending or just receiving data, with and without RTCP
support. This is the bin that does it all: it adapts dynamically to your
needs based on the requested pads; it also contains an rtpjitterbuffer.
* rtpjitterbuffer
is an RTP buffer that controls network jitter and reorders packets. It also
dumps packets that arrive to late, handles packet retransmission and lost
packet notification and adjusts for sender-receiver clock drift.
* rtpptdemux
is an element that usually sits on the rtpbin src
pad and will detect any new payload types that arrive in the RTP stream.
It will then create a pad for that new payload and you can connect a
depayloader/decoder pipeline to that pad.
* rtpssrcdemux
is an element that usually sits on the rtpbin src
pad and will detect any new SSRCs that arrive in the RTP stream.
It will then create a pad for that new SSRC and you can connect a
depayloader/decoder pipeline to that pad.
* GstRTPBaseDepayload
is a base class for RTP depayloaders
* GstRTPBasePayload
is a base class for RTP payloaders
* GstRTPBaseAudioPayload
is a base class for audio RTP payloaders
Note that many RTP elements assume they receive RTP buffers with
GstNetAddressMeta
meta data set on them (as udpsrc will produce).