2010-09-10 42 views
0

我在ActionScript 3中有一个网站,当您按下按钮时会出现大量FLV动画。现在这是我如何建立。如果我使用netStream加载flv,如何在flv停止播放时调用函数

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

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

即时思考onComplete,但我不知道如何实现!?

回答

0

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

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

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

+0

是否有没有办法与as3自己没有类做到这一点?我实际上会研究osmf,看起来很酷,但我只有一个星期才能毕业,我需要完成这个项目的毕业生,所以我需要的东西不会需要我很长一段时间研究 – tyepoe 2010-09-10 12:28:15

+0

我不认为osmf会花你一个星期的时间去理解!也许要花几个小时才能通过教程并获得一般想法。检查这个博客 – PatrickS 2010-09-10 12:50:54

+0

对不起,我不能编辑了...... osmf不会花你一个星期的时间去理解!在最多几个小时的时间里,通过教程并获得一般想法。检查这个http://www.rblank.com/,有一个基本的播放器的代码,所以你不必从头开始,他也没有几个视频教程。当然你可以不用osmf就可以做到这一点,一种方法是检索视频的持续时间并监视当前位置,只要当前位置达到持续时间值就可以开始播放下一个视频,罗斯的解决方案应该可以运行得很好 – PatrickS 2010-09-10 13:01:48

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

我有flv已经运行了,但我很难弄清楚这一点。我将我的连接连接到舞台上带有实例名称的视频,我将如何将您的代码与我拥有的代码进行比较:... \t var nc:NetConnection = new NetConnection(); \t nc.connect(null); \t var ns:NetStream = new NetStream(nc); \t vid1。attachNetStream(NS); \t var listener:Object = new Object(); \t listener.onMetaData = function(md:Object):void {}; \t ns.client = listener; \t const moviename1:String =“moviename2.flv”; \t const moviename1:String =“moviename3.flv”; \t \t var movietoplay:String =“moviename.flv”; \t ns.play(movietoplay); – tyepoe 2010-09-10 12:51:18

+0

我已经在我的帖子中提供了您的代码示例 – Ross 2010-09-10 13:43:55