Главная > Сервер под Windows > Сборка расширения ffmpeg-php (php_ffmpeg.dll) для PHP 5 на Windows

Сборка расширения ffmpeg-php (php_ffmpeg.dll) для PHP 5 на Windows


11-10-2010, 12:28. Разместил: kuper
Сборка расширения ffmpeg-php (php_ffmpeg.dll) для PHP 5 на Windows

Рабочее окружение:

* Microsoft Windows XP SP 2
* Microsoft Visual Studio 2005 Express Edition - http://www.microsoft.com/express/2005/download/default.aspx
* Microsoft Platform SDK - http://www.microsoft.com/downloads/details.aspx?familyid=0baf2b35-c656-4969-ace8-e4c0c0716adb

Необходимые файлы:

* Исходные коды PHP 5.2.5 - http://www.php.net/downloads.php
* Дистрибутив PHP 5.2.5 для Windows - http://www.php.net/downloads.php
* Исходные коды ffmpeg-php - http://ffmpeg-php.sourceforge.net/
* Shared библиотеки и заголовочные файлы FFmpeg для Windows (обязательно LGPL) - http://ffmpeg.arrozcru.org/builds/
* Заголовочные файлы inttype.h и stdint.h - http://msinttypes.googlecode.com/svn/trunk/inttypes.h, http://msinttypes.googlecode.com/svn/trunk/stdint.h

Подготовка рабочего окружения.
Создайте рабочую папку, в которой будут размещаться все необходимые файлы, например, C:\Development\PHP\ffmpeg. Распакуйте туда исходные коды PHP, дистрибутив PHP, исходные коды ffmpeg-php, библиотеки и заголовочные файлы FFmpeg. Также положите в эту папку заголовочные файлы inttype.h и stdint.h.

Создайте новый проект в MVS. Тип проекта – Win32, шаблон – Win32 Project. Введите имя проекта, например: php_ffmpeg (по имени будущей dll). Укажите в качестве места расположения созданную ранее папку. В окне Application Wizard перейдите на вкладку Application Settings. Установите Application Type – DLL, Additional Options – Empty Project. Завершите создание проекта, нажатием кнопки Finish.

В окне Solution Explorer добавьте в папку Header Files заголовочные файлы ffmpeg-php: ffmpeg_animated_gif.h
ffmpeg_frame.h
ffmpeg_movie.h
gd.h
gd_io.h
php_ffmpeg.h Там же добавьте в папку Source Files файлы исходных кодов ffmpeg-php: ffmpeg_animated_gif.c
ffmpeg_errorhandler.c
ffmpeg_frame.c
ffmpeg_movie.c
ffmpeg_php.c Приступим к конфигурированию проекта. Откройте меню Project и выберите пункт Properties. Перед вами появится окно настройки проекта. Сразу же откройте вкладку Configuration Properties. Вверху выберите конфигурацию - Release. Перейдите на вкладку C/C++ -> General. В поле Additional Include Directories добавьте следующие пути: C:\Development\PHP\ffmpeg
C:\Development\PHP\ffmpeg\php-5.2.5
C:\Development\PHP\ffmpeg\php-5.2.5\TSRM
C:\Development\PHP\ffmpeg\php-5.2.5\Zend
C:\Development\PHP\ffmpeg\php-5.2.5\main
C:\Development\PHP\ffmpeg\ffmpeg-r10461-include\include\ffmpeg
C:\Program Files\Microsoft Platform SDK\Include Перейдите на вкладку C/C++ -> Preprocessor и в поле Preprocessor Definitions добавьте следующие строки: PHP_WIN32
ZEND_WIN32
ZTS=1
ZEND_DEBUG=0
HAVE_LIBGD20=1
COMPILE_DL_FFMPEG Теперь перейдите на вкладку Linker -> General. В Additional Library Directories добавьте два пути: c:\Development\PHP\ffmpeg\php-5.2.5-Win32\dev
C:\Development\PHP\ffmpeg\ffmpeg-r10461-lgpl-lshared-win32\lib Перейдите на вкладку Linker -> Input и введите в поле Additional Dependencies строки: php5ts.lib
avcodec-51.lib
avformat-51.lib
avutil-49.lib Перейдите на вкладку Linker -> Command Line и в поле Additional options добавьте: /FORCE:MULTIPLE Если вы указали имя проекта отличное от php_ffmpeg, перейдите на вкладку Linker -> General и в поле Output File введите: $(OutDir)\php_ffmpeg.dll Это нужно для того, чтобы не пришлось переименовывать dll после сборки.

Попробуйте собрать расширение, нажав клавишу F7. В консоле появятся сообщения о ошибках.

Устранение ошибок. fatal error C1083: Cannot open include file: 'config.h': No such file or directory Откройте файл ffmpeg-php-0.5.2.1\ffmpeg_frame.c и найдите следующую строку: #include "config.h" Замените её на: #ifdef HAVE_CONFIG_H
#include "config.h"
#endif error C2466: cannot allocate an array of constant size 0 Откройте файл php-5.2.5\main\config.w32.h и закомментируйте строку: //#define _USE_32BIT_TIME_T 1 Сборка расширения.
После этого попробуйте снова собрать расширение. Больше сообщений об ошибках быть не должно. На выходе получится заветный dll php_ffmpeg\release\php_ffmpeg.dll. Скопируйте его в папку с расширениями PHP и добавьте в php.ini строку: extension=php_ffmpeg.dll Также скопируйте файлы из папки ffmpeg-r10461-lgpl-lshared-win32\dll и файл pthreadGC2.dll в папку system32.

Проверить загрузилось расширение или нет можно через консольную версию php.
> php -v
PHP 5.2.5 (cli) (built: Nov 8 2007 23:18:51)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

> php -r "var_dump(extension_loaded('ffmpeg'));"
bool(true)
Процесс сборки расширения можно считать законченным.

Вернуться назад