Free since 2005 · No login required
AT

Academic Tutorials

Learn at your own pace

site-mobile-top-banner · 320x50

Generating thumbnail previews using progressive flvs

Added 29 Jul 2008


nc = new NetConnection();
nc.connect(null);
ns = new NetStream(my_nc);
ns.setBufferTime(0.1); // small buffer to limit motion in preview
my_video.attachVideo(ns); // my_video is a video object on stage
ns.play(thefile);


To turn this example into a thumbnail preview of the actual flv you could do this:

ns.onStatus = function (info) {
     if(info.code == "NetStream.Buffer.Full"){
          ns.pause();
     }
};


There's even a way of surpressing the sound resulting in a silent preview:

// soundholder is a simple movieclip on stage
soundholder.attachAudio(ns);
audio = new Sound(soundholder);
audio.setVolume(0);

You don't have to be a rocket scientist to take this example further using a 'play' button and kicking the video plus sound into life upon click.
But what's not so obvious is the fact that even if you pause the video, the flv file will load in its entirety in the background, potentially clogging up a user's connection. This is even more of an issue if you want to display many previews at once.

I found out about this behaviour using a neat little program called Netlimiter. It allows you to see which applications are using what kind of bandwidth and it also enables you to throttle a fast connection on a per application basis, emulating dialup users for example.

I thought it would be easy enough to stop the flv downloading by killing the NetConnection or close the NetStream similar to how this would work using Flashcom. Unfortunately I had no success with that approach, the flv would continue downloading come what may.

Furtunately the workaround was suprisingly easy: try loading a non-existing flv. Here's the code I used:
ns.onStatus = function (info) {
     if(info.code == "NetStream.Buffer.Full"){
          my_video.attachVideo(null);
          ns.pause();
          ns.play("nonexist.flv");
     }
};


This seems to do the trick quite nicely, showing one frame of the previously loaded flv without clearing the video object. A typical preview only consumed about 5kB to 10 kB of data - a big saving over a whole flv file which is potentially several MB in s