Ахтунг! Сильно бомбит. Детям, беременным и слабонервным лучше сразу читать конец статьи ибо безобидное название статьи вовсе не значит, что с этим не пришлось заморочиться.

Итак, ставим сам ffmpeg. Сейчас многие могут плеваться а-ля “ставится за 2 минуты через yum”, но через yum не поставить все нужные нам кодеки + по собственным причинам я отказался от этого варианта.

Собственно есть несколько вариантов установки:

1) https://habrahabr.ru/post/132495/

2) http://ffmpeginstaller.com

Оба варианта были проверены мной лично и работают.

Единственно замечание по первому варианту – репо http://git.chromium.org/webm/libvpx.git умерно, его легко найти в другом источнике посредством гугла.

Второй вариант не требует абсолютно ничего. Скачали скрипт –> запустили –> пошли кофе пить

Теперь все интереснее. Много мануалов по установке php-ffmpeg, например: http://firstwiki.ru/index.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, но это уже другая история 🙂 Полученный опыт ценен и не останется без внимания.

Подписываемся на обновления блога по Email:

Введите адрес электронной почты



Метки: , , , , ,

Оставьте свой комментарий