-
Имеется некий swf(600-700кб) со своим набором библиотек, графики, звуков и конфигураций в формате XML(все вместе порядка 80мб). Имеет работоспособное приложение, написанное на Delphi. Задача приложения - запустить flash и выделить под него достаточно памяти и сисетмных ресурсов для сведения тормозов обработки флеш к минимуму. Для написания и компиляции использовалась компонент Delphi - надстройка над FlashControl f-in-box. С браузера, т.е. непосредственно из сети swf практически не подтормаживает и достаточно адекватно реагирует на нажатия клавишь и действия мышью. вот код:
unit MainUnit;
interface
uses
Windows, SysUtils, Classes, Graphics, Controls, Forms, Messages, Dialogs,
FlashPlayerControl, StdCtrls, ShellApi, ComCtrls;
type
TMainForm = class(TForm)
CheckBoxSounds: TCheckBox;
FlashFrame: TTransparentFlashPlayerControl;
PlayNetwork: TButton;
procedure FormCreate(Sender: TObject);
procedure CheckBoxSoundsClick(Sender: TObject);
procedure PlayNetworkClick(Sender: TObject);
private
FlashPath: String;
FPlaySWF: Boolean;
procedure OnGlobalLoadExternalResource(const URL: WideString; Stream: TStream);
public
end;
var
MainForm: TMainForm;
implementation
procedure TMainForm.FormCreate(Sender: TObject);
begin
SetGlobalOnLoadExternalResourceHandler(OnGlobalLoadExternalResource);
CheckBoxSounds.Checked := FlashPlayerControl.GetAudioEnabled;
FlashFrame.Movie := ExtractFileDir(Application.ExeName) + '\FLASHbyteCODE.swf';
FlashFrame.Play;
FPlaySWF := True;
end;
procedure TMainForm.OnGlobalLoadExternalResource(const URL: WideString; Stream: TStream);
var
FileStream: TFileStream;
MemoryStream: TMemoryStream;
begin
if URL = 'anything' then
begin
if Length(FlashPath) > 0 then
begin
FileStream := TFileStream.Create(FlashPath, fmOpenRead);
MemoryStream := TMemoryStream.Create;
MemoryStream.LoadFromStream(FileStream);
MemoryStream.SaveToStream(Stream);
FileStream.Free;
MemoryStream.Free;
end;
end;
end;
procedure TMainForm.CheckBoxSoundsClick(Sender: TObject);
begin
FlashPlayerControl.SetAudioEnabled(CheckBoxSounds.Checked);
end;
procedure TMainForm.PlayNetworkClick(Sender: TObject);
begin
FPlaySWF := True;
FlashFrame.Movie := 'http://WEB PATH/FLASHbyteCODE.swf';
FlashFrame.Play;
end;
end.
Проблема следующего характера: конечный exe весит 600+ кб, если компилировать в Delphi 2009, в Delphi 7 получается 400+. Приложение отлично работает, но производительность оставляет желать лучшего. Тестировалось на разрешении экрана 1280х800. Каким образом можно искусственно заставить приложение выделять больше памяти и ресурсов под обработку всего этого дела? Как можно птимизировать код? Я совсем недавно начал писать на delphi и все мои поиски по данному вопросу ни к чему не привели. Прошу совета, куда копать(желательно с примером или со ссылкой). С уважением, Дмитрий
-
Выкинь FlashPlayerControl вмето него размести WebBrowser в который и подгружай свой флэш
-
Фишка в том, что часть web browser'ов использует flash.ocx, который является activeX плагином. Так вот, критично delphi, который юзает надстройку над InternetExplorer, который в свою очередь беспощадно режет FPS, что в сою очередь приводит "покадровке" при отрисовке flash'ового swf .... и т.д. Вобщем выглядит это, как говно дергающееся....
FF и Chrome используют плагины, но где же взять код. Именно тот код, который будет делать то, что нужно и так быстро, как только возможно. Плюсом cashe надо предусмотреть т.к. 70мб(80+ на вырост) должны быть "под рукой".
В общем с производительность разобрался сам. С размером файла не вышло к сожалению :(
Почему именно FlashPlayerControl? Это все, что я смог найти для решения задачи... Он является компонентом к Delphi имеет неплохую функциональну обертку для flash. А так как в прикладном программировании я полный, не побоюсь этого слова, лох, то связка "Delphi 2009 + SampleCode + WorkableComponent" наиболее удачной и единственной возможной.
Теперь о насущном:
* Flash не имеет программной и аппаратной поддержки видеокарты. Сильно грузит CPU и ОЗУ * Есть вариант приложения написанный на С, который использует flash.ocx напрямую из своего каталога. Упаковано неизвестно чем и непонятно как. Минусы приложения: размер 1.5мб, лишние прибамбасы(запись видео с настройкой кодека и качества, скриншоты, настройка прокси и т.д.) exe, утечки памяти. Жутко тормозит, съедает рабочий стол и оооочень долго кубаторит, но работает.
Достаточный набор сюрпризов, чтоб отказаться от него.
Какие способы и меры можно предпринять, чтобы ускорить обработку изменений изображения во внутреннем FlashFrame? Решение проблемы кроется где-то неглубоко. Резон полагать, что оно есть: Это искусственное занижение браузером на activeX числа кадров(FPS).
Есть ли в делфи какие либо способы контролировать подобные вещи? Что такое AlphaBlending?
Ну думаю достаточно изложил суть проблемы... Сори, вторые сутки без сна, штурмую информационные просторы в поисках истины...
Буду очень благодраен за любые наводки
-
> Flash не имеет программной и аппаратной поддержки видеокарты
ага. поэтому отрисовывает телепатически.
-
p.s.: Получившееся приложение хоть и неприятно дергает графику при изменении, но жрет меньше памяти, работает быстрее и отклик действий пользователя(клавиатура и мышь) куда четче ... Наполовину эффект достигнут
-
я когда-то давно в 7-ке делал презентацию картинок, ну и флэшек... для художника... ща глянул, нифига уже не понял, че-там наворотил :) использовано: ShockwaveFlashObjects_TLB, ShockwaveEx, ShockwaveList ничего не тормозило
-
и кстати, если на флэшке вызвать контекстное меню, то там есть пунктик использовать граф. ускорение....
-
> KilkennyCat © (09.07.09 15:47) [3] > > > Flash не имеет программной и аппаратной поддержки видеокарты > > ага. поэтому отрисовывает телепатически.
А без сарказма нельзя?
В чем-то вы правы. Если намек был на Flash 10 с заявленной поддержкой аппаратного ускорения визуализации, то потребуется видеокарта с полной поддержкой DX10. Windows XP отпадает, вместе с ним огромное количество видеокарт. У меня для примера стоит windows 7, видео с поддержкой DX10, сама полноценная DX10, но рельно ощутить это производительность, увы не приходится
-
> KilkennyCat © (09.07.09 16:04) [5] > я когда-то давно в 7-ке делал презентацию картинок, ну и > флэшек... для художника... ща глянул, нифига уже не понял, > че-там наворотил :) > использовано: ShockwaveFlashObjects_TLB, ShockwaveEx, ShockwaveList > ничего не тормозило > >
Хмм... Можете себе представить флэшку размером в пол мегабайта, которая использует конфиги на XML и динамически подгружает в себя другие флэш и бинарники из библиотеки, время от времени общаясь с сервером?
Мелкие flash летают, но тут все сложнее...
-
> Можете себе представить флэшку размером в пол мегабайта, > которая использует конфиги на XML и динамически подгружает > в себя другие флэш и бинарники из библиотеки, время от времени > общаясь с сервером?
всего в полмегабайта... я не то чтоб представить... у меня есть и под 3 мега,причем, это не рисунки и не звук, у меня всегда основной упор на программную анимацию. Все зависит от того, как все сделано. Если там куча неудаляемых и вечнокрутящихся onEnterFrame, если неиспользуемые ролики не удалять, конечно, сожрет все ресурсы. Я когда первые флэшки писал, так они под 100% проц грузили. А теперь у меня ваще нет onEnterFrame - все работает только тогда, когда надо.
Пример конфига на ХМЛ. Не тормозит :)
-
не влазеит, блин. :)
-
86 килобайт ХМЛ. это он еще не совсем полный :)
-
Flex SDK в основном
-
Все ясно ... "Никто ничего не знает". Буду обсуждлать в других местах ... Всем успехов (:
|