跳到主内容

SWF 版本:从 Flash 1 到 Player 时代

作品页的 Flash 5 不是制作软件版本。这个数字藏在 SWF 文件头里,也串起了 Flash 格式一路长大的过程。

Flash 保存计划 · 最近整理于 2026年7月30日

本文目录 · 3 节
  1. 一条时间线:SWF 1–20
  2. 这个数字能告诉我们多少
  3. 相关词条

作品页上写着“Flash 5”或“Flash 9”,这里说的是 SWF 文件格式版本。拆开一只 SWF,这个数字就在文件头第四个字节。播放器会先看它,再决定用哪一代规则读后面的标签、字符串和脚本。

前三个字节是 FWSCWSZWS,紧接着就是 Version0x05 是 SWF 5,0x09 是 SWF 9。再往后,才轮到文件长度、舞台、帧率、帧数和一长串标签。

本站把这个字节原样记进 header.swf_version,页面上再写成“Flash N”。版本也会参与解析:SWF 6 起的字符串用 UTF-8;更早的中文文件,则要照顾当年的系统代码页。

四个名字常常挤在一起:SWF 版本管文件格式,Flash Player 版本管运行环境,Flash Professional、Flex 是制作工具,AVM1 / AVM2 又是脚本虚拟机。它们一路相伴,却各自回答不同的问题。

制作工具可以选择发布目标,所以新版 Flash Professional 或 Flex 也能导出较早的 SWF。ProductInfo 里若写着“Adobe Flex 3.1”,说的是谁生成了文件;文件头里的 SWF 版本,说的是它最后选择了哪套格式。

页面上的 AS2 / AS3 另看 DoActionDoInitActionDoABCFileAttributes。本站暂时把传统 AVM1 动作都放在 AS2 这一栏,所以很早的 SWF 也可能显示 AS2;遇到这种情况,把它读成“AVM1 一代”更贴切。

一条时间线:SWF 1–20

下面挑的是每一代最容易认出的变化。SWF 1–10 与 Flash Player 主版本大体同号;到了 Player 10.1 前后,两套数字便渐渐错开了。

SWF 版本 同期 Player 目标 这一代带来了什么
SWF 1 Flash Player 1 基础时间轴、形状、位图、文字和声音等早期标签;未压缩 FWS
SWF 2 Flash Player 2 DefineShape2 扩展形状样式数量与多样式表能力。
SWF 3 Flash Player 3 DefineShape3 为颜色加入透明度;DefineSprite 支持独立影片剪辑时间轴;已有简单的 11 条动作模型。
SWF 4 Flash Player 4 动作模型加入表达式、变量、条件分支与循环;MP3 成为可识别的声音格式。
SWF 5 Flash Player 5 动作模型加入 JavaScript 风格对象模型、数据类型、函数及更多数学和栈操作;出现资源导出 / 导入等标签。
SWF 6 Flash Player 6 可使用 CWS + zlib 压缩;版本相关字符串统一为 UTF-8;加入视频、DoInitAction 和新的剪辑事件。
SWF 7 Flash Player 7 AVM1 继续扩展,例如 ActionExtends;加入 ScriptLimitsSetTabIndex
SWF 8 Flash Player 8 FileAttributes 成为必需的首个标签;DefineShape4、滤镜、混合模式、焦点渐变和高级文字渲染扩展视觉表达。
SWF 9 Flash Player 9 FileAttributes.ActionScript3DoABC 开始承载 AVM2 / ActionScript 3;仍可发布 AVM1 文件。
SWF 10 Flash Player 10.0 FileAttributes 增加 Direct Blit / GPU 相关能力,形状与位图继续扩展;动作模型本身没有变化。
SWF 11 Flash Player 10.2 编号开始与 Player 产品号错开;PlaceObject3 可记录可见性与不透明背景等新增字段。
SWF 12 Flash Player 10.3 对应新的运行时目标;这一阶段许多新能力转由 ActionScript API 提供。
SWF 13 Flash Player 11.0 ZWS + LZMA 外层压缩从这一版起可用;进入 Player 11 世代。
SWF 14 Flash Player 11.1 / AIR 3.1 随 Player / AIR 小版本推进,主要建立运行时行为与 API 的版本边界。
SWF 15 Flash Player 11.2 / AIR 3.2 Player / AIR 的下一发布目标。
SWF 16 Flash Player 11.3 / AIR 3.3 Player / AIR 的下一发布目标。
SWF 17 Flash Player 11.4 / AIR 3.4 “Player 11.4 对应 SWF 17”,两套编号的错位到这里已经很明显。
SWF 18 Flash Player 11.5 / AIR 3.5 继续对应运行时小版本目标。
SWF 19 Flash Player 11.6 / AIR 3.6 Adobe 第 19 版公开 SWF 文档覆盖到这一目标;这里没有一款“Player 19”。
SWF 20 Flash Player 11.7 / AIR 3.7 后续目标版本之一;SWF 编号并未止于 20。

