Author: Henning Schulzrinne
Keywords: RTP; rtptools

# RTP tools change history

1.18 (September 2002)
  Changes made by Akira Tsukamoto unless otherwise noted.
  - Check for errors when resolving host name.
  - For rtpdump, `-F hex`, `-F rtcp`, format fix.
  - Update IANA payload types in rtpdump.
  - Avoid allocating 8000 bytes buffer, copying and destroying it every iteration.
  - For bark.rtp, add RTCP packet, so the RAT could successfully receive and play. Originally, it was only containing RTP payload.
  - Large ts and ssrc values would overflow; replaced `strtol()` with `strtoul()`.
  - Fixed out of range timeval, which led a spike on jitter in rare case.
  - Fixed CPU 100% utilization problem for `rtptrans` (both Unix and win32) `rtpplay`, `rtpsend` (only win32)
  - Fixed broken compilation on Win32.
  - For Win32, modified to use hi-resolution counter (win32 API) for `gettimeodday()` from `ftime()`. It was creating a large jitter.
  - For `rtpplay`, add `-s` flag to allow setting source port of packets. (Ping Pan and Akira Tsukamoto)
  - Bug fix that actually adds `-o` flag to rtpdump command line. (David Allouche)
1.17 (April 2001)
  Added `-o` option to `rtpdump`, so that output can be directed to a file. This is necessary so that the file can be opened in binary mode. Also configured stdout on Win32 for binary mode, disabling the typical \n to \n\r translation. (hgs)
1.16 (July 2000)
  - For `rtpsend`, add `-s` flag to allow setting source port of packets. (Ping Pan)
  - For `rtpsend`, set RTCP timestamp to current value. (Ping Pan)
  - Compile fixes for Linux. (Jori)
1.15 (March 2000)
  - For `rtpsend`, in function `rtpsend()`, added support for transmiting RTCP messages, leading to a rewrite of `rtcp_packet()` and the addition of the `rtcp_write_XXX()` routines. (Ping Pan)
  - Bug fix: in `rtpsend()`, the `parse()` routine should store `unsigned long` into n->num, instead of `int`. This caused an error for large SSRC values. (Ping Pan)
  - In `rtpdump()`, the print-out for RTCP SR/RR report blocks should have a space before the ')'. This confused the `parse()` routine in `rtpsend()`. (Ping Pan)
  - `rtpdump` in -F ascci mode generated an ntp line without preceding space, crashing rtpsend. Fixed rtpdump. (Wenyu Jiang)
  - `rtpsend` sets X (extension) bit correctly and allows to specify the extension header. (Ping Pan)
  - `rtpsend` has `-a` flag to set the router alert option when sending RTCP packets. This features is only useful for testing YESSIR resource reservation.
  - `rtpsend` made more robust against invalid input. Exits if invalid input is found rather than trying to soldier on.
1.14 (October 1999)
  - Various portability fixes; now tested to compile on Solaris 2.6, Linux 2.2.10, FreeBSD 2.2.7, and FreeBSD 3.3. (Jonathan Lennox)
1.13 (August 1999)
  - Change to autoconf format [Petter Reinholdtsen]
  - rtpplay, rtptrans: compile fixes for HP/UX 10.20 and Irix 6.5. [Petter Reinholdtsen]
  - rtpsend: htonl(seq) should be htons(seq). [Bruce Levens]
  - Makefile: BIN directory wasn't created. [Mike Brescia]
  - rtpsend: fix usage and commandline parsing [Mike Brescia].
  - rtpsend: use absolute rather than relative timing [Mike Brescia]; this also removes an extra call to gettimeofday for each packet.
  - rtpdump: endianness bug in line

        packet.p.hdr.plen   = ctrl ? 0 : len;

    [David M., davidm@cs.ucsb.edu]
  - Changed 'u_int16 length' to 'unsigned int length:16' [Jori]
1.11 (January 1999)
  - Marc Eaddy found that MSVC++ 5.0 only works if seq is declared unsigned int seq:16.
  - Additional Linux fixes by Petter Reinholdtsen
  - Windows NT/Win32 port by Xiaotao Wu (Columbia University).
1.10 (March 1998)
  - Bill Fenner: "I've been experimenting with real short clips, and discovered that rtpplay exited as soon as it read the last packet instead of letting the playout happen, cutting off READAHEAD packets (which in most cases was the whole file). Here are my fixes. Note that I had to (somewhat kludgily) schedule another timeout, since the notify system doesn't notice a notify_stop() request which is set from a timeout until there's another event." [hgs: Notify was changed to drop out when there are no pending timers and no open file descriptors.]
  - Jonathan Lennox created `multidump` and `multiplay`.
  - Catch additional signals.
  - rtpplay: Add `-b` and `-e` flags for playing back only a selected portion of the file.
  - rtpplay: The first RTP packet is now timed correctly with respect to the preceding RTCP packet.
1.9 (August 1997)
  - `rtptrans` also has non-sendmsg ifdef for Linux and similarly socket-challenged systems (by Lutz Grueneberg)
  - Port to FreeBSD (by Jonathan Lennox):
    - Added necessary architecture Makefile.
    - Extracted hsearch code from GNU libc 2.0.4 for rtpplay.
    - Massive byte-ordering cleanup (behavior under FreeBSD and Solaris should be identical).
    - Minor other changes for BSD 4.4 sockets.
  - `rtpdump -f` file now shows a "from" address of 0.0.0.0:0.
  - Updated rtpdump, rtpplay's payload type maps to reflect current IANA numbers.
1.8 (July 1997)
  - Bug in parsing of RR fixed.
1.6 (October 1996)
  - Format flag on `rtpdump` changed from `-f` to `-F` for consistency.
  - Added ability to use RTP timestamps rather than received timing for rtpplay, making it more useful for recording.
  - rtpdump can read from files.
  - `-x` flag supported for dump format so that only RTP/RTCP and media headers are logged.
  - Fixed: random address information in header.
1.0 (December 1995)
  - First independent release of rtptools.
  - Added rtptools/rtpsend to generate arbitrary RTP packets based on text file. Intended as a debugging and torture/compliance test tool. rtpsend reads files produced by rtpdump (ASCII mode). For replaying recordings, use rtpplay. Only supports RTP data and SDES RTCP packets right now.

Last updated
by Henning Schulzrinne