I need to stream several "channels" (by channels I'm thinking of radio channels, so playlists might be more appropriate) of queued MP3 files to around 200 clients over the internet from a Windows 2008 R2 / IIS 7 web server. Encryption of the stream is not a requirement.
I need some way to ensure each client can only stream one channel at a time. I was thinking of restricting by IP address, and would welcome any suggestions on how I might go about this, or if there may be a better way.
For my clients I assume I'd need a player on the client end that could facilitate "logging in". Ideally I would be able to stream to windows xp/7/8, mac and android clients.
I would need to be able to log in remotely and control each channel / playlist from a finite list of MP3 files hosted on the web server.
I'm wondering if there any off the shelf products that I could use to do this. If not, I'm stuck on what would be the best way to go about this.
I've briefly read up on shoutcast, auto dj, streamcast and ice cast, but I don't have any experience with these solutions, and can't find any information about how to implement the security requirements I have (limiting access to one stream per client / ip address).
IP addresses do not uniquely identify users. There are plenty of situations where NAT comes into play, and you can have hundreds of users all behind the same public IP address.
What you need to do is have another method for identifying users. Assuming you don't want to require accounts, you can use a session ID.
Basically, you assign an ID with a cookie to a browser. When the user clicks a link to launch their audio player, the session ID is passed in the URL to the stream. With this method, it doesn't matter if the browser itself or a separate audio player is used to play the stream. It is up to the streaming server to then accept or reject the request.
It is common to accept any new request and disconnect the old when a new stream starts. Icecast doesn't support this sort of thing natively, but it does provide an API of sorts with the admin interface that you can use from your own scripts to get this behavior.
Alternatively, I have written a server called AudioPump that provides similar functionality. It isn't generally available yet, but please contact me at [email protected] if you're interested.