Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > alexcon314

Оценить эту запись

Расширение проектора: Продолжение 8. Поддержка FP10.1

Запись от alexcon314 размещена 18.11.2010 в 11:39
Обновил(-а) alexcon314 13.12.2010 в 11:55

Плеер 10.1 напрочь отказался работать с оболочкой. Симптомы: любой метод возвращает undefined. После недолгих разбирательств
я установил, что прежде хорошо работавшие перехваты ReadFile() при обращении к шаредам, в 10.1 не катят. Что-то там сильно поломали и
перехват перестал работать. Возможно, функция ReadFile() стала импортироваться в коде динамически, на что есть и косвенные подтверждения.
Покрутившись и так, и сяк, перепробовав десяток других вариантов перехвата, я расстроился, у меня ничего не вышло, и я решил окончательно отказаться от этого двига. Действительно, в следующих версиях плеера врядли что-то восстановят как было, скорее уж еще что-нибудь поломают.
Впрочем, что касается AS2-проектов, они по-прежнему успешно работают на этом движке с шаредами, но только в плеерах не старше 10.0.
Пару недель я пребывал в унынии. Растроишься тут!(: Попутно я начал искать основу для нового движка. Побочным продуктом этих поисков, например, появилась статья про asm-вставки. Но вот, наткнулся в "Хакере" на небольшую статейку про eggshunting. Это такой способ внедрения шелл-кода в адресное пространство чужого процесса. Суть не в этом. А в том, что эта статья натолкнула меня на очень простую идею (как я раньше не додумался, не представляю!).
Идея по-истине незамысловата: использовать для обмена данными между проектором и оболочкой класс ByteArray.
Итак, при старте проектор инициализирует экземпляр byte array. Дальше, в оболочке надо найти этот массив, получить указатель на область памяти, где он был размещен. Как?! Перехват VirtualAlloc() тут мучить не айс, ибо вызывается она тут и там, и отсеять мух от котлет было бы затруднительно.
Вот тут нам и помогут "яйца"! В этом контексте яйца - это заведомо уникальный в памяти процесса последовательный (или нет) набор байтов (чисел). Для того, чтобы исключить остатки случайности, берут два таких набора и размещают их друг за другом, от того и яйца.
Значит, при инициализации массива, делаем закладочку:
Код:
private static function eggs(arr:ByteArray):void 
{
	for (var i:uint = 0; i < 8; i++)
	{
		arr[i] = arr[i+8] = 0x61 + i + i;
	}
			
}
Почему так топорно! Да какая разница! Оно не суть.
Ну, и пинаем оболочку по LC-каналу - "давай! бери меня за яйца!". В оболочке мы быстренько шерстим память байт за байтом, и.. о! да! вот они! И элементарно запоминаем указатель на начало области размещения закладки. Отлично!
Дальше - дело техники. Вызов метода оболочки теперь выглядит так:
- формируем в проекторе объект с данными запроса (имя метода, аргументы);
- записываем объект в массив (writeObject());
- даем знать оболочке - "забирай и работай"... оппа! а как?
(ну, тут я заюзал System.setClipboard() c фейковым параметром-строкой, и поставил перехват на OpenClipboard())
- после отработки, оболочка записывает ответ-данные в тот же массив, сериализуя в AMF3, и отпускает вызов System.setClipboard();
- ну, вот, теперь делаем в проекторе readObject() и радуемся жизни!
По-дефолту, массиву задается размер 1 Мб. Оболочка следит, чтобы ответ убрался в этот размер, иначе выдается объект, в поле котрого len записан требуемый размер. Тут есть два варианта дальнеших действий: либо попытаться загрести данные по частям (например данные из файла), либо ... сделать реаллок памяти массива и загести все разом. Да! Такое тоже возможно, на что я сделал специальный метод FlrunEx.reallocMem(newSize:uint). Вобщем-то, все изменения коснулись только класса FlrunEx, весь остальной АПИ остался прежним.
Посмотрев на результаты, я остался доволен. Еще бы, скорость обмена данными увеличилась в разы. Да, и есть неплохие шансы, что
в будщих версия плеера новый движок будет работать на ура.
Обновленные сорсы, доки и длл выложил в гугл. Подчеркну, что с новой lcevt.dll (v2.0.0.5) сорсы AS2 работают так же как и раньше, но только до версии плеера 10.0, сорсы AS3 нужно обязательно обновить до текущей версии и работают они с плеерами 9.0, 10.0, 10.1.
Да пребудет с нами сила!
Всего комментариев 25

Комментарии

Старый 18.11.2010 13:37 inozemcev вне форума
inozemcev
 
Аватар для inozemcev
Новости не без изюминки. )
Старый 18.11.2010 16:32 inozemcev вне форума
inozemcev
 
