首先明确一点,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,这些跟系统相关的需要我们自己来实现。

目前就是这个思路,接下来我会开始实现这些功能。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