The RTPproxy is a high-performance software proxy for RTP streams that can work together with Sippy B2BUA, Kamailio, OpenSIPs and SER.
C Makefile Shell Python Roff Protocol Buffer Other
Latest commit 41c6b27 Jun 13, 2017 @sobomax sobomax Don't call weaktable unref with the object being locked. This creates
potential LOR-type deadlock with the hash_table_foreach() process that locks
weakref table first and then locks each object in that table in order
to figure its properties.
Permalink
Failed to load latest commit information.
bench Import of support sources from SoboSIP, checked out on 2005/09/11 Sep 11, 2005
extractaudio Merge branch 'master' into bcg729_VAD_DTX_updates Apr 1, 2017
libelperiodic @ 0faebe3 Updating the submodule 'libelperiodic' to the latest version Apr 1, 2017
libexecinfo Re-gen. Mar 30, 2017
m4 Re-gen. Feb 6, 2015
makeann Re-gen. Mar 30, 2017
misc Add .gitignore May 16, 2016
mk Sync with the Makefile.am. Nov 18, 2015
modules Re-gen. Mar 30, 2017
pertools Re-gen. Mar 30, 2017
protos o implement few remaining parts of the RFC4568 Aug 25, 2016
python Add missed usage() Jun 1, 2017
regress o Use Rtp_proxy_client_[local|udp].shutdown() instead of Nov 7, 2014
rpm Systemd cleanups. Dec 24, 2014
scripts Don't install non-existing libsrtp2 device. Mar 30, 2017
src Don't call weaktable unref with the object being locked. This creates Jun 14, 2017
tests Bail if rtpproxy -C fails to produce proper result. Jun 1, 2017
.gitignore Build libelperiodic if not present. Remove conditional ENABLE_ELPERIO… Aug 18, 2016
.gitmodules Use public ref for the submodule. Aug 18, 2016
.travis.yml Try to install only twisted core. Feb 14, 2017
AUTHORS Update my e-mail. Jun 17, 2014
ChangeLog Regen. Mar 6, 2005
INSTALL Regen. Mar 6, 2005
LICENSE Update (c) years. Jun 17, 2014
Makefile.am Fix build with external elperiodic library. Mar 30, 2017
Makefile.in Re-gen. Mar 30, 2017
NEWS Regen. Mar 6, 2005
README.md Do quotes around shell instructions properly. Sep 29, 2016
README.remote Get rid of CVS $Id$ keyword. May 28, 2010
aclocal.m4 Re-gen. Mar 30, 2017
compile Add file required by the new autoconf. Jul 18, 2014
config.guess Regen using auto-foo of 2014 to replace auto-foo of 2004. Jul 18, 2014
config.sub Regen using auto-foo of 2014 to replace auto-foo of 2004. Jul 18, 2014
configure Re-gen. Mar 30, 2017
configure.ac Fix build with external elperiodic library. Mar 30, 2017
depcomp Regen using auto-foo of 2014 to replace auto-foo of 2004. Jul 18, 2014
install-sh Regen using auto-foo of 2014 to replace auto-foo of 2004. Jul 18, 2014
ltmain.sh Re-gen. Feb 6, 2015
manpage.xml Improve some language around -n flag. Nov 17, 2015
missing Regen using auto-foo of 2014 to replace auto-foo of 2004. Jul 18, 2014
requirements.txt Try to install only twisted core. Feb 14, 2017
rtpproxy.8 Improve some language around -n flag. Nov 17, 2015
rtpproxy.init Import of support sources from SoboSIP, checked out on 2005/09/11 Sep 11, 2005
rtpproxy.sh Set rcvar properly to fix on 10.x. Apr 28, 2014
stamp-h.in Regen. Mar 6, 2005
test-driver Replace link with actual file. Jan 6, 2015

README.md

Build Status

About

The RTPproxy is a high-performance software proxy for RTP streams that can work together with OpenSIPS, Kamailio or [Sippy B2BUA] (https://github.com/sippy/b2bua).

Originally created for handling NAT scenarios it can also act as a generic media relay as well as gateway RTP sessions between IPv4 and IPv6 networks.

The RTPproxy supports some advanced features, such as remote control mode, allowing building scalable distributed SIP VoIP networks. The nathelper module included into the OpenSIPS or Kamailio SIP Proxy software allows using multiple RTPproxy instances running on remote machines for fault-tolerance and load-balancing purposes.

Advanced high-capacity clustering and load balancing is available through the use of RTP Cluster middleware.

The software also supports MOH/pre-recorded prompts injection, video relaying and RTP session recording to a local file or remote UDP listener(s).

RTPproxy was developed by Maxim Sobolev and now is being actively maintained by the Sippy Software, Inc.

How it works

This proxy works as follows:

  • When SER receives INVITE request, it extracts call-id from it and communicates it to the proxy via Unix domain socket. Proxy looks for an existing sessions with such id, if the session exists it returns UDP port for that session, if not, then it creates a new session, binds to a first empty UDP port from the range specified at the compile time and returns number of that port to a SER. After receiving reply from the proxy, SER replaces media ip:port in the SDP to point to the proxy and forwards request as usually;

  • when SER receives non-negative SIP reply with SDP it again extracts call-id from it and communicates it to the proxy. In this case the proxy does not allocate a new session if it doesn't exist, but simply performs a lookup among existing sessions and returns either a port number if the session is found, or error code indicating that there is no session with such id. After receiving positive reply from the proxy, SER replaces media ip:port in the SIP reply to point to the proxy and forwards reply as usually;

  • after the session has been created, the proxy listens on the port it has allocated for that session and waits for receiving at least one UDP packet from each of two parties participating in the call. Once such packet is received, the proxy fills one of two ip:port structures associated with each call with source ip:port of that packet. When both structures are filled in, the proxy starts relaying UDP packets between parties;

  • the proxy tracks idle time for each of existing sessions (i.e. the time within which there were no packets relayed), and automatically cleans up a sessions whose idle times exceed the value specified at compile time (60 seconds by default).

Building from github

$ git clone -b master https://github.com/sippy/rtpproxy.git
$ git -C rtpproxy submodule update --init --recursive
$ cd rtpproxy
$ ./configure
$ make

Support

Open a ticket on the github issue tracker, or post a message on the mailing list

Commercial support is available from the Sippy Software, Inc. - visit http://www.sippysoft.com for details.