Resilient Streaming ProtocolThe Resilient Streaming Protocol (RSP) is a one-way IP/UDP based media streaming protocol that was developed initially to provide high reliability audio streaming between the mountainchill.com internet radio station's rural studios and shoutcast servers. Although the protocol operates in a unidirectional fashion (no listener ack/resend packets for example), it does support optional listener reporting and packet quality tracking. It is my hope to soon have an experimental IPv6 RSP multicast stream available to allow direct RSP listening to mountainchill.com. But for the moment, an IP4 and IPv6 unicast relay server is available. The listen file for this relay server can be found at http://mountainchill.com/mtnchill128.rsp and a rudimentary decoder can be found in the source code package. Note that the decoder only decodes the rsp stream into a raw mp3 or DTS/aac stream which needs further demuxing and decompression to play as audio using VLC, lame, mpg123, or similar programs.
I would love to write a gstreamer encoder and decoder plug-in built around the RSP base functions too, but I fear free-time limitations will not allow this to happen any time soon. It should be fairly easy for some one familiar with writing gstreamer plug-ins. Most of the RSP complexity is already handles by the RSP base functions, as can bee seen from the example encoder and decoder programs' source code. Any programmers interested in helping?
The protocol is currently being used to link the mountainchill broadcast studio to our public shoutcast servers and the KRKQ FM transmitter site. If you listen to MountainChill.com on the internet, then the stream you are hearing is being fed from our studio through two redundant RSP streams before it is re-assembled and becomes a "shoutcast" stream hosted by the server software included below in the source code. If you are listening to Mountainchill at 95.5 FM in the Telluride, Norwood and San Miguel valley area in Colorado, the transmitter feed you are hearing is also delivered via an internet based RSP stream. In the very near future, a redundant RSP stream delivered via a three-hop microwave link around the mountains will be added to feed this transmitter.
This page is dedicated to the development of the RSP protocol, and includes links to the draft protocol specification, and
source code for implementing various RSP applications, including an encoder, decoder and a full functioning streaming server
with both RSP and legacy shoutcast client interfaces as well as transcoding capability and multi-stream support.
Draft Protocol SpecificationSpecification text file
RSP base functions and example encoder, decoder, gstreamer source plugin and demo, and server source codeSource code zip file ~4.9 MiB
The latest version includes conditional compile sections to build under Linux without modification, and an rspServer bug fix for correctly handling shoutcast listeners who request NO metadata to be sent. The core rsp library code contains a fix for a bug where stream loss that lasted a multiple of the total interleaver length caused the client roll around and come back to where it was originally resulted in permanent duplicate packets being detection and no re-sync to the stream. A gstreamer source plugin and gstreamer player application has also been added. I'm working on a gstreamer sink.
Source code is under the MIT and GPL license - individual source code files specify which license applies. More specifically, the reed-solomon source code is under GPL, all others are MIT. If you do not wish to have GPL applied to code you write based on the provided source code, you will need to find/write your own reed-solomon codec.
Copyright © 2011-2019 Ethan Funk - Last updated July 3, 2015