Аватар для inozemcev
У меня вопрос не относящийся к проектору, и все же может быть вы мне поможете.

У меня есть некий класс с методом destroy(). При вызове этого метода объект этого класса удаляет все листенеры и всех детей. После этого я удаляю сам объект. Есть ли у меня какая то возможность, выяснить пригоден ли объект для сборки мусора или нет ?

Быть может его можно вытащить из ApllicationDomain.currentDomain.memory и пощупать ?

Извините за оффтоп.
Старый 18.11.2010 17:19 alexcon314 вне форума
alexcon314
не знаю-не знаю.. информация о пригодности к удалению, должно быть, не хранится в объекте, где-то повыше, наверно..
Старый 21.11.2010 16:59 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Цитата:
либо ... сделать реаллок памяти массива и загести все разом. Да! Такое тоже возможно, на что я сделал специальный метод FlrunEx.reallocMem(newSize:uint).
Эээ... я вообще не понимаю как это возможно. Берём адресное пространство флешки и просим что-то там подвинуть/переместить? По логике вещей это флешку сразу убьет.

По поводу топорности - инстанциировать тогда твой движок надо сразу же, первыми строками кода - аналогичные значения могут вбиться, например, в другой ByteArray. Ну и есть теперь ограничения на клипбоард... Но это всё из разряда фантастики, так что супер!
Продолжай в том же духе )
Старый 21.11.2010 22:11 Котяра вне форума
Котяра
 
Аватар для Котяра
2 alexcon - где вы такой бубен взяли? хочу!
Старый 23.11.2010 08:35 alexcon314 вне форума
alexcon314
Да не.. реаллок - это просто создание нового массива с нужным размером по тому же принципу: закладка, поиск, если нашли - ок, нет - ну так нет. Вот то, что может найти другое что-то (с теми же значениями) - это, конечно, не айс, хотя и маловероятно... Надо подумать.
Ну а клипбоард вобщем-то не задействуется никак, просто когда пинается OpenClipboard(), смотрим на массив - ага, новая команда, тогда отрабатываем, закрываем клипбоард, возвращаем нулл и туда ничего и не попадает. Нет команды - просто даем выполниться вызову до конца.
Котяра, что за бубен?
Старый 23.11.2010 12:36 Котяра вне форума
Котяра
 
