2010-09-28 44 views
1

我正在Flash CS5和Actionscript 3中編寫一個基本的視頻播放器。對於這個基本播放器,我將NetStream附加到我的NetConnection,然後調用流的.play()方法開始加載。儘管我希望元數據和流開始緩衝,但我不希望立即開始播放,因此我立即調用流的.pause()方法。不幸的是,當我立即暫停時,我的流客戶端的onMetaData事件並不總是被調用,所以我不一定會獲得加載視頻的總播放時間。Actionscript 3 NetStream立即暫停不會獲得元數據

作爲解決方法,我將調用放在onMetaData監聽器中的「暫停」方法中,但有時我的視頻在收到它的元數據之前會播放一段時間,因此會繼續播放直到它出現。

有沒有一種很好的方法來阻止我的信息流播放,並仍然獲得我的視頻元數據?

回答

1

好的,這裏有一個不同的思考方式,不同的是......不要將視頻對象附加到流對象上。在顯示「請稍等」視覺的同時開始播放流,而不顯示視頻對象。在您的onMetaData監聽器中,查看您之前是否存儲過持續時間。如果不是,則假設這是第一次調用onMetaData,存儲持續時間,暫停播放,將流尋找到0,然後附加視頻對象。

用戶會看到一個「請稍等」幾秒鐘,然後視頻就會出現,暫停&準備好按照預期持續時間進行播放。用戶將完全不知道流在等待時播放了一下。

+1

如果您這樣做,您還需要將NetStream的SoundTransform設置爲0音量,或者您可能會在播放視頻時聽到來自視頻的聲音以獲取元數據。 – DanK 2010-09-30 13:53:45

+0

哈!謝謝@DanK,我正在研究沒有音頻輸出(揚聲器或耳機)的系統,所以這絕對是一個令人討厭的小疏忽。 ;) – Slobaum 2010-09-30 14:10:00

1

NetStatusEvent.STATUS事件NetStream.Play.Start被觸發時,您應該致電暫停。

更新:

對於非常短流(例如buffer>durationNetStream.Play.Start是可能得到onMetaData回調之前剛剛解僱。

之前暫停對NetStream.Play.Start,檢查元數據已經提供,如果不是不直暫停,但等待onMetaData暫停(只設置一個標誌,e.g pauseOnMetaData = true)。

+0

問題是,NetStream.Play.Start事件可能在接收MetaData之前觸發。我不認爲這會保證當我打電話暫停時我會有MetaData,並且暫停會阻止它永遠收到。 – Slobaum 2010-09-30 12:55:15

+0

儘管您在此處稱暫停,但該流仍繼續緩衝,並且仍然會收到元數據。兩個事件都應該分開處理。 – 2010-09-30 16:14:12

+0

Hhmm。我覺得當我在那時暫停時,我從來沒有收到過元數據。謝謝,我會試一試。 – Slobaum 2010-09-30 16:45:28