如果我用netStream加载一个flv,我怎么能在flv停止播放时调用一个函数

时间:2010-09-10 12:00:40

标签: actionscript-3 timer settimeout netstream

我在ActionScript 3中有一个网站,当你按下按钮时会发生很多FLV动画。现在这就是我设置它的方式。

在AS3中

我加载FLV(这是我从After Effects以FLV形式导出的动画) 与净流。我有一个定时器设置与动画(FLV)播放相同的时间长度,当定时器停止时,它调用一个关闭流,打开一个新的播放另一个视频的功能。我注意到使用计时器的唯一问题是,如果连接很慢并且(动画)停止一秒钟,计时器会继续运行,并且过早地调用下一个flv。

有没有人知道在flv播放结束时加载flv或swf的方法?以便下一个FLV将始终在前一个FLV的运行时间结束时播放,而不是使用定时器?

我在考虑完成但我不知道如何实现它??

2 个答案:

答案 0 :(得分:0)

使用OSMF框架很容易实现顺序播放,你应该检查一下。谷歌“osmf教程”,你应该在网上找到一些教程。

该框架是相当新的,但看起来它可能成为Flash中媒体传输的事实上的解决方案,因为它不仅限于视频,还包括音频和音频。图片。

作为开发人员,您不必费心使用NetStream& NetConnection类。开发视频解决方案,以及音频和视频图像解决方案应该简化并且更易于处理。唯一的限制是它需要Flash 10

答案 1 :(得分:0)

这是一些用于检查FLV何时以NetStream结尾的代码。我只是提供片段,因为我假设你已经启动并运行了FLV。

//create a netstream and pass in your connection
var netStream:NetStream = new NetStream(conn);

//add callback function for PlayStatus -event
var client : Object = {};
client.onPlayStatus = onPlayStatus;
netStream.client = client;

//attach your NetStream to the connection as usual
//---

//function that gets called onPlayStatus
function onPlayStatus(info : Object) : void {
    trace("onPlayStatus:" +info.code + " " + info.duration);
    if (info.code == "NetStream.Play.Complete") {
        //play the next FLV and so on
    }
}

编辑:使用您的示例代码,它将看起来像这样。

var nc:NetConnection = new NetConnection(); 
nc.connect(null); 
var ns:NetStream = new NetStream(nc); 

var listener:Object = new Object(); 
listener.onMetaData = function(md:Object):void{}; 
listener.onPlayStatus = function(info : Object) : void {
    trace("onPlayStatus:" +info.code + " " + info.duration);
    if (info.code == "NetStream.Play.Complete") {
        //play the next FLV and so on
    }
};
ns.client = listener; 

vid1.attachNetStream(ns); 

const moviename1:String = "moviename2.flv"; 
const moviename1:String = "moviename3.flv"; 
var movietoplay:String = "moviename.flv"; 
ns.play(movietoplay);