Rtpproxy Versions Save

The RTPproxy is a high-performance software proxy for RTP streams that can work together with Sippy B2BUA, Kamailio, OpenSIPS and SER.

v3.0.1

8 months ago

This is a minor release fixing a bug in the DTLS_GW module causing SHA-256 not being accepted as a fingerprint algorithm name (vs. more common sha-256 notation).

v3.0-rc.1

1 year ago

RTPProxy 3.0 Release Notes

Sippy Labs is thrilled to introduce RTPProxy 3.0. This release introduces significant enhancements and new features since the previous release 2.2 four years ago.

Major Improvements

  • Revamped Architecture: We have rearchitected major subsystems for more parallelism, significantly improving performance.
  • Enhanced Compatibility: RTPProxy 3.0 ensures extended support for third-party extension modules.
  • Full Support for Video and Encrypted Calls: The new release can handle video and encrypted calls, solidifying RTPProxy's position as a comprehensive solution for real-time communication needs.

Performance Enhancements

  • Polling: We've replaced the use of poll() with epoll()/kqueue() for RTP/RTCP sockets polling.
  • RTCP Handling: Now runs in its own dedicated thread.
  • Media Generation: Playback now runs in a separate thread.
  • Elimination of Bottleneck: We've eliminated a significant synchronization bottleneck that was affecting the command-processing thread.
  • Hashing Algorithm: For handling sessions hash tables, we've switched to xxHash, a high-performing hashing algorithm.

New Features

  • Library Version of RTPProxy: This version allows RTPProxy to be embedded into other real-time communication software.
  • DTLS Gateway Module: This new module can translate between encrypted and non-encrypted streams and perform back-to-back re-encryption of already encrypted streams for recording purposes.

For more detailed information, please refer to our full RTPProxy 3.0 Release Information.

v3.0.0

1 year ago

RTPProxy 3.0 Release Notes

Sippy Labs is thrilled to introduce RTPProxy 3.0. This release introduces significant enhancements and new features since the previous release 2.2 four years ago.

Major Improvements

  • Revamped Architecture: We have rearchitected major subsystems for more parallelism, significantly improving performance.
  • Enhanced Compatibility: RTPProxy 3.0 ensures extended support for third-party extension modules.
  • Full Support for Video and Encrypted Calls: The new release can handle video and encrypted calls, solidifying RTPProxy's position as a comprehensive solution for real-time communication needs.

Performance Enhancements

  • Polling: We've replaced the use of poll() with epoll()/kqueue() for RTP/RTCP sockets polling.
  • RTCP Handling: Now runs in its own dedicated thread.
  • Media Generation: Playback now runs in a separate thread.
  • Elimination of Bottleneck: We've eliminated a significant synchronization bottleneck that was affecting the command-processing thread.
  • Hashing Algorithm: For handling sessions hash tables, we've switched to xxHash, a high-performing hashing algorithm.

New Features

  • Library Version of RTPProxy: This version allows RTPProxy to be embedded into other real-time communication software.
  • DTLS Gateway Module: This new module can translate between encrypted and non-encrypted streams and perform back-to-back re-encryption of already encrypted streams for recording purposes.
  • Automated Docker Builds: Starting with 3.0, we are publishing official RTPProxy Docker images to DockerHub with every release and every commit to the master branch.

For more detailed information, please refer to our full RTPProxy 3.0 Release Information.

v3.0-beta.1

1 year ago

RTPProxy 3.0 Release Notes

Sippy Labs is thrilled to introduce RTPProxy 3.0. This release introduces significant enhancements and new features since the previous release 2.2 four years ago.

Major Improvements

  • Revamped Architecture: We have rearchitected major subsystems for more parallelism, significantly improving performance.
  • Enhanced Compatibility: RTPProxy 3.0 ensures extended support for third-party extension modules.
  • Full Support for Video and Encrypted Calls: The new release can handle video and encrypted calls, solidifying RTPProxy's position as a comprehensive solution for real-time communication needs.

Performance Enhancements

  • Polling: We've replaced the use of poll() with epoll()/kqueue() for RTP/RTCP sockets polling.
  • RTCP Handling: Now runs in its own dedicated thread.
  • Media Generation: Playback now runs in a separate thread.
  • Elimination of Bottleneck: We've eliminated a significant synchronization bottleneck that was affecting the command-processing thread.
  • Hashing Algorithm: For handling sessions hash tables, we've switched to xxHash, a high-performing hashing algorithm.

