pjsip on has been running on iPhone and iPod Touch for quite a while. Samuel Vinson (also responsible for making possible VoIP on Nintendo DS) was the first to announce a successful port to iPhone and iPod Touch even before the official SDK became available.

Siphon has already been available for developers and also on Cydia, an alternative distribution platform for iPhone applications. voiphone is another project starting up, based on sound device code from Siphon.

Now another milestone is reached, because an iPhone softphone called SipPhone on iPhone (how many phones can you have in a sentence!), has been released on the official App Store by VNet Corp of Shanghai. This means users unable or unwilling to install Cydia are also able to enjoy VoIP over Wi-fi with their favourite providers, instead of dictated by which client you use.

(For those reading on a computer with iTunes or on the iPhone itself here is the direct link to SipPhone on App Store.)

So how does it work? After downloading from App Store, following the installation instructions, I was able to add Teluu’s sipgate.co.uk account (look, No SIM!):

Main SIP account settings

Additional SIP account settings (optional)

I was then able to choose from my Contacts and make a call as normal. I didn’t do any extensive voice quality testing, just some quick calls. I will try to record some conversations to illustrate better the voice quality.

Another feature that needs pointing out is the ability to have multiple accounts. It was quite easy to toggle which account is active at any one time. The pjsip.org SIP domain uses OpenSER OpenSIPS, so I know this client is compatible with it.

Multiple accounts support for the iPhone SIP client

The source of the application is available at their forum, it seems you can get it even if you are not a customer. This is beyond the requirements of the GPL, so nice touch on VNET Corp people.

I still haven’t been unable to compile it, so as can be seen I have a question pending there.

Overall of course the main issue of VoIP over wi-fi in iPhone remains: no background task. That means, unlike other mobile devices such as Nokia which uses Symbian, it cannot receive any calls while you are doing something else.

This latest release was supposed to be 0.7.1 a few months ago. That release was delayed, so more and more features got in. Therefore we have decided to call it 0.8.0. If you are still using 0.5.x series, we urge you download pjsip and upgrade pjsip now.

PRACK and UPDATE

PRACK (ticket #385) and UPDATE (ticket #5) have been implemented on this release, including all the quirks with the management of SDP offer and answer session when these SIP methods are involved.

Symbian

Symbian support is getting more matured, with the implementation of Symbian sound device abstraction (ticket #2) and support for building the libraries as Dynamic Shared Object (DSO) files, which are needed for building developing for S60 3rd Edition using Code Warrior (ticket #354).

Updated STUN, TURN, and ICE

STUN, TURN, and ICE have been updated to the latest specification (ticket #374, #382). Many bugs have also been fixed.

Custom SIP Presence Status Text

More robust NAT handling

For SIP, keep-alive mechanism has been implemented for UDP transport at PJSUA-LIB level (ticket #407), and both TCP and TLS transports at the transport level (ticket #95). Because of these the default registration interval is now extended to 5 minutes. The client registration session will also keep the transport open until it is destroyed, so that server can send SIP requests using this transport (mandatory for TLS, and could be useful for TCP) (ticket #390).

For SIP UDP transport, pjsua-lib by default (pjsua_acc_config.auto_update_nat setting) will monitor the STUN mapped address as reported by registrar. When it detects that the mapped SIP transport address has changed, it will unregister previous Contact, create a new Contact based on the new transport address, and restart the registration. This would happen automatically without application assistance (ticket #381).

For media, ICE transport will automatically change its transport address based on the address returned in the STUN keep-alive packets (ticket #372). Also pjsua-lib will now reports to application via a callback when ICE negotiation has failed (ticket #370).

More Robust SIP authentication

PJSIP now supports responding to authentication challenge for any realms, by specifying wildcard (“*”) as the realm in the credential (ticket #231). Although some have commented about security implications of this, a lot of people will find this feature to be very useful.

Basic support for 3GPP/IMS

Much improved audio latency on Windows

Audio latency on Windows (Win32) has been improved by several hundreds milliseconds. This should make the echo cancellation (AEC) works better too, so default EC tail length has been decreased from 800 ms to 200 ms.

Ticket #393 changed basic audio frame time, from 20 ms (hard coded as PTIME macro in pjsua_media.c) to 10 ms, and make this configurable. Default PortAudio sound driver backend was also made configurable, with the default is WMME (ticket #384). The default number of sound buffers (PJMEDIA_SOUND_BUFFER_COUNT) has been reduced from 16 to 6 (ticket #394). WMME audio latency buffering in PortAudio is now limited by 100 ms by default (ticket #395).