SWF9文件格式规范中文翻译(一)

http://hi.baidu.com/zoujun1314/blog/item/42f09bfa01c8509c58ee907a.html

 

前言:
      最近很想用AIR开发一个游戏里自动生成SWF素材包的工具,所以需要了解清楚SWF文件的格式和结构。网上找了一下只有官方的英文文档,找不到比较完善一点的中文资料。所以索性自己翻译了一份,放出来跟大家一起分享。目前只翻译了Introduction、SWF File Format9、SWF File Format8三部分。官方的原文比较长,中间的SWF File Format 7、SWF File Format 6打算略过,后面会放上Basic Data Types的部分。文中的对于标签的讲述可能会视情况而定了。

作者:闪刀浪子 http://www.iflashigame.com    http://hi.baidu.com/mr_ziqiang 
原文:swf_file_format_spec_v9.pdf
Swf文件格式规范参考:http://blog.csdn.net/alenwelkin/archive/2008/02/12/2088719.aspx 作者kk
介绍章节其他部分参考:http://blog.csdn.net/flashvan/archive/2004/09/30/121482.aspx 作者:AOL

介绍

SWF文件格式规范
      SWF格式(念"swiff")主要用于在互联网上传递矢量图、文本、视频和声音,且能被Adobe Flash Player软件支持。它被设计为一种高效的传输格式,而不是用于图形和图形编辑器的交换格式。以下是它的设计目标:


适合屏幕显示——需要适合屏幕显示同时支持抗锯齿。能够快速渲染各种颜色格式的位图、动画和交互按钮。(ps:比如ARGB、RGBA等)

易于扩展——使用标签格式,让他能够很容易保证与Flash Player之前的版本兼容同时又能够随意扩展新的特性。

方便网络传输——要能够在有限或者不确定的带宽下传输。文件使用压缩来减少尺寸同时支持流式渲染。采用的是二进制格式的标签而不是像HTML一样的可读性标签,同时使用了bit-pack(ps:相当于内置一些编译好的二进制)和标记位结构(structures with optional fields)的技巧来让文件跟小。
(ps:标记位结构表示用一个字节中的某几个位来作为标记,比如:某字节的二进制位:10001010,最高位的为1表示某个标记位true,如果为0表示某个标记位false)

简单——这种格式需要尽量简单以使他的播放器小一点容易实现。同时他还必须尽量少依赖操作系统的特性,方便跨平台。

文件独立——这种文件的现实不要依赖像字体这样外部的资源

可伸缩性——在有限硬件条件下能够运行,同时在硬件条件好的情况下能够充分发挥硬件优势。这一点很重要因为计算机有不同的显示分辨率和处理能力。

迅速——高速、高质量的渲染。

脚本实现——这种格式包含各种标签,标签提供堆栈机解释需要的字节码。字节码支持ActionScript 语言。Flash Player 提供运行时的ActionScript 对象模型允许Flash Player的图元、服务交互。

      SWF文件使用.swf作为扩展名,application/x-shockwave-flash为MIME类型。

      SWF格式经历了几个版本。直到SWF5才真正明确了SWF标签设置。SWF6及后面的版本改变很小,一些新的特性部分或者全部在ActionScript脚本层实现。(ps:底层不怎么变了)从SWF9开始,AS3使用了新的虚拟机。任何打算使用新特性来生成swf文件内容都需要熟悉Flash Player公开的ActionScript 对象模型(ActionScript object model)。更多的信息请参考“ActionScript3.0编程”,“ActionScript 3.0语言参考”和Adobe Action Script 虚拟机2的概览。(www.adobe.com/go/avm2overview/ )

 

SWF文件头

      所有的SWF文件都由文件头开始。数据类型定义请阅读后面的“基本数据类型”章节。
    (类型中U表示无符号,I表示整型。下面的UI8表示占8位二进制的无符号整型)

SWF文件头

字段

类型

说明

标志

UI8

标志字节:

