2012-07-14 3 views
2

Я ищу довольно долгое время для расширения Inno Setup для использования видеофайла, например, для AVI или, возможно, для .png-последовательности в качестве заставки для моей установки (использование альфа-канала будет ОГРОМНЫЙ плюс, но не обязательно). Есть несколько DLL-файлов для использования статических изображений с затуханием и постепенным исчезновением, но я не мог найти что-либо для использования в качестве видеофайла для этой цели.Видеофайл (с альфой) в качестве заставки?

Насколько я знаю, я могу использовать любые DLL-файлы с Inno Setup. Например, я могу использовать популярный bass.dll для воспроизведения звука, даже если у него нет «реальной» поддержки Inno, но Inno может вызывать функции этого DLL.

Итак, есть ли какая-нибудь программа, которая позволила бы мне это сделать? Любой совет в этом направлении был бы очень полезен.

Редактировать: Возможно, это возможно с Qt. Я знаю, что вы можете сделать именно эти брызговики для ваших приложений, но я не уверен, можно ли использовать Qt с Inno Setup?

+0

К вашей цитате * если можно использовать QT с Inno Setup *, это должно быть. Существует отдельная библиотека qtmlClient.dll, но ее использование довольно сложно. +1 в любом случае, хороший вопрос! – TLama

+0

Thats, чего я боялся:/ – PTS

+0

Я также думал об использовании mplayer.dll или ffmpeg.dll, но я также не знаю, как я буду использовать их в скрипте pascal. – PTS

ответ

4

Я основал проект Inno Media Player, который может встроить воспроизведение видео и аудио в мастер InnoSetup. Он основан на технологии DirectShow и требует использования как минимум DirectX 9.

За исключением built-in formats он поддерживает все кодеки DirectShow, но вы должны учитывать, что вашим целевым пользователям не нужно иметь кодеки для некоторых экзотических медиаформатов и устанавливать их кодеки только из-за шоу при запуске установки, это будет излишество и несправедливо к пользователю.

О прозрачности, которую вы хотели иметь, если вы найдете кодек, который поддерживает это, мы можем попытаться сделать всплывающее окно прозрачным и позволить рендерингу DirectShow рисовать в многоуровневом окне, но без кодека и примера видео I ничего не может сделать.

  • библиотека с примером сценарием вы можете найти в багажнике источника или загрузить его from here
  • Я написал простой function reference, где вы можете найти описание параметров функции

Так, чтобы показать всплывающее окно окна с воспроизведением видео до появления формы мастера, вы можете использовать следующее:

Обратите внимание, что Inno Media Player является Unicode lib rary, и поэтому вы можете использовать его только с Unicode-версиями InnoSetup, а не с ANSI! Существует поддержка ANSI версий InnoSetup ...!

[Setup] 
AppName=Media Player Project 
AppVersion=1.0 
DefaultDirName={pf}\Media Player Project 

[Files] 
Source: "MediaPlayer.dll"; Flags: dontcopy 

[Code] 
const 
    EC_COMPLETE = $01; 

type 
    TDirectShowEventProc = procedure(EventCode, Param1, Param2: Integer); 

function DSPlayMediaFile: Boolean; 
    external '[email protected]:mediaplayer.dll stdcall'; 
function DSStopMediaPlay: Boolean; 
    external '[email protected]:mediaplayer.dll stdcall'; 
function DSInitializeVideoFile(FileName: WideString; WindowHandle: HWND; 
    var Width, Height: Integer; CallbackProc: TDirectShowEventProc): Boolean; 
    external '[email protected]:mediaplayer.dll stdcall'; 

var 
    VideoForm: TSetupForm; 

procedure OnMediaPlayerEvent(EventCode, Param1, Param2: Integer); 
begin 
    if EventCode = EC_COMPLETE then 
    VideoForm.Close; 
end; 

procedure OnVideoFormShow(Sender: TObject); 
begin 
    DSPlayMediaFile; 
end; 

procedure OnVideoFormClose(Sender: TObject; var Action: TCloseAction); 
begin 
    DSStopMediaPlay; 
end; 

procedure InitializeWizard; 
var 
    Width: Integer; 
    Height: Integer; 
begin 
    VideoForm := CreateCustomForm; 
    VideoForm.Caption := 'Popup Video Window'; 
    VideoForm.BorderStyle := bsNone; 
    VideoForm.FormStyle := fsStayOnTop; 
    VideoForm.Position := poScreenCenter; 
    VideoForm.OnShow := @OnVideoFormShow; 
    VideoForm.OnClose := @OnVideoFormClose; 

    if DSInitializeVideoFile('d:\Video.avi', VideoForm.Handle, Width, 
    Height, @OnMediaPlayerEvent) 
    then 
    begin 
    VideoForm.ClientWidth := Width; 
    VideoForm.ClientHeight := Height;  
    VideoForm.ShowModal; 
    end;  
end; 

procedure DeinitializeSetup; 
begin 
    DSStopMediaPlay; 
end; 

Надеется, что это помогает!

+0

Вот простой пример видео. Это avi без сжатия, это в основном растровые изображения в avi. Это стандартный кодек в окнах и поддерживается по-прежнему с XP afaik. Этот 7zip имеет 2 файла, один с 8 бит и один с 32 бит при необходимости. Они довольно огромны без сжатия, но с коэффициентом сжатия около 3% с LZMA2. http://www.mediafire.com/?ea123l1ua82kgsf – PTS

+0

Извините за все эти посты, я всегда нажимаю кнопку редактирования слишком поздно. Нужен ли пользователю доступ к DirectX 9 или просто к GPU с поддержкой DirectX9? – PTS

+0

Время очистки :-) Я удалил все свои комментарии здесь, чтобы очистить рабочее место. Не могли бы вы сделать то же самое, пожалуйста? Во всяком случае, я оглядывался вокруг прозрачности (до того, как я спросил MSDN), и, похоже, это то, что вам нужно http://social.msdn.microsoft.com/Forums/en/windowsdirectshowdevelopment/thread/46f1aabb-c6ca- 48be-a424-944934113ef9 И файл 'alpha_32.avi', которым вы поделились, на самом деле является несжатым RGB32, но вам нужно иметь несжатый ARGB32. – TLama

Смежные вопросы