New Features

  • Library Version of RTPProxy: This version allows RTPProxy to be embedded into other real-time communication software.
  • DTLS Gateway Module: This new module can translate between encrypted and non-encrypted streams and perform back-to-back re-encryption of already encrypted streams for recording purposes.

For more detailed information, please refer to our full RTPProxy 3.0 Release Information.

v2.1.1

3 years ago

RTPProxy v2.1.1 Release Notes

September 2020

Various bugfixes and small improvements made into our LTS release branch rtpp_2_1.

v2.2.0

3 years ago

RTPProxy v2.2.0 Release Notes

September, 2020

Notable Changes

HEP Integration Module

New acct_rtcp_help loadable module has been implemented allowing to report RTCP packets to the HEP (Homer) server.

RFC2833 Capture Module

New catch_dtmf module has been added in collaboration with the OpenSIPS project. The module allows the RTPProxy notify a call controller (i.e. SIP Proxy or B2BUA) when so instructed of any DTMF-style events that are present in the real-time stream. The notification can be enabled on per-stream basis and is done via the same mechanism as "no-audio timeout" notifications to simplify integration.

Optional support for the LTO has been added into the build system allowing utilizing latest enhancements to the compiler technology (--enable-lto when running configure script).

Numerous Performance Improvements

Number of performance-critical components have been refactored to reduce

Automatic Test Coverage Report Integration

Coveralls.io has been integrated to provide Test Coverage tracking for all actively developed branches.

Test Coverage Improvements

Test coverage has been vastly improved from 52% to 91%.

v2.1.0

5 years ago

RTPProxy v2.1.0 Release Notes

June 2019

Version 2.1.0 of the RTPProxy brings 3+ years of improvements and fixes into our 2.0 version. The goal of this release has been to stabilize the new code and subsystems added in 2.0.

We heavily focused on developing test framework that is based on high-level functional testing and fixed the issues as we go. Basic testing is done in the RTPProxy repository itself.

For more advanced test scenarios that use external components, an additional repository has been created, Sippy/VoIPTests. The code in that repository is building on our python SIP stack and brings together many-many different versions of Kamailio, OpenSIPS, RTPProxy, Sipppy B2BUA (Python) and our recent addition Sippy B2BUA (Go) to tests that they can perform basic functions that an user might want them to perform. So if we (god forbid!) break our ability to work with any of those software by making any changes to our code we are instantly notified. And in reverse, if any of those nice folks break (never happens!:) whatever we think of a basic level of the support for the RTPProxy, we are aware of it and do our best to bring the issue to the light.

Notable Changes

Improved session latching

Make session latching more intelligent. Instead of disallowing another latch within certain interval after previous one (UPDATE_WINDOW), allow another update any time if new packet meets criteria:

  1. It's valid RTP packet (as far as rtp_packet_parse() can tell);
  2. It has the same SSRC value that has been saved during the previous latching;
  3. Its sequence number is greater than the sequence number that we saved while doing the previous latching.

If any of (1)-(3) fails, then we revert to the old way with disallowing new update within UPDATE_WINDOW after the previous one.

This fixes the issue when endpoint generates 3 packets from the proper IP, but then switches to completely different port and sticks with that for the rest of the session. Right now, the rtpproxy would latch to the first packet out of those 3 and discard the rest considering those a garbage. We are not 100% sure if it's endpoint's fault or just some NAT stupidity.

Printing of SSRC and initial sequence number is done while latching. It is helpful to identify session in the log and could also be useful in some other cases.

fb594fb7c2ef28407e4450913bf8cf348198f7b7

Count ignored packets

rtpproxy now counts the number of ignored packets per session. This counter represents the number of packets that were coming from unrecognized IP/Ports.

0020e458313cf4b6d58eb123571ecd42e0723662

New U/L command modifier n to allocate in RTP/RTCP ports

The new n option to the RTPP U/L commands that force a new pair of RTP/RTCP ports to be allocated and the old ones released. This is useful when a call route-advances or fails over to a new destination, where the failed route may still be sending superfluous traffic to the previous ports.

8066e5128962d129690bcdffbb7d9e0f068e15d6

RTPP Q command takes arguments of what counters to return