如果是“F”表示未压缩,如果是“C”表示压缩(SWF6之后才有

标志

UI8

始终为"W"

标志

UI8

始终为"S"

版本号

UI8

一个字节的版本号(如0x06表示SWF6)

文件长度

UI32

完成文件的长度有多少字节

显示尺寸

RECT结构

以twips为单位的显示尺寸,20twips=1px,Rect结构请阅读后面的基本数据类型章节。

帧速

UI16

每秒的帧速,通过一个8.8小数方式显示。(整数和小数各占8位)

帧总数

UI16

文件中帧的总数。

      文件头都是由三个字节开始的0x46,0x57,0x53(“FWS”);或者0x43,0x57,0x53(“CWS”)。FWS表示文件没有压缩,CWS表示第8个字节后面是经过ZLIB开放标准压缩的(文件长度字段后面)。SWF6之后的版本才开始使用压缩。

      版本号占一个字节紧跟在标志之后。版本数字不是一个ASCII字符而是一个8位的数字。例如SWF4,版本号字节为0x04,而不是ASCII字符“4”(0x35)。

      文件长度字段记录SWF文件的总长度,包括文件头。对于未压缩的swf文件(标志位FWS),文件长度字段的数值跟该文件长度一致。而对于压缩的swf文件(标志为CWS),文件长度字段的长度表示第8个字节之后的数据解压缩之后的长度。(ZLIB标准)

      显示尺寸字段定义了屏幕显示的宽度和高度。这个字段使用一个RECT结构来存储(一种可变长度的存储结构,详细信息看基本数据结构中对于RECT的介绍),这表示它的占位长度会根据bits的描述来随时改变。显示尺寸字段的RECT结构的Xmin和Ymin通常为0;Xmax和Ymax定义宽度和高度。

      帧速字段定义了每秒的播放速率。这个速率无法绝对保证,比如CPU忙的时候或者慢的时候。

      帧总数定义了SWF文件的总帧数。(ps:注意到没有?只有16位,那么帧总数的极限只能是65535帧了)

 

SWF文件结构

      文件头之后是一系列的标记的数据块(ps:一般成为标签Tag)。所有的标签(Tag)都使用公用的格式,所以程序在分析SWF文件的时候都可以跳过一些不明确的数据块。数据块里面的数据可以定位到内部的偏移位置,但是不能定位到其他块中的偏移位置。(ps:主要是保证Tag间相互独立,记得flash的设计灵感是来自乐高积木的。不同的Tag相当于不同的积木块。)这样的方式使我们可以在处理SWF文件的时候通过工具移除、插入、编辑标签。

SWF文件结构图


FileAttributes 标签在SWF8之后才需要。

 

标签格式

      每一个标签的开始都是标签的类型和长度。标签头可以是短标签头类型也可以是长标签头类型。短标签头类型用于数据在62字节之内的标签。如果标签的数据长度不超过62个字节使用短标签。而长标签头类型可以用于数据在4G之内的任何标签。

标签头记录(短类型)

字段

类型

说明

TagCodeAndLength

UI16

高10位表示标签类型

低6位表示标签长度

注意事项

TagCodeAndLength字段是一个两个字节的字,而不是一个10位的字段跟随一个6位字段。SWF使用低位在前(little-endian)造成上述两种情况是不同的。

(ps:如果TagCodeAndLength字段的十六进制是 43 02 那么实际上的值是0234 二进制为 00000010 01000011 前10位的值是9 表示这是一个SetBackgroundColor标签)

      标签的长度不包括标签头记录自己的长度,仅表示其后面数据的长度。

      如果标签为63字节或者更长,它将存储为一个长标签头的类型。长标签头可以看成一个标签长度为0x3f的短标签跟着一个32位的长度。(ps:这表示只要TagCodeAndLength中的后6位的值为0x3f,那么肯定是一个长标签头类型。)

标签头记录(短类型)

字段

类型

说明

TagCodeAndLength

UI16

高10位表示标签类型

低6位始终为0x3F

Length

SI32

标签的长度

 

定义型标签和控制型标签

Swf文件有两类标签:定义型和控制型

      定义型标签定义SWF文件的内容如Shapes、文本、位图、声音等等。每一个标签会为定义的内容分配一个唯一的编号称做角色编号(character ID)。之后Flash Player 将角色(character)存储在称作字典(dictionary)的仓库。定义型标签本身不产生渲染。

      控制型标签创建和操作已渲染的字典中角色的实例,同时控制文件流程。

 

SWF文件中标签(Tag)的排序

一般来讲,SWF中的标签(Tag)可以随意排序。但是必须遵循以下规则:
1、如果是SWF8之后的版本则FileAttributes 标签必须为第一个标签
2、标签仅依赖之前的标签,而不依赖后面的标签。(ps:我的理解是后面需要用到的内容始终会在前面先定义,跟下一条控制型标签的规则类似)
3、角色的定义标签必须出现在引用他的控制型标签之前。
4、声音流标签必须有序。无序的声音标签会导致播放时也无序。
5、结束标签始终在SWF文件的最后

 

基于PWM的汽车仪表步进电机微步驱动优化实践 本文深入探讨了基于PWM的微步驱动技术,用于优化汽车仪表步进电机的运行性能。通过将传统的分步驱动升级为PWM微步细分驱动,利用正弦/余弦查表法合成旋转磁场,有效消除了指针抖动与噪声,实现了指针的平滑、精准运动。文章以STM32和VID2905电机为例,提供了详细的硬件连接、代码实现及高级优化技巧,为提升汽车仪表体验提供了实用方案。 阅读详情

相关推荐

面向边缘计算的YOLOv12模型剪枝-蒸馏联合优化实战教程**

这套剪枝-蒸馏联合方案的优势在于其系统性和可靠性。它不是单的技巧,而是套完整的工程流程,确保了从研发到部署的无缝衔接。

FJN110的博客 140

SWF文件格式V9规范

SWF文件格式V9规范,中英文版,PDF清晰版。

全面解析SWF播放器及其应用

现代SWF播放器往往提供皮肤和布局的自定义功能。这意味着用户可以根据自己的审美偏好调整播放器的外观,包括颜色主题、按钮样式和布局结构等。开发者通常会提供个配置文件,或者允许用户通过个配置界面直接选择和保存自己的播放器风格。自定义皮肤功能不仅增加了用户的个性化体验,而且对于品牌来说,还可以通过定制化的播放器外观来提升品牌形象。// 伪代码:播放器皮肤切换逻辑// 根据提供的皮肤名称应用新的播放器外观// 用户界面上的皮肤选择按钮});在上述示例中,的data-skin。

weixin_29155599的博客 673

swf文件格式解析(

SWF文件格式规范 适合屏幕显示——需要适合屏幕显示同时支持抗锯齿。能够快速渲染各种颜色格式的位图、 动画和交互按钮。(ps:比如ARGB、RGBA等) 易于扩展——使用标签格式,让他能够很容易保证与FlashPlayer 之前的版本兼容同时又能 够随意扩展新的特性。 方便网络传输——要能够在有限或者不确定的带宽下传输。文件使用压缩来减少尺寸同时支 持流式渲染。采用的是二进制格式的标签

yaonai2003的专栏 3647

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

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

yjh0628的专栏 1050

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

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

AOL's Web Log 1万+

SWF9文件格式规范中文翻译(二)

http://hi.baidu.com/zoujun1314/blog/item/4bf0191329de14dbf6039e46.html   字典是定义的角色的存储仓库,给控制型标签使用。字典的创建和使用的流程是这样的:1、定义型标签定义内容,像形体、字体、位图或者声音。2、定义型标签给内容分配唯的角色编号(CharacterID)3、根据角色编号把内容存储到字典中。4、控制型标签使用角...

AS3 331

swf 解析

引用:http://blog.sina.com.cn/s/blog_6859df370100wtk4.html 概述 SWF 文件是由个文件头,和跟在后面的系列的标签组成。标签有定义型标签和控 制型标签两类。定义型标签把对象定义为角色存储在字典里,控制型标签操作这些角色并控 制影片的流程。 如下图 上回合已经解析完文件头 本会合接着解析Tag 首先,官方理论知识补充 定义型...

weixin_33859231的博客 423

Embed标签嵌入SWF两种写法

[Embed(source='路径',symbol='类名')] [Embed(source='路径#类名')]

小白·菜 586

网页中嵌入swf文件的几种方法

1. object + embed       传统的方法 优点:浏览器兼容性好,是 Macromedia 直以来的官方方法 缺点: a.embed 标签是不符合 W3C 的规范的,无法通过验证。当然,如果你不在乎什么规范规范,另当别论。 b.微软由于种种原因,在 sp2 后限制了 IE 的 ActiveX 的使用模式,就是在页面中的 ActiveX 有个虚框,需要用户点击次才能正

lake1314的专栏 2万+

翻译:SWFObject 2.0官方文档(用来做flash的js)

http://www.cnblogs.com/taobataoma/archive/2008/04/15/1154019.html 转载于:https://www.cnblogs.com/blosaa/archive/2011/10/07/2200401.html

weixin_34375233的博客 120

swf tag 学习笔记

Swf 6 版本tag功能表            Control Tags

dingding1984的专栏 1038

页面中调用swf 时allowScriptAccess 参数

<param name="allowScriptAccess" value="always" /> <param name="allowScriptAccess" value="always" /> 使用 allowScriptAccess 使 Flash 应用程序可与其所在的 HTML 页通信。此参数是必需的,因为 fscommand() 和 getURL() ...

No8g攻城狮的博客 3142

关于SWF文件格式些说明

SWF文件头结构如下: 字段            类型           说明 标识            8位             表示文件是否被压缩("46" F 为没有压缩,"43" C 为被压缩)。 标识            8位             总是 "57" W。 标识            8位             总是 "53" S。 版本号

lake1314的专栏 5158

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

本文翻译自Adobe官方公布的SWF File Format Specification Version 10 这里附上英文版下载地址: http://bbs.9ria.com/forum.php?mod=viewthread&tid=17207&highlight=swf%2Bfile*本文纯属个人之作,如果文中发现错误请留言提出。第章基本讲得都是数据定义,后面讲解时,我们用到再解释说明,因

w2h的专栏 1339

个例子:解说swf文件的Header Tag DefineBitsJPEG2 DoAction DefineSound

个能用16位查看东西的软件,打开swf。我使用的是ultraedit-32,习惯了。哈哈 你就能看到组16进制的数据。 46 57 53 08 c4 f1 5e 00 80 00 02 51 c0 00 01 96 40 00 00 1e 01 0044 11 00 00 0043 02 ff ff ff...

a543513的博客 285

从区间加次函数到区间加多次函数最值-----区间数据结构与函数的些东西(《浅谈函数最值的动态维护》的学习笔记)

如果允许中途修改某个函数的值,我们可以把每个叶子看成“时间线”上的分段函数:初始函数,然后每次修改后换成新函数。增大到超过某个节点的击败时间,就递归进入这个节点,更新它的最优函数,并重新计算新的击败时间。,我们都找到那堆函数里值最大的哪个,把这些最高点连起来,就得到了条曲线,就是上包络线。我们把上包络线从左到右看,没遇到段,就记下是哪个函数最高,得到个数字序列。注意到任何两个不同的函数,它们在最大值上的上的交替次数是有限的。显然这条曲线是分段的,不同的x的范围可能处于不同的函数。

hao12345i的博客 447

数据结构——绪论

算法评估和时间复杂度计算。摘要需简洁概括。注意字数限制。</think>本文介绍了数据结构的基本概念,包括数据元素、逻辑与存储结构,并讲解了算法评估标准,重点阐述时间复杂度的分类与计算方法,通过单层、嵌套及多层循环例题演示求解步骤,为后续学习奠定基础。

2301_80687320的博客 206

基于Qt5_11_3框架与PLC_Handler通信库的Windows工业自动化数据交互工具开发与实现

本论述聚焦于款专为工业自动化领域设计的数据通讯软件,该软件依托Qt5_11_3图形界面框架与PLC_Handler通讯协议库构建而成。其开发与编译工作均在Microsoft Visual Studio 2015的32位版本集成开发环境中完成,确保了软件在Windows平台上的兼容性与运行效能。Qt5_11_3框架在此项目中负责构建用户操作界面与处理交互逻辑。该框架以其模块化架构与高效的图形渲染能力,为开发者提供了便捷的界面设计途径与灵活的功能扩展可能。PLC_Handler通讯库则封装了与各类可编程逻辑控制器进行数据交换的底层协议与复杂流程,其设计重点在于提供套标准化的操作接口,以兼容多种主流PLC品牌与型号,从而显著降低了通讯程序开发的复杂度。软件的核心能力在于实现与PLC设备之间稳定、高效的数据传输与控制指令下发。功能范围从基础的数据点读写,延伸至复杂的逻辑序列控制。通过支持多线程并发处理,软件能够在执行数据交互任务时维持系统整体的响应敏捷度与运行稳定性。同时,其内置的实时数据监视界面,为现场操作人员提供了直观的生产状态可视化与即时控制入口。该工具的应用场景广泛覆盖现代工业体系,包括但不限于离散制造流程、能源输配监控、智能建筑管理及物流运输系统等领域。其部署有助于实现生产设备的集中化管控与自动化数据采集,从而提升整个工业系统的信息化与智能化程度。随软件并提供的技术文档与使用指南,为使用者深入理解软件功能架构与掌握具体操作方法提供了必要的参考资料。资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!

上一篇: [转]比较全的色彩模式之间的转换算法
下一篇: SWF9文件格式规范中文翻译(二)
iteye_20805
博客等级 码龄8年 13粉丝 689原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值