SWF文件格式2(中文翻译版)

来源:互联网 发布:js禁止文本框输入 编辑:程序博客网 时间:2024/05/16 07:29

接上一篇

SWF文件结构(SWF file structure)

文件头之后,就是一系列的Tag数据块。所有的Tag使用同一个格式。所以在用程序解析SWF的时候可以跳过不懂的Tag块。Tag块中的数据偏移量只能在自己的数据块内,而不能超出到其他Tag数据块。这个特性可以让我在处理SWF的时候,移除,插入或者修改Tag。文件属性Tag(FileAtrrributes tag)仅仅在SWF 8和之后的版本支持。![SWF 文件结构](http://img.blog.csdn.net/20160303153216377)

Tag格式

每一个Tag使用一个Tag类型和长度开头。Tag头可以是长类型或短类型。短类型的Tag头用于62个字节或更少的数据的Tag。长类型Tag头是用一个32位符号数来表示长度,可以用于高达2GB的Tag数据,远远高出目前实际使用的空间。

————————————————————————————————————————
Tag头(短)
字段 类型 注释
————————————————————————————————————————
TagCodeAndLength UI16 高10位:Tag类型
低6位:标签长度
————————————————————————————————————————
提示:TagCodeAndLength 是一个双字节的字,不是一个10位二进制后面跟着6位二进制。低位优先的编码顺序使得这两种布局不一样

如果一个标签是63字节或者更大,它将使用Tag长类型头。长Tag头由短Tag头+一个32位的符号整数

————————————————————————————————————————
Tag 头(长)
字段 类型 注释
————————————————————————————————————————
TagCodeAndLength UI16 高10位:Tag类型
低6位:固定为111111
Length SI32 Tag长度
————————————————————————————————————————

定义型和控制型Tag

Tag可以分为两种类型:定义型Tag和控制型Tag。定义型Tag 定义SWF 文件中的 shapes,text,bitmaps,sounds等内容。每一个定义型Tag分派了一个唯一的character ID来来指向它的内容。Flash Player 将这些character 存储在一个dictionary中。定义型Tag并不会主动去渲染。控制型Tag 创建dictionary中的character的实例,操纵其渲染,控制文件流。

SWF文件中Tag的顺序

一般而言,Tag可以以任何顺序存储在SWF文件中。然而,你必须遵循下面的规则:
  • FileAttributes Tag 必须是SWF文件中的第一个Tag(SWF8及之后的版本支持)。
  • Tag 依赖的Tag只能在文件中只能排在其前面,而不能后面。
  • 如果一个定义型Tag定义了一个character,一个控制型Tag对这个character有引用,那么这个定义型Tag必须排在这个控制型Tag之前。
  • 流媒体sound Tag必须是有序的,无序的将会导致播放错误。
    -End Tag必须排在SWF文件最后。

Dictionary

dictionary是用来存储已经定义过的character,供控制型Tag使用。构建和使用dictionary的过程如下: 1. 定义型Tag定义一些内容,例如shape,font,bitmap,或者sound。 2. 定义型Tag分派一个唯一的Character Id 给定义的内容。 3. 定义的内容以Character Id为键值存储在dictionary中。 4. 控制型Tag通过Character Id 来获取dictionary中定义好的内容,做一些操作,例如展示一个shape,或者播放一个声音sound。每一个定义型Tag必须指定一个唯一的ID,重复的ID是不允许的。代表性的做法:第一个Character Id 是1,第二个Character Id 是2,等等。0是特殊的会被当成一个null character。不仅仅是控制型Tag可以引用这个 dictionary。定义型Tag也可以通过dictionary中的character,来构建更复杂的character。见下图![这里写图片描述](http://img.blog.csdn.net/20160303174907197)

Processing a SWF file(处理SWF文件)

Flash Player会一直处理所有的Tag,直到遇到ShowFrame Tag。这时显示列表将会复制到屏幕上,Flash Player会保持空闲状态一直到进入下一帧。第一帧展示的内容由第一个ShowFrame Tag之前的所有控制型Tag循环处理后的最终表现。第二帧的内容由第二个ShowFrame Tag 之前的所有控制型Tag循环处理后的最终表现。依次下去。

到此第二章基本结束。

0 0
原创粉丝点击