Projects - rtpreplicate


rtpreplicate is a small Java application/GUI that allows you to take an rtp stream from a unicast or multicast source and forward it to another unicast or multicast destination. However, instead of making a single copy, rtpreplicate lets you create multiple copies of the same stream. Hundreds of them, if you want.

The purpose of rtpreplicate is to provide a benchmarking tool, for multi-source rtp clients, e.g. like vic and rat. The most common test at this stage is for AccessGrid systems, where a dedicated display machine is usually specced on some handwaving (basically unknown) performance requirement.

rtpreplicate lets you fire an almost arbitrary number of streams at your decoding system. It tests network performance, CPU load, but especially how well the decoding system keeps up with the streams. vic for example, at a high-enough number of streams, fails to keep up with the incoming network traffic (socket buffer overflow) and reports this as packet loss. rtpreplicate listens to rtcp receiver reports and provides a summary of how well vic is coping.

It also highlights applications that don't sent quite accurate rtcp RR information. Some apps report on only the first 32 streams at reasonably regular intervals, but only report on streams beyond that number when the application quits and then there is a brief rush of RR summaries.


The User Interface

The user interface is outlined below. There are three basic states the application can be in:
  - Ready (not doing anything)
  - Listening (listening to a source, no forwarding)
  - Replicating (listening to a source, forwarding N copies)

Ready:

Streams Selection Table

Click for full size image

Enter the source address you want to listen to here (addr/port) and press 'Start Listening' at the bottom of the window.

Listening:

Streams Selection Table

Click for full size image

The list of available sources appears in the central pane (which gets a scrollbar if it gets too wide for the display). Here you can select (far right hand side of the source list pane) which streams you want to replicate and forward:

Listening:

Streams Selection Table

Click for full size image

Once you have selected which sources you want to replicate, click the 'Start Replicating' button at the bottom of the window.

Replicating:

Streams Selection Table

Click for full size image

At this stage you should start getting rtcp RR packets back from the system under test. These are summarised in the bottom display pane. This highlights how some applications group RR information together, and in some cases don't forward all the information until they are 'quit'. However, it should be reasonably clear how well or how badly the application is performing.

Benchmarking standards

To use rtpreplicate as a standard for benchmarking requires two important things. A standard set of inputs, to avoid different video views generating different loads on systems under test, and an agreed set of metrics that actually quantify performance in some meaningful and comparable fashion. We don't have the metrics just yet, and are looking for suggestions. One possibility is the number of streams (of fixed bandwidth) that lead to say 10% "packet loss" from the system under test. However, that does not take into account variable frame-rate applications.

To simplify the standard set of inputs, we have generated pseudo-white-noise video streams and recorded them (with rtpdump) at several bit rates. Each file is 1 minute in duration. You will want to play it out in a loop to test the system for an extended period, as it takes a while for various buffers to settle into a constant state. We have 5 minute versions of these files as well, but they're a bit large to offer for download, when it's probably not necessary.

The files are:
  - 100kb/s 1 minute (746kB)
  - 500kb/s 1 minute (3.6MB)
  - 1Mb/s 1 minute (7.2MB)

You will need rtpplay from the rtptools package to play these files out. Send them to a unicast or multicast address, preferably from a different machine than the one rtpreplicate is running on.

How to install and run the program:

You can download the Java jar file here:

Note that this code is released (c)ANU Internet Futures, 2004. No warranties implied, you take this code AS IS. Use at your own risk

RTPReplicate-2.0.jar (56kB, 2 Apr 2004)

The application was compiled against JDK 1.4.1-02 and uses classes that are not available before Java 1.4.

To run the application from the jar file type:

java -cp RTPReplicate.jar RTPReplicate


Feedback

We are looking for feedback on rtpreplicate and how to make it more useful to users. You can email us with comments.