swf 格式Flash 動畫播放器在Android上的實現

媒體盒子發表於2013-05-02

首先明確一點,swf格式和其他的一些視訊格式有很大的區別。

它裡面不僅有音訊還有其他的各種元素(術語叫塊型別)包括但不僅限於:

向量圖、圖片、文字、字型、片段動畫、按鈕、幀、動作、音訊等等

你需要將這些元素一一解析並渲染出來。

這種格式是允許使用者來互動的,你像大多數flash遊戲,使用者可以點選按鈕產生不同的動畫效果。這就說明swf格式裡面還有

程式碼來控制這些行為。


下面來談實現:

我們要想自己來寫一個swf格式的播放器似乎不太現實,因為有檔案解析,mp3解碼,事件處理,圖片渲染等等對於我們來說

太複雜,也太耗時。


在網上找了幾個開源的swf播放器原始碼,像swfdec   fliter等,我最近有研究了下fliter。但發現它只被維護到2006年就沒再繼續維護,所以

我們後來出來的一些flash它都沒法播放,這個需要我們自己去新增相應的塊型別處理。

android上實現需要將swfdec或者fliter移植到android平臺,但是無論是swfdec還是fliter都依賴好些lib ,如fliter依賴與libz libjpeg  libmad等

而且這些都是必須的,比如libz 因為有的塊採用的是壓縮的格式所以要解壓,libjpeg是解析圖片,libmad是mp3解碼。因此我們要移植fliter首先

得把這三個lib使用交叉編譯的方式用ndk編譯出來,再來供libfliter來使用。

另外還有一個艱鉅的任務就是音訊和視訊的渲染,需要使用到android的audiotrack和surface,這些跟系統相關的需要我們自己來實現。

目前就是這個思路,接下來我會開始實現這些功能。

相關文章