Milestone release-2.10

4 years late (Dec 31, 2019 12:00:00 AM)


Total number of tickets: 76 - closed: 65 - active: 11


2 / 2


3 / 6


6 / 7


17 / 20


3 / 3


3 / 3


7 / 7


14 / 14


4 / 8


5 / 5


1 / 1


Release Focus

  • WebRTC interop for video:
    • VP8 and VP9 video codec
  • Audio Enhancements
    • Changing codec bitrate based on RTCP feedbacks, especially Opus (and AMR, Speex)
    • Voice Processing IO for MacOS
  • Timer refactoring

Backward incompatibility

  1. Due to #2209 (Insufficient variable storage to contain Expires header field/ parameter):
    • Any sign comparison of expiration fields MUST be modified, for example: pjsip_contact_hdr.expires < 0 should be changed to pjsip_contact_hdr.expires == PJSIP_EXPIRES_NOT_SPECIFIED.
    • Direct setting/comparison with -1 should still work, for example: pjsip_pres_inititate(sub, -1, ...) or pjsip_contact_hdr.expires == -1. This is because PJSIP_EXPIRES_NOT_SPECIFIED == (unsigned) -1. Nevertheless, for future compatibility, it is recommended to change any -1 to PJSIP_EXPIRES_NOT_SPECIFIED.
  2. Due to #2233 (Change enumeration typemaps in SWIG Java), Java applications needs to be updated:
    • Accessing enumeration value is no longer using swigValue() method, e.g: pjsip_inv_state.PJSIP_INV_STATE_CONFIRMED.swigValue() must be changed to pjsip_inv_state.PJSIP_INV_STATE_CONFIRMED.
    • All enumeration types are now int, e.g: pjsip_status_code code must be changed to int code.
  3. Due to #2251 (Deadlock between PJSUA LOCK and conference mutex):
    • pjmedia_*_set_eof_cb() and pjmedia_*_set_cb() are deprecated and replaced with pjmedia_*_set_eof_cb2()/set_cb2(). The callbacks will now be asynchronous.
  4. Due to #2265 (Compatibility issues on Python 3.7 or above):
    • PJSUA2 async field in OnCallRxReinviteParam is renamed to isAsync.

Ticket List:

List of Enhancements


Change default arch for Android and iOS to 64-bit

pjlib, pjlib-util:

Make timer entry structure opaque
Add list of trusted root CA for OpenSSL
Timer heap refactoring
Use sorted linked list for timer


Omit deprecated IPv6 addresses from ICE candidates
Add callback to notify when first valid pair is found on ICE negotiation

pjmedia, pjmedia-audiodev:

Update Speex AEC to the latest version to get multichannel EC
SDP signaling for RTCP-XR
Dynamic payload type allocation
Video keyframe request/response using RTCP feedback Picture Loss Indication
Support for Voice Processing IO Audio Unit on Mac
Generate and negotiate telephone-event with multiple clock-rates in SDP offer/answer
Support trickle ICE
Enable OpenH264 native log
Filter SRTP crypto for setting DTLS-SRTP profile supported by by OpenSSL


Support for VP8 and VP9 video codec
Add API for making video window full screen

pjsip, pjsua-lib:

PJSUA-LIB should report disconnection event immediately after pjsua_call_hangup() is called
Use group lock instead of mutex for SIP dialog which is useful for B2BUA scenarios
Introduce a new compiler setting to allow to use cnonce for SIP authentication without hyphen character
Specify audio/video direction when making/answering call
Prevent unnecessary locking when adding group lock handler
Notify when IP change handling is completed
Allow Via header with IPv6 containing []

pjsua2, swig:

Add option to specify SWIG bindings
Change enumeration typemaps in SWIG Java
Add PJSUA2 API to get and set OPUS codec setting

applications, python, unit-tests, third-party:

No results

List of Bugs


Fix build failure when using Android NDK r20
Miscellaneous fixes
Revisit timer usages

pjlib, pjlib-util:

When using Openssl as TLS backend, close notify alert is not sent before closing the connection
UDP transport restart might not get called when replace_udp_socket() fails.
Prevent continuous memory allocation when getting raw certificate on TLS


First packet for TURN over TCP might get dropped
Check for PJ_ICE_ST_MAX_CAND when adding new ICE candidate
ICE initialization issue if an error happens during allocating state
Limitations in ICE data sending
Timer crash in STUN session

pjmedia, pjmedia-audiodev:

Separate DTLS-SRTP negotiation for RTP and RTCP
Fix potential buffer overflow in Video Toolbox codec
Reset jitter buffer after Opus ptime decreased
ALSA sound device wrapper implementation ignores period size returned by ALSA
De-Initialize ALSA sound device with snd_pcm_drop() instead of snd_pcm_drain() to avoid stuck issue
Bug in PCM shift in G722
Potential premature buffer reuse in UDP media transport
Memory leak with third party resampling
Exception in iOS Video Toolbox H264 due to UI API called on background thread
Distorted video sent by iOS 13 devices
Memory leak if stream fails to be created
Deadlock between PJSUA LOCK and conference mutex
Fix Darwin video issue if supplied image height is different from the resolution
Incoming SDP offer with SRTP-DTLS rejected with PJMEDIA_SDPNEG_ENOMEDIA


Avoid crash in rendering after Android OpenGL reinit failure

pjsip, pjsua-lib:

Review API pjsua_transport_close()
Revisit IPv4/IPv6 settings and behavior in pjsua
Insufficient variable storage to contain Expires header field/ parameter.
Delays in sending SIP messages to IPv4 literal
Subscription gets terminated when NOTIFY in call transfer is challenged
Sending ACK not retrying next server
Local hold is not reset if there's failure during reinvite/update
Double destroy of invite session
Update Via header on CANCEL request for proxy scenario if the "sent-by" field is not set
Message buffer not set correctly in pjsip_rx_data_clone()
Transport reuse stops working after a transport error
Reconnect video stream listeners in video conference bridge after format changed
Fix check to cleanup provisional media
Potential deadlock between pjsua lock and sip transport's lock

pjsua2, swig:

SWIG exception in mapping an invalid C++ enum value to Java (continuation of #2121)
Crash on Endpoint::libDestroy() when there is an active call

applications, python, unit-tests, third-party:

Failed building SWIG java binding for android (x86 target)
Potential deadlock between sip_transaction and sip_reg
Compatibility issues on Python 3.7 or above

List of Tasks

Helgrind thread error detector test and analysis
Investigate AEC info to be added into call info & statistics dump
Perform RTP fuzzing

Note: See TracRoadmap for help on using the roadmap.