第1节
swf文件的整体结构是 header + body的组成。
文件的开始是一个[文件头]
它的结构如下:
字节 名称 说明
1 Signature “F”表示非加密格式,“C”表示加密格式
1 Signature “W”无特殊意义
1 Signature “S”无特殊意义
1 Version 版本号,它表示对应播放器版本
4 FileLength 整个文件长度,低位在前
N FrameSize RECT结构体,表示屏幕大小,具体结构和长度根据数据变化,分析方法另外讨论。
2 FrameRate 帧频,默认为12,高位在前
2 FrameCount 帧数,表明文件根下的帧数,低位在前
以上是swf中,最简单的一个tag,一个完整的swf文件是由很多独立的tag组成的。每一个tag都包括一个头和一个数据体,头有2种类型,短tag型和长tag型。
短tag型由2byte构成,前10个bit表示tag类型,后6个bit表示tag长度。
长tag型由6byte构成,前10个bit表示tag类型,后6个bit固定为全1,后4个byte代表tag长度。
tag的长度不同于文件头的长度FileLength,它是除去tag头后的长度。
(另外)只有非加密的swf文件可以直接用以上的方法解析,加密的文件需要另外增加一步处理。具体方法由于牵涉到版权问题,这里我不加说明。
这份资料可能对flash设计意义不大,但如果有人用的着,我会继续分析一下,如果有人也在做这方面的调查,欢迎和我一起讨论。
第2节
前节说明了swf文件是由1个head和1个body构成的。
并且解析了header的结构,和一个tag的header部分的简单说明。
下面余下的就是swf文件的body了。
整个文件body是由大量的tag组成的,通过分析tag的head部分,可以立刻知道这个tag的类型代码和长度。
如果你无法识别这个tag的类型,也可以利用tag的长度,直接跳过这个tag。
这种方式保证了版本的兼容性,即使出现了新的tag,老版本的播放器还是能够解析完整个swf文件而不出现错误,大不了就是不能提供新的功能而已。
以下就是swf文件结构的一