`
阅读更多
swf文件格式说明书(中文+英文)
SWF文件头
字段                类型                     备注
标识                8位                   标识字节
F代表未压缩
C代表已压缩(SWF6以后的版本特有)
标识                 8位                  代表W
标识                 8位                  代表S
版本号               8位                  代表SWF文件的版本,比如0x06代表SWF6
文件长度            32位                 整个文件的所占的字节数
帧大小              RECT                 结构SWF场景的大小,单位为1twip(120像素)
帧速度               16位
帧数                16位                 影片总的帧数目

The header begins with a three-byte Signature of either 0x46, 0x57, 0x53 (“FWS”) or 0x46,
0x57, 0x43 (“CWS”). An FWS signature indicates an uncompressed SWF file; CWS indicates
that the entire file after the first 8 bytes (that is, after the FileLength field) has been compressed using the open standard ZLIB. The data format used by the ZLIB library is described by Request for Comments (RFCs) documents 1950 to 1952. CWS file compression is only permitted in SWF version 6 or later.
文件头以三个标识符开始,他们不是0x46, 0x57, 0x53 (“FWS”)就是0x46,0x57, 0x43 (“CWS”).一个FWS标识表示该文件是未压缩文件.CWS标识表示整个文件,在前八个字节,也就是文件长度字段之后所有的内容,都是开放标准 ZLIB压缩过的.用ZLIB库的数据格式,在1950 到1952年的Request for Comments (RFCs)文档中有所描述.CWS仅在SWF6以后才允许使用.

A one-byte Version number follows the signature. The version number is not an ASCII character,but an 8-bit number. For example, for SWF 4 the version byte is 0x04, not the ASCII character‘4’ (0x35).

在标识符之后的一个字节是版本号.这个版本号不是一个ASCII字符,而是一个8位的数字.例如,SWF4文件的版本号是0x04,不是ASCII字符”4”(0x35).
The FileLength field is the total length of the SWF file including the header. If this is an
uncompressed SWF (FWS signature), the FileLength field should exactly match the file size. If
this is a compressed SWF (CWS signature), the FileLength field indicates the total length of the file after decompression, and thus will generally not match the file size. Having the uncompressed size available can make the decompression process more efficient.

文件长度字段代表包括文件头整个文件的总长度.如果是一个未压缩的SWF文件(FWS标识符),文件长度字段表示文件的精确大小;如果是一个压缩的 SWF文件(CWS标识),文件长度字段表示解压后文件的大小,这样一般就不是实际文件的大小了.让未压缩(解压后)的大小可见,则可以使解压过程更加有 效.

The FrameSize field defines the width and height of the movie. This is stored as a RECT
structure, meaning that its size may vary according to the number of bits needed to encode the
coordinates. The FrameSize RECT always has Xmin and Ymin of 0; the Xmax and Ymax
members define the width and height (see Using Bit Values).
帧大小字段表示影片的宽度和高度.它存在一个RECT结构中,表示它的大小可以根据坐标(四个点的坐标)数值的变化而变化.文件大小RECT通常是这样的 形式:Xmin和Ymin成员都为0;Xmax和Ymax成员声明宽度和高度.(参考Using Bit Values一节)
The FrameRate is the desired playback rate in frames per second. This rate is not guaranteed if the SWF file contains streaming sound data, or Flash Player is running on a slow CPU.
帧速率表示理想的每秒播放帧数.如果SWF文件包含声音流数据,或者Flash播放器运行在一个慢的CPU上,这个速率是不能保证的.

The FrameCount is the total number of frames in this SWF movie.
帧数表示SWF影片总的帧数目.
SWF File Structure
SWF文件结构
Following the header is a series of tagged data blocks. All tags share a common format, so any
program parsing a SWF file can skip over blocks it does not understand. Data inside the block can point to offsets within the block, but can never point to an offset in another block. This enables tags to be removed, inserted, or modified by tools that process a SWF file.

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

Tag Format
标签格式

Each tag begins with a tag type and a length. There are two tag header formats, short and long.
Short tag headers are used for tags with 62 bytes of data or less. Long tag headers can be used for any tag size up to 4GB, far larger than is presently practical.
每个标签都以标签类型和长度开头。标签头格式有两种,短型和长型。短型标签头用在数据不超过62字节的标签;长型标签头则可用在比实际用到的大小大得多的4GB之内的任何标签中。

标签头(短型)

字段                                         类型                        备注
TagCodeAndLength(标签类型和长度)          16位                  高10位:标签类型
低6位:标签长度

Note The TagCodeAndLength field is a two-byte word, not a bitfield of 10 bits followed by a bitfield of 6 bits. The little-endian byte ordering of SWF makes these two layouts different.
The length specified in the TagCodeAndLength field does not include the RECORDHEADER
that starts a tag.
TagCodeAndLength字段是一个占两字节的字,而不是一个10位二进制字段后面跟着6位二进制字段。

If the tag is 63 bytes or longer, it is stored in a long tag header. The long tag header consists of a short tag header with a length of 0x3f, followed by a 32-bit length.
假如标签是63字节或者更长,它具有长型标签头。长型标签头就好像一个以0x3f开头的短型标签头,后面跟着一个32位长度。

标签头(长型)

字段                                     类型                     备注

TagCodeAndLength(标签类型和长度)      16位               标签类型和标签长度(这儿的标签长度不是真 实                                                               的)合起来是0x3f,包装起来像短型标签头

长度                                    32位                  标签长度

Definition and Control Tags
定义型标签和控制型标签
There are two categories of tags in SWF
Definition Tags These tags define the content of the SWF movie – the shapes, text, bitmaps,
sounds, and so on. Each definition tag assigns a unique ID called a character ID to the content it defines. Flash Player then stores the character in a repository called the dictionary. Definition tags, by themselves, do not cause anything to be rendered.

Control Tags These tags create and manipulate rendered instances of characters in the dictionary, and control the flow of the movie.
SWF有两种类类型的标签:
定义型标签:这类标签定义SWF影片的内容,如各种形状,文字,位图,声音等等。每个定义型标签在内容被定义都分配了一个唯一的标识号给它,这叫做角色标 识(character ID)。.flash播放器则把这些角色放到一个存储空间里面,这个存储空间我们一般叫它字典。用定义型tag是不会绘制任何图形的,不会产生任何动画 的。
控制型标签:这类标签用来产生和操作字典中的角色实例的渲染,并且控制影片的流程。
Tag Ordering in SWF
SWF标签的排序
Generally speaking, tags in a SWF can occur in any order. However, there are a few rules that must be observed
1 A tag should only depend on tags that come before it. A tag should never depend on a tag that comes later in the file.

2 A definition tag that defines a character must occur before any control tag that refers to that character.

3 Streaming sound tags must be in order. Out-of-order streaming sound tags will result in the sound being played out of order.

4 The End tag is always the last tag in the SWF file.

总的来说,标签可以出现任何情况的排序方法,但也不是随便乱排, 它遵循一些规则:

1.一个标签只能依靠在它之前的标签,不能依靠在它之后的标签.
2.一个定义了角色的定义型标签必须在引用这个角色的控制型标签之前。
3.流媒体标签必须有顺序,没有顺序的流媒体播放起来也是没有顺序的
4.结束标签(tag)应该在SWF文件的最后。
The Dictionary
字典
The dictionary is a repository of characters that have been defined, and are available for use by Control Tags. The process of building and using the dictionary is as follows 1 A definition tag defines some content, such as a shape, font, bitmap, or sound. 2 A unique CharacterId is assigned to the content by the definition tag. 3 The content is saved in the dictionary under the CharacterId. 4 A control tag retrieves the content from the dictionary using the CharacterId, and performs some action on the content, such as displaying a shape, or playing a sound. Every definition tag must specify a unique ID. Duplicate IDs are not allowed. Typically, the first CharacterId is 1, the second CharacterId is 2, and so on. Character zero is special and considered a null character. Control tags are not the only tags that reference the dictionary. Definition tags can use characters from the dictionary to define more complex characters. For example, the DefineButton and DefineSprite tags refer to other characters to define their contents. The DefineText tag can refer to font characters to select different fonts for the text.

字典是已经定义好的所有角色的仓库,并且可以通过控制型标签来使用它。建立和使用字典的过程是以下这样的:1.一个定义型标签定义了一些内容,如形 体,字体,位图或者声音。2.定义型标签给该内容赋上一个唯一的角色标识(CharacterID)。3.依据角色标识把内容存到字典中。4. 一个控制 型标签根据角色标识从字典中找出相应的内容,然后给这个内容执行一些动作,比如显示一个形体,或者播放一个声音。每个控制型标签都只指定一个唯一的标识。 相同的标识是不允许的。举个象征性的例子,第一个角色的标识是1,第二个角色的标识是2,依次类推。角色标识为0的是一个特殊的标识,被看作是空角色。控 制型标签并不是唯一指向字典的标签。定义型标签也可以指向多个角色来定义一些更复杂的角色。例如,定义按钮(DefineButton)和定义精灵 (DefineSprite)标签都是根据其它角色来定义它们的内容的。定义文字(DefineText)标签可以指向字体角色来为文字选择不同的字体。

附:Sprite一般都翻译为精灵,解释可以查相关的书籍,flash ,director等都有这个概念。
The following diagram illustrates a typical interaction between definition tags, control tags and the dictionary
以下的图示展示了定义型标签,控制型标签和字典之间的一个象征性的交互:
Processing a SWF File
处理一个SWF文件
Flash Player processes all the tags in a SWF file until a ShowFrame tag is encountered. At this point, the display list is copied to the screen and Flash Player is idle until it is time to process the next frame. The contents of the first frame are the cumulative effect of performing all the control tag operations before the first ShowFrame tag. The contents of the second frame are the cumulative effect of performing all the control tag operations from the beginning of the file to the second ShowFrame tag, and so on.
Flash播放器在一个显示帧标签到来之前会处理显示帧标签之前SWF文件的所有标签。在这个时候,播放列表被复制到屏幕上面,与此同时Flash播放器 在处理下一帧之前是空闲的。第一帧所显示的内容,是在第一个显示帧标签之前的所有控制型标签操作产生的累积效果。第二帧所显示的内容,是从文件开始到第二 个显示帧标签所有控制型标签操作产生的累积效果。以此类推。
File Compression Strategy
文件压缩策略
Since SWF files are frequently delivered over a network connection, it is important that they be as compact as possible. There are several techniques that are used to accomplish this. Here are some things to look out for
既然SWF文件在网络连接中传输得非常频繁,那它们当然是越紧凑越好。有很多技术可以实现这点。这是我们选中的几种有效的策略:
Reuse The structure of the character dictionary makes it very easy to reuse elements in a SWF file. For example, a shape, button, sound, font, or bitmap can be stored in a file once and referenced many times.
重用 角色字典的结构使得重用SWF文件元素非常容易。例如,一个形体、按钮、声音、字体或者位图,可以在文件中只存一次,但用到很多次。

Compression Shapes are compressed using a very efficient delta encoding scheme, often the first coordinate of a line is assumed to be the last coordinate of the previous one. Distances are also often expressed relative to the last position.

压缩 形体使用了非常有效的差值编码方法来压缩,经常直线的开始坐标是上一条直线的最终坐标。距离经常由上一个位置的坐标来表达。
Default values Some structures like matrices and color transforms have common fields that are
used more often than others. For example, for a matrix, the most common field is the translation field. Scaling and rotation are less common. Therefore if the scaling field is not present, it is assumed to be 100%. If the rotation field is not present, it is assumed that there is no rotation.
This use of default values helps to minimize file sizes.

默认值 有一些结构像矩阵和色彩变换都有一些共同的属性用得比其它的多。比如一个矩阵,最常用的属性就是平移属性,而缩放与旋转则用得相对少点。因此如果没有定义 缩放属性,就假定它的值为100%,如果没有定义旋转属性,就假定它的值为没有旋转。使用默认值可以使文件大小最小化。
Change Encoding As a rule, SWF files only store the changes between states. This is reflected in shape data structures and in the placemoveremove model used by the display list.

变化编码 作为一种规则,SWF文件只存储两种状态之间的变化。它由形体数据结构和播放列表中使用的定位/移动/移除模块反映出来。
Shape Data Structure The shape data structure uses a unique structure to minimize the size of shapes and to render anti-aliased shapes very efficiently on the screen.
形体数据结构 形体数据结构使用了一种独特的结构,使得形体的文件大小最小化,并且使得形体在屏幕上的平滑抗锯齿处理非常有效。
Summary
小结
A SWF file is made up of a header, followed by a number of tags. There are two types of tags, Definition Tags and Control Tags. Definition Tags define the objects known as characters,which are stored in the Dictionary. Control Tags manipulate characters, and control the flow of the movie.
一个SWF文件是由一个文件头,跟着一系列的标签组成的。标签类型有两种:定义型标签和控制型标签。定义型标签把所有物体定义成一个个角色,这些角色存在字典里面。控制型标签操作这些角色,并且控制影片的流程。

swf 文件研究——swf说明书

第一节:swf文件头信息

swf文件头包含的信息可谓巨大。能满足很多人的需求。也很容易来出来。

现在,开始:

Macromedia Flash文件格式(SWF)详细说明书

Macromedia Flash文件格式(SWF)(读作“swiff”)是Macromedia Flash播放器在互联网上进行矢量图形和动画发布的文件格式。SWF文件格式不是为图像编辑器之间共享图像而是为高效的解释格式设计的,它的设计是为了满足以下条件:

在屏幕上即时显示:此格式的最主要目标是在屏幕上即时显示和支持实例,彩色图像的快速播放,动画和交互式按钮。

可扩展性:此格式为标签式格式,因此其播放器能够通过增加新的特性来进行升级而兼容其播放器的早期版本。

网络发布:此格式能够在有限的网络资源和不可预测的网络状况下进行传输,文件被压缩到很小并且支持流式播放。SWF文件是一种二进制格式的文件,它不能像HTML文件一样可以直接阅读和理解。SWF文件使用了诸如位压缩、可选字段式结构等方法来减小文件的尺寸。

简易性:此格式简单的结构使Flash播放器变得很小且便于携带。另外,Flash播放器仅仅依赖操作系统特性中有限的集合。

文件独立性:文件的显示不依赖任何诸如字体之类的扩展资源。

可变性:文件能够在有限的硬件环境下很好的工作,而且能够尽可能的利用更好的硬件,这一点很重要,因为用户的计算机有着不同的显示器设置和色深。

速度:文件能够以很快的速度和很高的质量播放。

支持脚本:此格式包含了约定格式的标签,标签规定了堆栈式机器解释字节码的顺序。字节码支持 一种叫做ActionScript(动作脚本)的语言。Flash播放器规定了运行时的ActionScript(动作脚本)模式,此模式允许原始的绘 制、服务和Flash播放器特性之间相互作用。

SWF文件的扩展名为.swf,它是一种MIME(多用途的网际邮件扩充协议)类型的应用程序(X-Shockwave-Flash)。

SWF格式经历了若干个版本。在第5个版本中,SWF的标签设置经过了一次较大规模的充实和 完善。从第6个版本之后,文件格式变化较小,例如仅在ActionScript中越来越多的Flash新特性部分或者完全的被实现。因此,如果打算增加 SWF文件中使用较新特性的内容,那么就应该熟悉Flash播放器提供的ActionScript对象模型,对于这些最好的参考是O’Reilly的 《ActionScript: the Definitive Guide》,由科林·莫克出版社出版。

SWF文件头

      所有的SWF文件均以以下头部开始:

SWF文件头

字段 类型 * 说明

签字标识 UI8 标识字符:

“F”表示未压缩

“C”表示已压缩(版本6或后续版本)

签字标识 UI8 此标识通常为“W”

签字标识 UI8 此标识通常为“S”

版本 UI8 单字节文件版本数(例如,0x06表示版本6)

文件长度 UI32 整个文件的字节长度

帧尺寸 RECT 单位帧的尺寸

帧率 UI16 每秒的帧数,其16个位是按照8.8的格式表示的

帧数 UI16 影片的总帧数

* 此类型在基本数据类型一节中定义

文件头部是由一个三字节的标识符开始,为0x46、0x57、0x53(“FWS”)或者 0x43、0x57、0x53(“CWS”)其中之一。“FWS”标识符说明该文件是未压缩的SWF文件,“CWS”标识符则说明该文件前8个字节之后 (即文件长度字段之后)的全部数据为开源的标准ZLIB方式压缩。

ZLIB库所使用的数据格式在1950至1952年的请求注解, Internet标准文档(RFCS)中被详细说明。CWF文件压缩形式仅适用于版本6或者更高。

标识符之后是一个字节的版本号,这个版本号并不是一个ASCII码,而是一个8位的数字,比如,版本4用0x04标识,而不是ASCII码“4”(0x35)。

文件长度字段是整个包含文件头在内的文件字节长度,如果是未压缩的SWF文件(标识符 FWS),那么长度字段应该是和文件大小恰好匹配,如果是一个经过压缩的SWF文件(标识符CWS),那么文件长度字段是指文件经过解压缩之后的总长度, 因此它一般不会和文件大小匹配,使用未压缩的文件尺寸能够让解压过程获得更高的效率。

帧尺寸字段定义了影片的宽度和高度,它使用了RECT结构进行存储,这就意味着它的尺寸能够根据坐标编码所需的位数变化。帧尺寸的RECT结构使用的X和Y轴的最小值总为0。而X和Y轴最大值分别表示了宽度和高度(参阅位值的使用)

帧率是以帧每秒为单位的帧回放比率,此比率在SWF文件包含流式声音数据或者Flash播放器运行在低速CPU下时并不会得到保证。

帧数是整个SWF影片帧的总数量。

SWF文件结构

      文件头之后是一系列连续的标签数据块,所有的标签都共享一种通用格式,因此任何解析SWF文件的程序都能跳过它不能识别的数据块。块内数据能够指向当前一 个块内的偏移量,但不能指向其它数据块内的偏移量。这就使得标签能够被处理SWF文件的工具进行移除、插入或修改操作。

SWF文件格式

标签格式

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

记录头部(短)

字段 类型 说明

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

低6位:标签长度

注意:标签编码和长度字段并不是一个10位的位字段后面跟着6位的位字段,而是一个双字节的字,SWF文件不间断的字节排序使得这两者具有不同的布局。

该字段中的长度并不包含标签开始处的记录头部(即该字段所占有的长度)。

如果标签的长度大于或者等于63字节,那么它会被存储在长标签头部。长标签头部由一个标识长度为63字节(0x3f)的短标签头部和一个32位的长度组成。

记录头部(长)

字段 类型 说明

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

长度为63字节的标签编码和长度

长度 UI32 标签的长度

描述标签和控制标签

SWF中的标签分描述标签和控制标签两种:

描述标签这种标签描述了SWF影片的内容—形状、文本、图像、声音等等。每个定义标签都为其描述的内容指定了一个被称为“角色ID”的唯一ID。Flash播放器把这些角色存放在一种叫“字典”的库里。描述标签本身不能驱动某个事件的产生。

      控制标签这种标签可以创建和驱动字典中角色的实例,控制影片的播放。

SWF文件标签分类

      通常,SWF文件中的标签可以任意出现。但尽管如此,也必须遵循少数几个规则:

1、一个标签只能依赖前面定义过的标签。任何一个标签都不能依赖在才后面定义的标签。

2、描述标签必须在使用它的任何控制标签之前定义。

3、流式声音标签必须以顺序方式存储。不规范的流式声音标签将会导致声音播放不正常。

4、结束标签一般是SWF文件的最后一个标签。

字典

      字典是存放已经定义好的角色的库,它可以被控制标签所应用。字典的建立和使用应遵循以下规则:

1、描述标签定义了诸如形状、字体、位图或者声音。

2、每一个描述标签都被指定一个唯一的角色ID。

3、字典中的内容被存储在角色ID之后。

4、控制标签能够通过角色ID在字典中找到所需内容并对其执行某种操作,例如显示形状或者播放声音。

每个角色ID必须指定一个唯一的ID,不允许重复ID。例如,第一个角色ID是1,第二个是2。角色0被指定为表示空角色的专用ID。

并不是只有控制标签才能引用字典。描述标签同样也可以使用字典中的数据进行更复杂的角色定义。例如,按钮和剪辑标签都使用到了定义它们内容的角色。文本标签也包含了字体角色以便于为文本选择不同的字体。

以下图表说明了描述标签、控制标签和字典之间的一种典型交互关系:

* 详见显示列表

处理SWF文件

      Flash播放器会在遇到“显示帧”标签之前处理SWF文件中所有的标签。这样,显示列表将被复制到场景中,在处理下一个帧之前Flash播放器会一直处 于空闲状态。第一帧的内容是第一个显示帧之前的所有控制标签操作所积累的效果。而第二个帧的内容是第二个显示帧之前的所有控制标签操作所积累的效果,依此 类推。

文件压缩策略

      由于SWF文件在网络中的传输日趋频繁,那么文件被尽可能的压缩将是非常重要的。有几种方法可以达到此目的。以下提到几种方法:

      复用角色字典的结构能够让SWF文件的元素很方便的得到复用。例如,形状、按钮、字体或者位图可以被一次存储,多次引用。

      压缩当一条线的起始坐标被假定是前一条线的结束坐标的时候,形状能够使用一种非常有效的三角编码方式压缩。距离一般也使用与最后位置的相对关系来表示。

      默认值矩阵和颜色转换式通常拥有比其他结构更为通用的字段。例如:对于矩阵,转换字段是它最常用的字段,而缩放比例和旋转使用比较少。因此如果缩放字段没 有出现,那么它会被默认为100%。如果旋转字段没有出现,那么就假定没有旋转。使用默认值能够缩小文件尺寸。

      改变编码按规定,SWF文件只能将变化存放在状态之间。但显示列表使用的形状数据结构和位置、运动、移动模型却是相反的。

      形状数据结构形状数据结构使用了唯一的结构来减小文件的尺寸以及非常有效的在场景中播放实名形状。

概要

      SWF文件由头部和其后的许多标签组成。有描述标签和控制标签两种。描述标签定义了被视为角色的对象,它被定义在字典中。控制标签操作和使用角色,以及控制影片的流程。
分享到:
评论
1 楼 ongsh321 2011-01-11  
看英文的看的头疼啊,终于有好人翻译了

相关推荐

Global site tag (gtag.js) - Google Analytics