AS3 - How to know if a video has ended?

I'm using flash.net.NetStream and flash.media.Video to play a .flv, here is some code:

var stream:NetStream = new NetStream(connection);

//next line is to avoid an error message
stream.client = {onMetaData: function(obj:Object):void {}}

var video:Video = new Video();
video.attachNetStream(stream);
stream.play("url.to/video");

addChild(video);

That plays the video, but how I can know WHEN the video has played from the beginning to the end? How to know if the video was played ALL it's length?

PS: Sorry for my bad English.

Upvotes: 5

Views: 12469

Answers (4)

Nicholas
Nicholas

Reputation: 5520

The code I need was:

        public function statusChanged(stats:NetStatusEvent):void 
        {
            trace(stats.info.code);
            if (stats.info.code == 'NetStream.Buffer.Empty') 
            {
                trace('the video has ended');
            }
        }

(the only change I had to make was Changing Play.Stop to Buffer.Empty)

Upvotes: 1

Bartek answer is the most accurate but I've found that the code I need is "NetStream.Play.Stop"

The code "NetStream.Play.Complete" doesn't exist.

stream.addEventListener(NetStatusEvent.NET_STATUS, statusChanged);

function statusChanged(stats:NetStatusEvent) {
    if (stats.info.code == 'NetStream.Play.Stop') {
         trace('the video has ended');
    }
}

This works since you can't STOP the stream, only pause it (and resume it), so the only way to this status arise is to end the video playback reaching the end (and that's what I need)

PS: Sorry for my bad English.

Upvotes: 14

Bartek
Bartek

Reputation: 1996

Just add event listener for NET_STATUS:

stream.addEventListener(NetStatusEvent.NET_STATUS, statusChanged);

function statusChanged(stats:NetStatusEvent) {
    if (stats.info.code == 'NetStream.Play.Complete') {
         // do some stuff
    }
}

Upvotes: 0

Hawks
Hawks

Reputation: 534

I believe you'll want to add another function to your stream.client object, called 'onPlayStatus'

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/NetStream.html#event:onPlayStatus

So create the function somewhere else in your code perhaps and then reference it like so:

function myFunction(obj:Object):void
{
    //do something here
}
stream.client = {onPlayStatus: myFunction}

Upvotes: 0

Related Questions