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文件由头部和其后的许多标签组成。有描述标签和控制标签两种。描述标签定义了被视为角色的对象,它被定义在字典中。控制标签操作和使用角色,以及控制影片的流程。
第一章 Macromedia Flash(SWF)第7版文件格式的新特征
       在这一章将描述SWF规范第7版本中的新特性
ActionScript(动作脚本)的扩展
       新的ActionScript(动作脚本)字节码是在已经存在的“动作定义函数”的基础上扩展的“动作定义函数2”,它现在允许函数在寄存器里保存参数和局部变量。(版本7中“动作定义函数”字节码已经很少被用到,它将会在以后的版本被“动作定义函数2”代替)。“动作定义函数2”也使用了创建控制器和通用变量this、arguments、super、_root、_parent和_global的存储。为了支持这些改进,动作存储寄存器使用“动作定义函数2”字节码现在能够访问多达256个寄存器。
       为了改进并遵从ECMA-262标准的ActionScript(动作脚本),和对面向对象程序设计提供更多的支持,版本7引入了ActionExtends(动作扩展)、ActionCastOp(动作计算操作)和ActionImplementsOp(动作实现操作)。这些文件格式的改变是为了支持ActionScript2.0。ActionExtends提供了创建两个类间的子类和超类关系的能力。通过ActionCastOp,Flash播放器版本7或者之后的版本能够将一种类型的对象转换成另一种。ActionImplementsOp为ActionCastOp指定了对象实现的接口。
       版本7中ActionInstanceOf将反映出对象是否实现了一个接口。
       ActionScript(动作脚本)目前通过AcitonTry和ActionThrow字节码来进行异常处理。ActionTry声明了异常条件的操作,而ActionThrow可以抛出一个已经被抛出的错误的值。
新的视频格式
       Flash播放器版本7简单的支持一种新的被称作“屏幕视频位流格式”的无损视频编码,它能够让动作以最优化的方式显示在计算机屏幕。屏幕视频像Sorenson H.263位流格式,能够同时用于SWF文件和FLV文件。
       Flash播放器版本7能够直接回放FLV文件,而不使用RTMP协议或者Flash Communication MX服务器。
运行时ActionScript控制
       新的ScriptLimits标签提供了最大递归深度和脚本超时之前的控制。
实例:
初次接触这个问题是为了完善我自己做的flashplayerV1.02的最后一个功能,也就是EXE<->SWF的转换功能.当时并不知道 文件转换机制是什么,更对SWF文件格式也一窍不通.^_^我相信也有好多朋友和我遇到了一样的问题吧,以下就我自己积累的一些经验,以及别人对我的帮 助.来谈一谈这个问题:

首先.我们来看一下SWF文件头格式以下为我的资料收集)
以一个实际的SWF文件头为例:

[Copy to clipboard] [ - ]

CODE:

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

字节 1-3 (46 57 53): SWF文件头标志,FWS表示未压缩,CWS表示压缩的SWF文件,需要从第9个字节起用ZLib解压
字节 4 (05): Flash文件的版本,这里表明它是用Flash5生成的字节 5-8 (B4 66 07 00):一个Integer表示文件的长度,低在前,高在后,这里是$000766B4 = 485044字节,这里应该等于未压缩的SWF文件实际大小或压缩过的SWF解压后的长度+文件头(8字节)

字节 9 - 。。。: SWF显示区域,(左上角坐标,右下角坐标),用下面的方法计算得到:第9字节前5位

[Copy to clipboard] [ - ]

CODE:

(70 shr 3 = 14)

,以后的字节以14位进行分割,所需位数为

[Copy to clipboard] [ - ]

CODE:

14*4+5 = 61

,需要 8 个字节来表示,那么:

[Copy to clipboard] [ - ]

CODE:

70 00 0F A0 00 00 BB 80
01110 00000000000 00001111 10100000 00000000 0000000 010111011 10000000
01110 00000000000000 01111101000000 00000000000000 01011101110000 000
14 0 8000 0 6000

因为Flash的坐标是TWIP格式的,需要除以20的,所以实际为(0,400,0,300)
接 下来的两字节 (00 0C):表示帧速率,前一字节表示小数位,后一字节表示整数位,不过一般极少有小数位的帧率,所以一般我们只计整数就可以了,这里 $0C = 12,即每秒12帧再接下来的两字节 (9F 03):表示总帧数,WORD类型,$039F=927帧,与ShockwaveFlash.TotalFrames 得到的数值是一样的。
再后面的数据是SWF的实体数据

接 着:我们来看EXE文件的真正面目.其实EXE的SWF并不存在什么文件格式转换的问题,SWF文件之所以能变为EXE文件,无非是加入了一些流的操作罢 了.下面让我们看看EXE文件的由来,简单的说: EXE格式的SWF文件不过是一个Flash播放器程序后面跟着一个SWF文件,两个文件写在一起,然后再在文件末尾写入SWF文件的大小和 “FA123456”标示。故SWF->EXE的转换机制其实就这么简单.
而EXE->SWF呢,无非就是从文件末尾得到内嵌的SWF文件大小,然后新建一个空白的扩展名为.swf的文件,把内嵌的SWF文件写入这个新文件就可以了!

