关于SWF文件格式的一些说明
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文件格式的一些说明相关推荐
- swf文件格式解析入门(文件头解析)
这里是使用as3语言来对swf文件做解析,其它语言可以参考. 一,准备工作 从Adobe官网下载一份swf文件格式说明文档 http://www.adobe.com/content/dam/Adobe ...
- swf文件格式分析(一)
一直想仔细去研究一下与flash有关的两个文件格式SWF和FLV.这次因为项目的原因终于有了这个机会.其实adobe对flash文件格式是公开的,只要在adobe注册一下就可以拿到完整的文档,不过ad ...
- swf文件格式解析(二)
原文地址:swf文件格式解析(二)作者:爱与痛的边缘 上一篇教程可能写的有点乱 ,本回合开始之前先做一个概述吧,引用官方白皮书的原文 概述 SWF 文件是由一个文件头,和跟在后面的一系列的标签组成.标 ...
- swf文件格式1(中文翻译版)
本文翻译自Adobe官方公布的SWF File Format Specification Version 10 这里附上英文版下载地址: http://bbs.9ria.com/forum.php?m ...
- SWF文件格式详解(1)
近来想搞一个GIS系统,但查了一下资料,大部分都用MAPX,SUPERMAP之类的商业GIS组件,对我也不太适合,偶然看到用flash做的矢量地图效果非常好,因此想用SWF文件来做GIS系统也不错.决 ...
- SWF文件格式说明书--SWF文件头
SWF文件头 字段 类型 备注 标识 8位 标识字节: F代表未压缩 C代表已压缩(SWF6以后的版本特有) 标识 8位 代表W 标识 8位 代表S 版本号 8位 代表SWF文件的版本,比如0x06代 ...
- swf文件格式解析入门(tag解析)
上文把文件头解析完成了,接下来就是解析标签 swf文件把所有的资源都打包在标签内部 如字体,位图,嵌入的2进制,代码等等 tag有两种类型,1种为短tag,1种为长tag 短tag的长度是小于63个字 ...
- swf文件格式【转】
这个在自己开发辅助工具时很有用啊,转来学习一下 swf文件的整体结构是 header + body的组成. 文件的开始是一个[文件头] 它的结构如下: [Copy to clipboard] [ - ...
- swf文件格式说明书(中文+英文)
SWF文件头 字段 类型 备注 标识 8位 标识字节: F代表未 ...
- SWF文件格式说明书--SWF文件结构
SWF File Structure SWF文件结构 Following the header is a series of tagged data blocks. All tags share a ...
最新文章
- CV技术在医疗领域中有哪些应用?Salesforce、谷歌、斯坦福综述文章登上Nature子刊...
- Fragment使用小技巧
- 使用java调用fastDFS客户端进行静态资源文件上传
- Unity之Math等方法的使用
- mysql md5版本校验_通过MD5校验和验证MySQL软件包的完整性
- WINDOWS SERVER 2003 DHCP服务器全攻略
- 小程序点击调转带参数_带你走遍苏大的每个角落,校园导览小程序上线!
- rust笔记5结构体
- CCCC-GPLT L1-039. 古风排版 团体程序设计天梯赛
- outlook vba html语言,在VBA中更改HTML电子邮件正文字体类型和大小
- 在服务器上安装centos系统
- VOCALOID笔记
- Equitrac智能打印管理软件中文版
- 大一想去参加培训的学生
- 硬件中控一键开关机设计方案
- 解决Visual Studio 2015创建工程时的“DNX SDK version 'dnx-clr-win-x86.1.0.0-beta5' failed to install.”错误
- 数据库综合查询与视图操作
- 【语音去噪】基于matlab软阈值+硬阈值+折中阈值语音去噪【含Matlab源码 530期】
- 那些年,在Fragment中犯的错
- vue中自定义select
热门文章
- Python/Django 大文件下载问题
- mapreduce实战之空气质量分析(三)
- @linux--Rsync服务的使用及命令详解
- linux导出分区的数据,QNAP 威联通磁盘分区探索与数据导出
- linux恢复群晖数据,DSM系统损坏后通过电脑恢复数据
- 10年软件测试工程师感悟——写给还在迷茫中的朋友「十年磨一剑,文末福利」
- 计算机数控技术实验报告,数控编程实训总结范文
- Android系统版本变迁
- lisp将图元追加选择_晓东CAD家园-论坛-A/VLISP-向块添加新图元,添加图元到块内 - Powered by Discuz!...
- react 之 umi(乌米)--入门介绍