Extend the Q (session stats query) command to take optional list of specific counters to pull. This allows fetching only those stats that are relevant and makes Q quite usable for the test suite runs.

Example: Q call-id from_tag to_tag rtpa_nsent rtpa_nrcvd rtpa_ndups rtpa_nlost

273292bbf1166f0ee80684ae40b3bc68bc4772af

New stats counters to track overall packet loss

rtpa_nsent rtpa_nrcvd and rtpa_ndups counters allow to monitor overall packet loss in all streams going to the rtpproxy as function of time.

4f58b4a7061479d6977f9c3a12e6551936cc1c2c

SSRC packet tracking

See commit for WIP: b1ac79e5c650a640f26badd3cc434d5b9f6ef019

Python rtpp client

python/rtpp_query.py is a simple client that allows the user interactive rtpp session. Also useful for injecting commands via stdin or by files.

48a603ecb670d64bceb656ae0ac38e01c7b3f909

Notification socket wildcard

A notification wild card %%CC_SELF%% can be used to automatically register notifications sockets for callers of the U and L commands.

83b09c91053216215811c380cb093a4067c9f6b9

The SIGHUP signal causes rtpproxy to shutdown gracefully

Use SIGHUP instead of SIGTERM to shut down the proxy. The difference is that SIGTERM tries to tear down everything from the signal handler, while SIGHUP actually makes main() to exit gracefully so that there is no racing condition between main() posting event into the rtpp_proc queue and the rtpp_proc actually exiting.

55438f1093beebadb1b003981b07268f0d0ac063

Improved test coverage

The rtpproxy test suite has grown, and covers all common use cases.

  • repacketization

New pertools/udp_contention tool to simulate UDP traffic.

3025a331790ddea80d7e4506aa95e6e4f328625c

U and L command option z to set ptime

Save ptime value if provided by the z options for the U/L command into session parameters and use it to request specific packet size when P (playback) command is received with "session" as a codec type. Extend playback (rtp_server) API to be able generating frames with ptime other than absolute minimum supported by a codec.

644072c21e2f6290e6e230a970a75731caffa495

rtpp_streamdb module

Add rtpp_streamdb, a new module to serve as a central in-memory DB for the RTP/RTCP streams. Instead of using call-id as an indexing/lookup parameter or passing around a pointer to the structure, assign unique (within rtpp_streamdb instance) 64-bit integer for each session and provide a way to use that integer to quickly pull the session in question. Also integrate ref-counting and require it in order to protect a session from being released while it's being used by some part of the code. This allows us to untangle some global locking between command and RTP forwarding threads.

The 64-bit id will be used as a "weak reference" in critical path of the code, i.e. mapping from the file descriptor into the session structure while doing I/O, so that some performance assessment has been done to make sure lookup performance is adequate for the task. Quick assessment shows that we can do some 6,000,000 lookups/sec on a single thread on E3-1220 V2 @ 3.10GHz on set of 4,000 sessions with initial code. This should be enough for the current architecture and there are several relatively easy ways to reduce the overhead at least 2-3 times further by increasing the size of the hash table and/or in-lining/optimizing hashing code. We expect current code doing some 70-100k lookups/second at 1.5-2k sessions top.

34c291144ca35b229e997aba2ed1512c9b5028f8

Re-factor session handling (internal changes)

Refactor mostly related with the fact that struct rtpp_session is now struct rtpp_session_obj and that the sp->stream[N] is a pointer, not a sub-structure. Also deals with some API changes in the weakref code and elsewhere.

29bb9e15af3cb557eb0c2c20d5d2c4d9bc46654f

Jitter Tracking

RTPProxy now tracks jitter metrics as per Appendix A.8 of rfc3550

e545b08bc637c47a83e4821ccc900a66f9604302

Dynamic Loadable Modules

Infrastructure to support dynamic loadable modules has been implemented, and it is used for the new Accounting CSV module.

630500071533431a60fe63358ce907b48f01c3aa

Accounting CSV Module

An accounting module that will output stats for each ended call to a csv file. The Accounting CSV module will output a CSV string of user specified (at start time) metrics. At the end of each session, this module will append a new live to the CSV file. Operators typically will configure a log collection agent to further process the metrics.

TODO: Provide flag examples

cd5afbfd41bfc6caf65b608bbae22ddaf7a254cc

