Vorbis RTP

Demo software

This is an early demo version of client and server software for streaming Vorbis over RTP. The implementation is mostly based on Phil Kerr's draft draft-kerr-avt-vorbis-rtp-03.txt, relevant differences are:

  • RTP session setup is yet done using a proprietary TCP protocol
  • the RTP stream is solely used for transmitting audio packets
  • the client is yet using a fixed identification header
  • the client uses HTTP to retrieve the setup header
  • Vorbis comment headers are not supported
  • metadata is transported in a separate RTP stream using a sort of CMML over RTP

Using the default configuration, the client will connect to this server, which is simply acting as an RTP proxy for Virgin Radio's 96kbps HTTP stream. I chose this broadcaster as it's mostly using Vorbis comments to transmit metadata (title, artist), which are mapped to CMML clip elements. The artist and title is shown in the client window. If the client hangs, it is usually caused by the HTTP stream blocking and the proxy being unable to restart a new stream (it has some bugs here). The only workaround is to restart the client.

Download one of client versions and the configuration file (next paragraph) and start the client from a shell or DOS box like this (Java 1.4 or higher required):

$ java -jar jarfile configfile
$ java -jar rtpplayer14.jar player.properties

Client for Java 1.4
Client for Java 1.5
Client with debug info (Java >=1.4)

Client and server source


When starting the player, you have to refer to a configuration file containing something like this:

controlAddress = j-ogg.de:9999
setupHeader    = http://www.j-ogg.de/rtp/virgin.vsh

stun           = stun.sipgate.net:10000
#publicIp      =

vorbisPort     = 47110
cmmlPort       = 47112
fecPort        = 47114			  		


- The client connects to this address to initialize an RTP session.


- The URL from where the client will read the Vorbis setup header. This should of course later be specified in e.g. an SDP descriptor.


- If you're behind a router or are using a dynamic IP, the client will use the specified STUN server to determine your public IP as seen from the internet. If no server is specified, you have to specify your IP address using the publicIp key. (STUN - Simple Traversal of User Datagram Protocol (UDP) Through Network Address Translators (NATs), RFC 3489)

vorbisPort, cmmlPort, fecPort

- Local UDP ports used for receiving Vorbis, CMML and FEC (FEC not yet used). If you are behind a router, I try to use outbound UDP packets to make the router forward the incoming UDP packets correctly, but you may have to configure it to forward these ports to your local IP address.