Аватар для Котяра
Бубен, благодаря которому, находите такие нетривиальные решения.
Очень нужен!
Старый 23.11.2010 14:29 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Цитата:
Да не.. реаллок - это просто создание нового массива с нужным размером по тому же принципу: закладка, поиск, если нашли - ок, нет - ну так нет. Вот то, что может найти другое что-то (с теми же значениями) - это, конечно, не айс, хотя и маловероятно... Надо подумать.
А, т.е. реалочиться массив не во флешке, а в обёртке? Тогда понятно. Не так понял просто, вот и глаза выпали =)
Старый 24.11.2010 10:10 alexcon314 вне форума
alexcon314
Обертка и плеер юзают одно и то же адресное пространство. Потому без разницы, вообще говоря, кто будет выделять память. Удобно, если это сделает плеер - он будет видеть память потом без проблем из АС. А обертка на подхвате. Т.е. память массива как бы "расшарена" с RW-доступом и для плеера и для оболочки. Обертка она тоже память выделит, но как подсунуть ее плееру - это мне пока неведомо.
Старый 25.11.2010 22:16 NumpuT вне форума
NumpuT
И под какой операционкой это может работать?
Все очень запутанно и не понятно!!!
и поставил перехват на OpenClipboard() - это когда изучал поставил или как?
сделал специальный метод FlrunEx.reallocMem(newSize:uint) - extprojector кажется работает через ActiveX?
Перехват VirtualAlloc() тут мучить не айс, ибо вызывается она тут и там, и отсеять мух от котлет было бы затруднительно. - что это значит я не врубился вообще?
И что такое проекторо и оболочка?
Обновил(-а) NumpuT 26.11.2010 в 00:05
Старый 26.11.2010 18:01 alexcon314 вне форума
alexcon314
Цитата:
И под какой операционкой это может работать?
Windows 2000, Windows XP, Windows Vista, Windows 7.
Цитата:
extprojector кажется работает через ActiveX?
Нет там никакого ActiveX.
Цитата:
...- это когда изучал поставил или как?...что это значит я не врубился вообще?
Я ничего не изучал. Я автор. А врубаться в такие мелочи вовсе не обязательно. Главное, чтобы работало.
Цитата:
...Все очень запутанно и не понятно!!!...И что такое проекторо и оболочка?
Попробуйте почитать записи моего блога с пометкой "Расширение проектора" с самого начала, скачайте мануал, посмотрите тестовые приложения, примеры проектов. Должно помочь. А если нет - пишите, что не вышло, что не ясно .
Обновил(-а) alexcon314 26.11.2010 в 18:07
Старый 04.12.2010 13:26 Котяра вне форума
Котяра
 
Аватар для Котяра
2alexcon. А есть браузер в либе? Можно ли как нибудь webkit/chromium прикрутить, чтоб отображался во флэше.
что-то вроде
air.HTMLLoader
или
mdm.Browser
Старый 06.12.2010 08:53 alexcon314 вне форума
alexcon314
Цитата:
А есть браузер в либе?
Сейчас нет.
Есть основа, написанная с использованием стандартного ИЕ-двига, стандартного, в смысле системного контрола. Что было сделано - создается/прячется/позиционируется окно в проекторе как дочернее (ну без рамки, конечно), ловятся ивенты: посыл/прием/ошибки/прогресс, отправляются запросы, организован доступ к дом, можно налету генерить прям в ас странички ... что-то еще было вроде... а, да, была задумка что-то типа "искусственного" ExternalInterface прикрутить, не по форме, а так, по смыслу. Дописать никак руки не доходят. В контроле этом клятом дофига всякой всячины напихано). Вебкитовский двиг пока вообще не копал, да и копать-то смысл? Таскать его потом с собой?
ЗЫ Когда будет, не знаю, но будет. Хотелось бы сделать и руки чешу, но... полоса чет затянулась.
Обновил(-а) alexcon314 06.12.2010 в 08:58
Старый 06.12.2010 18:14 Котяра вне форума
Котяра
 
Аватар для Котяра
А можно ли как нибудь глянуть на "основу"?
Очень надо.
Я тут описывал проблему с плагином WMP и эйровcким вэбкитом - решение нужно позарез.
Пробовал цинк, что-то браузер у меня вообще в нём не работает, может из-за системы (win 7 64)
Старый 07.12.2010 16:55 alexcon314 вне форума
alexcon314
В рабочем порядке выложил то, что удалось за день прикрутить из заготовок здесь. В архиве тестовый FD-проект со всеми либами и сорсами. Положи в папку output автономный плеер с названием FlashPlayer_10.exe и жми build. По исходнику сориентируешься, как там и что, надеюсь), там десяток строчек. Ну, или пиши в личку. В принципе, если тебе надо немного фич, может и недолго все будет. Ну, а если не то, что надо - тоже пиши, не стесняйся). Вообще, WMP там отображается без проблем.
ЗЫ. Извини за плохо оформленный пример. Просил срочно, делал "между делом".
Обновил(-а) alexcon314 07.12.2010 в 16:58
Старый 31.07.2012 21:54 MikroAcse вне форума
MikroAcse
 