IPv6 Improvements and fixes

Fixes and improvements plus integration tests added to our test suite.

TODO: MAX, can you flesh this paragraph out a bit more?

MAX: Yes, sure, fixed lot of bugs and made overall improvement and code unification.

3e13d18ee46ae029e1fb3a9e3b4f755a9872dbb4

Thank you to our contributors!

  • @sobomax

v2.0.0

9 years ago

rtpproxy v2.0.0 Release Notes

This is the first official release since version 1.2 in March 2009. v2.0 release brings 5-years worth of extensive improvements in performance, quality, and test coverage. This release has been heavily tested in production environments, and has had significant contributions from the open-source community.

This is the first release since we moved the project to github, and travis-ci for automated test coverage.

rtpproxy is a Sippy Software, Inc open source project. The rtpproxy is part of Sippy's commercial soft switch product, and Sippy's clustered media gateway project. rtpproxy is also widely used in other VoIP service provider networks. rptproxy supports Opensips, Kamailio, and Sippy's own open source b2bua

Notable Changes

Performance / Quality

Reduction in CPU usage by 40% to 60% has been observed on production deployments. Jitter (measured using wire shark) characteristics have improved significantly.

These quality and performance improvements come mostly from improvements in the following areas:

  • send receive threads are now asynchronous
  • poll() is called more intelligently thanks to a PLL timing loop, resulting in much better jitter characteristics
  • poll() is called less frequently for RTCP than for RTP
  • command processing I/O happens on separate background thread
  • Overall reduction in poll() overhead

New stats counters

The rtp command protocol (rtpp) has a new command G that gives access to the following counters:

  • nsess_created Number of RTP sessions created
  • nsess_destroyed Number of RTP sessions destroyed
  • nsess_timeout Number of RTP sessions ended due to media timeout
  • nsess_complete Number of RTP sessions fully setup
  • nsess_timeout Number of sessions ended due to media timeout
  • nsess_nortp Number of sessions that had no RTP neither in nor out
  • nsess_owrtp Number of sessions that had one-way RTP only
  • nsess_nortcp Number of sessions that had no RTCP neither in nor out
  • nsess_owrtcp Number of sessions that had one-way RTCP only
  • nplrs_created Number of RTP players created
  • nplrs_destroyed Number of RTP players destroyed
  • npkts_rcvd Total number of RTP/RTPC packets received
  • npkts_played Total number of RTP packets locally generated (played out)
  • npkts_relayed Total number of RTP/RTPC packets relayed
  • npkts_resizer_in Total number of RTP packets going into re-sizer (re-packetizer)
  • npkts_resizer_out Total number of RTP packets coming out of re-sizer (re-packetizer)
  • npkts_resizer_discard Number of RTP packets discarded by the re-sizer (re-packetizer)
  • npkts_discard Total number of RTP/RTPC packets discarded
  • total_duration Cumulative duration of all sessions
  • ncmds_rcvd Total number of control commands received
  • ncmds_succd Total number of control commands successfully processed
  • ncmds_errs Total number of control commands ended up with an error
  • ncmds_repld Total number of control commands that had a reply generated

Re-packetization support to resize rtp packet sizes.

Re-packetization allows providers to resize the rtp frame size between a caller and a callee. This is useful for saving bandwidth between pops, or for interoperability with vendors who require a non-standard ptime. For example, the standard ptime for g.729 is 20 msec, but a vendor may require that ptime be 60msec. Re-packetization allows this resizing to happen on the fly. See also the monitoring counters npkts_resizer_in, npkts_resizer_out and npkts_resizer_discard that relates to this feature.

SIGHUP for graceful shutdown

The SIGHUP signal will initiate a slow shut down. In this mode any new rtpp requests for a new session will be rejected with a E99 code. The rtpproxy will exit only after all active sessions have ended. This feature simplifies planned maintenance.

Updated makeann utility

The makeann utility takes 16-bit signed linear encoded audio and produces a file for each supported codec.

makeann codecs are supported:

  • G.711u
  • G.711a
  • G.722 (new in 2.0)
  • G.729 (new in 2.0)
  • GSM (new in 2.0)

New extractaudio Utility

The extractaudio utility extracts audio streams and writes the recording to disk in wav format. The utility existed before 2.0, but it was not connected to the autoconf/automake build and as such required manual intervention to compile. The test suite uses this utility to verify that audio is transmitted correctly. The utility can be used for recording purposes also.

