How to check for the FLV file existence before playing that using FLVPlayback in Action Script 3?

StackOverflow https://stackoverflow.com/questions/3335790

Question

I'm very new to the Action Scripting, I'm using the FLVPlayback class to play my FLV files.

If I'm trying to play a FLV file which is not existed yet then I am getting a "VideoError: 1000" with message of Unable to make connection to server or to find FLV on server.

I want to check for the FLV file existence using the file URL or path, before playing that FLV by FLVPlayback. Can anybody please suggest a way to do that.

Thanks

Was it helpful?

Solution

The only way to catch the error safely is to listen for the fl.video.VideoEvent.STATE_CHANGE event and act accordingly. Here's a little code snippet on how to do so:

import fl.video.FLVPlayback;
import fl.video.VideoEvent;
import fl.video.VideoState;

var videoPlayer:FLVPlayback;
videoPlayer.addEventListener( VideoEvent.STATE_CHANGE, onVideoStateChange );
/** Bad source  **/
videoPlayer.source = "http://www.helpexamples.com/flash/video/caption_video_error.flv";
/** Good source **/
//videoPlayer.source = "http://www.helpexamples.com/flash/video/caption_video.flv";

function onVideoStateChange( evt:VideoEvent ):void
{
    var videoPlayer:FLVPlayback = evt.target as FLVPlayback;
    switch( evt.state )
    {
        case VideoState.CONNECTION_ERROR:
            trace( 'Connection error' );
            /**
             * Once you hit this event, you should run some logic to do one or more of the following:
             *   1. Show an error message to the user
             *   2. Try to load another video
             *   3. Hide the FLVPlayback component
             */
            break;
        default:
            trace( 'Player is: ' + evt.state );
    }
}

For a full list of possible VideoState constants, visit fl.video.VideoState.

OTHER TIPS

I think you may be able to make use of the stateChange event. One of the possible event types is VideoState.CONNECTION_ERROR and another is VideoState.DISCONNECTED which may also work.

Try giving that a shot.

If those don't work, the only way I can think of would be to either do a HEAD or GET request for the flv before you attempt to load it. Only a successful response would trigger the video loading through the normal method. I don't remember whether Flash supports HEAD requests, but if it does that would certainly be the better option.

If Flash does not support HEAD requests then you may be better off having a simple, server-side script that could verify the existence of the flv before you actually request if. That way you can use a simple GET request without having to retrieve the whole file.

INLINE THINKING
I am just thinking, another possible solution using GET would be to cancel the load as soon as bytesLoaded > 1K (for example), or something like that. As long as you are checking for a size greater than the 404 response you are getting, you should be able to assume the flv is being loaded.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top