SWF文件头结构如下:

字段            类型           说明
标识            8位             表示文件是否被压缩("46" F 为没有压缩,"43" C 为被压缩)。
标识            8位             总是 "57" W。
标识            8位             总是 "53" S。
版本号         8位             代表SWF文件的版本(如果是9,就为 "09")。
文件长度     32位            表示文件的大小。
帧大小         RECT结构    表示舞台的大小。
帧频            16位           每秒要播放的帧数。
帧数            16位           总共的帧数。

以一个实际的未压缩SWF文件头为例子来分别说明上述字段:

46 57 53 05 B4 66 07 00 70 00 0F A0 00 00 BB 80 00 0C 9F 03

(1)字节1-3:46 57 53  <"FWS">

文件头以三个标识符开始,只能是0x46, 0x57, 0x53 (“FWS”)或者0x46, 0x57, 0x43 (“CWS”)。一个FWS标识表示该文件是未压缩文件.CWS标识表示从文件的第九个字节开始的所有内容,都是经过开放标准ZLIB压缩过的。CWS格式仅在SWF6以后才允许使用。

(2)字节4:05

在标识符之后的一个字节是版本号。这个版本号不是一个ASCII字符,而是一个8比特位的数字。例如,SWF5文件的版本号是0x05,不是ASCII字符"5"(0x36)。

(3)字节5-8:B4 66 07 00

一个Integer表示文件的长度。低在前,高在后,这里长度表示为0x000766B4 = 485044字节。文件长度字段代表包括文件头整个文件的总长度。如果是一个未压缩的SWF文件(FWS标识符),文件长度字段表示文件的精确大小;如果是一个经过压缩的SWF文件(CWS标识),文件长度字段表示解压后文件的大小,这样一般就不是实际文件的大小了。让未压缩(解压后)的大小可见,可以使解压过程更加高效。

(4)字节9-X:

这一段长度非固定,这是一个RECT结构。它表示的大小可以根据坐标(四个点的坐标)数值的变化而变化。文件大小RECT通常是这样的形式:Xmin和Ymin成员都为0;Xmax和Ymax成员声明宽度和高度。RECT的解析涉及到如下结构:

Bit Values 格式
Type        Comment
SB[nBits]   有符号位值 (nBits表示用多少位来存储这个值)
UB[nBits]   无符号位值 (nBits表示用多少位来存储这个值)

RECT 格式
Field       Type             Comment
Nbits        UB[5]            Bits used for each subsequentfield
Xmin        SB[Nbits]      x minimum position for rectangle in twips
Xmax        SB[Nbits]     x maximum position for rectangle in twips
Ymin        SB[Nbits]      y minimum position for rectangle in twips
Ymax        SB[Nbits]     y maximum position forrectangle in twips

也就是说要解析出SWF文件的显示区域,步骤是这样的:得到第9个字节的前5位,这里就是0x70-->0x0E,即14。那么之后的字节就按照14比特位进行分割,共需要4(坐标点数) * 14(所占比特位) + 5(位指示) = 61 bits <> 8 Bytes。于是乎,从第9个字节到第16个字节就是RECT结构体所占用的字段:70 00 0F A0 00 00 BB 80 。解析如下:

01110000-00000000-00001111-10100000-00000000-0000000-010111011-10000000
01110-00000000000000-01111101000000-00000000000000-01011101110000-000
14-0-8000-0-6000

因为Flash的坐标是TWIP格式的,单位为1twip(1/20像素),所以得到的数据需要除以20的,即实际RECT值为(0,400,0,300)。

(5)字节17-18:00 0C

这两个字节表示帧速率。前一字节表示小数位,后一字节表示整数位,不过一般极少有小数位的帧率,所以一般我们只计整数就可以了,这里是0x0C,即每秒12帧。注意,这是一个理想的每秒播放帧数值,如果SWF文件包含声音流数据,或者Flash播放器运行在一个慢的CPU上,这个速率是不能保证的。

(6)字节19-20:9F 03

这两个字节表示Flash文件总的帧数,这里为0x039F = 927 帧。

SWF文件内容结构如下:

