Slurpcast

Warning: this page is obsoleted. It is only provided in good faith for historical purposes. The information may be out of date. Please only contact the author if you are planning to contribute to the development of this project.

Slurpcast is an O'Caml media streaming server much like Shoutcast and Icecast. So far it provides most interoperativity with Shoutcast and Icecast sources and clients with MP3 streams. Ogg Vorbis and other Ogg streams are not supported at this moment.

Why Slurpcast?

The problem with competitive innovation nowadays is that we put together a working package in haste and don't care to refine what already works. After a while, we simply don't remember why it works in the first place. When we open the package, we not only get confused by the abacadabra; worse yet, the package ceases working. -- Likai's digression.

Slurpcast is not meant to be a competitive replacement for existing streaming server implementations. The main interest of this project is to provide a foundation for typed transport protocol experiments. We hope to promote the use of functional programming language for writing applications because we believe that functional programming enables us to write very scalable programs. This initial effort provided us with insights of inner workings of a streaming server. We're pleased with the performance of O'Caml bytecode with I/O bound application.

Philosophically, Slurpcast is to take a step backwards from innovation. Our goal is to simplify the complexity of a streaming server, with the hope that perhaps the reduced complexity helps us build more scalable services on top of the simplified framework.

Release Note

At this point, we're making the source code of Slurpcast release 0.1 available for download. The following are the build prerequisites:

Newer version might be available for the required packages. If there is problem compiling Slurpcast with newer software packages, please inform me. The contact information can be found in the Home Page.

This version of Slurpcast does not have configuration files. Parameters are hard coded into config.ml which can be found in the src directory of the source code. To change some of these parameters, find the following code in config.ml:

let current_config = {
  max_sources = 4;
  max_clients = 40;
  pending_connections = 4;
  connection_timeout = 60.0;
  queue_length = 32;
  default_name = "unnamed";
  default_desc = "SlurpCasting is fun!";
  default_url = "http://cs-people.bu.edu/liulk";
  default_genre = "generic";
  default_public = false;
}

Modify the parameters as desired before compilation. Note that connection limits are not implemented. That means max_sources and max_clients are dummies.

WARNING: There is no access control implemented in Slurpcast version 0.1 yet. Everyone can connect to a running Slurpcast server as a source or client, which means anyone can broadcast through your server. Furthermore, Slurpcast is currently hard-coded to listen on port 8000 for -ANY- interface. The security implication is that you should not run Slurpcast on public accessible production hosts. It's not ready for production use yet.

Download

Slurpcast is licensed under the terms of GNU General Public License. Please read and agree to the following term before you download any material.

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

Slurpcast is available as a gzip compressed source code tarball only. There is no plan for binary distribution at this moment.

Furthermore, a technical report is available here. The technical report covers the background of Internet streaming, documents Shoutcast and Icecast source and client protocols, and explains the implementation of Slurpcast. A list of references where additional information can be found is available at the end of the report. The facts presented in this report are accurate to the author's best knowledge. Feedbacks and corrections are welcome.

Errata: the report references HTTP/1.1 and HTTP Authentication RFC's 2068 and 2617. It should have been RFC 2616 and RFC 2617 respectively for HTTP/1.1 and HTTP Authentication, since RFC 2616 obsoletes RFC 2068. Thanks to Adam Bradley for pointing that out.

Future Plans

I have plan to extend Slurpcast to become a full featured functional web server. I'm currently working on lexing/yaccifying of the HTTP specification and perhaps be rid of the pcre requirement (which could be a point of problem because it is not covered by O'Caml's safety guarantee).