Roadmap

THIS ROADMAP PAGE IS DEPRECATED PLEASE GO TO GitHub Milestones

Release Focus

  • WebRTC interop for video:
    • RTCP-FB PLI
    • 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

common:

#2208
Change default arch for Android and iOS to 64-bit

pjlib, pjlib-util:

#2153
Make timer entry structure opaque
#2220
Add list of trusted root CA for OpenSSL
#2225
Timer heap refactoring
#2249
Use sorted linked list for timer

pjnath:

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

pjmedia, pjmedia-audiodev:

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

pjmedia-videodev:

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

pjsip, pjsua-lib:

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

pjsua2, swig:

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

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

No results


List of Bugs

common:

#2207
Fix build failure when using Android NDK r20
#2210
Miscellaneous fixes
#2237
Revisit timer usages

pjlib, pjlib-util:

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

pjnath:

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

pjmedia, pjmedia-audiodev:

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

pjmedia-videodev:

#2239
Avoid crash in rendering after Android OpenGL reinit failure

pjsip, pjsua-lib:

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

pjsua2, swig:

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

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

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


List of Tasks

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

Wish List

common

#1724
Use static analysis tool to detect bugs
#1839
Cppcheck a static analysis tool for C/C++ code

pjlib

No results

pjlib-util

No results

pjnath

#1022
Universal Plug and Play (UPnP) support

pjmedia

#1477
Wait for keyframe after a video frame lost to minimize video distortion (thanks Faba Aa for the feedback)
#1679
Video FPS/framerate converter

pjmedia-audiodev

No results

pjsip

No results

pjsua-lib

#1169
Automatically retry the re-INVITE or UPDATE request upon receiving 419/Request Pending response
#1217
Support for custom presence message body with existing PJSUA-LIB buddy management
#1293
Option to specify explicit entity-tag in PUBLISH request (thanks Johan Lantz for the suggestion)

applications

No results

python

No results

unit-tests

No results

third-party

No results


Known Issues

common

No results

pjlib

No results

pjlib-util

#656
Error processing DNS SRV response when SRV entries contain the same host

pjnath

#647
Assign STUN and TURN as default candidate only when the resolution/allocation is complete (thanks Stephen D. Strowes for the suggestion)

pjmedia

#645
Bad tone generated by the floating point backend with high tone frequency (thanks Olle Frimanson for the report)
#1105
SDP connection info with multicast address not parsed properly (thanks Simon Bolten for the report)
#1178
Handle SRTP SDES parameters
#1198
Wrong RTCP loss period calculation with multiple frames per RTP packet
#1411
Rejecting SDP (re)offer with c line 0.0.0.0 and port non zero, but no rtpmap for dynamic payload types
#1543
When multiple frames per packet is set, DTMF event retransmission is reduced
#1973
Data races in pjmedia stream

pjmedia-audiodev

No results

pjsip

#378
Implement merged request detection
#530
Transaction PJSIP_TSX_STATE_TRYING state is not propaged properly to dialog usages
#949
Refreshing session in Session Timer should also notice media transport attributes in SDP offer/answer.
#1083
The design of the SIP TLS transport may not allow multiple certificates to be loaded
#1096
Assertion in sending UPDATE after receiving 200/INVITE response without to-tag
#1150
Fail to process PIDF XML document if the nodes are namespaced (thanks Johan Lantz for the report)
#1167
Receiving 481 response while in early dialog stage does not seem to terminate the dialog
#1711
Reversed order of on_call_tsx_state() notifications on incoming request within call
#1992
Set INVITE transaction state to Terminated after sending OK

pjsua-lib

#1082
Plain SIP URI is used in Contact header with SIPS destination

applications

No results

python

No results

unit-tests

No results

third-party

No results


These are list of features and fixes that we want to implement in 2.x lifetime. These tickets are here because we don't have a definite time frame on when they will be implemented (otherwise they will go to a specific release version), so please don't ask for more specific plans for these.


Wish List

Things that we wish to implement in 2.x:

common

No results

pjlib

No results

pjlib-util

No results

pjnath

No results

pjmedia

No results

pjmedia-audiodev

No results

pjsip

No results

pjsua-lib

No results

applications

No results

python

No results

unit-tests

No results

third-party

No results


Known Issues

Defects that we wish to fix in 2.x:

common

No results

pjlib

No results

pjlib-util

No results

pjnath

No results

pjmedia

No results

pjmedia-audiodev

No results

pjsip

No results

pjsua-lib

No results

applications

No results

python

No results

unit-tests

No results

third-party

No results

Note: See TracRoadmap for help on using the roadmap.