At its highest level, ccRTP provides classes for the real-time transport of data through RTP sessions, as well as the control functions of RTCP.
The main concept in the ccRTP implementation of RTP sessions is the use of packet queues to handle transmission and reception of RTP data packets/application data units. In ccRTP, a data block is transmitted by putting it into the transmission (outgoing packets) queue, and received by getting it from the reception (incoming packets) queue.
Starting with 1.0 releases, ccRTP fully supports RTP and RTCP. Here is a brief list of some features of ccRTP:
There are several levels of interface (public interface, public or
protected inheritance, etc) in ccRTP. For instance, the
rtphello demo program distributed with ccRTP just uses the
public interface of the
RTPSession class and does not redefine
the virtual method
onGotSR, thus what this program knows about
SR reports is the information conveyed in the last sender report from
any source, which can be retrieved via the
method of the
SyncSource class. On the contrary, the
rtplisten demo program redefines
onGotSR by means of
inheritance and could do specialized processing of these RTCP
packets. Generally, both data and control packets are not directly
accessible through the most external interface.
All this functions are performed through a few essential classes and
types. The most basic ones are the enumerated type
StaticPayloadType, and the classes
DynamicPayloadFormat. The most important ones are the
AppDataUnit, that represent RTP sessions,
synchronization sources, participants in an RTP application,
and application data units conveyed in RTP data packets,
In the next sections, two basic examples are presented. These examples are intended to provide a concrete idea of what the code of a ccRTP based application looks like, they are not complete or compilable programs. You can find some real examples under the demo directory in the source distribution of ccRTP.