What is PJSIP
PJSIP is a free and Open Source multimedia communication library implementing standard based protocols such as SIP, SDP, RTP, STUN, TURN, and ICE. It combines signaling protocol (SIP) with multimedia framework and NAT traversal functionality into high level multimedia communication API that is portable and suitable for almost any type of systems ranging from desktops, embedded systems, to mobile handsets.
See complete list of PJSIP features in PJSIP Datasheet .
Who is PJSIP
PJSIP is developed and maintained by Teluu Ltd. , with the help of Internet developers around the world. Teluu was incorporated in late 2006 in the UK initially as PJSIP LLP by Benny Prijono and Perry Ismangil, and soon joined by Nanang Izzuddin, and then Sauw Ming as developers. Our newest team member is Riza Sulistyo.
All of us do everything from writing the documentation, wiki, and creating this website, updating the blog and Trac site, to accounting, answering support, and responding to mailing list questions. We do write code too.
Complete and Integrated
PJSIP attempts to provide you, the developer, with everything you need to build real-time multimedia communication application. All three main components of real-time multimedia application, i.e. signaling, media features, and NAT traversal, have been taken care of by PJSIP. Leave those to us and you can concentrate on the application logic.
See complete list of PJSIP features in PJSIP Datasheet .
Write your application once, and it will run on any flavor of Windows, Windows Mobile/CE up to WM 6, Mac OS X both PPC and Intel, Linux on any processor types, many flavor of Unix systems, Nokia/Symbian 3rd and 5th Edition devices, Apple iOS on iPhone, iPad, and iPod, BlackBerry 10, and Android (planned in v2.2).
PJSIP has also been used in embedded systems, with people reported successful use on embedded OS/RTOS such as uC-Linux, QNX, and RTEMS across different type of processors. PJSIP runs on a 20Mhz MIPS processor appliance.
Compact, Small Footprint
A voice call application starts from as little as 150KB using the lower level libraries, or few hundred KB using the higher level PJSUA-LIB API, which take heap usage from couple of hundred KB for two calls. Footprint will of course vary with the features that are used, but hopefully this gives a broad indication.
For more information about PJSIP footprint, see the footprint discussion in our FAQ .
We also make significant effort to write documentation. On top of the reference documentation of the API, we've written many articles on the (Trac) wiki site to help your development. All PJSIP documentation is indexed in the Trac site .
We are not the first, but we've been around for some time. The software has seen a lot of real-life problems and many tricks have been implemented to make things work. Experience counts.
Professional Open Source
Last but not least, PJSIP is Open Source Software (OSS). Well it's actually dual-licensed. Being Open Source has enabled PJSIP to be used by thousand of developers around the world, and probably scrutinized by that many too. Finding PJSIP developer is getting easier, and as Open Source Software, PJSIP code will never disappear, even when we are gone.
On the other hand, we're also offering proprietary license that is bundled with support for those who can't open source their products or who want to get service directly from the developers of PJSIP. We believe this model is a win-win-win solution for everyone; businesses get professional product they're looking for, we survive to continue the development of pjsip, which in turn will be presented back as OSS to the community.
Regardless of licensing, we have a completely open development model. We only have one source tree. You can see our development plan and progress in our Trac site .
Learn more about our Licensing here.
History of PJSIP
The First Releases
The first public release of PJSIP is on Feb 2005 as version 0.2. The .tar.gz file is 239 KB, which is tiny compared to 6.5 MB of version 2.0, but it is already a fully functional SIP, SDP, and media library to make a working voice call, and it is portable as it runs on Windows and Linux platforms. Indeed these are the principles that we try to hold in PJSIP: complete, integrated, small footprint, and portable. And good documentation too, as we already had online Doxygen documentation by this time.
The first version was released as 0.2 because actually the library was started long before that. PJSIP was created by Benny Prijono, me, and in case anyone ask (and some have), the "PJ" abbreviation comes from my surname. The very first component of PJSIP is the parser, which was created to participate in internal parser contest in Switchlab, Ltd., the company that I worked for, in August 2002. By 2003, PJSIP looked to be mature enough to be used in a production hardware IP phone developed by my company (see below), to replace the old, RFC 2543 compliant, in house SIP stack that was used by the product, which I also wrote. So that was PJSIP version 0.1.
Vectone Genie, first PJSIP product [circa 2003]. Image courtessy of Vectone Ltd.
Since it's first public release, nine releases were made in the space of four months: 0.2.1, 0.2.5, and so on up to 0.2.9.2 in June 2005, featuring registration, instant messaging, and presence (SIP SIMPLE). But then it hit a wall. As new SIP RFCs were studied, it was found that PJSIP design was not up to speed with the latest development of SIP (remember that PJSIP was started about the same time RFC 3261 was released). One thing that was clearly missing in PJSIP was the concept of dialog usage, where one dialog may be shared by more than one sessions. So it was decided to go back to the drawing board.
Starting It with Version 0.5
It was actually like that. Before any new code was written, a "PJSIP Design" document was written, and this is what then became the good old PJSIP Developer's Guide (PDF) book. Around this time, I also decided to take my opportunity to work full time for PJSIP. The development took significant time, in fact it was only eight months later in Feb 2006 that the new version was released. That version was called 0.5.0, skipping 0.3 and 0.4 altogether due to major features in the new version.
After 0.5, new releases followed quickly, and there were fourteen releases in the following twelve months. Being "version shy", all were numbered "0.5", so a year later the version number only went as high as 0.5.10. During this period, PJSIP LLP was incorporated in Nov 2006, along with Perry Ismangil, a former classmate in college. With Perry on board, things were getting more organized. For example, we started to use Trac, since 0.5.9. He started the PJSIP Blog. And we attended several conferences, to bring more exposure to PJSIP.
Symbian and PJNATH
The next major release was version 0.7.0, released in June 2007. Two major features in this release were Symbian support and the introduction of a new library, PJNATH. PJNATH stands for PJ NAT Helper, and it contains our implementation of STUN, TURN, and ICE. It's the first Open Source ICE library in the world, and it's now an integral part of PJSIP communication suite. We're quite pleased to have that.
The Open Source community seemed to be receiving PJSIP quite well too, many wonderful projects that use pjsip were sprouting into existance. Among the notable pioneers is Samuel Vinson who ported PJSIP to Nintendo DS in SvSIP project as early as in Sep 2007 and gained quite some coverage from the press, iPod touch port in Dec 2007, and then to iPhone with his Siphon project in Feb 2009, which makes it the world's first free SIP/VoIP application for iPhone and iPod Touch 1 and 2. We're glad to be part of it.
Nanang Izzuddin joined the development team in early 2008. He brought along Symbian experience and will become Windows and Symbian maintainer in the team.
The next major milestone was version 1.0, which was released more than a year later on Oct 2008. Although many features were implemented, along the way in version 0.8 and 0.9 too, this version was more of a psychological barrier rather than technical one, as I previously felt that there's got to be something grand and trustworthy for something to be released as 1.0. But we got over that..
Fast forward to 2010, Sauw Ming joined PJSIP team in Dec 2009, he then single-handedly tackled the iPhone port, something that we've always wanted to do and which the community has done it years before.
Version 2.0 and Beyond
Fast forward to today, 22 May 2012, we just released a major milestone, PJSIP version 2.0 (yay!). And a new website as well. The major feature being introduced is video, and it took us almost two years to develop this, and we can only hope that the community will receive it warmly.
And that's all we can hope for, for the future. But rest assured that we're not complacent with what we have now. In the future, we want PJSIP to be available to even more platforms. More mobile friendly and fine-tuned for it. We're not happy with the current high level API and we want it to be even higher level and easier to use and develop. We want the API to be accessible to even more languages. We're not happy with the documentation. We need more features, more RFCs. And so on. Only time will tell if and how we will achieve these.