Yesterday I had a phone conference with Hadar Pedhazur of Opticality Ventures, during which Hadar mentioned that he's been using Asterisk, a Linux-based software PBX, with great success. Although Asterisk is VoIP-capable, Hadar's using cheap ($100) Digium cards to manage and route calls among his various business-related POTS lines. That really got my attention; I've long wanted such a capability. So I did some reading, and I also watched this presentation given by Digium's founder and Asterisk's developer, Mark Spencer.
I can't say more about Asterisk until I've had a chance to try it, but I do want to note that Mark's presentation -- a RealVideo stream synchronized to a slide show -- was extremely effective. The talk was given during Linux-Kongress 2003, at Universität des Saarlandes, home of the Virtual Courseroom Environment (VCORE) project. The project page notes:
Although many aspects of streaming multimedia are well understood there are many open questions concerning a real world implementation.You can say that again. Let's look at how this version delivers the content. The presentation's URL links to a SMIL document which contains:
The URL of the video, an HTTP-accessible RealVideo (.rm) file.
A series of pointers to JPG renderings of the slides.
Determining the duration of the video and encoding that in SMIL.
Acquiring the JPG renderings.
Determining the transition points and encoding the duration of each slide accordingly.
This is pretty nice! I've seen this done occasionally, but it's hardly routine. Since I'm on a random access kick lately, I decided to see what it would take to add an index to the presentation. A lovely example of how to do that can be found here, courtesy of UT Austin's David Gracy. Note that this example dates all the way back to 1999, yet demonstrates something quite compelling that we rarely see even today.
While I was at it, I explored how to incorporate the slides as text, rather than as images. Here's the result: a three-minute clip that includes the first four slides of Spencer's talk, and an index that links to each of the four transitions. The SMIL wrapper, playable in RealOne, looks like this:
<smil> <head> <layout> <root-layout width="640" height="480" /> <region id="text_region" width="320" height="480" left="0" top="0" /> <region id="video_region" width="320" height="240" left="320" top="0" /> <region id="text_region2" width="320" height="240" left="320" top="240" /> </layout> </head> <body> <par> <textstream src="http://jonudell.net/udell/gems/asterisk_index.rt" region="text_region" dur="3:08"/> <video src="http://graphics.cs.uni-sb.de/VCORE/Publications/\ mark_spencer/Data/mark.rm?start=0:0&end=3:08" region="video_region"/> <seq dur="3:08"> <textstream src="http://jonudell.net/udell/gems/asterisk1.rt" region="text_region2" dur="38"/> <textstream src="http://jonudell.net/udell/gems/asterisk2.rt" region="text_region2" dur="32"/> <textstream src="http://jonudell.net/udell/gems/asterisk3.rt" region="text_region2" dur="22"/> <textstream src="http://jonudell.net/udell/gems/asterisk4.rt" region="text_region2" dur="96"/> </seq> </par> </body> </smil>
Here are some things I discovered:
Random access over HTTP. The other day I mentioned how HTTP 1.1 enables some players (RealOne, Winamp) to randomly access audio on a vanilla Web server. The same holds true for RealOne going against RealVideo content. However, although you can jump to a random location, it takes noticeably longer than when you do the same thing with a streaming server.
Minutes-and-seconds notation. In the index file you can write URLs in terms of minutes-and-seconds, not the byte-range lingo that the client and server speak. These URLs aren't available outside that context, though. And while it's possible to package up the start/stop syntax into a .ram file that you can point a browser at, you can't (so far as I know) form an URL that indexes into the SMIL assembly.
Text formatting is lame, but workable. Here's an example of a slide written using Real's markup.
This still isn't a great solution, but it's instructive to see what can be done with late-nineties technology. Given XML slide markup and a means of capturing transition timecodes, a VCORE-like system should be able to generate this kind of indexed presentation automatically. The slide content might need to be streamlined and simplified, but you could also link out from slides to richer Web pages if needed.
Conferences would be so much more useful if this were the norm. As an attendee, I should expect that when I return home, I'll have slide-by-slide random access to every talk. What's more, I should expect to be able to search for slide text and jump into presentations at the found locations. Remote attendees, meanwhile, would be able to purchase this level of access, thus defraying the cost of providing it.
The deluxe solution, of course, would make all these entry points bloggable by surfacing external URLs. But just having basic indexing done comprehensively and reliably would be a huge step forward. It sucks not to be able to take that for granted.
So we schlep to conferences, make painful choices between conflicting sessions, and feel vaguely guilty when we miss lots of them anyway because we're busy schmoozing. It's great to be bathed in WiFi signal at conferences nowadays, and able to blog them in realtime. Now that we've solved outbound access from the venue, let's solve inbound access to the content.
Former URL: http://weblog.infoworld.com/udell/2004/05/26.html#a1009