= Migration From Version 0.5 To Version 0.6 = = 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}}}. === 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. === Makefile based Projects === Makefile based project should include PJ's '''{{{build.mak}}}''' file and gets the link specification from that file (as described in [wiki:Getting_Started_Using 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.