开源flashplayer汇总.

以前 刚开始研究flash的时候,搜集了很多开源的flashplayer,仅向vc上就移植了不下五款,但基本上没有一个可以直接使用用的。都存在诸如性能,内存,功能等方面的不足,下面我分别列举一些希望对有兴趣的朋友有点帮助。

1.swfdec.
这个知名度很高,曾作为一些linux发行版本的组件,但目前已经停止更新。
1).swfdec支持到swf 7,全部使用c开发,大量使用了glib这也限制了它的移植性。
2).采用cairo渲染,.
3).使用mad作为mp3解码器,后来版本也加入了flv支持,需要GStreamer 作为视频解码。
4).vm的实现上感觉结构混乱,object 属性采用hash存储,当然这样要比gnash使用std::map快一些(我在自己的fp中借鉴了lua hash的方式来实现属性的存取,效果的确很好)。

2.fadflash,gplflash,flirt.
这几个都还算不是完整的播放器,支持的swf版本也大都在flash 5以内,但这更适合初学者学习。其中感觉flirt的结构很好,可以很清楚的把flahsplayer的原理展现出来。

3.lightspark
这个可能知道的人很少,它是09年才发起的一个项目(好像是创始人的毕业设计),到目前为止一直都很活跃,它最初的目标是播放网络上大量的基于as3的flash视频,低版本使用gnash播放,但我看后来的代码也加入了渲染以及低版本的支持。
1). 知道的唯一支持as3的开源fp.
2).渲染上使用了cairo和opengl加速。
3).as3执行使用apple的llvm实现而没有使用adobe的开源的Tamarin,所以它更像是一个学术研究。

4.GameSWF,Gansh.
Gansh好像是06年从GameSWF迁移到GNU下的一款fp, 经过几年的维护,是目前对swf8以下功能支持最全的一款开源fp,但swf8的Bitmap,filter等特性仍没有实现。gnash早先几个版本里也曾尝试支持avm2,但新版本里还是放弃了对as3的支持。我最奇怪的是gnash在设计上似乎从来没有考虑过“性能”这问题,更像一个swf功能的展示器。
gnash性能瓶颈:
1).render支持agg,cairo,虽然也支持opengl 但经我测试效果极差。agg算是支持最好的。我曾用google skia 实现了一个渲染后端,速度竟然就远远超过了默认的agg实现。gnash出于支持多种渲染后端考虑,在shape,style等渲染元素的存储上使用了自定义的格式,抽象出了Renderer接口进行绘制,agg,cairo等分别子类了Renderer_agg,Renderer_cairo,在绘制时要实时将中间渲染格式转换为agg或其他,这一点对性能损耗极大。
2).vm,在as性能最核心的地方gnash却大量的使用的std,boost等通用库,例如object属性存取使用std::map,这种平衡二叉树在处理大数据上的确很优秀,但对于as object这种轻巧的对象显然有些笨重。
3).结构,我认为结构是影响软件性能的最主要原因之一,Gansh在这方面做的却很少,看看最初GameSWF,发现Gansh的重构也是有限的。但整体上还是要好于swfdec的。

gnash很重:看一看gnash的依赖:render(agg,cairo..),gui(gtk,sdl...),sound, video(gstreamer,ffmpeg),boost,stl,curl.libgif,jpeg,png等,想想如果不做裁剪的话这些库加起来应该大于20MB.


评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值