如何确定发布 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 有什么用处。
【讨论】:
您能否交叉引用 Adobe 发布的规范以支持其他答案错误的说法?我的理解是字节 4 的东西仍然适用,但由于有次要版本,SWF 版本和 Flash Player 版本之间的转换不再是一对一的。但是,您仍然无法检测到点释放。 假设你是对的,有没有办法找出一个 swf 文件的目标 Flash 播放器版本? @MPD Brian 是对的,请查看我的答案以了解详细信息,这是您想要从 Adobe 获得的参考资料 - 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 播放器版本是啥?的主要内容,如果未能解决你的问题,请参考以下文章