Items to research
•Licensing
•Is the license compatible with core Asterisk SCF?
•Does the license require us to do things we may not want to do?
•Community
•Is the community active?
•Are they continually adding new functionality and fixing bugs?
•Can we get help from the community easily if need be?
•Ease of use
•Can we easily interface with the API?
•Is it easy to add new things?
•If we distribute it, is it easy to work into our build system?
•Feature richness
•Does it have the features our customers will want?
•Channel Encryption (SRTP) and Key management (DTLS-SRTP, ZRTP, ...)
•Is IPv6 supported?
•Platform support
•Are the platforms supported that we need to be supported?
•If not, is it easy to support them?
•Scaling
•Does the stack scale to the amount we want?
RTP stacks under consideration
CCRTP
URL: http://www.gnu.org/software/ccrtp/
License: GPL v2
Language: C++
Created as an official GNU project for the telephony stuff this stack has been
around since 2002 and has continued to be developed since then with activity falling off.
Control over the tree is maintained by David Sugar with patches for inclusion getting
sent to him. An issue tracker is provided on sourceforge but it has not gotten any attention
in years. There seems to be some community activity with people using CCRTP but it is very
minimal. It is supported on both Windows and Linux, but should work on other platforms
we are targeting. Both IPv6 and SRTP are supported. The SRTP support does not
use an outside library (like srtp) but it does require OpenSSL or gcrypt. RTCP is
supported. Threading is taken care of by the stack itself. No scalability information is
available. This stack does require GNU Common C++ as a dependency.
JRTPLib
URL: http://research.edm.uhasselt.be/~jori/page/index.php?n=CS.Jrtplib
License: Free
Language: C++
Originally created by Jori Liesenborgs as a thesis project this stack continued
to be developed further. Development in recent years though has scaled back
considerably and a diff of the nightly SVN copy and last release (from May of 2007) shows
very little changes. Control over the tree is maintained by Jori and any changes have to go
to him for review and inclusion. No issue tracker is present. Unfortunately it was
difficult to gauge the community but it does not seem to be lively at all. It is supported
on both Windows and Linux, but should work on other platforms we are targeting.
IPv6 is supported but SRTP is not. This is something we would have to add but I do not
believe it would be difficult based on the architecture. This stack can use another
library created by Jori for threading which allows it to handle polling for incoming
data but this is not a requirement. If it is not compiled in it is up to the user of the
stack to poll for incoming RTP data. RTCP is supported. No scalability information is
really available but I think it would fair quite well.
ortp
URL: http://www.linphone.org/index.php/eng/code_review/ortp
License: LGPL
Language: C
ortp is the RTP stack originally created for use with the linphone softphone. Since then it has been made separate and used
in other projects/products. Development has continued on it and it continues to receive bug fixes and new features. Control over the tree is maintained by a single individual, Simon Morlat. Patches that are contributed get sent to him for review and inclusion. There doesn't appear to be any issue tracker. The community itself seems to be rather actively, there are mailing list posts every few days. It is supported on both Windows and Linux, but should work on other platforms we are targeting. Both IPv6 and SRTP are supported. The SRTP support uses libsrtp but doesn't seem to be well documented like the rest of ortp. Additional features include an adaptive jitterbuffer, packet scheduler, multiplexed support (multiple streams being handled in the same thread), and of course RTCP. No scalability information is really available for ortp, but from my understanding of the architecture it should scale as we need.
Asterisk
URL: Do I really need a URL?
License: Doesn't quite matter
Language: C
Possible to pull out the RTP stack due to RTP engine work, but still utilizes
some Asterisk provided API functions and is written in a very Asterisk centric way.
Isolated and would be easy to integrate into our build system. Currently does not
support SRTP or IPv6 but both are in the works. Has been untested on
additional platforms (like Windows) and certainly not written to be used on it,
would probably require additional work. Scaling has varied but can certainly handle
over 1000. It's up to the user of the stack to do all threading, which changes scaling.
Does not currently support RTCP as well as other stacks do. Well supported and used
by many installations out there.
PJSIP PJMedia
URL: http://www.pjsip.org/pjmedia/docs/html/
License: GPL and Commercial
Language: C
PJMedia is an interesting library. Everything (RTP, transport, SRTP) is split up into different parts that you then have to combine to make work. This means the RTP stack is really simple and just produces an RTP header, or parses an RTP packet and gives you data. It doesn't have threads, or sockets, or any of that. It's really up to the user to do that. It's rather active like PJSIP. Both IPv6 and SRTP are supported. The SRTP support uses libsrtp like other RTP stacks. The library also includes an adaptive jitterbuffer. The platforms we wish to support are supported by it.