2010-09-10 30 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