Introduction
This document contains the release notes for the RTPproxy 1.1 stable release. It describes recently added, changed, or deleted features of the RTPproxy compared to the previous stable version 1.0.2.
What's New
Support for the RTP repacketization
New ability to repacketize RTP packets in order to increase/decrease payload size has been introduced. This is useful for example in the situations where bandwidth is scarce and it's necessary to keep RTP/UDP/IP header overhead as low as possible. Tests suggest that packets up to 100-150ms still provide adequate sound quality, while they give almost two-fold bandwith reduction compared to standard 30ms G.729 packets (70% reduction compared to 10ms G.729).
The feature has been designed to provide zero or very little overhead for sessions for which it's not enabled, both in terms of additional latency and extra CPU load.
Re-packetization can be enabled/disabled in each direction independently. The support for this feature has been added to the development version of the SER (zNNN flag for the force_rtp_proxy, rtpproxy_offer, rtpproxy_answer) and will be available in the upcoming version 2.1.
Performance enhancements
Hash table has been added to speed-up session lookup in the command handling code. This is expected to dramatically reduce command handling overhead (20 times or more) for proxies with large amount of active sessions (500+), improving jitter and avoiding unwanted delays in the RTP handling path.
Support for configuring port range via command line
New option to configure port range via command line has been introduced. The range can be configured using two new options: -m port_min and -M port_max.
Security enhancements
In order to improve security the new ability to run the RTPproxy as a non-privileged user has been introduced. The feature can be enabled by using the new -u uname[:gname] option. Also, by default when running as superuser (root) the RTPproxy will now produce warning in local control mode (i.e. when controlled via local socket) and refuse to start in the remote control mode. This functionality can be disabled using the new -F option.
New command to fork stream
The new C (copy) command has been introduced allowing to fork off one or both RTP streams in the session to some third-party in real time. This feature is mainly intended for use with B2BUAs.
New command to get statistics of particular RTP session
The new Q (query) command has been introduced allowing to retrieve real-time statistics of the particular RTP stream. The statistics include TTL and packet counters.
Operating system limits handling
The handling of operating system limits have been improved.
- Warn user when rtpproxy is about to consume 80% of file descriptors allowed by the "hard" RLIMIT_NOFILE limit, suggesting user to use appropriate command-line option to get this limit increased. To avoid spamming the log file the warning is displayed only once.
- Call getrlimit(2) after setrlimit(2) to detect if kernel has actually set limit to requested value or not. Warn user if the value of actual limit allocated by the kernel is lower than a requested one.
Improvements for the statistics reporting
The I has been extended with display of both active channels and active session. Channel is RTP/RTCP session to one endpoint, whereas session is two channels glued together with the forwarding logic.
Code re-factoring, reorganization and cleanup
The RTPproxy code has been reorganized to provide better functional separation. Some overly long functions have been broken down into smaller units. Also, the main loop has been reworked to avoid using asynchronous signals for performing periodic tasks.
The main goal of this change is improving code maintainability to simplify adding new features in the future.
Documentation updates
The manual page has been updated to reflect new command line options.
