Author: Henning Schulzrinne
Keywords: RTP; rtptools

# RTP tools change history

1.22 (July 2018)

Moved source to https://github.com/columbia-irt/rtptools
Listing only major changes, see details in git log.

- Add man pages. (Jan Stary)
- Change license to 3-clause BSD.
- Replace `typedef unsigned char u_int8` etc with `stdint.h` types. (Jan Stary)
- Update to new autotools. (Akira Tsukamoto)
- Generate html versions from man pages. (Akira Tsukamoto)
- Reflect the manpages in the homepage. (Jan Stary)
- Fix `recvmsg()` on Solaris. (Jan Stary)
- Detect clang for compiling. (Jan Stary)
- Fix generating a rpm package. (Akira Tsukamoto)
- Fix building on Windows. (Akira Tsukamoto)

1.21 (July 2016)
  Yann E. MORIN (yann.morin.1998@free.fr): Buildroot [1] is a build-system targetting embedded devices. It is able to build toolchains for various architectures, based on the traditional GNU compiler collection gcc, the GNU binutils and various C libraries, such as GNU libc (glibc), uClibc [2] [3] or musl [4].

  glibc is a feature-full C library, which has had support for Yellow Pages (and the rest of the SUN RPC stuff) for a long time. However, circa the 2.14 release, glibc stopped installing the RPC headers [5], on the principle that providing the RPC implementation would be better served by a third-party package, namely ti-rpc [6]. That did not happen in time, so installing the RPC headers from glibc was re-instated circa 2.16.

  uClibc (no longer maintained, replaced by a fork, uClibc-ng) is a fully configurable C library for embedded systems. It entirely lacks a SUN RPC implementation altogether.

  musl is standards-conforming, lightweight C library. It also entirely lacks a SUN RPC implementation.

  TI-RPC is a stand-alone package. It may or may not be available (because the user may not need SUN RPC stuff on an embedded device, for example). Besides, it is not yet as feature-full as the implementation in glibc, though for all practical means, it is totally useable.

  So, there are cases where a SUN RPC implementation is not available.

  This patch makes it so that the use of Yellow Pages is conditional on the presence of a SUN RPC implementation, by checking at ./configure whether the required header is present, and disabling the corresponding code if the header is missing.

  At the same time, the legacy, long unsupported AM_C_PROTOTYPES directive is also removed, as it makes recent-ish autoconf fail.

1.20 (October 2013)

  Nick Birch (Nick.Birch@s-and-t.com): rtpsend -l (loop) flag does not work. Modified to rewind input file on feof if loop was set. Fails if length of line is greater than 2048 characters. Increased to 4096 (sufficient for typical MTU-sized message such as 7 MPEG TS packets)

  rtpdump: Put space after ext_data=<hex extension data> so that it can be parsed by rtpsend. parse_header doesn't comprehend the possible extension header. As a consequence any extension header data is also dumped twice. Once in the ext_data report and then a second time in the data report. Modify parse_header to return hlen that comprehends the extension header if present.

  The format for reporting contributing sources does not match the format accepted by rtpsend (i.e., reports "csrc[n] = xxxx" rather than "csrc[n]=0xxxxx"). Fixed. Note: the documentation is less than clear on the csrc syntax accepted by rtpsend.

1.19 (August 2010)
  Krzysztof Burghardt (krzysztof@burghardt.pl): "Wireshark implemented "rtpdump" file format in a bit different way, so cooperation beetwen those program is a bit problematic. Moreover rtptools compiled on i386 and amd64 have different size of file header (size of long in timeval is different)."
1.18 (September 2002)
  Changes made by Akira Tsukamoto unless otherwise noted.
  - Port to MacOSX (10.2).
  - 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