Аватар для MikroAcse
alexcon314
Хочу написать про лаги 11.3 flash player:
1) PWeb -
Твой пример (бла-бла) на секунду запускается и потом сразу вылетает.
2) PMenu -
Если поставить VIEW_NOALL, то вылетает ошибка.
3) PWindow -
Не меняется иконка.
Все, что я проверял. Нету времени проверять другое, очень занят одним проектом.
Пожалуйста, проверь, исправь, обнови и добавь новых функций:
1) Прозрачное окно.
2) Аснихронное управление файлами.
3) По своему усмотрению
Исправь ошибки в названиях функций, в доках, например,функция:
setIconFomFile
Ты имел ввиду setIconFromFile?
И т.д.
Вот:
Скачать FlashPlayer 11.3
Обновил(-а) MikroAcse 31.07.2012 в 23:36
Старый 01.08.2012 00:31 Котяра вне форума
Котяра
 
Аватар для Котяра
Может на даты поста посмотрите?
Старый 01.08.2012 00:46 MikroAcse вне форума
MikroAcse
 
Аватар для MikroAcse
Цитата:
Может на даты поста посмотрите?
А причем тут это?
Что, у постов есть срок годности?
Ведь полезный движок, а?
Старый 01.08.2012 08:34 alexcon314 вне форума
alexcon314
MikroAcse, спасибо за замечания. Постараюсь посмотреть, что можно сделать).
Беглый осмотр на подопытном 11.4 beta показал, таки да, меню контекстное не убирается. С остальными пунктами проблем не заметил. setIconFromFile(file:String) - буквально "установить иконку из файла", т.е. иконка берется из файла, как-то вроде оно по делу,не?
Изначально в этот проект, если так можно выразиться, увы, была заложена мина замедленного действия. С выходом новых версий плеера что-то, порой, значительно меняется в его недрах. А движок сильно зависим от внутренностей плеера. Я несколько раз правил двиг, обновлял, но сейчас не слежу, просто некогда.
Ах,да. новые фичи... Вряд ли что-то буду вносить своего... Из твоих пунктов:
1) Прозрачное окно - отпадает, ибо неимоверно трудно, а смысла особого нет.
2) Аснихронное управление файлами - асинхронные IO-операции? ну, да.. с этим можно было бы поработать, но опять же не выжу смысла. В плеере операции с файлами, те, что есть в API, и так асинхронные.
Ну, а на даты постов смотреть полезно)).
Все это затевалось во времена, когда в ходу еще был 8-ой (!) плеер, но уже появился 9. Тогда эта тема была благодатной. Чутка позже вышел AIR. С выходом новых верисий AIR актуальность расширения проектора вообще стремится к нулю, разве что в каких-то уж совсем немыслимых ситуациях оно может пригодиться, или разработчика айр пугает.
Обновил(-а) alexcon314 01.08.2012 в 09:14
Старый 01.08.2012 10:12 MikroAcse вне форума
MikroAcse
 
Аватар для MikroAcse
Печаль.
Я думал Вы продолжаете заниматься этим проектом.
Air мне никогда не нравился.
Ну ладно, спасибо за ответ.
Старый 01.08.2012 11:42 alexcon314 вне форума
alexcon314
Я как бы не забросил совсем уж.. Нехватка времени, снижение интереса к теме вцелом, так скажем.
Старый 01.08.2012 12:09 MikroAcse вне форума
MikroAcse
 
Аватар для MikroAcse
Цитата:
Я как бы не забросил совсем уж.. Нехватка времени, снижение интереса к теме вцелом, так скажем.
Понятно, я все равно пользуюсь этим.
А есть похожие вещи? Типа AIR, но чтобы устанавливать не надо было.
Старый 01.08.2012 13:43 alexcon314 вне форума
alexcon314
mdm Zinc, f-in-box. Айр в последних версиях тоже позволяет делать автономные экзешники. Не вспомню, как эта фича называется, но она есть. Одно из существенных преимуществ айра - возможность писать приложения под мобильные платформы.
Старый 01.08.2012 14:03 MikroAcse вне форума
MikroAcse
 
Аватар для MikroAcse
Да мне не надо создавать на мобилы приложения.
А есть варианты: бесплатный, обновляемый, простой, небольшой, не виснущий движок? (что-то я перегнул )
Старый 01.08.2012 17:01 alexcon314 вне форума
alexcon314
бесплатный, обновляемый, простой, небольшой, не виснущий движок?
сам напиши .
 

 


Часовой пояс GMT +4, время: 07:29.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.