[Icecast] Shoutcast compatibility suggestions

oddsock oddsock at oddsock.org
Wed Dec 29 14:49:54 UTC 2004


At 12:32 AM 12/29/2004, you wrote:
>Hi:
>
>Ok, I've not managed to find any documentation on the shoutcast 
>compatibility introduced in icecast 2.2.0, so please humour me if I 
>missunderstand how it's meant to work.
>
>This is my understanding of it currently:
>
>1.  You configure Icecast (as shown in the shoutcast example) so that 
>shoutcast connections get mapped to the mountpoint you define.
>
>2.  You configure a listen socket specifically for use as a shoutcast 
>source port.  People connecting on this port wil have their stream appear 
>on regular Icecast ports under the mountpoint defined for Shoutcast streams.

The shoutcast-compat options in icecast were introduced so that we could 
properly handle the Shoutcast DSP style source client connection.  Here are 
the important bits we needed to implement :

* The shoutcast DSP connects on 2 different ports (lets call this "port" 
and "port + 1").  The authentication handshaking (as well as the actual 
stream data) comes over "port + 1", while "port" is used only for sending 
in metadata updates.
* The shoutcast DSP sends in metadata update requests over "port", but does 
not specify any kind of mountpoint (obviously since it knows nothing about 
them).
* The shoutcast DSP connection protocol is obscure enough that we were not 
able to easily flag that type of connection protocol (this caused us to 
require that all "port + 1" connections must be flagged as 
"shoutcast-compat" to enable shoutcast DSP style connection behavior on 
that port.

So to setup icecast in shoutcast-compat mode you pretty much just create 
another listen port (one larger than your original port) and mark that 
"port + 1" port as "shoutcast-compat".  This is what the example config 
does.  Also, since the shoutcast DSP doesn't allow you to specify any kind 
of mountpoint (or anything close to it), you are able to assign a "virtual 
mountpoint" via the <shoutcast-mount> option.  The default is to map all 
shoutcast DSP sources to /stream.  The main problem (and reason why you 
cannot attach multiple Shoutcast DSPs reliably to a single icecast 
instance) is the Shoutcast DSP's ignorance of mountpoints.  Metadata 
updates are sent in over the "port" port, and have no mountpoint 
designation.  So, while technically you could connect 2 (or more) Shoutcast 
DSPs to icecast, you would have no way to map the metadata updates from 
those 2 to the correct mountpoints.   It may be possible to do this based 
off the port the request came in on (that would then require you to setup a 
set of 'port' and 'port + 1' pairs for each possible shoutcast DSP you 
wanted to connect.  This is not a very elegant solution however, and is 
marginally better than starting up multiple icecast instances.  although we 
may consider implementing it if enough people ask for it.

The good news is, once you've connected a shoutcast DSP to icecast (and it 
is mapped to a mountpoint), then you can use all the normal 
"mountpoint-specific" settings that any normal mountpoint can.  this 
includes specifying a different source password, all the authentication 
stuff, and things like fallbacks.

Hope this explains it a bit better, and if you have any questions, feel 
free to followup...

oddsock





More information about the Icecast mailing list