AS3 - 如何知道视频是否已经结束?

时间:2011-07-12 13:34:27

标签: actionscript-3 video

我正在使用flash.net.NetStream和flash.media.Video播放.flv,这里有一些代码:

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);

播放视频,但我怎么知道视频从开始到结束播放的时间?如何知道视频是否播放了它的长度?

PS:抱歉我的英语不好。

4 个答案:

答案 0 :(得分:14)

Bartek答案是最准确的,但我发现我需要的代码是"NetStream.Play.Stop"

代码"NetStream.Play.Complete"不存在。

stream.addEventListener(NetStatusEvent.NET_STATUS, statusChanged);

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

这是有效的,因为你不能停止流,只是暂停它(并恢复它),所以出现这种状态的唯一方法是结束视频播放到达终点(这就是我需要的)

PS:抱歉我的英语不好。

答案 1 :(得分:1)

我需要的代码是:

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

(我唯一需要改变的是将Play.Stop改为Buffer.Empty)

答案 2 :(得分:0)

我相信你会想要为你的stream.client对象添加另一个函数,称为'onPlayStatus'

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

因此,或许在代码中的其他位置创建函数,然后像这样引用它:

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

答案 3 :(得分:0)

只需为NET_STATUS添加事件监听器:

stream.addEventListener(NetStatusEvent.NET_STATUS, statusChanged);

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