SR-RTP Software Library/Toolkit

The SR-RTP/VideoCM library provides a library to enable real-time streaming applications (such as streaming MPEG-4 video) to cope with packet loss, variable bandwidth, and variable delay on the Internet. The main contribution of the package is to provide a means for selective retransmission of lost packets in a fashion that is backwards-compatible with RTP. Additionally, we provide integration with the Congestion Manager to provide a system capable of performing TCP-friendly streaming of real-time data. The package contains the following components:

  1. A library, libsrrtp.a, that enables selective retransmission of real-time streaming data.
  2. A library to implement RTSP/SR-RTP, librtsp.a in an integrated fashion.
  3. Test/example programs for the SR-RTP libarary.
  4. An example program using the RTSP/SR-RTP framework to illustrate the concepts and provide a starting point for an MPEG-4 client/server application. At this point, the distribution includes a functional video server but only a "bare-bones" client.


Our system supports backwards-compatible extensions to RTP/RTCP that allow for the application-level framing of the data with Application Data Units (ADUs). ADUs enable fragmentation and reassembly of independently processible units of data and also make selective recovery of application specific data units possible at the receiver. For MPEG-4, one frame of the compressed video bit-stream (separated by VOP start codes) corresponds to one ADU. These frames are packetized by the sender and then, when they are received by the receiver, are reassembled and passed to the application layer for decoding once the complete frame has been received. An ADU may involve multiple packets (or ADU fragments): each is independently named in order to efficiently request and perform selective retransmissions.


We have extended RTP to provide selective reliability. Each video frame is an ADU; we specify information such as the sequence number of that ADU in the header. Additionally, should an ADU not fit within one packet (for high bitrate streams), we provide a mechanism for specifying the byte offset within an ADU. The length of the ADU is also contained within the extension header.

The server packetizes the video (in the case of MPEG-4, the bitstream is packetized on resynchronization marker boundaries), labels the packets with ADU sequence numbers and offsets, and sends the RTP packets over UDP. These semantics allow the client to reassemble the packet and to determine if any data is missing. On receiving a packet, the client sends back an ACK to the receiver, acknowledging the successful receipt of an ADU (or portion thereof). Alternatively, the client can send a retransmission request requesting retransmission of a specific portion of the bitstream.

Click on the links on the left for the source code, example applications, and documentation, and here for the copyright notice.

Experience and a disclaimer

This should be considered an alpha release.