Implementing Improved User Support for Streaming Audio By: Amy Beam Senior Design III - Spring 2004
Overview Project Description Audience Revisited Deliverables Demonstration Conclusion
Project Description Problem: No open source streaming media server that contain subscription based model Solution: Modify Icecast II server to allow secure client authentication. –Each user to have a unique username and password –Assuring that no more than one person can listen using a username/password pair.
Audience Revisited 97x sold broadcasting license 97x lost funding for online only broadcast New Audience: –Small radio station –Need to stream –Subscription based model
Deliverables Modify the original Icecast II Server to include user authentication Assure that no more than one person can listen using a username/password pair. Use only open source server technology that is licensed under the terms of the GNU General Public License (GPL) Include ability to stream multiple streams via HTTP on port 80 Support for multiple, cross-platform streaming clients Support the Winamp, iTunes and XMMS client applications
Demonstration Log in Page – Admin Interface – username: admin password: bryanjay
Conclusion Questions???
Addition Info
Icecast.XML /home/abeam/icecast2/etc/ /example2.ogg +
Auth.c +int auth_is_listener_connected(source_t *source, char *username) +{ + client_t *client; + avl_node *client_node; + + avl_tree_rlock(source->client_tree); + + client_node = avl_get_first(source->client_tree); + while(client_node) { + client = (client_t *)client_node->key; + if (client->username) { + if (!strcmp(client->username, username)) { + avl_tree_unlock(source->client_tree); + return 1; + } + client_node = avl_get_next(client_node); + } + + avl_tree_unlock(source->client_tree); + return 0; + +} +
Auth.h /* Authenticate using the given username and password */ auth_result (*authenticate)(struct auth_tag *self, char *username, char *password); source_t *source, char *username, char *password); void (*free)(struct auth_tag *self); void *state; void *type;