在文件头后面的是一些标签化的数据块。所有的标签都是用一种通用格式。所以任何程序在解析一个SWF文件时,都可以跳过那些还不明确的块。在每个块中的数据可以指向这个块中的偏移量,但绝不能指向另外一个块的偏移量。这样,在用工具处理SWF文件的时候就任意可以删除、插入和修改(而SWF文件不会被破坏)。

每个标签都是由一个类型和一个长度值开始的,存在两种标签头部格式:短格式和长格式。短标签头部用于62字节或者更小的标签数据,长标签头部能够用于任何大小不超过4GB的标签数据,从长远来看这将会是非常实用的。

1、记录头部(短)

字段                    类型        说明

标签编码和长度    U16          高10位:标签类型;低6位:标签长度

注意:标签编码和长度字段并不是一个10位的位字段后面跟着6位的位字段,而是一个双字节的字,SWF文件不间断的字节排序使得这两者具有不同的布局。该字段中的长度并不包含标签开始处的记录头部(即该字段所占有的长度)。如果标签的长度大于或者等于63字节,那么它会被存储在长标签头部。

2、记录头部(长)

字段                    类型         说明

标签编码和长度    U16           以短标签头部方式存储的长度为63字节的标签编码和长度

长度                      U32          标签的长度

注意:长标签头部由一个标识长度为63字节(0x3f)的短标签头部和一个32位的长度组成。

标签按作用可划分为两种类型:

定义型标签:这类标签定义SWF影片的内容,如各种形状,文字,位图,声音等等。每个定义型标签在内容被定义都分配了一个唯一的标识号给它,这叫做 角色标识(character ID)。flash播放器则把这些角色放到一个存储空间里面,这个存储空间我们一般叫它 字典。用定义型tag是不会绘制任何图形的,不会产生任何动画的。
控制型标签:这类标签用来产生和操作字典中的角色实例的渲染,并且控制影片的流程。
SWF标签的排序
总的来说,标签可以出现任何情况的排序方法,但也不是随便乱排, 它遵循一些规则:
1.一个标签只能依靠在它之前的标签,不能依靠在它之后的标签.
2.一个定义了角色的定义型标签必须在引用这个角色的控制型标签之前。
3.流媒体标签必须有顺序,没有顺序的流媒体播放起来也是没有顺序的
4.结束标签(tag)应该在SWF文件的最后。
字典
字典是已经定义好的所有角色的仓库,并且可以通过控制型标签来使用它。建立和使用字典的过程是以下这样的:
1.一个 定义型标签定义了一些内容,如形体,字体,位图或者声音。
2. 定义型标签给该内容赋上一个唯一的 角色标识(CharacterID)。
3.依据 角色标识把内容存到 字典中。
4.一个 控制型标签根据 角色标识字典中找出相应的内容,然后给这个内容执行一些动作,比如显示一个形体,或者播放一个声音。每个 控制型标签都 只指定一个唯一的标识。相同的标识是不允许的。举个象征性的例子,第一个角色的标识是1,第二个角色的标识是2,依次类推。角色标识为0的是一个特殊的标 识,被看作是空角色。控制型标签并不是唯一指向字典的标签。定义型标签也可以指向多个角色来定义一些更复杂的角色。例如,定义按钮 (DefineButton)和定义精灵(DefineSprite)标签都是根据其它角色来定义它们的内容的。定义文字(DefineText)标签可 以指向字体角色来为文字选择不同的字体。
处理一个SWF文件
Flash播放器在一个显示帧标签到来之前会处理显示帧标签之前SWF文件的所有标签。在这个时候,播放列表被复制到屏幕上面,与此同时 Flash播放器在处理下一帧之前是空闲的。第一帧所显示的内容,是在第一个显示帧标签之前的所有控制型标签操作产生的累积效果。第二帧所显示的内容,是 从文件开始到第二个显示帧标签所有控制型标签操作产生的累积效果。以此类推。

