您的位置:首页 > 其它

swf文件格式分析

2009-08-25 09:17 459 查看
一直想仔细去研究一下与flash有关的两个文件格式SWF和FLV。这次因为项目的原因终于有了这个机会。其实adobe对flash文件格式是公开的,只要在adobe注册一下就可以拿到完整的文档,不过adobe也声明该文档是用于帮助第三方工具生成swf文件的,禁止利用该文档进行 flash播放器的开发。不过目前国内有多家公司拥有自已的嵌入式flash播放器,不知道对于这种现象adobe是如何考虑的?呵呵。

从今天开始就连续写一些笔记吧。今天是第一次,正值大年初六,那就分六次写完吧。

先概要的看看swf文件格式(swiff),swf设计的几个目标是:
1、适合屏幕显示。支持抗锯齿,可以快速的渲染成各种像素格式的位图,支持动画,支持交互按钮。

2、可扩展。使用标记语言,在保持对以前标记兼容的前提下可以扩展新规格。

3、易于在网络上传输。一方面要求swf文件尽可能的小,对swf进行压缩(算法来源ZLIB),还大量使用bit-pack组织数据结构,另一方面要求flash播放器支持流式渲染,且swf不能对网络带宽做任何假设。

4、简单。文件格式尽量简单以方便flash播放器的实现,使其尽可能少的依赖于本地OS特殊,更易于移植。

5、独立。所有资源不再需要依赖其它外部文件。比如字库。

6、弹性。swf可令flash播放器工作在硬件能力受限的环境下,并且可以充分利用硬件能力。

7、高速。高速、高质量的渲染。

8、可被脚本控制。

fieldtype说明
signatureu8'F'表示未压缩,从swf6开始才支持;'C'表示压缩
signatureu8'W'
signatureu8'S'
版本号u81表示swf1
文件长度u32文件总长度,对于CWS来说是解压之后的文件长度
影片尺寸RECTtwips表示的RECT。1twip=1/20pixel
帧率u16以8.8表示的浮点数
总帧数u16
疑问:总帧数使用16位表示,这也就是说一般情况下(帧率12fps),flash影片长度为90分钟。

RECT是使用bit-pack的数据结构(如下表),这种方式在swf文件格式中大量使用,

fieldlen说明
Nbits5bits用于指明后面的每个字段各占几个字节
Xminnbits
XmaxNbits
YminNbits
YmaxNbits
swf文件结构

swf文件包含一个文件头,接下来就是各种数据包,最后以一个end数据包结尾。每个数据包由tag和数据组成。从长度上来说tag分长tag(24bit)和短tag(16bit)两种。

短tag格式:

fieldlen说明
tag16bit高10bit:类型;低6bit:长度
长tag格式:

fieldlen说明
tagu160x3f
lenu32长度
从类型上来说tag分为definition tag(负责定义文件内容)和control tag(负责控制内容的显示)。从swf8开始有一种特殊的tag——FileAttributeTag,并且它必须是第一个tag。后面的tag所依赖的内容必须在前面的tag中有定义,Stream Sound Tag必须按顺序出现,最后一个tag永远是End Tag。

definition tag在被解析出来之后被记录在dictionary里。dictionary为每个tag进行唯一编号,以供其它tag引用。编号的原则是从1开始顺序编号。

在了解这些之后我已经迫不及待去写一个分析程序对swf文件进行分析了。行动!明天再写。

文章来自:http://blog.csdn.net/alenwelkin/archive/2008/02/12/2088719.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: