03.06
[此段文章ActionScript 2.0與ActionScript3.0共用]

前些日子在Demo如何在Flash中播放FLV的時候出了些問題,其實原來的寫法是對的,但是可能是上了一整天的班了,腦袋已經開始恍神(自己找藉口 :p),所以在判斷式上漏了一些idea,不過我覺得有趣的是當我嘗試用NetStream.time的屬性時,撥放到最後居然無法匹對NetStream.duration,真的是怪怪的,當時我的確曾經一度懷疑是不是自己的問題。
後來我找了一下原廠的白皮書,發現一段很妙的描述,我故意引用一段中文的片段給大家看,若覺得看不懂可以看原文的說明:
onMetaData = function(infoObject:Object) {}
在 Flash Player 接收在正播放的 FLV 檔中嵌入的描述性資訊時調用。
Flash Video Exporter 實用工具(1.1 版本或更高版本)將視頻的持續時間、創建日期、資料速率及其它資訊嵌入視頻檔本身。不同的視頻編碼器嵌入不同的元資料組中。
此處理函數在調用
NetStream.play()方法後而在視頻播放頭前進之前觸發。在多數情況下,FLV 元資料中嵌入的持續時間值接近實際持續時間,但是並不精確。換言之,當播放頭在視頻流的結尾處時,此值不會始終與
NetStream.time屬性的值相匹配。
讚啊!它的意思是說duration是僅供參考,如果跟NetStream.time匹配到是你運氣好。 *無言*
那怎嚜辦?有上過我課的同學就知道,乖乖的回歸onStatus吧,等到NetStream.Buffer.Flush的code被傳回來的時候,作為播放完畢的條件,不過大家覺得從此以後就天下太平了嗎?當然不是,因為這個狀況是您在讀一個靜態的Video檔案,如果一但加上Flash Media Server和串流,狀況又會不一樣了,因為當NetStream.Buffer.Flush出來時,一個影片的播放其實還沒結束,他還必須把緩衝(Buffer)的份給撥完才行,所以千萬別輕取亂動啊。
今天先寫到這,下一期我們再來探討如何在串流模式下解決這些問題,待續…
相關文章:
文章內容由宋志峰[ANISTAR]撰寫,引用分享請以鏈結形式註明出處與原始作者。


[...] 接續這[FLV與NetStram播放完畢判斷 part I]這篇文章,今天我們來繼續談下去,要如何搞定NetStream的播放完畢事件,我們來看看下圖,下圖是一個已經完成的範例所trace出來的文字,我故意將trace出來的表示結構設置成 Event:Code ,這樣比較方便我們辨識是由哪個事件傳回哪些碼回來。 [...]
挖賽哇賽
這對我婆很有幫助
你真猛~~~~~~~~~
To spencer:
課堂上是一定會詳細的說明+試給你看. :p
這邊算是留個常遇到問題的Q&A memo,免得我又忘記在哪了.
哈哈,賣關子XD
這是「欲知詳情,請見課堂上分曉」嗎?(*大笑*)