关于SWF文件格式的一些说明相关推荐

  1. swf文件格式解析入门(文件头解析)

    这里是使用as3语言来对swf文件做解析,其它语言可以参考. 一,准备工作 从Adobe官网下载一份swf文件格式说明文档 http://www.adobe.com/content/dam/Adobe ...

  2. swf文件格式分析(一)

    一直想仔细去研究一下与flash有关的两个文件格式SWF和FLV.这次因为项目的原因终于有了这个机会.其实adobe对flash文件格式是公开的,只要在adobe注册一下就可以拿到完整的文档,不过ad ...

  3. swf文件格式解析(二)

    原文地址:swf文件格式解析(二)作者:爱与痛的边缘 上一篇教程可能写的有点乱 ,本回合开始之前先做一个概述吧,引用官方白皮书的原文 概述 SWF 文件是由一个文件头,和跟在后面的一系列的标签组成.标 ...

  4. swf文件格式1(中文翻译版)

    本文翻译自Adobe官方公布的SWF File Format Specification Version 10 这里附上英文版下载地址: http://bbs.9ria.com/forum.php?m ...

  5. SWF文件格式详解(1)

    近来想搞一个GIS系统,但查了一下资料,大部分都用MAPX,SUPERMAP之类的商业GIS组件,对我也不太适合,偶然看到用flash做的矢量地图效果非常好,因此想用SWF文件来做GIS系统也不错.决 ...

  6. SWF文件格式说明书--SWF文件头

    SWF文件头 字段 类型 备注 标识 8位 标识字节: F代表未压缩 C代表已压缩(SWF6以后的版本特有) 标识 8位 代表W 标识 8位 代表S 版本号 8位 代表SWF文件的版本,比如0x06代 ...

  7. ‍swf文件格式解析入门(tag解析)

    上文把文件头解析完成了,接下来就是解析标签 swf文件把所有的资源都打包在标签内部 如字体,位图,嵌入的2进制,代码等等 tag有两种类型,1种为短tag,1种为长tag 短tag的长度是小于63个字 ...

  8. swf文件格式【转】

    这个在自己开发辅助工具时很有用啊,转来学习一下 swf文件的整体结构是 header + body的组成. 文件的开始是一个[文件头] 它的结构如下: [Copy to clipboard] [ - ...

  9. swf文件格式说明书(中文+英文)

    SWF文件头 字段                类型                     备注 标识                8位                   标识字节: F代表未 ...

  10. SWF文件格式说明书--SWF文件结构

    SWF File Structure SWF文件结构 Following the header is a series of tagged data blocks. All tags share a ...

最新文章

  1. CV技术在医疗领域中有哪些应用?Salesforce、谷歌、斯坦福综述文章登上Nature子刊...
  2. Fragment使用小技巧
  3. 使用java调用fastDFS客户端进行静态资源文件上传
  4. Unity之Math等方法的使用
  5. mysql md5版本校验_通过MD5校验和验证MySQL软件包的完整性
  6. WINDOWS SERVER 2003 DHCP服务器全攻略
  7. 小程序点击调转带参数_带你走遍苏大的每个角落,校园导览小程序上线!
  8. rust笔记5结构体
  9. CCCC-GPLT L1-039. 古风排版 团体程序设计天梯赛
  10. outlook vba html语言,在VBA中更改HTML电子邮件正文字体类型和大小
  11. 在服务器上安装centos系统
  12. VOCALOID笔记
  13. Equitrac智能打印管理软件中文版
  14. 大一想去参加培训的学生
  15. 硬件中控一键开关机设计方案
  16. 解决Visual Studio 2015创建工程时的“DNX SDK version 'dnx-clr-win-x86.1.0.0-beta5' failed to install.”错误
  17. 数据库综合查询与视图操作
  18. 【语音去噪】基于matlab软阈值+硬阈值+折中阈值语音去噪【含Matlab源码 530期】
  19. 那些年,在Fragment中犯的错
  20. vue中自定义select

热门文章

  1. Python/Django 大文件下载问题
  2. mapreduce实战之空气质量分析(三)
  3. @linux--Rsync服务的使用及命令详解
  4. linux导出分区的数据,QNAP 威联通磁盘分区探索与数据导出
  5. linux恢复群晖数据,DSM系统损坏后通过电脑恢复数据
  6. 10年软件测试工程师感悟——写给还在迷茫中的朋友「十年磨一剑,文末福利」
  7. 计算机数控技术实验报告,数控编程实训总结范文
  8. Android系统版本变迁
  9. lisp将图元追加选择_晓东CAD家园-论坛-A/VLISP-向块添加新图元,添加图元到块内 - Powered by Discuz!...
  10. react 之 umi(乌米)--入门介绍