Custom Query (2195 matches)
Results (1301 - 1400 of 2195)
Ticket | Summary | Owner | Type | Priority | Milestone | Component |
---|---|---|---|---|---|---|
#1871 | Missing audio index normalization in audio device open functions | nanang | defect | normal | release-2.4.5 | pjmedia |
Description |
Audio device open APIs, as described in the specifications, treat any negative device ID value indifferently, i.e: as default or first available device. However, some new audio device APIs differentiate -1 and -2 as PJMEDIA_AUD_DEFAULT_CAPTURE_DEV and PJMEDIA_AUD_DEFAULT_PLAYBACK_DEV, such as pjmedia_aud_dev_default_param(). Unfortunately some device open API implementations are currently not normalizing the negative audio index before calling pjmedia_aud_dev_default_param(). So for example, on a system without input device, calling pjmedia_snd_port_create_player() with device index param set to -1 (=PJMEDIA_AUD_DEFAULT_CAPTURE_DEV) will return error PJMEDIA_EAUD_NODEFDEV. Thanks Daljeet Singh for the report. |
|||||
#1443 | Missing destroy method in opencore-amrnb codec factory (thanks Werner Dittmann for the fix) | nanang | defect | normal | release-2.0-rc | pjmedia |
Description |
Since 2.0, we require codec factory to implement "destroy" op (see #1294). |
|||||
#1387 | Missing newline when printing user defined header in multipart message (thanks Luis Martin Gil for the patch) | bennylp | defect | normal | release-1.12 | pjsip |
Description |
Bug in the multipart message will cause user defined headers to be printed without newlines. |
|||||
#1080 | Missing some NOTIFY requests in call transfer scenarios | bennylp | defect | normal | release-1.7 | pjsip |
Description |
In some unattended call transfer scenario, it looks like we miss sending some NOTIFY requests, and especially the NOTIFY containing 200/OK sipfrag status. This causes transferer to keep the old call active instead of disconnecting it. |
|||||
#357 | Missing tonegen.[h/c] in Windows CE project file (thanks Paul Levin) | bennylp | defect | normal | release-0.8.0 | pjmedia |
Description |
The tonegen (tone generator) source files were missing in WinCE/EVC4 project files. |
|||||
#1234 | Missing video keyframe | nanang | defect | normal | release-2.0-beta | pjmedia |
Description |
Missing keyframe is a major and common issue in real-time video session. Packet lost or discarding packets by jitter buffer (opening video devs may take few seconds) in the beginning of video session could be the main cause. We experienced this problem a lot in sipit! When using H.264, missing keyframe causes pjsua got no video (decoding failure), sometime video could be successfully decoded after call hold and resume. When using H.263, initial video came foggy (only the moving object part had clear view, background/other part was gray). Solutions/ideas:
Note:
|
|||||
#549 | Modification in media transport API to support more offer/answer scenarios | bennylp | defect | normal | release-0.9.0 | common |
Description |
While the media transport API interface have changed significantly from 0.8 because of SRTP (ticket #467), it still has some drawbacks, especially related to subsequent offer/answer. This ticket will make it right. Some of the discussions for the draft modification is written here: 0.9/Media_Interface_Change |
|||||
#1669 | Modified account proxy not applied in the reregistration | bennylp | defect | normal | release-2.2 | pjsua-lib |
Description |
When account proxy is modified, i.e: via pjsua_acc_modify(), re-registration will be automatically performed, but the re-registration doesn't use the new proxy setting. |
|||||
#1540 | Modify MWI subscription setting on run-time and add callback for the subscription state change | bennylp | enhancement | normal | release-2.0.1 | pjsua-lib |
Description |
Modifiable settings to be implemented:
When there is a MWI subscription state change, pjsua callback on_mwi_state() will be called. MWI subscription will be terminated when deleting the associated account. Thanks Peter Koletzki and Matynka Bartosz for the feedbacks. |
|||||
#246 | Modify PJLIB timer_heap in Symbian to use Symbian's Active objects | bennylp | task | normal | Symbian-trunk-integration | pjlib |
#1628 | Modify SIP transaction to use group lock to avoid deadlock etc. | bennylp | enhancement | normal | release-2.2 | pjsip |
Description |
The proxy use case of PJSIP will introduce deadlock and other racing condition when using the transaction. Consider the following case: Thread 1:
Thread 2:
Also there is a synchronization issue where a transaction is holding a stale pointer to the other transaction. These problems can be solved by changing the transaction to use the Group Lock (introduced in PJSIP 2.1) and arrange the usage as follows:
Thank you Mike Evans for reporting the problem and volunteering to test the initial patch. |
|||||
#829 | Modify all applications in VS 2005 build settings to depend on libpjproject only | bennylp | task | normal | release-1.2-QA | applications |
#1948 | Modify async dispatch to synchronous on Mac and iOS video device implementation | ming | defect | normal | release-2.6 | pjmedia-videodev |
Description |
Using asynchronous dispatch to the main queue may cause application to use objects prematurely (such as using UIView before it's initialized). This ticket will fix it by doing the dispatch synchronously instead. |
|||||
#849 | Modify conference audio switch behavior in connecting ports. | nanang | enhancement | normal | release-1.3 | pjmedia |
Description |
Previously when the sink port is busy, the connection is rejected due to conf switch limitation (that a port can only has one transmitter), however it is rather uncomfortable in practice (e.g: attended call transfer), so this ticket will change the behavior: the destination port should be released first so the new connection can be made. |
|||||
#1525 | Modify configure script to disable autodetection of some external libraries when cross-compiling | bennylp | enhancement | normal | release-2.0.1 | common |
Description |
During cross-compilation, currently configure script will automatically detect the libraries on the build machine instead of the target host, so this ticket will disable autodetection in cross-compilation. Users now need to supply the configure script with the option "--with-A" to use feature A. |
|||||
#1218 | Modify configure-iphone to use the latest version of gcc | bennylp | enhancement | normal | release-1.10 | common |
Description |
Modify configure-iphone to use the latest version of gcc instead of using the first available version since the latest version provides better support for latest iOS versions. |
|||||
#1860 | Modify pjmedia_sdp_neg_fmt_match() to check for encoding parameters as well | nanang | enhancement | normal | release-2.4.5 | pjmedia |
Description |
In addition to checking encoding name and clock rate, pjmedia_sdp_neg_fmt_match() API will check encoding parameters as well. From: https://tools.ietf.org/html/rfc4566#page-25
For audio streams, <encoding parameters> indicates the number of audio channels. This parameter is OPTIONAL and may be omitted if the number of channels is one, provided that no additional parameters are needed. For video streams, no encoding parameters are currently specified. |
|||||
#602 | Modify the stream to maintain RTP sequence number and timestamp from the last transmission when it's restarted. | nanang | enhancement | normal | release-1.0-rc1 | pjmedia |
Description |
See ticket #600 (Solution 1). |
|||||
#1536 | Modify video port creation parameter to be set with actual creation prm on output | ming | enhancement | normal | release-2.0.1 | pjmedia-videodev |
Description |
When creating video port using pjmedia_vid_port_create(), video port may open a video stream with different parameters than requested. On output, the parameter will be set with the actual parameter used to open the video stream. |
|||||
#1472 | Modify video port to create its own clock instead of using the device's clock | nanang | enhancement | normal | release-2.0-rc | pjmedia |
Description |
Video port with active role will now create its own clock so that it is independent of the video capture device's clock. This allows video port to support fps which is different than video device's fps. |
|||||
#1572 | Modifying video stream in a call caused duplicate transport attributes in the SDP (thanks to Itay Bianco for the report) | bennylp | defect | normal | release-2.1 | pjsua-lib |
Description |
When pjsua_vid.c's call_modify_video() is called, the current SDP will be cloned then the media transport attributes will be added to the SDP by calling pjmedia_transport_encode_sdp(). This can cause duplicate attributes if the current SDP already has media transport attributes. To reproduce using pjsua: Enable ICE, establish a call, modify the video stream (such as "vid call rx off 1") |
|||||
#1253 | Module data in pjsip_tx_data similar to pjsip_rx_data | bennylp | enhancement | normal | Known-Issues-and-Ideas | pjsip |
Description |
Often applications that implement pjsip_module's on_tx_request() callback need to find out what context is associated with the message (for example, the PJSUA-LIB call id or account id). Without the module data field, this can only be done by looking up the message headers such as From or Call-ID, and this is inefficient. |
|||||
#865 | More clever RTP transport remote address switch | nanang | enhancement | major | release-2.8 | pjmedia |
Description |
Currently the UDP and ICE media transport has the capability to switch destination RTP/RTCP address to the source address of the RTP/RTCP packets, if they are different than the original address set in SDP received from remote. It may be better to put this functionality in the stream instead, for the following reason:
|
|||||
#1366 | More clever RTP transport remote address switch | nanang | enhancement | normal | release-1.12 | pjmedia |
Description |
Currently the UDP and ICE media transport has the capability to switch destination RTP/RTCP address to the source address of the RTP/RTCP packets, if they are different than the original address set in SDP received from remote. The problem is audio playback is broken if more than one remotes are transmitting to us simultaneously, e.g. on early media forking scenario. This ticket modifies the behavior so that the transmission won't switch as long as we're receiving RTP/RTCP packets from the "correct" remote address. Also when the remote peer address is still in probation, RTP/RTCP packets from that address will be silently discarded, to avoid playback confusion. Note that there is a more ambitious proposal in #865. |
|||||
#1922 | More compatibility with IPv6 DNS64/NAT64 network | bennylp | enhancement | normal | release-2.5.1 | common |
Description |
This ticket will be the placeholder for various fixes/modifications in order to comply with the guidelines/recommendations in Apple's official doc Supporting IPv6 DNS64/NAT64 Networks. |
|||||
#1866 | More crash in SDP negotiator due to invalid memory access | nanang | defect | normal | release-2.4.5 | pjmedia |
Description |
This issue is related to #1834. INVITE session uses an alternating set of memory pools where the last used is reset after a cycle of SDP negotiation, this requires SDP negotiator to retain some of its internal states using the current pool in each SDP negotiation cycle. This ticket will refactor the management of internal state initial_sdp. The initial_sdp contains local capability (original complete local SDP) provided by application when setting local offer. Currently it needs to be retained for initial and subsequent SDP negotiation operations, one of its usage is to be the default SDP when application supplied NULL SDP in pjmedia_sdp_neg_set_local_answer(). There are some scenarios of SDP negotiation that may cause initial_sdp to be invalid, e.g:
Here are SDP offer/answer operations and actions to be done on initial_sdp:
|
|||||
#1400 | More flexible video operation in pjsua application | bennylp | enhancement | normal | release-2.0-beta | applications |
Description |
Enhancements to pjsua:
|
|||||
#970 | More gracefull PJSUA-LIB shutdown sequence | bennylp | enhancement | normal | release-1.5 | pjsua-lib |
Description |
Related to this ticket, see also ticket #364 |
|||||
#527 | More lenient SDP negotiator | nanang | enhancement | normal | release-0.9.0 | pjmedia |
Description |
Accept the following non-standard scenarios in the SDP negotiator:
|
|||||
#325 | More tunable settings in DNS resolver | bennylp | enhancement | normal | release-0.8.0 | pjlib-util |
Description |
Add good_ns_ttl and bad_ns_ttl in pj_dns_settings. |
|||||
#1111 | More work on automated testing for PJSIP | bennylp | enhancement | normal | release-1.8 | unit-tests |
Description |
This ticket continues the work on PJSIP's AutomatedTesting which was added in PJSIP 1.6 by ticket #1041. |
|||||
#7 | Move PJSIP compile time configurations/settings (such as T1, T2 timers) to run-time (thanks Philippe Leuba) | bennylp | enhancement | major | release-0.9.0 | pjsip |
Description |
Some PJSIP config (e.g. PJSIP_MAX_TSX_COUNT) may better be implemented as a run-time configs instead of compile time, to enable multiple applications to be built on a single PJSIP tree. |
|||||
#2100 | Move SRTP setting in PJSUA and PJSUA2 to account setting | bennylp | enhancement | normal | release-2.8 | pjsua-lib |
Description |
Currently SRTP crypto and keying method is configurable via callback, i.e: on_create_media_transport_srtp() in PJSUA or onCreateMediaTransportSrtp() in PJSUA2 (only crypto). And after some review and internal discussions, we decided to deprecate the callback and move the settings to account config, here are some reasons:
Here are sample codes to enable DTLS-SRTP in outgoing SDP offer:
|
|||||
#1872 | Move iOS audio session category setting to factory initialisation | nanang | enhancement | normal | release-2.4.5 | pjmedia-audiodev |
Description |
Currently each open operation of iOS audio device will reset AVAudioSession category to AVAudioSessionCategoryPlayAndRecord (and without any option), so there is a risk that any audio session settings set by application to be reseted or overridden. To avoid that, the category setting will be moved to audio device factory initialisation. |
|||||
#596 | Multi-channel capability for the resampling algorithm (thanks Bill Gardner for the patch) | nanang | defect | normal | release-1.0-rc1 | pjmedia |
Description |
The resample API already supports multi-channel input/output, however the channel number is not used for some resample backends (e.g. libresample). |
|||||
#940 | Multiple header rows with the same name may not be completely processed by PJSIP modules. | bennylp | defect | normal | release-1.5 | pjsip |
Description |
Sample cases:
|
|||||
#1592 | Multithreading issues in PJSIP (thanks to Matt Williams for the report and expert analysis) | bennylp | defect | normal | release-2.1 | common |
Description |
1) pj_timer_heap_poll examines the timer heap’s current size without taking its lock As in the summary, pj_timer_heap_poll examines ht->cur_size before taking the lock. Another thread could be manipulating this at the same time. 2) Possible deadlock due to “lock order inversion” between transport and transaction locks Normally, when sending a message, the transaction lock is taken (in pjsip_tsx_send_msg), followed by the transport lock (in tcp_send_msg). However, when sending the first message on a new connection, we receive a callback from the ioqueue layer to say that the TCP connection is connected (on_connect_complete), causing us to take the transport lock, and then take the transaction lock (in send_msg_callback). Taking locks in different orders in different places is a common cause of deadlock so we would like to prevent that happening. |
|||||
#1712 | Must not send BYE before ACK is received | bennylp | defect | normal | release-2.2 | pjsip |
Description |
According to http://tools.ietf.org/html/rfc3261#section-15: However, the callee's UA MUST NOT send a BYE on a confirmed dialog until it has received an ACK for its 2xx response or until the server transaction times out. |
|||||
#6 | NAT refresh packet | bennylp | enhancement | minor | Known-Issues | common |
Description |
When the application is behind firewall, maybe the stack needs to periodically send keep-alive packet (probably to STUN server) to keep the NAT binding open. |
|||||
#2032 | NAT64 support for IPv4 interoperability | bennylp | enhancement | normal | release-2.7 | common |
Description |
Add support for clients on IPv6-only NAT64 environment to communicate with IPv4 servers and endpoints. Please refer to the NAT64 wiki. |
|||||
#2109 | NAT64: Rewrite remote IPv4 address in Contact or Route | bennylp | defect | normal | release-2.9 | pjsip |
Description |
When receiving SIP message within/creating dialog, PJSIP should rewrite the Contact (and first Route if it is an initial INVITE transaction) if it is using IPv4 address, as otherwise, PJSIP will send a new request (within dialog) to that IPv4 address. Thanks Kyle Kurz for the report. |
|||||
#499 | NULL frame transmission in conference bridge is not clocked at the right interval | nanang | defect | normal | release-0.9.0 | pjmedia |
Description |
When the port is not receiving signal from any other ports (e.g. when no other ports is transmitting to this port), the bridge periodically transmit NULL frame to the port to keep the port "alive" (for example, a stream port needs this heart-beat to periodically transmit silence frame to keep NAT binding alive). This NULL frame should be sent to the port at the port's ptime rate. So if the port's ptime is greater than the bridge's ptime, the bridge needs to delay the NULL frame until it's the right time to do so. This bug transmits NULL frame at the bridge's ptime interval and not the port's ptime interval. |
|||||
#1016 | Native Linux ALSA audio device backend implementation | nanang | enhancement | normal | release-1.6 | pjmedia-audiodev |
Description |
Port Linux ALSA audio device backend implementation from the old sound device API to the pjmedia_audiodev framework. |
|||||
#983 | Native WMME audio device backend is now the default device on Win32 and Windows Mobile. PortAudio is by default disabled. | nanang | enhancement | normal | release-1.5 | pjmedia-audiodev |
Description |
The native WMME audio device implementation (wmme_dev.c) provides richer API than PortAudio, and by this ticket it is now used as the default audio device backend on Windows platforms. |
|||||
#1270 | Native libx264 encoder | nanang | enhancement | minor | release-2.0-beta | pjmedia |
#1192 | Native resampling for recording using AudioConverter on Mac OS (thanks to Seth Hinze for the patch) | nanang | enhancement | normal | release-1.10 | pjmedia-audiodev |
Description |
coreaudio_dev now supports recording using a different sample rate than the hardware's sample rate by using Audio Converter for sample rate conversion. |
|||||
#298 | New API to get the number of ports registered in conference bridge | bennylp | enhancement | normal | release-0.7.0 | pjmedia |
#682 | New API to register (external) Python thread (thanks Johan Risberg for the patch) | bennylp | enhancement | normal | release-1.0.1 | python |
Description |
Multi-thread Python application will need to register its threads to PJSUA before the thread can call any of the PJSUA functions. Thanks Johan for the patch. |
|||||
#923 | New API to retrieve current jitter buffer state from a stream/session | nanang | enhancement | minor | release-1.4 | pjmedia |
Description |
The jitter buffer provides pjmedia_jbuf_get_state() API to monitor its state, however this API is not accessible to application because jitter buffer instance is private to the stream/session. This ticket adds new API to retrieve the jitter buffer state from the stream/session instance. |
|||||
#1716 | New Android application based on pjsua2+SWIG API | bennylp | enhancement | normal | release-2.2 | applications |
Description |
The application is located under pjsip-apps/src/swig/java/android. Check this wiki for build info. |
|||||
#935 | New PJLIB API pj_sockaddr_parse2() to parse "HOSTPART[:PORT]" format into the correspondong hostpart and port | bennylp | enhancement | normal | release-1.4 | pjlib |
Description |
The pj_sockaddr_parse() was added in version 1.3 to parse "HOSTPART[:PORT]" into a pj_sockaddr structure, possibly resolving the hostpart into IP address. The new API is pj_sockaddr_parse2(), which just returns the hostpart as string and optional port number. This is useful if caller does not want to resolve the hostpart into IP address (for example, if caller wants to resolve the hostpart with DNS SRV). |
|||||
#878 | New PJLIB API to parse socket address string | bennylp | enhancement | normal | release-1.3 | pjlib |
Description |
New PJLIB API to parse string containing socket address (IP address and optional port): PJ_DECL(pj_status_t) pj_sockaddr_parse(int af, unsigned options, const pj_str_t *str, pj_sockaddr *addr); This function supports parsing several formats. Sample IPv4 inputs and their default results::
This will also work if host resolution is enabled (i.e. gethostbyname() works):
Sample IPv6 inputs and their default results:
Note: when the IPv6 socket address contains port number, the IP part of the socket address should be enclosed with square brackets, otherwise the port number will be included as part of the IP address (see "fec0::01:80" example above). |
|||||
#572 | New PJSIP pjsip_msg_find_hdr_by_names() API to find SIP header by either header name or the short header name | bennylp | enhancement | minor | release-1.0-rc1 | pjsip |
#2077 | New PJSUA & PJSUA2 APIs for instantiating extra audio device | bennylp | enhancement | normal | release-2.8 | pjsua-lib |
Description |
The APIs will be useful for application that needs to work with multiple sound devices concurrently. It can also help application to simplify the tasks of improving media framework clock as described here. Specifications
Sample code using PJSUAenum { EXTRA_SND_DEV_ID = 3; }; pjmedia_snd_port_param ext_param; pjsua_ext_snd_dev *ext_snd_dev; pjsua_conf_port_id ext_id; /* Generate params (with default values) */ status = pjmedia_snd_port_param_default(&ext_param); status = pjmedia_aud_dev_default_param(EXTRA_SND_DEV_ID, &ext_param.base); /* Create the extra audio device */ status = pjsua_ext_snd_dev_create(&ext_param, &ext_snd_dev); ext_id = pjsua_ext_snd_dev_get_conf_port(ext_snd_dev); /* Connect extra audio dev mic to main audio dev */ status = pjsua_conf_connect(ext_id, 0); /* Connect main audio dev mic to extra audio dev */ status = pjsua_conf_connect(0, ext_id); ... /* Destroy extra audio dev (after no longer used) */ pjsua_ext_snd_dev_destroy(ext_snd_dev); Sample code using PJSUA2/* Use Null Audio Device as main media clock. This is useful for improving * media clock (see also https://trac.pjsip.org/repos/wiki/FAQ#tx-timing) * especially when sound device clock is jittery. */ ep.audDevManager().setNullDev(); /* Install extra audio device */ ExtraAudioDevice *auddev2 = new ExtraAudioDevice(-1, -1); try { auddev2->open(); } catch (...) { std::cout << "Extra sound device failed" << std::endl; } /* Create WAV player and play the WAV to extra audio speaker */ AudioMediaPlayer amp; amp.createPlayer(PATH_TO_WAV_FILE); if (auddev2->isOpened()) amp.startTransmit(*auddev2); /* Wait for the WAV playback */ pj_thread_sleep(5000); ... /* Destroy extra audio device (after no longer used) */ delete auddev2; |
|||||
#2058 | New PJSUA API to register a transport factory | bennylp | enhancement | normal | release-2.8 | pjsua-lib |
Description |
Add PJSUA API to register transport factory that has been created by application. This can be useful if application wants to implement custom SIP transport and use it with pjsua. Thanks to Peter Koletzki for the patch. |
|||||
#406 | New PJSUA API to update buddy's presence subscription | bennylp | enhancement | normal | release-0.8.0 | pjsua-lib |
Description |
Currently there is no API to re-initiate presence subscription for a buddy when previous subscription failed. Although the library periodically refreshes the presence subscription for all buddies, some application may want to refresh the buddy's presence subscription immediately (for example upon receiving incoming MESSAGE), and this function is used for that purpose. |
|||||
#1424 | New PJSUA callback of incoming re-offer | bennylp | enhancement | normal | release-2.0-beta | pjsua-lib |
Description |
Currently, any incoming re-offer will be auto answered with 200/OK and the SDP answer is generated based on the current call setting. With this new callback, application will have a chance to reject the re-offer (so the existing media session will remain active), or accept the re-offer with updated call setting. |
|||||
#489 | New PJSUA callbacks to notify application when media stream is created and destroyed | bennylp | enhancement | normal | release-0.9.0 | pjsua-lib |
Description |
New callbacks:
Thanks Norman Franke and Truong Thanh Quang for the suggestions. |
|||||
#930 | New PJSUA-LIB account option to add user defined parameters to the Contact header | nanang | enhancement | normal | release-1.4 | pjsua-lib |
Description |
The pjsua_acc_config.contact_params setting was used to add user defined parameters to the Contact URI. Some applications may need to add user defined parameters to the Contact header, and this will be supported by this ticket. For consistency with RFC 3261, this will modify the semantic of the existing pjsua_acc_config.contact_params field as follows:
|
|||||
#1138 | New PJSUA-LIB account registration state callback to report more callback data (thanks Johan Lantz for the suggestion) | bennylp | enhancement | normal | release-1.8.5 | pjsua-lib |
Description |
Some application would like to inspect the response of REGISTER response, and currently this is not possible since the response is not reported in on_reg_state() callback. This ticket adds a new callback, on_reg_state2(), which also adds the whole response message as well as possibly other infos as parameter. |
|||||
#925 | New application to simulate network and system impairments to see how it affects the audio quality | bennylp | enhancement | normal | release-1.4 | applications |
Description |
This ticket depends on #923 and #924 Screenshot: jbsim - System and network impairments simulator Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com) This program emulates various system and network impairment conditions as well as application parameters and apply it to an input WAV file. The output is another WAV file as well as a detailed log file (in CSV format) for troubleshooting. Usage: jbsim [OPTIONS] General OPTIONS: --codec, -c NAME Set the audio codec Default: PCMU --input, -i FILE Set WAV reference file to FILE Default: ../../tests/pjsua/wavs/input.8.wav --output, -o FILE Set WAV output file to FILE Default: jbsim.wav --duration, -d SEC Set test duration to SEC seconds Default: 20 --log-file, -l FILE Save simulation log file to FILE Note: FILE will be in CSV format with semicolon separator Default: jbsim.out --help, -h Display this screen Simulation OPTIONS: --loss, -x PCT Set packet average loss to PCT percent Default: 0 --loss-corr PCT Set the loss correlation to PCT percent. Default: 0 --min-lost-burst N Set minimum packet lost burst (default:0) --max-lost-burst N Set maximum packet lost burst (default:20) --min-jitter, -j MSEC Set minimum network jitter to MSEC Default: 0 --max-jitter, -J MSEC Set maximum network jitter to MSEC Default: 0 --snd-burst, -b VAL Set RX sound burst value to VAL frames. Default: 1 --tx-ptime, -t MSEC Set transmitter ptime to MSEC Default: 0 (not set, use default) --rx-ptime, -r MSEC Set receiver ptime to MSEC Default: 0 (not set, use default) --no-vad, -U Disable VAD/DTX in transmitter --no-plc, -p Disable PLC in receiver --jb-prefetch, -P Enable prefetch bufferring in jitter buffer --jb-min-pre, -m MSEC Jitter buffer minimum prefetch delay in msec --jb-max-pre, -M MSEC Jitter buffer maximum prefetch delay in msec --jb-max, -X MSEC Set maximum delay that can be accomodated by the jitter buffer msec. |
|||||
#821 | New buddy state callback which additional event parameter (thanks Johan Lantz for the suggestion) | bennylp | enhancement | normal | release-1.3 | pjsua-lib |
Description |
Application may need to inspect additional info in the NOTIFY message, hence the need for the event parameter. |
|||||
#1314 | New callback to notify application when registration or unregistration has been initiated (thanks Tony Jago Million for the patch) | bennylp | enhancement | normal | release-1.12 | pjsua-lib |
Description |
A new callback is added to pjsua_callback to allow application to be notified when the library has started or stopped registration: /** * Notify application when registration or unregistration has been * initiated. Note that this only notifies the initial registration * and unregistration. Once registration session is active, subsequent * refresh will not cause this callback to be called. * * @param acc_id The account ID. * @param renew Non-zero for registration and zero for * unregistration. */ void (*on_reg_started)(pjsua_acc_id acc_id, pj_bool_t renew); |
|||||
#1299 | New callback to notify that sound device needs to be opened or closed | bennylp | enhancement | minor | release-2.0-alpha | pjsua-lib |
Description |
Implement a new callback to notify application that sound device is about to be opened or closed. This is useful if application wants to keep track whether the sound device is currently active or idle, and also will be very useful if application manages the sound device by itself since this callback notifies the application when the library needs to use the sound device and when it's safe to close it, taking into account the sound device idle timer. Prototype of the callback: /** * Callback when the sound device is about to be opened or closed. * This callback will be called even when null sound device or no * sound device is configured by the application (i.e. the * #pjsua_set_null_snd_dev() and #pjsua_set_no_snd_dev() APIs). * This API is mostly useful when the application wants to manage * the sound device by itself (i.e. with #pjsua_set_no_snd_dev()), * to get notified when it should open or close the sound device. * * @param operation The value will be set to 0 to signal that sound * device is about to be closed, and 1 to be opened. * * @return The callback must return PJ_SUCCESS at the moment. */ pj_status_t (*on_snd_dev_operation)(int operation); |
|||||
#1544 | New codec interface for incremental encoding to improve performance with multiple frames per packet | nanang | enhancement | normal | Known-Issues-and-Ideas | pjmedia |
Description |
When stream is configured to send multiple frames per packet, currently this will cause the stream to encode and pack N frames simultaneously in one call to put_frame(). This may put significant load on the CPU since we are encoding that many frames at once and some device may be sensitive to the delay. It has been reported that this may cause audio disruption on iPhone 4S. This ticket implements new interface to the codec to enable encoding frame one by one on each put_frame() cycle and only pack them together once we have enough frame to send. The new codec interface looks like the following: /** * Encode a single audio frame without performing any packing to * the output. Normally the input frame should have exactly the same * ptime as the codec frame time, however when the codec frame ptime * is 10 ms, this may be called with input frame containing 20ms * worth of samples. * * @param codec The codec instance. * @param input Input audio frame. * @param out_size The length of buffer in the output frame. * @param output The output frame. * * @return PJ_SUCCESS on success or the appropriate error code. */ pj_status_t (*encode_single)(pjmedia_codec *codec, const struct pjmedia_frame *input, unsigned out_size, struct pjmedia_frame *output); /** * Pack one or more encoded audio frames into packet, suitable to be * placed as payload of a transport such as RTP. * * @param codec The codec instance. * @param pack_cfg Codec packing settings to specify how audio frames * should be arranged in the output buffer. Use NULL * to use codec's default packing setting. * @param frame_cnt Number of input frames. * @param inputs Input frames, which is an array of encoded frames. * @param out_size Size of the output buffer. * @param output Frame buffer to receive the output. * * @return PJ_SUCCESS on success. */ pj_status_t (*pack)(pjmedia_codec *codec, pjmedia_codec_pack_cfg *pack_cfg, unsigned frame_cnt, pjmedia_frame inputs[], unsigned out_size, struct pjmedia_frame *output); The stream will be modified to support this feature. There will also be a new field in codec param to enable/disable the new feature on per stream basis: struct pjmedia_codec_param { ... struct { ... unsigned pack:1; /**< Enable encode_single()&pack() */ ... } setting; }; Only if pjmedia_codec_param.setting.pack is set to 1, the stream will use the new interface, and only if the codec supports it. The first implementation will add this feature to G.711 and OpenCore AMR codecs. |
|||||
#449 | New conference mixing algorithm | bennylp | enhancement | normal | release-0.9.0 | pjmedia |
Description |
New mixing algorithm for conference bridge: rather than doing multiplication of signal from sources, we can just add the signal from the sources. The benefits of this approach are it doesn't weaken the input signals, and it is faster since the multiplication is replaced by simple addition. |
|||||
#1137 | New configuration to append custom headers into REGISTER request (thanks Johan Lantz for the suggestion) | bennylp | enhancement | normal | release-1.8.5 | pjsua-lib |
Description |
We already have the facility to insert custom header(s) into outgoing requests via pjsua_msg_data facility, but this lacks the capability to add the header into REGISTER request. |
|||||
#1322 | New console app | ming | enhancement | major | release-2.x | applications |
#198 | New error space for STUN and ICE | bennylp | task | normal | ICE | pjlib-util |
#1372 | New log features: indentation and thread switching indication | bennylp | enhancement | normal | release-2.0-alpha2 | common |
Description |
Two new features are introduced by this ticket: 1. Indentation Indentation of log message to give grouping context of the messages. Example: 21:13:35.787 pjsua_call.c Answering call 1: code=200 21:13:35.787 pjsua_media.c ...Call 1: updating media.. 21:13:35.787 pjsua_media.c .....Media session call01:0 is destroyed 21:13:35.787 pjsua_media.c ....Audio channel update.. 21:13:35.787 strm0x22f04d8 .....VAD temporarily disabled 21:13:35.788 strm0x22f04d8 .....Encoder stream started 21:13:35.788 strm0x22f04d8 .....Decoder stream started 21:13:35.788 pjsua_app.c ...Call 1 media 0 [type=audio], status is Active 21:13:35.788 pjsua_media.c ...Conf disconnect: 2 -x- 0 21:13:35.788 pjsua_media.c ...Conf connect: 3 --> 0 21:13:35.788 pjsua_media.c ...Conf connect: 0 --> 3 Use pj_log_push_indent() and pj_log_pop_indent() to use this new feature. The PJ_LOG_HAS_INDENT must be set in the log decoration flag (it is set by default by PJSUA-LIB). The indentation is applied on per thread basis. The complete features introduced by this ticket are:
Sample code: #include <pj/log.h> #define THIS_FILE "sample.c" void inner() { PJ_LOG(4,(THIS_FILE, "We're in inner")); } void outer() { PJ_LOG(4,(THIS_FILE, "Calling inner")); pj_log_push_indent(); inner(); pj_log_pop_indent(); } int main() { pj_log_set_decor(pj_log_get_decor() | PJ_LOG_HAS_INDENT); outer(); return 0; } The sample code above will produce: 21:13:35.787 sample.c Calling inner 21:13:35.787 sample.c .We're in inner 2. Thread Switch Indication An exclamation mark will be placed before a log message if the caller thread is different than the caller thread of the previous message. Example: 21:13:35.787 sample.c Thread A is calling the log 21:13:35.787 sample.c ..This one is still from thread A 21:13:35.787 sample.c !Thread B appears (indentation has changed too) 21:13:35.787 sample.c Thread B again 21:13:35.787 sample.c !..Thread A resumes (indentation changed back) This feature is controlled by the new PJ_LOG_HAS_THREAD_SWC log decor. It is set by default by PJSUA-LIB. |
|||||
#921 | New logging option/flag to include caller thread ID | bennylp | enhancement | minor | release-1.4 | pjlib |
Description |
New logging flag PJ_LOG_HAS_THREAD_ID can be used to include the caller thread ID in the log message. This would be useful to troubleshoot threading related problems such as deadlocks. Application would have to activate this flag explicitly to use this feature, either with pj_log_set_decor() or via pjsua_logging_config.decor, since this option is not used by default. |
|||||
#1561 | New lookup function in PJSIP server authentication framework | bennylp | enhancement | normal | release-2.1 | pjsip |
Description |
The user credentials lookup callback is currently only passing realm and account name info, and for some cases it may be insufficient. Additional info such as 'pjsip_rx_data' is considered to provide better flexibility for the application so that it can fetch any information from the message in order to lookup the user credentials. Thanks Mike Evans for the suggestion. |
|||||
#556 | New object oriented Python abstraction for pjsua API | bennylp | enhancement | normal | release-1.0-rc1 | pjsua-lib |
Description |
|
|||||
#1825 | New on_reg_started2 callback | bennylp | enhancement | normal | release-2.4 | pjsua-lib |
Description |
On IP Address change case, app might want to close the transport before connecting state, however it is not possible to get the transport instance before registration process is finished. This ticket is mainly for getting registration transport instance before getting the registration result (via pjsua callback on_reg_state). Example scenario:
on_reg_started callback can be used for getting registration transport instance, but we need to include pjsua_internal.h to get account's pjsip_regc instance (to eventually get the registration transport). With this ticket, it can be done as follow: static void on_reg_started2(pjsua_acc_id acc_id, pjsua_reg_info *info) { pjsip_regc_info regc_info; pjsip_regc_get_info(info->regc, ®c_info); // transport instance is in 'regc_info.transport' ... } |
|||||
#1095 | New option to control the Route headers in the REGISTER request (thanks Henrik Envall for the suggestion) | bennylp | enhancement | normal | release-1.7 | pjsua-lib |
Description |
Currently the REGISTER request will be sent with Route header(s), if outbound proxies are set in the global config or proxies are set in the account config. Some provider would like the REGISTER to be sent directly to the registrar, and this is not possible with existing settings. This ticket adds a new account option to control if and how the Route headers will be added to the REGISTER request. |
|||||
#1156 | New option to ignore bad NOTIFY presence message body (thanks Johan Lantz for the suggestion) | bennylp | enhancement | normal | release-1.8.10 | pjsip |
Description |
Currently bad NOTIFY message body (for presence) will be responded automatically with 488 (Not Acceptable Here), and application callback will not be called. Sample of bad NOTIFY requests:
This ticket adds PJSIP_PRES_BAD_CONTENT_RESPONSE compile time setting with the following spec: /** * Specify the status code value to respond to bad message body in NOTIFY * request for presence. Scenarios that are considered bad include non- * PIDF/XML and non-XPIDF/XML body, multipart message bodies without PIDF/XML * nor XPIDF/XML part, and bad (parsing error) PIDF and X-PIDF bodies * themselves. * * Default value is 488. Application may change this to 200 to ignore the * Unrecognised content (this is useful if the application wishes to handle * the content itself). Only non-3xx final response code is allowed here. * * Default: 488 (Not Acceptable Here) */ #ifndef PJSIP_PRES_BAD_CONTENT_RESPONSE # define PJSIP_PRES_BAD_CONTENT_RESPONSE 488 #endif |
|||||
#1086 | New option to update the Contact URI in a single REGISTER request | bennylp | enhancement | normal | release-1.7 | pjsua-lib |
Description |
PJSUA-LIB has a feature to update account Contact with the public address as it is learned from the REGISTER response. It does this by unregistering the current binding, while at the same time establishing a brand new registration session with a new Contact. This method would not work well in all cases though, as some server would immediately close the TCP connection as soon as unregister request is received. In this case, it will be better to perform the Contact URI update in a single REGISTER request instead. |
|||||
#502 | New packet lost concealment (PLC) implementation | nanang | enhancement | trivial | release-0.9.0 | pjmedia |
Description |
Implement new packet loss concealment (PLC) module based on the new WSOLA algorithm. |
|||||
#981 | New pj_perror() and PJ_PERROR() APIs to print error message to the log | bennylp | enhancement | normal | release-1.5 | pjlib |
Description |
New API in <pj/errno.h>: PJ_PERROR usage: PJ_PERROR(2, (__FILE__, PJ_EBUSY, "Error making %s", "coffee")); pj_perror() API: PJ_DECL(void) pj_perror(int log_level, const char *sender, pj_status_t status, const char *title_fmt, ...); |
|||||
#1294 | New pjmedia_codec_register_audio_codecs() API | nanang | enhancement | normal | release-2.0-alpha | pjmedia |
Description |
New API to register all known codecs that are implemented in PJMEDIA-CODEC, and to automatically deregister them on shutdown: /* file <pjmedia-codec/audio_codecs.h> */ /** * Codec configuration. Call #pjmedia_audio_codec_config_default() to initialize * this structure with the default values. */ typedef struct pjmedia_audio_codec_config { /** Speex codec settings. See #pjmedia_codec_speex_init() for more info */ struct { unsigned option; /**< Bitmask of options. */ unsigned quality; /**< Codec quality. */ unsigned complexity; /**< Codec complexity. */ } speex; /** iLBC settings */ struct { unsigned mode; /**< iLBC mode. */ } ilbc; /** Passthrough */ struct { pjmedia_codec_passthrough_setting setting; /**< Passthrough */ } passthrough; } pjmedia_audio_codec_config; /** * Initialize pjmedia_audio_codec_config structure with default values. * * @param cfg The codec config to be initialized. */ PJ_DECL(void) pjmedia_audio_codec_config_default(pjmedia_audio_codec_config *cfg); /** * Register all known audio codecs implemented in PJMEDA-CODEC library to the * specified media endpoint. * * @param endpt The media endpoint. * @param c Optional codec configuration, or NULL to use default * values. * * @return PJ_SUCCESS on success or the appropriate error code. */ PJ_DECL(pj_status_t) pjmedia_codec_register_audio_codecs(pjmedia_endpt *endpt, const pjmedia_audio_codec_config *c); Note to codec writers: A new mandatory destroy callback has been added to factory operation. You must implement this callback (hint: just point it to your existing function that deinitialize your codec factory). Note to app writers: You don't need to initialize each codec now, just use pjmedia_codec_register_audio_codecs() above. Similarly you should remove all the calls to codec deinitialization routines since that will be done automatically when the media endpoint is destroyed (leaving these calls as they are is harmless though; they will render to no-ops). |
|||||
#746 | New pjsua API to manage sound device setting | bennylp | defect | normal | aps-direct-integration | pjsua-lib |
Description |
This is to replace the (newly added) pjsua_get_aud_stream() API that is unsafe, since pjsua-lib may close the stream while the application is holding the stream pointer. |
|||||
#1216 | New pjsua_destroy2() API to allow shutting down the library without sending any outgoing messages | bennylp | enhancement | normal | release-1.12 | pjsua-lib |
Description |
New API is proposed by this ticket: PJ_DECL(void) pjsua_destroy2(unsigned flags); The flags argument may contain bitmask of the following options:
|
|||||
#920 | New pjsystest application for testing target system/device | bennylp | enhancement | normal | release-1.4 | applications |
Description |
Introducing new application, pjsystest, to perform various tests on the target system or device. Currently it contains several audio test functions such as:
In the future, the tests can be extended to cover other areas such as NAT. |
|||||
#1144 | New presence callback to report subscription state (thanks Johan Lantz for the suggestion) | bennylp | enhancement | normal | release-1.8.5 | pjsua-lib |
Description |
Some applications want to get access to the message body in the incoming NOTIFY requests, for example when the NOTIFY contains multipart bodies (support for receiving multipart bodies in NOTIFY was implemented in #1146). |
|||||
#465 | New utility to read RTP packets/payload from PCAP file | bennylp | enhancement | normal | release-0.9.0 | common |
Description |
Included in this package:
|
|||||
#490 | New voice activity detection (VAD) | nanang | enhancement | normal | release-1.0-rc1 | pjmedia |
#1397 | No SDP in 200 response after sending 183 response and receiving PRACK | bennylp | defect | normal | release-1.14 | pjsip |
Description |
Scenario:
|
|||||
#76 | No audio on MacOS X 10.4 when resamplilng is used | bennylp | defect | normal | release-0.5.10 | pjmedia |
Description |
When OSX sound device is opened on non-native sampling rate, no audio input is audible. |
|||||
#1887 | No output frame returned by iLBC encoder on iOS when using multiple frames per packet | nanang | defect | normal | release-2.5 | pjmedia |
Description |
Currently iLBC wrapper for iOS passes the whole PCM input packet (containing multiple frames) to the encoder, and this way the encoder always returns zero frame output. This ticket will alter the wrapper behaviour to feed only one PCM input frame at a time to encoder. Thanks Yeffry Zakizon for the report. |
|||||
#812 | Noise with Symbian MDA sound backend when making a call | nanang | defect | normal | release-1.2 | pjmedia-audiodev |
Description |
When making a call and before media is received, loud noise/distortion may be played to the speaker. |
|||||
#78 | Noisy audio with upsampling in the conference bridge | bennyp | defect | normal | release-0.5.10 | pjmedia |
Description |
There are two problems here:
For the first problem: The following file was upsampled with pjsua, from the original WAV file of 22050 Hz to 44100 Hz. You can hear clearly about the noise: http://www.pjsip.org/tmp/upsampling-noise.wav For the second problem: The following file was recorded by mixing two 16KHz sources and upsampled to 44.1KHz: |
|||||
#569 | Non-uniform locking order between SRTP & its member transport (e.g:ICE) may cause deadlock | nanang | defect | normal | release-1.0-rc1 | pjmedia |
Description |
Sample case:
Solution:
|
|||||
#156 | Not enough memory to parse DNS packets in resolver (thanks Frank Wiersma) | bennylp | defect | normal | release-0.5.10.2 | pjlib-util |
Description |
The DNS resolver encounters PJ_ENOMEM error when parsing and duplicating response. |
|||||
#157 | Not enough memory to parse DNS packets in resolver (thanks Frank Wiersma) | bennylp | defect | normal | release-0.7.0-rc1 | pjlib-util |
Description |
This is copy of ticket #156 for trunk. |
|||||
#370 | Notification to application when ICE negotiation fails | bennylp | enhancement | normal | release-0.8.0 | pjsua-lib |
#2262 | Notify when IP change handling is completed | riza | enhancement | normal | release-2.10 | pjsua-lib |
Description |
This ticket will notify when IP change handling using pjsua_handle_ip_change() is completed by adding PJSUA_IP_CHANGE_OP_COMPLETED to pjsua_ip_change_op. |
|||||
#1059 | Null sound device for single-threaded environment (thanks Björn Riemer for the report and suggestion) | bennylp | enhancement | normal | Known-Issues-and-Ideas | pjsua-lib |
Description |
Currently pjsua_set_null_snd_dev() will force thread creation for its clock source. This behaviour will prevent application to achieve single-threaded environment. The original report/suggestion can be found here. |
|||||
#1133 | Obey remote SDP attribute "ptime" (thanks Eize for the patch) | nanang | enhancement | normal | release-1.8.5 | pjmedia |
Description |
The proposed patch can be found here |
|||||
#2156 | Object slicing in MediaFormatVector | bennylp | defect | normal | release-2.9 | pjsua2 |
Description |
Reported that there are object slicing issues in AudioDevInfo/VideoDevInfo when storing video/audio format detail info (i.e: MediaFormatVideo/MediaFormatAudio) into MediaFormatVector, this is due to the definition of MediaFormatVector that is a vector of MediaFormat (no pointer): typedef std::vector<MediaFormat> MediaFormatVector; This ticket will replace MediaFormatVector with MediaFormatVideoVector and MediaFormatAudioVector. Thanks Ryan Wallach for the report and the suggestion. |
|||||
#1069 | Offer duplicated SDP media line, secured and unsecured version, in SRTP optional mode (thanks Bogdan Krakowski for the suggestion) | bennylp | enhancement | normal | release-1.7 | pjsua-lib |
Description |
Currently, SRTP optional mode is implemented by putting 'crypto' attributes in unsecured media line (with RTP/AVP transport) in the SDP offer. This non-standard approach is somehow getting popular. The suggested approach is to offer duplicated media line, for secured and unsecured version, in the SDP. This approach is syntactically standard-friendly, however it may lack the way to tell UAS to choose/activate only one of the duplicated media. |