Macromedia Flash文件格式(SWF)详细说明书相关推荐

  1. Macromedia Flash MX 2004 V7.01 简体中文版下载地址及例视频教程(swf版)

    Macromedia Flash MX 2004 V7.01 简体中文版 软件大小:48.65 MB 软件语言:简体中文 软件类别:国外软件 / 动画制作 运行环境:XP, 2000, NT, Win ...

  2. 网页中插入FLASH(swf文件)的html代码

    一.简单插入flash图像 <embed src="你的flash地址.swf" width="300" height="220"&g ...

  3. flash脚本语言详细解读

    flash脚本语言详细解读 - Go to 跳转到指定的帧 - Play 播放 - Stop 停止 - Toggle High Quality 在高画质和低画质间切换 - Stop All Sound ...

  4. pyqt5界面打开flash(.swf)文件

    最近发现了一个挺厉害的人工智能学习网站,内容通俗易懂,风趣幽默,感兴趣的可以点击此链接进行查看:床长人工智能教程 废话不多说,请看正文! 打开flash文件 网上关于pyqt5的内容特别少,对于查找一 ...

  5. 在vue中使用海康插件实现视频监控视频直播方法二(RTMP流加Flash加swf)

    在vue中使用海康威视实现视频监控,视频直播方法二(RTMP流加Flash加swf) 第一步 用npm装这个几个包 "video.js": "^6.6.0",& ...

  6. CW3002GAAS规格书|CW3002GAAS详细说明书|CW3002GAAS代理

    CW3002GAAS规格书|CW3002GAAS详细说明书|CW3002GAAS代理 CW3002GAAS概述 CW3002GAAS是USB专用充电控制器IC,完全兼容BC1.2和其他非BC1.2标准 ...

  7. flex加载外部swf文件[flex-swf and flash as3 swf],并且互相通讯-加强原来的帖

    第一步:建立加载类[CtmObjLoader],此类可以加载文件类型 [图片文件或swf文件] package { import flash.display.DisplayObject;  impor ...

  8. html插入swf自动播放,[转载]网页中插入FLASH(swf文件)的html代码

    一.简单插入flash图像 width="300" height="220"> 二.调整插入flash图像 align="right" ...

  9. flash调用swf文件服务器,浏览器如何加载Flash文件? (SWF)

    加载Flash文件有很多部分,更常见的是HTML页面. 我将从HTML页面的顶部开始,我敦促其他人纠正我可能犯的任何错误. 加载页面 当收到HTML页面时,浏览器会将其解析为文档对象模型(DOM),以 ...

最新文章

  1. 区块链论文:去中心化证人共同签名,让认证者诚信或被发现
  2. Linux学习笔记十四周一次课(5月9日)
  3. [zz]Ubuntu建立本地源实用案例
  4. (04741)计算机网络原理,04741计算机网络原理真题_成都英才教育网
  5. 快评《19家网站内容低俗被曝光》
  6. 分享Silverlight/WPF/Windows Phone一周学习导读(1月9日-1月16日)
  7. Couchbase 101:从Java应用程序创建视图(MapReduce)
  8. oracle字符串使用函数,oracle函数大全-字符串处理函数
  9. 程序员创业其实相比其他行业也有一些优势
  10. 区块容量 以太坊 比特币
  11. 1024,今天给大家发100个现金红包和思否课程、掘金小册
  12. 432考研_贾俊平《统计学》第1章 导论思维导图
  13. 集体心智:社会网络拓扑塑造集体认知
  14. redis从入门到入魔
  15. saas(sccs)、less、stylus三者的区别
  16. 全新设计 水果忍者-穿靴子的猫官方中文版首发
  17. 【XSY3657】因数分解(容斥,DP)
  18. js 按钮实现跳转页面 jsp html
  19. 子类拷贝构造是否会调用父类的拷贝构造?
  20. RHCE(逻辑卷LVM,NFS服务)

热门文章

  1. 李开复给中国大学生的第一封信—从诚信谈起
  2. 把备考高项当成项目:我的信息系统项目管理师项目实施方案
  3. Python笔记_13_推导式_集合推导式_字典推导式_生成器
  4. WORD文档如何在页眉页尾显示 page X of Y
  5. vue设置TDK及语义化
  6. 顶加载天线(圆盘)的设计与仿真
  7. 下载到的电子书格式是epub,这种格式如何打开?
  8. iOS15第二个测试版发布!修复大量bug,稳定性提升
  9. EBS OAF开发中属性集(Attribute Set)的介绍和手工实现
  10. 开机棒 局域网 linux,向日葵开机棒(局域网版)开机攻略