2007
03.06


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

NetStream展示

前些日子在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)的份給撥完才行,所以千萬別輕取亂動啊。

今天先寫到這,下一期我們再來探討如何在串流模式下解決這些問題,待續…


相關文章:
  • FLV與NetStram播放完畢判斷 part II
  • 深入淺出 Flash Media Server (RTMP)介紹 part VI – 使用WebCam
  • 深入淺出 Flash Media Server (RTMP)介紹 part V – Play & Stream
  • 深入淺出 Flash Media Server (RTMP)介紹 part IV – 建立新連線
  • Bitmap與BitmapData
  • 本文引用:
    文章內容由宋志峰[ANISTAR]撰寫,引用分享請以鏈結形式註明出處與原始作者。

    4 comments so far

    Add Your Comment
    1. [...] 接續這[FLV與NetStram播放完畢判斷 part I]這篇文章,今天我們來繼續談下去,要如何搞定NetStream的播放完畢事件,我們來看看下圖,下圖是一個已經完成的範例所trace出來的文字,我故意將trace出來的表示結構設置成 Event:Code ,這樣比較方便我們辨識是由哪個事件傳回哪些碼回來。 [...]

    2. 挖賽哇賽
      這對我婆很有幫助
      你真猛~~~~~~~~~

    3. To spencer:

      課堂上是一定會詳細的說明+試給你看. :p
      這邊算是留個常遇到問題的Q&A memo,免得我又忘記在哪了.

    4. 哈哈,賣關子XD
      這是「欲知詳情,請見課堂上分曉」嗎?(*大笑*)