PJSIP version 0.9.0
Released on 2008-06-28T23:36:49Z
Release 0.9## New Features and Enhancements
Many new features have been implemented on this release.
Audio quality improvements
This release contains many improvements to stability, latency, and in general quality of audio:
- Implementation of Waveform Similarity Based Overlap-Add (WSOLA) algorithm (ticket #497) which provides the base algorithm for buffer expansion/compression and packet loss concealment.
- Ticket #438 fixed many problems related to audio impairments:
- fixed the click noise produced by splitcomb or conference bridge upon underflow/overflow situation (which normally happens when there is drift in audio device)
- much better buffering in splitcomb and conference bridge, with the ability to learn the optimal buffer length and shrinking/extending the buffer as necessary without degrading audio quality too much.
- New conference mixing algorithm which does not weaken the signal unlike to old algorithm (ticket #449)
- New packet loss concealment for G.711 and GSM codec (ticket #502)
- Boost the priority of master port/splitcomb to avoid audio disruption because of CPU usage (ticket #501)
- Optimize the delay in the jitter buffer (ticket #505)
- Much better stereo support all the way, including support for mixing ports with different channel number in the conference bridge (ticket #504)
Secure RTP (SRTP)
SRTP have been implemented and it is available for all platforms including Symbian and Windows Mobile. The implementation uses libsrtp, and SDES is used for the key exchange.
G.722 codec
The G.722 codec is now included in the standard source distribution and it is available for all platforms.
TURN Relay support
TURN has been implemented. The implementation is based on draft-ietf-behave-turn-07 draft and with the default settings should be compatible with the newly released draft-ietf-behave-turn-08 draft.
In addition to integration with ICE all the way up to PJSUA-LIB and pjsua sample application, simple command line TURN client and server implementation samples are provided.
ICE enhancements
The SDP offer/answer procedures related to ICE have been enhanced and should now comply to the latest draft-ietf-mmusic-ice-19 draft.
IPv6 Support
Support for IPv6 has been added in PJLIB, PJSIP, and PJMEDIA libraries. However some features are still missing, such as asynchronous DNS AAAA resolution and IPv6 support in pjsua sample application.
RTCP XR support
Support for subset of RTCP XR (RFC 3611) has been implemented (see ticket #513)
Improved Windows Mobile sample application
A new and more usable sample application !PocketPJ has been provided for !PocketPC/Windows Mobile based platforms.
Improved Symbian support
Carbide C++ is now supported, and a tutorial on developing PJSIP application with Carbide C++ is provided. More codecs have been ported to Symbian, including GSM and Speex.
ActiveSocket Framework
The new ActiveSocket framework in PJLIB provides higher and easier to use abstraction to create asynchronous sockets, utilizing PJLIB's ioqueue.
More Thorough Tests
Last but not least, in addition to existing tests for each library, 100+ automated test scripts have been added to test PJSUA-LIB to test functionality, conformance, and quality of various parts of the library.
API Changes and (In)Compatibility Info #changes
PJLIB
Config (config.h
): ::
- New settings:
- PJ_HAS_IPV6 (default 0)
- PJ_IOQUEUE_DEFAULT_ALLOW_CONCURRENCY
- PJ_FD_SETSIZE_SETABLE
Math and statistic functions (math.h
): ::
- New file
Socket (sock.h
): ::
- The
struct pj_in6_addr
has been changed tounion pj_in6_addr
. - Member names changes in
struct pj_sockaddr_in6
. - New functions:
- pj_sockaddr_init()
- pj_inet_pton()
- pj_inet_ntop()
- pj_inet_ntop2()
- pj_sockaddr_print()
- pj_sockaddr_cmp()
- pj_sockaddr_get_addr()
- pj_sockaddr_has_addr()
- pj_sockaddr_get_addr_len()
- pj_sockaddr_get_len()
- pj_sockaddr_copy_addr()
- pj_sockaddr_cp()
- pj_sockaddr_set_str_addr()
- and pj_sockaddr_get_port()
- New constants:
- PJ_INET_ADDRSTRLEN
- PJ_INET6_ADDRSTRLEN.
ActiveSocket (activesock.h.h
): ::
- New file
Address resolution (addr_resolv.h
): ::
pj_gethostip()
now takes additional address family parameter- New functions:
- pj_getdefaultipinterface()
- pj_getaddrinfo()
String (string.h
): ::
- New functions:
- pj_strstr()
- pj_stristr()
Thread (os.h
): ::
- New functions:
- pj_thread_get_prio()
- pj_thread_set_prio()
- pj_thread_get_prio_min()
- pj_thread_get_prio_max()
- pj_thread_get_os_handle()
IP Helper (ip_helper.h
): ::
- The
pj_enum_ip_interface()
now takes additional address family parameter
IOqueue (ioqueue.h
): ::
- New functions:
- pj_ioqueue_set_default_concurrency()
- pj_ioqueue_set_concurrency()
- pj_ioqueue_lock_key()
- pj_ioqueue_unlock_key()
PJLIB-UTIL
DNS Server (dns_server.h
): ::
- New file
PCAP File Format Support (pcap.h
): ::
- New file
DNS (dns.h
): ::
- New helper functions:
- pj_dns_init_srv_rr()
- pj_dns_init_cname_rr()
- pj_dns_init_a_rr()
PJNATH
Transport Independent TURN Session (turn_session.h
): ::
- New file
TURN Client Socket/Transport (turn_sock.h
): ::
- New file
STUN Client Socket/Transport (stun_sock.h
): ::
- New file
ICE Stream Transport (ice_strans.h
): ::
- Initialization sequence has changed. Now all required parameters (STUN and TURN settings) are wrapped in
struct pj_ice_strans_cfg
and passed topj_ice_strans_create()
. Thepj_ice_strans_set_stun_domain()
andpj_ice_strans_set_stun_srv()
functions have been removed. - The
struct pj_ice_strans
is no longer visible in the API, and various accessor functions have been added
STUN Authentication (stun_auth.h
): ::
- API change
Transport Independent STUN Session (stun_session.h
): ::
- Changes to all API's
STUN Messaging (stun_msg.h
): ::
- Addition and removal of STUN methods and attributes to support latest STUN, TURN, and ICE drafts.
- Minor changes to parameter types in
pj_stun_msg_encode()
- Minor changes to parameter types in
pj_stun_msg_check()
- Minor changes to parameter types in
pj_stun_msg_decode()
- New functions:
- pj_stun_msg_init()
- pj_stun_msg_clone()
- pj_stun_attr_clone()
- pj_stun_sockaddr_attr_init()
- pj_stun_string_attr_init()
- pj_stun_binary_attr_init()
Transport Independent ICE Session (ice_sess.h
): ::
- The addition of
transport_id
parameter in:pj_ice_sess_add_cand()
pj_ice_sess_on_rx_pkt()
on_tx_pkt()
callbackon_rx_data()
callback
Configuration (config.h
): ::
- New settings:
- PJ_STUN_SOCK_PKT_LEN
- PJ_STUN_KEEP_ALIVE_SEC
- PJ_TURN_MAX_DNS_SRV_CNT
- PJ_TURN_MAX_PKT_LEN
- PJ_TURN_PERM_TIMEOUT
- PJ_TURN_CHANNEL_TIMEOUT
- PJ_TURN_REFRESH_SEC_BEFORE
- PJ_TURN_KEEP_ALIVE_SEC
- PJ_ICE_COMP_BITS
- PJ_ICE_CAND_TYPE_PREF_BITS
- PJ_ICE_LOCAL_PREF_BITS
- New settings to control pool size:
- PJNATH_POOL_LEN_ICE_SESS
- PJNATH_POOL_INC_ICE_SESS
- PJNATH_POOL_LEN_ICE_STRANS
- PJNATH_POOL_INC_ICE_STRANS
- PJNATH_POOL_LEN_NATCK
- PJNATH_POOL_INC_NATCK
- PJNATH_POOL_LEN_STUN_SESS
- PJNATH_POOL_INC_STUN_SESS
- PJNATH_POOL_LEN_STUN_TDATA
- PJNATH_POOL_INC_STUN_TDATA
PJMEDIA
Configurations (config.h
): ::
- The value of
PJMEDIA_CODEC_MAX_SILENCE_PERIOD
has been changed from timestamps to milliseconds. - Deprecated settings:
- PJMEDIA_PASOUND_MAX_LATENCY
- PJMEDIA_HAS_STEVEU_PLC
- New settings:
- PJMEDIA_SND_DEFAULT_REC_LATENCY (100)
- PJMEDIA_SND_DEFAULT_PLAY_LATENCY (100)
- PJMEDIA_SOUND_USE_DELAYBUF (0)
- PJMEDIA_WSOLA_IMP (1)
- PJMEDIA_HAS_RTCP_XR (0)
- PJMEDIA_STREAM_ENABLE_XR (0)
- PJMEDIA_USE_HIGH_QUALITY_TONEGEN (1)
- PJMEDIA_HAS_SRTP (1)
- PJMEDIA_HANDLE_G722_MPEG_BUG (1)
- PJMEDIA_TRANSPORT_SPECIFIC_INFO_MAXCNT (4)
- PJMEDIA_TRANSPORT_SPECIFIC_INFO_MAXSIZE (16*sizeof(long))
Mono-Stereo-Multichannel Frame Converter (stereo.h
): ::
- New file
RTCP XR/Extended Report (rtcp_xr.h
): ::
- New file
Waveform Similarity Overlap-Add (wsola.h
): ::
- New file
Adaptive Delay Buffer (delaybuf.h
): ::
- New file
Clock Generator (clock.h
): ::
- Added
channel_count
parameter topjmedia_clock_create()
Media Transport (transport.h
): ::
- The media transport API has been changed. New functions to interact with SDP have been added.
- The
pjmedia_transport_get_info()
parameter has changed. - New functions:
- pjmedia_transport_send_rtcp2()
- pjmedia_transport_media_create()
- pjmedia_transport_encode_sdp()
- pjmedia_transport_media_start()
- pjmedia_transport_media_stop()
- pjmedia_transport_simulate_lost()
UDP Transport (transport_udp.h
): ::
- Added
pjmedia_transport_udp_create3()
to specify address family when creating the media transport. This is to support IPv6. - Removed these functions as they are now part of media transport API:
- pjmedia_transport_udp_simulate_lost()
- pjmedia_transport_udp_close()
- pjmedia_transport_udp_get_info()
- Removed
pjmedia_transport_udp_info
structure as it's now part ofpjmedia_transport_info
.
Secure RTP (SRTP) Transport (transport_srtp.h
): ::
- New file
ICE Media Transport (transport_ice.h
): ::
- Major modifications
- The
pjmedia_ice_create()
function has changed. - The
on_ice_complete()
callback has changed. - The following functions have been removed since they are now part of the transport API:
- pjmedia_ice_destroy()
- pjmedia_ice_start_init()
- pjmedia_ice_get_init_status()
- pjmedia_ice_get_comp()
- pjmedia_ice_init_ice()
- pjmedia_ice_modify_sdp()
- pjmedia_ice_start_ice()
- pjmedia_ice_stop_ice()
- pjmedia_ice_simulate_lost()
Codec (codec.h
): ::
- Added
max_bps
member inpjmedia_codec_param.info
to support VBR.
Ports (port.h
): ::
- Added
bit_info
member instruct pjmedia_frame
to support representing audio frame that is not bit-aligned to byte boundary.
SDP (sdp.h
): ::
- New functions:
- pjmedia_sdp_attr_create_rtcp()
- pjmedia_sdp_transport_cmp()
- pjmedia_sdp_media_deactivate()
Adaptive Jitter Buffer (jbuf.h
): ::
- New functions:
- pjmedia_jbuf_put_frame2()
- pjmedia_jbuf_get_frame2()
- Added more members in
struct pjmedia_jb_state
:- avg_delay
- min_delay
- max_delay
- dev_delay
Sound device abstraction (sound.h
): ::
- New function:
- pjmedia_snd_set_latency()
Stream (stream.h
): ::
- Changes in
pjmedia_stream_info
:- type of
rem_addr
andrem_rtcp
have been changed frompj_sockaddr_in
to the more genericpj_sockaddr
to support IPv6. - added RTCP XR related settings
- type of
- New function:
- pjmedia_stream_get_stat_xr()
Tone Generator (tonegen.h
): ::
- New function:
- pjmedia_tonegen_rewind()
WAV File Player (wav_port.h
): ::
- New function:
- pjmedia_wav_player_get_len()
RTP Session (rtp.h
): ::
- New function:
- pjmedia_rtp_session_update2()
RTCP Session (rtcp.h
): ::
- New functions:
- pjmedia_rtcp_rx_rtp2()
- pjmedia_rtcp_enable_xr()
Endpoint (endpoint.h
): ::
- New functions:
- pjmedia_endpt_get_thread_count()
- pjmedia_endpt_get_thread()
Memory Based Playback (endpoint.h
): ::
- New option:
- PJMEDIA_MEM_NO_LOOP
Session (session.h
): ::
- New function:
- pjmedia_session_get_user_data()
PJSIP
Endpoint (sip_endpoint.h
): ::
- The
pjsip_endpt_create_tsx()
declaration has been removed
Transaction Layer (sip_transaction.h
): ::
- New function:
- pjsip_tsx_layer_get_tsx_count()
Message Representation Layer (sip_msg.h
): ::
- Added
pjsip_retry_after_hdr
header field.
Dialog Layer (sip_dialog.h
): ::
- New function:
- pjsip_ua_get_dlg_set_count()
Transport Layer (sip_transport.h
): ::
- New IPv6 transport types:
- PJSIP_TRANSPORT_UDP6
- PJSIP_TRANSPORT_TCP6
- New functions:
- pjsip_transport_type_get_af()
- pjsip_transport_get_type_desc()
UDP Transport (sip_transport_udp.h
): ::
- New functions to support IPv6:
- pjsip_udp_transport_start6()
- pjsip_udp_transport_attach2()
TLS Transport (sip_transport_tls.h
): ::
- Default TLS method has been changed from SSLv23 to TLSv1.
Configurations (sip_config.h
): ::
- Support for run-time configuration change by using new function
pjsip_cfg()
Core Stateless Operations (sip_util.h
): ::
- New function:
- pjsip_restore_strict_route_set()
PJSIP-UA
Client Registration (sip_regc.h
): ::
- Added
token
member inpjsip_regc_cbparam
Invite Session (sip_inv.h
): ::
- Added
on_send_ack()
callback andpjsip_inv_create_ack()
function to allow application to construct and send ACK request manually.
PJSIP-SIMPLE
No changes to the API.
PJSUA-LIB
PJSUA API (pjsua.h
): ::
- New callbacks:
- on_stream_created()
- on_stream_destroyed()
- Changes in
struct pjsua_config
:- Removed
stun_relay_host
(replaced with TURN settings below). - Added
use_srtp
- Added
srtp_secure_signaling
- Removed
- Changes in
struct pjsua_acc_config
:- Renamed to
auto_update_nat
toallow_contact_rewrite
- Added
use_srtp
- Added
srtp_secure_signaling
- Renamed to
- Changes in
struct pjsua_media_config
:- Added
snd_clock_rate
- Added
channel_count
- Added
snd_auto_close_time
- Added
- TURN settings in
struct pjsua_media_config
:- Renamed
enable_relay
toenable_turn
- Added
ice_no_host_cands
- Added
turn_server
- Added
turn_conn_type
- Added
turn_auth_cred
- Renamed
- New compile time settings:
- PJSUA_DEFAULT_AUDIO_FRAME_PTIME (20)
- Changed default compile time settings value:
- PJSUA_DEFAULT_CODEC_QUALITY (8 (prev=5))
- PJSUA_DEFAULT_ILBC_MODE (30 (prev=20))
Known Issues #known-issues
Apart from general known issues documented in [milestone:Known-Issues], there is a specific issue related to ICE on Symbian, as it raises E32USER CBase 46 exception.
For more details about the ticket list, please see Release Notes