From GNU Telephony



Introduction to GNU RTP Stack

GNU ccRTP is an implementation of RTP, the real-time transport protocol from the IETF (see RFC 3550, RFC 3551 and RFC 3555). Releases 1.5.0 and above support the Secure RTP profile, SRTP (see RFC 3711). A separate extension package, libzrtpcpp, provides support for the ZRTP protocol (as defined in the Internet draft draft-zimmermann-avt-zrtp).

ccRTP is a C++ library based on GNU Common C++ which provides a high performance, flexible and extensible standards-compliant RTP stack with full RTCP support. The design and implementation of ccRTP make it suitable for high capacity servers and gateways as well as personal client applications.

In designing ccRTP, we have taken into account that 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.

Support for both audio and video data is also considered in the design of ccRTP, that can do partial frame splits/re-assembly. Unicast, multi-unicast and multicast transport models are supported, as well as multiple active synchronization sources, multiple RTP sessions (SSRC spaces), and multiple RTP applications (CNAME spaces). This allows it's use for building all forms of Internet standards based audio and visual conferencing systems.

GNU ccRTP is threadsafe and high performance. It uses packet queue lists for the reception and transmission of data packets. Both inter-media and intra-media synchronization is automatically handled within the incoming and outgoing packet queues. GNU ccRTP offers support for RTCP and many other standard and extended features that are needed for both compatible and advanced streaming applications. It can mix multiple payload types in stream, and hence can be used to impliment RFC 2833 compliant signaling applications as well as other specialized things. GNU ccRTP also offers direct RTP and RTCP packet filtering.

GNU ccRTP uses templates to isolate threading and sockets related dependencies, so that it can be used to impliment realtime streaming with different threading models and underlying transport protocols, not just with IPV4 UDP sockets. For a more detailed list of ccRTP features you can have a look at the programmers' manual.

Current Status

GNU ccrtp 1.5.0 introduces support for the Secure RTP profile, SRTP (RFC 3711), which allows for secure connections, and voice encryption using either libgcrypt or openssl backends. In addition, native support for Phil Zimmermann's ZRTP protocol, which offers a transparent way to transfer encrypted voice over existing infrastructure, is released as a separate extension library licensed under the GNU GPL. This work was completed with the incredible effort of Werner Dittmann, and extensive help by Michel de Boer, who works on the Twinkle Softphone.

1.4.x releases have focused on introducing IPV6 support, simplifying use, and improving performance. There is some limited use of STL in ccRTP for managing destination lists, and to improve embedded profiles, as well as to better support the broken state of STL when used in DLL's on some platforms, this will likely be removed in future releases. Adding generic APP headers for RTCP is another area for new releases to focus on.


A programmers' manual and an exhaustive reference manual are distributed with the source packages of GNU ccRTP. The first is written in GNU TeXInfo, whereas the second is automatically generated from the sources through Doxygen. You can look at both online:

Downloading GNU ccRTP

Starting with release 0.6.1, GNU ccRTP will be found on the GNU site or one of the GNU mirrors. It is also available from the Download Page.

GNU ccRTP may be available from other sites in various "package" formats, including GNU/Linux "RPM" and "deb" packages, ".pkg" files under various Unix operating systems, etc. I do encourage people to distribute GNU ccRTP in a package form where convenient for installation, so long as source is also made available.

Contributing to GNU ccRTP

As the current GNU ccRTP maintainer, I am very open to bringing new ideas and code into GNU ccRTP. In particular, I am looking for help from contributors who have a deep expertise in Internet Audio and Visual conferencing. Anonymous cvs access is maintained for GNU ccrtp thru savannah, and I would be happy to receive and evaluate patches for inclusion in future releases.

A standard e-mail mailing list for GNU ccRTP is available at There is also a web interface for subscribing, modifying subscription options and searching the list archives. Feel free to send any bug reports, patches, and questions to this list.

Projects which use GNU ccRTP