extractaudio supported codecs:

  • G.711u
  • G.711a
  • G.722 (new in 2.0)
  • G.729 (new in 2.0)
  • GSM (new in 2.0)

The new flag -n has been added in 2.0 to avoid inserting blank audio periods to keep streams synchronized to real time. Mostly intended for CI use to provide predictable output.

Logging

  • Call-ID is now recorded in log files

RTPP Command Channel Improvements

  • Improved stream-based communication support to accept more than one command in the batch, don't expect sender to pause and wait for the reply after issuing a command.
  • the rtpprroxy improved performance by using a hash table for look ups
  • new G command to retrieve stat counters;
  • new s modifier for the R command to record both streams into a single file (requires PCAP recording mode to be enabled via -P command-line option).
  • simple commands are now executed without holding global lock, which should increase total throughput in terms of maximum numbers of commands that can be processed per unit of time and reduce interference between command and rtp processing threads. Those commands are V',VF' and `G'.

New Types of Control Channels

In 2.0, we've added the following 3 new control channels cunix, stdio and systemd, in addition to unix and udp as supported since v1.2:

  • cunix, similar to unix except the server (e.g. rtpproxy) is not closing session after processing a command, so more commands can be posted and processed in sequence, thereby reducing overhead and complexity of the client code. Intended to become the default channel for local IPC;
  • stdio, commands are read from stdin, replies are posted to stdout. Primarily designed to be used for CI. Example: rtpproxy -s stdio: -f < some.commands;
  • systemd, get command from / post replies to the file descriptor provided by the systemd daemon. Only supported on Linux;

The control channel system has been overhauled to enable more than one channel to be used simultaneously.

New and updated command line flags

-s now accepts stdio, cunix: and systemd: as an argument. rtpproxy can accept -s multiple times, which will cause it to listen on multiple control sockets. More than one control channels can be used independently. -V Show command protocol version. -L Adjust the number of simultaneous open connections. Note that each RTP media stream requires four open connections. A SIP call can open more than one RTP media stream depending on the client's setup. -A address Sets the advertised IP address. -A addr1/addr2 can also be used for bridging mode -W setup_ttl Implements "Call Establishment Phase Timeout" as originally implemented in this opensips patch -w Set access mode for the controlling UNIX-socket (if used). Only applies if rtpproxy runs under a different GID using -u option. -b Don't randomize allocated ports, primarily aimed for debugging to provide more predictable behaviour

New Continuous Integration (CI) / Testing suite

Automated tests are now run using travis-ci There are two groups of tests, tests bundled with the rtpproxy distribution, that can be run using the make check target, and a suit of integration tests (opensips, kamailio, sippy b2bua).

See github.com/sippy/voiptests for the integration test suite.

Summary of tests that run from the make check target

  • makeann tests for all supported codecs
  • Forwarding tests that verifies media from sender to receiver & the reverse
  • Recording tests that verifies recording capability of the rtpproxy in both AdHoc and PCAP formats
  • Simple command parser tests
  • Playback tests that streams sample payload, captures packets from network, decodes and verifies the captured payload against the source payload.
  • memdeb is an opt-in memory allocation tracker useful for detecting memory leaks
  • session_timeout tests both types of session timeouts for both call establishment phase and session timeouts
  • Re-packetization tests to verify proper functionality of the lossless re-packetization feature

See rtpproxy/test/ for more details.

Lossless RTP Payload Resize

The Lossless RTP Payload Resize feature has been promoted from experimental to fully supported feature and has been extensively tested with all supported codecs, which currently include the following codecs:

  • G.711u
  • G.711a
  • G.729
  • G.722 (new in 2.0)
  • GSM (new in 2.0)

Miscellaneous

  • make will build a rtpproxy binary and a rtpproxy_debug binary. The latter includes memdebug
  • systemd support on Linux
  • udp_storm - a utility to stress-test rtpproxy with the RTP-like traffic.

Sponsors & Contributors

Thank you to our contributors!

  • @sobomax
  • @bogdan-iancu
  • @jevonearth
  • @lemenkov
  • @miconda
  • @oej
  • @taisph

v1.3-beta.1

9 years ago

This is a beta release of version of 1.3.