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

5
我正在使用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个回答

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
我需要的代码是:
        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。


1
缓冲区除了完成视频之外,还有很多其他原因可能会变空... - BlueRaja - Danny Pflughoeft

0

我可能做错了什么,或者不知道为什么,但这个函数从来没有被调用。 - Lucas Gabriel Sánchez

0

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

stream.addEventListener(NetStatusEvent.NET_STATUS, statusChanged);

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

NetStatusEvent中没有"NetStream.Play.Complete"这样的代码。在帮助文件和运行代码中都没有找到,我跟踪了每一个事件,唯一看到的是最后的"NetStream.Play.Stop"。 - Lucas Gabriel Sánchez
2
如果你寻找 'NetStream.play.stop' 事件。当该事件被触发时,你可以检查 NetStream.time 是否等于你的电影的总播放时间。这样你就知道电影已经播放完成了。 - Bakapii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接