четверг, 21 июля 2011 г.

Установка ffmpeg

Во фре всё как всегда просто:
cd /usr/ports/graphics/php5-ffmpeg
make install clean

В центоси как всегда нужны танцы с бубном.
Для начала, надо поставить репы epel, rpmforge.
Потом ставится ffmpeg. Причём 99% мануалов в сети говорят "а теперь ставим компилер, кучу левых библиотек и собираем руками". А это совсем не linux-way с его пакетами. То, что в gentoo и freebsd -- штатные методы, тут - полный изврат. И то, по хорошему говоря надо сначала собрать пакет и потом уже его ставить. За тупой make install в сорцах надо отрывать руки.
yum install -y ffmpeg ffmpeg-devel
зависимостями подтянет около 30-40 пакетов.

После этого ставим компилятор (уже без тучи попутного мусора) и руками собираем модуль.
yum install -y gcc
mkdir ~/php-ff
svn co -r 676 https://ffmpeg-php.svn.sourceforge.net/svnroot/ffmpeg-php/trunk/ffmpeg-php ~/php-ff/
cd ~/php-ff/
phpize
./configure
make

Да, на офсайте можно просто скачать версию 0.6.0, она вполне рабочая хоть и 2008 года. Только всё-равно нужно будет делать замену RGBA на RGB (см ниже).

Дальше надо собрать пакет через rpmbuild, но у меня не было времени, пришлось ставить так.
make install
Installing shared extensions: /usr/lib64/php/modules/
(этот шаг можно сделать вручную, там просто копируется 1 файл)

Там появился файл ffmpeg.so
Подключим
cd /etc/php.d/
vi ffmpeg.ini
extension=ffmpeg.so

Перезапустим apache, проверим.
php -i|grep ffmpeg


Если phpize нету - не забываем доставить пакет php-devel
phpize: command not found
yum -y install php-devel

configure: error: ffmpeg headers not found. Make sure ffmpeg is compiled as shared libraries using the --enable-shared option
Надо доставить ffmpeg-devel
yum install --enablerepo=rpmforge,rpmfusion-free-updates-testing ffmpeg-devel ffmpeg
Смотрим на это полотно зависимостей, ужасаемся, ставим.

Может быть ошибка
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/ffmpeg.so' - /usr/lib64/php/modules/ffmpeg.so: undefined symbol: php_gd_gdImageSetPixel in Unknown on line 0
В общем, надо, чтобы gd.so грузился раньше. Проблема в том, что даже вписав строку extension=gd.so перед ff -- не заработало...
Может быть как из-за selinux
-rwxr-xr-x root root user_u:object_r:lib_t ffmpeg.so
-rwxr-xr-x root root system_u:object_r:textrel_shlib_t fileinfo.so
fix: chcon -u system_u -t textrel_shlib_t ffmpeg.so
так и просто проблем в загрузке, когда система считает себя слишком "умной".
Из-за порядка загрузки (сначала GD)
Или просто из-за глючной SVN-версии. Решение: НЕ использовать svn, а взять архив с 0.6.0, пропатчить (:%s/PIX_FMT_RGBA32/PIX_FMT_RGB32), собрать.
Говорят, это что-то не то с centos.
Линки по проблеме: 1 2 3
Возможно, данная проблема затронула 5.3+ версии, на 5.2 не проверялось. Также попробовать ревизии 676 и ниже (677 битая)
UPD 676 собралась нормально.

офсайт ffmpeg-php
http://unixblog.org.ua/php/install-php-ffmpeg-on-centos-5/

1 комментарий:

  1. Установили - милости прошу, статьи пишу: http://plutov.by/category/ffmpeg

    ОтветитьУдалить