a memo

e99o Concept

Here's the thing: your most important information assets are the raw materials from which you build: the first-generation images, and uncompressed audio and video files.

But when it comes to actually working with and distributing your creations, you very often need versions and copies that are more compressed, or show some particular detail. e99o is an intelligent media server that will automatically compress, crop, convert, or filter your media files on the fly.

Images, audio, and video -- not just cataloged, but intelligently served.


How Does It Work?

e99o is a Berylium module: a PHP class and a set of recipes that turn Berylium into a media Swiss Army Knife.

You send a request like the following to an e99o-enabled Berylium server:
http://psydeshow.org/music/audio-blueskies_f456@96kbps.ogg
If the file is present, Apache serves it up neat as you please.

But if the file isn't present, that's when e99o kicks in. Berylium looks up the audio record in the database, discovers the master file at files/psydeshow.org/2003/05/audio-23.wav, and passes it all off to the e99o-engine. e99o uses the @96kbs as a recipe to create the following command:
oggenc files/psydeshow.org/2003/05/audio-23.wav -b 96 -

e99o then looks for a corresponding filename in its cache:
cachefile: /e99oroot/2003/05/psydeshow.org_audio-23@96kbps.wav

If found, the modification time on the cache is compared to the mod time of the master file-- if the cache is newer it gets served using the mime/type in the @96kps recipe. Bang zip.

If the cache is missed, however, and there is no lockfile indicating that a new cache is already being generated, e99o runs the command and saves the resulting file in its cache.

If the processing/encoding is going to take longer than, say, 8 seconds, a default placeholder will be sent in response to the request. The placeholder should communicate that the server is generating the content, and give an estimated good time to try the request again.

Note that e99o is a second-level cache -- the e99o module contains a publishing context that allows you to publish frequently-requested formats to the webserver. Non-e99o Berylium contexts will be able to take advantage of this. For example, when you publish an image, the publishing context could automatically publish an @thumb version as well using e99o.

By Psydeshow on May 21, 2003 at 9:03pm

jump to top