![]() |
Распаковка неполного архива zlib.
Требуется загрузить swf файл как ByteArray, распаковать, и выудить некоторую информацию. Загружаю успешно, разбираю хедер флешки, беру остаток и делаю uncompress() (документация). Если флешка полная, то она нормально распаковывается, но если она с оторванным хвостом то uncompress() сообщает об ошибки декомпрессии. При том даже будучи неполной флешка нормально играется если её запустить, т.к. флеш заточен под воспроизведение неполных файлов. Т.е. она валидная но неполная. Мне надо распаковать то что есть. Алгоритм сжатия у флешек zlib deflate который позволяет такое сделать. Есть идеи как такое можно сделать? Очень уж не хочется сторонний код на as3 цеплять с реализацией deflate, т.к. будет существенно медленнее и по объёму больше.
|
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Ну тогда вариант только один - парсить по одному тегу
я имею ввиду не swf-теги, а по deflate идти ручками |
да я знаю что ручками разобрать можно, да не хочется, думаю может есть что-нибудь нативное, флешплеер же делает это.
|
Конкретно с флешкой - Блуд давно мне говорил, что Loader грузит потоком и с него можно считывать байты ещё до конца загрузки. Сий спец-эффект мне повторить, к сожалению, не удалось. Но кто знает, возможно просто мне не повезло. Покопайте в этом направлении.
|
И смысл в таком копании? Loader#loadBytes() сначала все распакует, а потом отобразит. А доступ к байтам ничем не поможет. Мне непонятно только - зачем загружать кусочек флешки и пытаться его отобразить?
|
На сколько я понимаю, флешевыми функциями этого не сделать, но, с другой стороны, я видел реализацию на C#, и она совсем не большая. Так что скорее всего - писать самому / портировать.
|
Вроде бы у Loader по мере загрузки можно дергать bytes.
|
Цитата:
Попробуй ты :D |
Денис, я пытался. В FP10 длина bytes равна нулю, пока не загрузится. В FP9 - uint.MAX_VALUE.
|
Цитата:
|
Цитата:
|
Ну да, а почему бы ему не покосячить?
|
Девятка падает при попытке прочитать bytes до полной загрузки. Десятка, т.к. там length=0 ничего не отдает.
|
А если использовать URStream и loadBytes?
|
URLStream :)
Мы о другом. О расжатии до полной загрузки. |
Цитата:
Цитата:
|
RTE будет, невалидный SWF, если он не полный.
|
Цитата:
|
Psycho Tiger, RTE не будет, Loader нормально загрузит пол флешки и будет показывать, проверял. В том и фича deflate и формата swf что он нормально открывается и проигрывается если там половина файла. (естественно проигрывается только первая половина ролика). Скормить лоадеру и получить bytes идея хорошая, но мне необходимо попатчить флешку перед передачей лоадеру, иначе на загрузке он падает.
alatar после COMPLETE в Loader#bytes будут байты которые загрузили. Не проверял пакованные или нет, но мне нельзя отдавать флешку лоадеру сразу, сначала надо распаковать, поправить, потому уже лоадеру кормить. Добавлено через 1 минуту Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
Тестить лень, но поверю на слово.
Спасибо, не знал. |
Цитата:
|
Цитата:
Я имел ввиду что в loadBytes стояла проверка на валидность входящих данных, таких как валидность. Почему-то думал что оное распространяется и на неполный архив. |
Если портировать, то вот есть: http://code.google.com/p/flashdevelo...%2FCompression лучше / хуже - не знаю, просто случайно знаю, что тут был :)
|
| Часовой пояс GMT +4, время: 03:34. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.