Major Changes since Version 0.5
Summary
Summary of Changes
- Added PJ_POOL_ALLOC_T and PJ_POOL_ZALLOC_T macros in pjlib.
- Added IP helper API in ip_helper.h.
- Added new PJNATH library containing ICE, STUN, and TURN.
- Most third party libraries now lives in separate directories, under third_party directory.
- STUN related settings have been moved from transport config to pjsua config in PJSUA-LIB.
Updating the Application
All Projects
- The STUN settings have been moved from pjsua_transport_config to pjsua_config. Please see stun_domain and stun_host setting in pjsua_config.
All Visual Studio/Embedded? Visual C Projects
- Add IPHLPAPI.LIB to input library (Visual Studio 6 users see below).
- Add these third party libraries into your project dependencies:
- third_party/build/gsm/libgsmcodec
- third_party/build/ilbc/libilbccodec
- third_party/build/portaudio/libportaudio
- third_party/build/resample/libresample
- third_party/build/speex/libspeex
- Applications based on PJSUA-LIB, or applications wanting to use the new STUN and ICE functionality in PJNATH, should add pjnath/build/pjnath library into the project dependencies.
Visual Studio 6
VS6 users need to download another/newer Platform SDK from MSDN because IPHLPAPI.LIB is not shipped with VS6. This step is not necessasry if VC++ 2005 Express is already installed in the same machine.
Once Platform SDK has been downloaded, add the relevant include and library paths to VS6 directories, after the include and library paths of the VS6's Platform SDK.
Visual Studio 2002, 2003
VS 2002/2003 users need to re-import the project files from the Visual Studio 6 projects.
Visual Studio for Windows Mobile
Visual Studio for Windows Mobile users need to re-import the project files from the Embedded Visual C projects.
Makefile based Projects
Makefile based project should include PJ's build.mak file and gets the link specification from that file (as described in Getting Started Part II: Building Your Own Application using PJSIP).
Detail Changes
PJLIB
Changes in PJLIB:
- Added PJ_POOL_ALLOC_T and PJ_POOL_ZALLOC_T macros, which should be preferable than the old pj_pool_alloc()/pj_pool_zalloc() since it provides more type safety.
- PJLIB now has IP Helper API in ip_helper.h file to enumerate local interface and local routing (needed by ICE). Windows application must link with IPHLPAPI.LIB.
New PJNATH Library
There is a new PJNATH library for NAT traversal helper, containing ICE and new STUN implementation. This library is platform independent, and it depends only on pjlib and pjlib-util.
If the application is based on pjsua-lib, then you will have to add pjnath library to your link process.
PJMEDIA
PJMEDIA is the one that has underdone the most changes, although most the API remains the same:
- All third party libraries now are separated from pjmedia or pjmedia-codec into their own directory, so that it would be easier to maintain (synchronize with the original source). They now live in third_party directory.
- Added Speex resampler as one of the resampling backend (default is still disabled)
- Steve Underwood's PLC has been removed from PJMEDIA. Now PJMEDIA only uses PLC that is built-in with the codec, for example in Speex and iLBC.
PortAudio
PortAudio now lives in third_party/portaudio directory, and is directly synch-ed to main PortAudio SVN (v19-devel branch, although it's locked to a specific revision). This arrangement would make it easy to synchronize PortAudio with their development.
The PJMEDIA specific build files for PortAudio is located under third_party/build/portaudio directory.
Speex
Speex now lives in third_party/speex directory, and is directly synch-ed to main Speex SVN (trunk, although it's locked to a specific revision). This arrangement would make it easy to synchronize PortAudio with Speex development.
The PJMEDIA specific build files for Speex is located under third_party/build/speex directory.
GSM Codec
The GSM codec now lives in third_party/gsm directory, and the content is taken from GSM tarball release.
The PJMEDIA specific build files for GSM is located under third_party/build/gsm directory.
iLBC Codec
The iLBC codec now lives in third_party/ilbc directory, and the content is taken from iLBC RFC.
The PJMEDIA specific build files for iLBC is located under third_party/build/ilbc directory.
Resample
The resampling library now lives in third_party/resample directory, and the implementation was based on libresample-1.7, but was modified (unfortunately I couldn't find the original libresample-1.7.tar.gz anymore, so most original files that come with the original library are missing).
The PJMEDIA specific build files for resample is located under third_party/build/resample directory.
In addition, PJMEDIA now also supports the sample rate converter in Speex.
To control which resampling back-end to be used in PJMEDIA, declare either of
these macros in your config_site.h:
- PJMEDIA_HAS_LIBRESAMPLE=1, which is the default.
- PJMEDIA_HAS_SPEEX_RESAMPLE=1, if you want to try Speex resampler.
Because of this new arrangements, PJMEDIA_HAS_SMALL_FILTER and PJMEDIA_HAS_LARGE_FILTER macros are now obsolete.
PLC
Support for PLC (Packet Loss Concealment) implementation that is based on Steve Underwood's SpanDSP work has been removed. Now PJMEDIA will only use PLC that is built-in with the codec, which means that this feature is only available for Speex and iLBC codec.
Because of this, the PJMEDIA_HAS_STEVEU_PLC configuration macro is now obsolete.
MP3 File Writer
Support for encoding/writing MP3 file (the MP3 file writer port) has been removed from PJMEDIA. If application wants this, it can get the original files from third_party/mp3 directory.
PJSUA-LIB
The STUN related settings have been moved from transport config to PJSUA config.