Technical Level: Intermediate
For: IT Professionals

iSightI’ve been working on a live streaming server for all our teachers. I’ve had this Icecast server sitting here for about two years now, not really doing anything. I’ve been using it occasionally to give live piano performances to a virtual audience, but I’ve been waiting for the time when we could install webcams or something in every classroom. And now the “something” is finally happening. We’re [gradually] equipping every classroom in our district with document cameras. Document cameras by themselves are a great tool, easily making the old light-based projectors obsolete.

Yet it’s kind of a waste of a digital video device to keep it always pointing down at the paper or textbook or biology specimen you’re showing your class. Why not point that lens upward at the teacher or the whiteboard, and stream it so anyone can watch on the web? Or why not video record the students giving their presentations so their parents can watch from home? (Get them to sign a waiver first.) Not to mention this technology would be invaluable for students sick in bed.

Document cameras can function as webcams. As long as their video connects to the computer, they can be captured and sent to Icecast. Icecast uses Ogg Theora and Ogg Vorbis for the streaming video and audio. I’ve messed around with a few programs that could stream to these formats. I found a program called Visonair Ogg Streamer which probably has the simplest interface, but I couldn’t get it to establish a connection. Plus, the creator hasn’t updated it in about 2 years. I tried EzStream as well, but it’s command-line only, and I only managed to stream an existing OGG file, not a webcam. Finally I settled on VLC, which does the job nicely. The only problem is it crashes a little more frequently than I would like with my webcam and the DirectShow filters, but I’m wondering if that’s a configuration and/or compilation issue I can resolve. It also requires a complicated MRL that has to be entered to properly stream, and it’s going to be a little confusing for the staff. Training will help with that, but it would be nice to have something easier.

Next, to give all the Icecast streams a central hub for users to browse and view, I’ve been integrating Icecast with our media sharing site. We haven’t officially announced the site yet, other than a cursory mentioning in the BrainBlast class lineup, but it uses osTube, an open source script that’s similar to YouTube. The nice thing is that in addition to video, osTube includes support for pictures, audio, and documents. I’ve been able to add LDAP logins to it, so it ties in directly with our LDAP tree. Once I have Icecast fully integrated, I’ll finish an “Import” utility I’ve been working on, which lets users automatically import videos from other sites (like TeacherTube) without having to download the files themselves.

Icecast provides an XML which shows who is currently streaming through the server. This made it easy to create a “Live Streams” page for osTube which automatically displays the currently active streams. After clicking a stream link, osTube goes to the details page where the actual stream plays.

There aren’t many options for web-based Theora players. In fact, the only one I could find is a Java applet called Cortado. I think it will suffice. I haven’t been able to find any Flash Theora players. I ran into some problems with using the Cortado JAR — I kept getting “Access denied” errors — until I realized with a smack of the forehead that the unsigned JAR had to reside on the same server as Icecast. There’s also a PHP wrapper for Cortado called iTheora. The advantage is that it adds “Play,” “Pause,” and “Download” buttons around the player, and supposedly makes it easier to use Cortado. I’m not sure if I’m going to use iTheora or not.

That’s where I am right now. I love that all this technology, which would normally cost THOUSANDS upon THOUSANDS of dollar to implement using commercial solutions, can all be done fairly simply with free open source software. Open source options should always be evaluated first, if possible.