Как определить, для какой версии флеш-плеера был опубликован SWF?
У меня есть SWF неизвестного происхождения, и мне нужно знать, на какую версию флеш-плеера он был нацелен при публикации. Как я могу получить эту информацию?
6 ответов
4-й байт в SWF-файле содержит номер версии, например 0A для Flash Player 10.
РЕДАКТИРОВАТЬ: Из-за высокого интереса к этому вопросу я решил дать больше отзывов
Первые 8 байтов любого SWF-файла не сжимаются, остальная часть файла может быть сжата (или нет) сжатием zlib.
- 1-й байт: "F" (не сжато) ИЛИ "C" (сжато).
- 2-й байт: "W" всегда.
- 3-й байт: "S" всегда.
- 4-й байт: номер версии (09 означает, что этот файл предназначен для Flash Player 9 и т. Д.)
- С 5 по 8: длина всего файла в байтах.
Flex SDK содержит инструмент swfdump, который отображает все метаданные внутри SWF-файла. Вот начало вывода, когда я запускаю "swfdump foo.swf":
<swf xmlns='http://macromedia/2003/swfx' version='9' framerate='24' size='10000x7500' compressed='true'>
Это добавляет то, что сказал Брайан Шарон.
Да, сопоставление "1: 1" для swf-версии и версии Flash Player больше не существует.
4-й байт представляет собой -swf-версию, и что хорошо в этом, так это то, что теперь существует непосредственное отношение к точечным релизам.
Посмотрите на эти ссылки:
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
Я использую эту информацию из файлов флеш-игр, чтобы предупредить пользователей о том, что их флеш-плеер может быть устаревшим на моем портале флеш-игр. И это работает просто отлично.
Больше всего - все? - из ответов до сих пор неверны, что вызывает сожаление, так как я надеялся найти ответ на этот вопрос:).
Байт 4 SWF указывает, какая версия формата файла 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 показывает 11 для моего SWF, хотя я только требую, чтобы пользователи имели 10.2. И в соответствии с http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7a92.html, Flex 4.6 устанавливает target-player в 11.1 и swf-версию в 14. Поэтому я не понимаю, как swfversion.com это вообще полезно.
Вы можете использовать инструмент Flash Validator от DoubleClick:
https://flashval-temp.appspot.com/validator/
Он будет предоставлять такую информацию, как имя SWF, версия, размер файла, размеры, количество кадров в секунду, степень сжатия и общее количество кадров.
Взгляните на спецификацию SWF на http://www.adobe.com/devnet/swf.html
Затем сделайте шестнадцатеричный дамп или откройте SWF-файл в редакторе, который может отображать шестнадцатеричный код. Версия SWF является одним из первых нескольких байтов и находится до запуска сжатых данных. Я хочу сказать, что это байт 4, но я не совсем помню. Значение является номером версии. IIRC, точечная версия не закодирована в SWF.
Файл GNU также может сказать вам. Возможно, я изменил свои правила, чтобы сделать это, хотя.