ccRTP is a C++ framework for developing applications based on the Real Time Transport Protocol (RTP henceforth). RTP provides end-to-end delivery services for data with real-time characteristics and is being developed by the Audio/Video Working Group of the Internet Engineering Task Force (IETF).
ccRTP aims to be an efficient and flexible framework valid for almost any kind of application that uses RTP, ranging from high loaded servers and gateways to personal phone applications. Default constructs and values are provided however for the most common choices in the use of RTP. ccRTP conforms to the latest RTP specifications (see Standards Tracking).
ccRTP is based on the GNU Common C++ framework, though most of the library does not require it. Common C++ provides basic system services such as threading, synchronization and sockets1, which makes it possible to provide a complete solution for the use of RTP. However, although ccRTP provides facilities and abstractions useful for the RTP specific components of applications that use RTP, such applications generally require similar system services for other tasks. Besides supporting ccRTP, Common C++ provides a portable and efficient framework for these kind of services.
RTP has been defined as an application level protocol framework rather than a typical Internet transport protocol such as TCP and UDP. Thus, RTP is hardly ever implemented as a layer separated from the application. Consequently, RTP applications often must customize the adaptable RTP packet layout and processing rules, timing constraints, session membership rules as well as other RTP and RTCP mechanisms. ccRTP aims to provide a framework for the RTP framework, rather than being just an RTP packet manipulation library.
As a clarification of the scope of the ccRTP library and the RTP protocol, we note that ccRTP exclusively deals with the transport of data over the RTP protocol. Once parameters such as destination IP address and transport port, payload type identifier and timestamp frequency are known, ccRTP can be used to open an RTP session and send and receive RTP and RTCP packets. A multimedia application will have those parameters previously set or, more usually, they can be fetched for example from SDP multimedia session descriptions, which can be interchanged (and negotiated) between servers and clients by means of some signaling protocol: SIP, RTSP, or even H.323. Signaling functions are not handled by ccRTP.
This document is an introductory programmer's manual, for a more exhaustive reference see the reference manual distributed with GNU ccRTP. In ccRTP Overview, the most important concepts and some basic examples are introduced. A deeper and step by step description as well as short examples are provided in Using ccRTP.
Finally, if after reading this document and/or using ccRTP you think it fails to provide some functionality that seems to be needed for some application, we encourage you to contact the developers of ccRTP and ask or propose them improvements and/or additions. You are also encouraged to provide these improvements and to join the development team. Bug reports, suggestions and criticisms are gladly accepted.
 As well as other more specialized services, such as MD5 computation.