Flash 1–5:格式快速扩张

SWF 5 以前,标签集合长得很快。回头看这几版,几乎能看见 Flash 从线性动画容器变成可编程平台:SWF 3 的动作还是播放、停止、跳帧和打开 URL;SWF 4 有了栈式表达式、变量、分支和循环;SWF 5 又添上对象、类型与函数。当然,格式里有这套能力,不代表每只文件都会用——纯动画 SWF 5 完全可能没有 DoAction

Flash 6–8:编码、媒体与视觉能力

SWF 6 是整理旧档时很实用的一条分界线:主体可以用 zlib 压缩,字符串转向 UTF-8,内嵌视频也登场了。SWF 7 继续补充脚本和可访问性控制。到 SWF 8,滤镜、混合、渐变、描边和字体渲染都丰富起来,FileAttributes 也固定在标签流开头。

这就是版本不能只当年代标签看的原因。同一串字节放在 SWF 5 和 SWF 6 里,字符串解码可能不同;一些记录的字段和有效位也会跟着版本变化。

Flash 9:AVM2 是一次真正的断代

SWF 9 带来 DoABC,里面装的是 ActionScript Virtual Machine 2(AVM2)读取的 ABC 字节码。FileAttributes 里的 ActionScript3 位一旦设下,播放器就走 AS3 路线,传统 DoAction / DoInitAction 会被忽略;一只 SWF 也不能混用两套脚本模型。不过作者仍可把 SWF 9 发布成 AVM1 文件,所以本站把格式版本和脚本代际分开显示。

Flash 10 与后续 SWF 版本

SWF 10 之后,新能力越来越多地出现在 ActionScript 层,文件格式的数字则像一道道运行时边界。SWF 10 的动作模型甚至没有变化。Player 10.2 对应 SWF 11,10.3 对应 SWF 12,Player 11.0 又对应 SWF 13;往后每个 Player 11.x 小版本继续推高 SWF 号。于是 SWF 14–20 的差别,常常不像早年那样一眼就是一批新标签,但播放器仍要靠它选择相应的行为和 API。

这个数字能告诉我们多少

swf_version 是制作工具留给播放器的一条起跑线。播放器会按它保留一些旧行为,但媒体 codec 和 ActionScript API 还有自己的版本条件,主文件也可能临时加载别的 SWF、字体、图片、声音或视频。只看这一个字节,算不出精确的“最低播放器”。

旧档里偶尔还能碰到不太规整的组合:转换器改过,文件被手工补过,或者单纯已经损坏,于是较低的版本头后面跟着较新的结构。Ruffle 遇到版本过低却使用压缩的文件也会提醒。真要判断能否完整播放,还得继续看标签、脚本虚拟机、媒体、外部依赖和安全沙箱。

也别指望把这个字节改小,就能让新内容回到旧播放器。标签、字节码和 codec 并没有跟着变,反而可能被按错规则读取。至于作品大小和复杂程度,版本更管不着:一帧小动画可以发布成新版本,一只庞大的游戏也可能安稳地待在 SWF 5。

相关词条

这些资料从哪来

  1. Adobe SWF File Format Specification, Version 19
  2. Adobe Flash Professional CS6 Help
  3. Adobe:Developing Native Extensions for Adobe AIR
  4. Apache Flex:Versioning
  5. Ruffle:SWF version chart
  6. Ruffle:SWF reader implementation