SIP Stack Research

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?
  • Are new features being developed based on new RFCs?
  • Do they include an SDP parser and generator?
  • Do they implement the SDP offer/answer negotiation for us?
  • Transport: UDP, TCP, TLS, IPv6
  • 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?
  • Has any performance testing been done on it?
  • Interoperability
  • Are they widely used by many companies?
  • Are there many reports of interop issues?

SIP stacks under consideration

Resiprocate

URL: http://www.resiprocate.org/
License: ~jcolp:The Vovida Software License, Version 1.0
Language: C++

Resiprocate is used in many commercial products, such as X-Lite/Eyebeam/Bria/Whatever it may be called these days from our friends at Counterpath. Interoperability with other SIP stacks is quite good. The community is fairly active and new development continues. The stack is fairly full featured supporting a wide range of current RFCs for the things that companies actually care about. Using the higher level DUM API it appears to be relatively simple to create a user agent using resiprocate. Based on my research the stack can handle well over 1000 transactions per second, but this was against an older version so it may have been improved even more in later ones. The area that seems to be a potential problem is that the transport layer for TCP and TLS isn't implemented as best as it could be causing performance in that area to be less. How much less I can't be sure without proper testing between UDP and TCP/TLS. The stack is supported on all of the operating systems we wish to target and should also work on the ones we aren't directly targeting (such as FreeBSD). An implementation for an SDP parser and generator is provided. A build system using GNU Makefiles is provided, along with Visual Studio project files.

Sofia-sip

URL: http://sofia-sip.sourceforge.net/
License: LGPL
Language: C

Sofia-sip was originally created by Nokia and continues to be primarily developed by them. Community members also submit patches for inclusion. Interoperability seems to be quite good. The community is as active as resiprocate based on reading the mailing list. A single API, nua, is provided for writing user agents. It requires more knowledge of SIP then the resiprocate DUM API and could present a larger barrier of entry for community developers. The stack contains a substantial number of features, but not as substantial as resiprocate. A document is provided which details how to write a basic user agent and the general architecture of how things work. The information I have found for scaling puts sofia SIP on par with resiprocate, with potentially less transactions per second. The stack is supported on most current operating systems. An implementation for an SDP parser and generator is provided. A build system using autotools is provided, along with a Visual Studio project file.

PJSIP

URL: http://pjsip.org/
License: Dual (GPL and "alternate") Details at http://www.pjsip.org/licensing.htm/
Lnaguage: C

PJSIP is maintained by Teluu. The community and development are active. The latest PJSIP release was in May of this year. PJSIP provides several separate APIs. Amongst these are PJSIP (handles SIP signaling, transactions, transport, SDP negotiation, and event subscription), PJMEDIA (support for a variety of codecs, CNG, VAD, PLC, manipulation, etc.) and PJNATH (NAT traversal helper with STUN/TURN/ICE support). We can use any or all of these. The APIs are very well documented, both in the source and as separate guides. As far as scaling goes, see this link. According to their graphs, they were able to handle as high as 2500 cps on an FC5 box, though numbers on other platforms topped out at an average of 2000 cps. Keep in mind that these tests were performed four years ago, so newer versions of PJSIP may perform better or worse than the version used for these benchmarking tests. As far as features go, PJSIP is very feature rich, implementing all major features I would expect from a SIP stack. PJSIP runs on Linux, Windows, all *BSD variants, RTEMS, Android, and iPhone and iPad. Makefiles are provided, along with Visual Studio project files.


PJSIP vs. reSIProcate

Based on discussion, the decision seems to be between PJSIP and reSIProcate for our SIP stack. Neither stack is perfect, but here are some pros and cons of the two:
PJSIP

  • + PJMEDIA framework for handling media outclasses reSIProcate's tools and is easier to use.
  • + STUN/TURN/ICE support for NAT traversal.
  • + More feature-rich
  • + More active community
  • + Better performance/scalability
  • + We have several contacts with PJSIP experience (Simon Perreault, Adrian Georgescu, Klaus Darillion, Saul Ibarra)
  • - Written in C
  • - Reports of race conditions and deadlocks (See Malcolm's comment with links to mailing list posts), though these problems may have been resolved since the time that the problems were experienced.
  • - More open issue reports than reSIProcate. However, there were no open issues for deadlocks, race conditions, or thread safety issues

reSIProcate

  • + Written in C++
  • + IANAL, but the license seems to be a better fit.
  • + Likely easier to learn than PJSIP (though not by a whole lot)
  • + Used in larger projects by larger companies (e.g. CounterPath's softphones)
  • - reTurn tool has STUN/TURN support but no ICE. Also, reTurn uses a different license from reSIProcate (3-clause BSD license)
<!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"> <rdf:Description rdf:about="https://wiki.asterisk.org/wiki/display/TOP/SIP+Stack+Research" dc:identifier="https://wiki.asterisk.org/wiki/display/TOP/SIP+Stack+Research" dc:title="SIP Stack Research" trackback:ping="https://wiki.asterisk.org/wiki/rpc/trackback/131087" /> </rdf:RDF> --> Labels parameters

你可能感兴趣的:(search)