GNU ccRTP
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, GNU ZRTP (libzrtpcpp), provides support for the ZRTP protocol (as defined in the Internet RFC 6189).
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 its use for building all forms of Internet standard-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 implement 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 implement 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.
Development
[2017] – The latest release is GNU ccRTP 2.1.2.
[2007] – Release 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.
[2006] – The current 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.
Downloading
Releases 0.6.1 and above are found on the GNU FTP site or one of its mirrors, along with the extension package libzrtpcpp. Please use a nearby mirror if you can.
GNU ccRTP may be available from other sites in various package formats,
including GNU/Linux RPM and Debian 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.
Documentation
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. They are available online for several releases of ccRTP:
- ccRTP Programmers' Manual (release 1.3);
- ccRTP Reference Manual (release 2.1.2), also documenting libzrtpcpp-2.3.4;
- class documentation for ccRTP 1.7.2, as part of the larger Common C++ 2 / Bayonne 2 framework.
Participating
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. The source code repositories can be accessed anonymously through the GNU ccRTP project on Savannah; I would be happy to receive and evaluate patches for inclusion in future releases.
The ccRTP mailing list is <ccrtp-devel@gnu.org>. It has 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.
Related
- GNU Telephony as a foundation library,
- Twinkle Softphone,
- SFLPhone client (replaced by Jami).
This page was retrieved from the Wayback Machine archive of the GNU Telephony website (licensed under the Free Documentation License 1.3), and slightly edited.