如何确定发布 swf 的 Flash 播放器版本是啥?

Posted

技术标签:

【中文标题】如何确定发布 swf 的 Flash 播放器版本是啥?【英文标题】:How can I determine what flash player version a swf was published for?如何确定发布 swf 的 Flash 播放器版本是什么? 【发布时间】:2011-05-20 01:53:15 【问题描述】:

我有一个来源不明的 SWF,我需要知道它发布时针对的是哪个 Flash 播放器版本。我如何获得这些信息?

【问题讨论】:

【参考方案1】:

SWF 文件中的第 4 个字节携带版本号,例如 0A 代表 Flash Player 10。

编辑:由于对这个问题很感兴趣,我决定提供更多反馈

任何 SWF 文件的前 8 个字节都不会被压缩,文件的其余部分可以通过 zlib 压缩进行压缩(或不压缩)。

第一个字节:“F”(未压缩)或“C”(压缩)。 第二个字节:总是'W'。 第三个字节:总是'S'。 第 4 个字节:版本号(09 表示此文件针对 Flash Player 9 等...) 第 5 到第 8:整个文件的长度(以字节为单位)。

【讨论】:

谢谢,好像是 flash player 10。我如何区分 10 和 10.1? johndierks.com/img/flashversionhexdump.png SWF 文件本身不针对特定的 Flash Player 次要版本。 正如我在下面发布的,它告诉您文件遵循的 SWF 规范版本,但不是所需的最低 Flash 播放器版本。 @LordCover 嗨,请告诉我这表示哪个版本 - 'FWSh ˆ Uð (É @ 3Y' 因为我没有参与其中.. 我认为您尝试使用的文件已损坏或存在某种混淆,因为通常第 4 个字节是 09 或 0A 或 0B(即版本号)。【参考方案2】:

Flex SDK 包含一个名为 swfdump 的工具,可显示 SWF 文件内的所有元数据。这是我运行“swfdump foo.swf”时输出的开头:

<swf xmlns='http://macromedia/2003/swfx' version='9' framerate='24' size='10000x7500' compressed='true'>

【讨论】:

【参考方案3】:

这补充了 brian sharon 所说的内容。

是的,swf-version 和 Flash Player 版本的一对一映射不再存在。

第 4 个字节描述的是 -swf-version,它的好处是现在与点版本存在一对一的关系

看看这些引用:http://blogs.adobe.com/airodynamics/2011/08/16/versioning-in-flash-runtime-swf-version/http://sleepydesign.blogspot.in/2012/04/flash-swf-version-meaning.html

来自第二个链接:

Compiler Option     Flash Player Version
-swf-version=9      9
-swf-version=10     10, 10.1
-swf-version=11     10.2
-swf-version=12     10.3
-swf-version=13     11.0
-swf-version=14     11.1
-swf-version=15     11.2
-swf-version=16     11.3

我正在使用 Flash 游戏文件中的这些信息来警告用户,他们的 Flash 播放器在我的 Flash 游戏门户上可能已过时。这很好用。

【讨论】:

【参考方案4】:

大部分 - 全部? - 到目前为止的答案是不正确的,这很不幸,因为我希望找到这个问题的答案:)。

SWF 的字节 4 指示 SWF 使用的 SWF 文件格式的版本。这与目标播放器版本相同。

最低播放器版本在编译时通过编译选项target-player设置,SWF文件格式版本通过选项swf-version设置。

这些选项的默认值可以在 FLEX_SDK/frameworks/flex-config.xml 中找到。我使用的SDK版本(4.5.1),默认如下:

    <!-- Specifies the minimum player version that will run the compiled SWF. -->
   <target-player>10.2.0</target-player>

    <!-- Specifies the version of the compiled SWF -->
    <swf-version>11</swf-version>

这意味着 swfversion.com 为我的 SWF 显示 11,即使我只要求用户拥有 10.2。根据http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7a92.html 的说法,Flex 4.6 将 target-player 设置为 11.1,将 swf-version 设置为 14。所以我不清楚 swfversion.com 有什么用处。

【讨论】:

您能否交叉引用 Adob​​e 发布的规范以支持其他答案错误的说法?我的理解是字节 4 的东西仍然适用,但由于有次要版本,SWF 版本和 Flash Player 版本之间的转换不再是一对一的。但是,您仍然无法检测到点释放。 假设你是对的,有没有办法找出一个 swf 文件的目标 Flash 播放器版本? @MPD Brian 是对的,请查看我的答案以了解详细信息,这是您想要从 Adob​​e 获得的参考资料 - blogs.adobe.com/airodynamics/2011/08/16/… @AliVeli - 是的,有一种方法,现在更好了,你可以知道它的目标是哪一点,看看我的回答 我完全确信 adobe flash 糟透了……getstacktrace 在 18 版本以下无法工作,而且我们在 GUI 中没有堆栈跟踪就被卡住了……太棒了【参考方案5】:

您可以使用 DoubleClick 的 Flash Validator 工具:

https://flashval-temp.appspot.com/validator/

它将提供诸如 SWF 名称、版本、文件大小、尺寸、每秒帧数、压缩和总帧数等信息。

【讨论】:

【参考方案6】:

了解http://www.adobe.com/devnet/swf.html 的 SWF 规范

然后进行十六进制转储或在可以显示十六进制的编辑器中打开 SWF。 SWF 版本是前几个字节之一,位于压缩数据开始之前。我想说它是字节 4,但我不完全记得。该值是版本号。 IIRC,点版本未在 SWF 中编码。

GNU 文件也可以告诉你。不过,我可能已经编辑了我的规则来执行此操作。

【讨论】:

关于点版本的东西的快速说明。 Adobe 对 Flash Player 中间版本进行了一些相当重要的更改(例如,9.0.115 中的 H.264 支持)。当您将 SWF 添加到页面时,您应该真正使用 swfobject 并指定点版本以确保用户拥有正确的播放器(并尽可能为他们提供 ExpressInstall)。从未知的 SWF 确定最低点版本需要一些试验和错误,以及 adobe.com 的所有存档 Flash 播放器,以及要查找的知识。 关于这个过程如何进行的任何提示?现在只知道完整版本号对我来说就足够了,但我很想知道这个过程是如何工作的。 您需要查看点版本的发行说明,并查找新功能或不工作的地方。然后您猜测是否正在使用这些功能。有些很明显(如 H.264 支持),有些则更微妙。您还可以安装调试版本的 Flash Player,它可以让您看到任何异常。您经常可以在调用堆栈中看到功能请求。 正如我在下面发布的,它告诉您文件遵循的 SWF 规范版本,但不是所需的最低 Flash 播放器版本。

以上是关于如何确定发布 swf 的 Flash 播放器版本是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 Flash 中访问环境变量

[VB]如何启动动画.swf文件?

如何以 SWF 格式创建播放和暂停?

如何在网页中插入swf?

网页插入SWF视频,如何带有播放控制按钮、进度条等!

如何在Linux 上播放本地SWF Flash文件