Ахтунг! Сильно бомбит. Детям, беременным и слабонервным лучше сразу читать конец статьи ибо безобидное название статьи вовсе не значит, что с этим не пришлось заморочиться.
Итак, ставим сам ffmpeg. Сейчас многие могут плеваться а-ля “ставится за 2 минуты через yum”, но через yum не поставить все нужные нам кодеки + по собственным причинам я отказался от этого варианта.
Собственно есть несколько вариантов установки:
1)
Оба варианта были проверены мной лично и работают.
Единственно замечание по первому варианту – репо
Второй вариант не требует абсолютно ничего. Скачали скрипт –> запустили –> пошли кофе пить
Теперь все интереснее. Много мануалов по установке php-ffmpeg, например:
И главное, что все эти мануалы написаны блеать одинаково, как под копирку сука. У всех все конфигурируется без проблем и заводится с “пол тычка”, да только на деле хуй сосали комбанеры (эмоции).
По порядку:
Есть пидарас парень с ником tony2001, который сделал репо на github с нужным нам расширением (многие мануалы используют этот репо для установки php-ffmpeg), да только его хуй поставишь без танцев с бубном.
Хватит пустословия, за дело.
yum install git git clone https://github.com/tony2001/ffmpeg-php.git yum install php-devel
Компилируем:
cd ffmpeg-php phpize ./configure make && make install
И тут нам, как говорил мой начальник, хуй навстречу 😉
Первая ошибка: error: ‘PIX_FMT_RGBA32’ undeclared
Не беда, подумал я, идем в гугл и находим over дохуя статей, где предлагает открыть файл ffmpeg_frame.c и заменить там все строки с PIX_FMT_RGBA32 на PIX_FMT_RGB32.
Заменили, запускаем и видим, блять, error: ‘PIX_FMT_RGB32’ undeclared
Это просто охуенное решение, просто охуенное. Вот здесь гугл то и помочь ничем не мог, пришлось изучать исходники. Несколько дней ебли и в итоге полное решение проблемы:
Открываем ffmpeg_frame.c, после строк:
#ifdef HAVE_CONFIG_H #include "config.h" #endif
Вставляем:
#ifndef PIX_FMT_RGB32 #define PIX_FMT_RGB32 AV_PIX_FMT_RGB32 #endif
Далее делаем замену в этом файле строк c PIX_FMT_RGBA32 на PIX_FMT_RGB32
Все. Первая проблема решена.
P.S. Можно сразу объявить константу с именем PIX_FMT_RGBA32 и не делать дальнейшую замену в файле, должно работать.
Теперь пробуем скомпилировать это безобразие и конечно же нихуя у нас не получается, ибо мы получаем ошибку:
undefined symbol: avcodec_alloc_frame in Unknown on line 0
В этой ситуации гугл вообще не помог. Никак. Словно у меня одного такая проблема. Спустя нескольких часов поиска причины, я плюнул и пошел спать.
На следующий день, с ясной головой, я снова решил заняться этой хуйней и тут то я понял, что tony2001 – действительно пидарас редиска.
Открываем файл php_ffmpeg.h и видим вот такую фразу: fix for `undefined symbol: avcodec_alloc_frame in Unknown on line 0`
И под ней объявление константы, да только этот гандон человек неправильно указывает ее имя, вместо av_frame_alloc нужно avcodec_alloc_frame.
В итоге комментируем его писанину, под выше сказанной надписью объявляем константу:
#define avcodec_alloc_frame av_frame_alloc
Сохраняем, пробуем скомпилировать:
phpize ./configure make clean && make && make install
И вот оно, вот ОНО – расширение. Несколько вечеров жизни ушло на это, но результат успешен.
Все скомпилировалось успешно. Дальше по мануалу:
vi /etc/php.d/ffmpeg.ini
Добавляем следующую строку:
extension = ffmpeg.so
Рестартим apache:
/etc/init.d/httpd restart
P.S. Как оказалось, в итоге я зря это все делал, т.к. CMS для работы которой я ставил это расширение, напрямую работает с ffmpeg через exec. Пришлось отдельно скомпилировать php для нее и не включать disable_functions в конфигурацию php.ini, но это уже другая история 🙂 Полученный опыт ценен и не останется без внимания.