Tap here to compare the top VoIP providersTap here to hide the top VoIP Providers
The RTPproxy is a high-performance software proxy for RTP streams that can work together with SER or OpenSER. Originally created for handling NAT scenarious it can also act as a generic media relay as well as gateway RTP sessions between IPv4 and IPv6 networks. RTPproxy was developed by Maxim Sobolev and now is being actively maintained by the Sippy Software, Inc..
The RTPproxy supports some advanced features, such as remote control mode, allowing building scalable distributed SIP VoIP networks. The nathelper module included into the SER or OpenSER SIP Proxy software allows using multiple RTPproxy instances running on remote machines for fault-tolerance and load-balancing purposes.
The software also supports video relaying and RTP session recording.
How it works
This RTPproxy works as follows:
- When SIP Proxy receives INVITE request, it extracts call-id from it and communicates it to the proxy via Unix domain socket. RTPProxy 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 SIP Proxy. After receiving reply from the proxy, SIP Proxy replaces media ip:port in the SDP to point to the proxy and forwards the request as usual;
- when SIP Proxy 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 RTPproxy, SIP Proxy replaces media ip:port in the SIP Proxy reply to point to the proxy and forwards reply as usual;
- after the session has been created, the proxy listens on the port it has allocated for that session and waits to receive at least one UDP packet from each of the two parties participating in the call. Once these packet are received, the proxy fills one of two ip:port structures associated with each call with the 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).
It should be able to handle up to 2,000 simulateneous G.729 sessions on a decent machine (P4 2.5-3.0 GHz). Please note that fine-tuning of OS network stack parameters can be necessary to get such high numbers, since RTP traffic consists of big number of very short UDP frames (up to 30 frames/sec for one session), so that network stack should be prepared to handle huge number of short packets.
Source code via read-only Git
To get the latest source code from the CVS use the following command:
git clone git://sippy.git.sourceforge.net/gitroot/sippy/rtpproxy
then do the usual: ./configure; make; make install
You can also browse the repository here.
Your client must support symmetric RTP for rtpproxy to work. It must send and receive media on the same port - that's the only way to make media to cross the NAT. Most of the clients available today do support symmetric RTP, though.
Community-based support could be obtained via SER mailing lists mailto:email@example.com.
Commercial support is available from the Sippy Software, Inc..
- SIP express router: The SER SIP proxy
- SER example NAThelper: Example of usage
- SER module NAThelper: The NAThelper module
- NAT and VOIP: Some facts on NAT and VOIP
- OpenSER and RTPProxy - OpenSER v1.1.x configuration to do NAT traversal using nathelper and rtpptoxy
- OpenSER v1.2.x and RTPProxy - OpenSER v1.2.x configuration to do NAT traversal using nathelper and rtpptoxy
- MediaProxy Comparison - MediaProxy Comparison
Please update this page with new information, just login and click on the "Edit" or "Discussion" tab. Get a free login here: Register Thanks! - Find us on Google+