trx: Realtime audio over IP

trx is a simple toolset for broadcasting live audio from Linux. It sends and receives encoded audio over IP networks, via a soundcard or audio interface.

It can be used for point-to-point audio links or multicast, eg. private transmitter links for a radio station or other live audio distribution. In contrast to traditional streaming, high quality wideband audio (such as music) can be sent with low-latency, typically as low as a few milliseconds, and incredibly fast recovery from dropouts.

It works favourable as a replacement for traditional ISDN lines and hardware ISDN codecs.

Features include:

Unlike TCP streaming such as Icecast, trx uses RTP/UDP with handling of dropped packets and network congestion that is more appropriate to live or realtime audio. Much of this comes courtesy of the brilliant Opus audio codec. The result is an incredibly graceful handling of network loss or dropouts.

It is intended for use over closed or private IP networks. It can be used over the public internet, but you are warned that it has no built-in security or authentication of the received audio. If you do not already have a private network you may wish to use an appropriate tunnel or IPsec.

trx is based on the following software/libraries:

Examples

This list of examples is not comprehensive:

tx -h 192.168.0.32         # send audio from default soundcard to the given host
rx                         # receive audio and play it

tx -h 192.168.0.32 -b 32   # send audio as above, with a lower 32kbps data rate
tx -h 192.168.0.32 -m 128  # larger buffer for a non-professional soundcard

tx -h 192.168.0.32 -f 480  # smaller frames for decreased latency
rx -j 4                    # smaller jitter buffer for decreased latency

tx -h 239.0.0.1            # send audio over multicast
rx -h 239.0.0.1            # recieve audio from the above

tx -?                      # full list of transmitter parameters
rx -?                      # full list of receiver parameters

Each pair of commands feeds audio in one direction only, but multiple sets of tx/rx commands can be used. This means it's easy to use different parameters for eg. a low-quality talkback channel, or an additional monitoring channel.

Paul Evans has contributed some notes on how to play an application into trx and I followed this up with a full guide to streaming desktop audio to another machine, which has become a frequently asked question.

Another user has contributed some latency tests using trx.

Source code

The most recent release is trx 0.5 (4th January 2019)

There is a Git repository available:

$ git clone http://www.pogo.org.uk/~mark/trx.git

This software is licensed under the GPLv2.

User interface

trx is well suited to fixed or long term links. You may be interested in my new project, Cleanfeed, which has the additional features of an easy-to-use studio UI and encryption, making it well suited as an ISDN replacement in broadcast environments for outside contribution, interviews etc..


Mark Hills
September 2019