Howto: PHP-FFMPEG avec un PHP custom.

Il y a quelques temps, j’ai cherché à installer PHP-FFMPEG au coté d’une version personnalisée de PHP, mais ce fut un échec. L’idée était de pouvoir utiliser une version PHP beaucoup plus récente que celle fourni par défaut dans la distribution (Ubuntu 8.04 et PHP 5.2.4 à l’époque).

Aujourd’hui, sous Ubuntu 12.04, j’ai à ma disposition PHP 5.3.10. Or la dernière version stable à ce jour est la 5.5.7. L’objectif n’est pas de courir après la dernière version sortie, mais d’utiliser une version pas trop vieille, et surtout encore maintenue. Il y a encore pas mal de version 5.2 qui traîne alors qu’elle n’est plus maintenue.

Installer PHP n’est pas vraiment compliqué. C’est surtout l’extension PHP-FFMPEG qui est capricieuse. La version du dépôt n’est pas utilisable directement, elle doit avoir été compilée pour la version de PHP utilisée. Si vous essayez de l’utiliser, vous aurez droit à un message d’erreur ressemblant à ceci:

PHP Warning:  PHP Startup: ffmpeg: Unable to initialize module
Module compiled with module API=20090626
PHP    compiled with module API=20121212
These options need to match

La solution est donc de compiler l’extension manuellement, mais encore une fois, la tâche n’est pas aussi simple. En théorie, il suffirait de faire:

apt-get build-dep php5-ffmpeg
cd php-ffmpeg
phpize
./configure
make
make install

La commande configure échoue avec cette erreur:

configure: error: ffmpeg shared libraries not found. Make sure ffmpeg is compiled as shared libraries using the --enable-shared option

Il faut une version de FFMPEG compilée avec l’option –enable-shared. Ce qui n’est pas le cas dans Ubuntu. D’ailleurs sous Ubuntu, c’est un fork de FFMPEG qui est installé (avconv).

Pour entrer dans le vif du sujet, nous allons installer FFMPEG, PHP 5.5.6 et PHP-FFMPEG. Dans mon cas, j’ai besoin de PHP en CLI et FPM (pour le web). Je vous présente ma façon de faire, à vous d’adapter à vos besoins.

Bien qu’ici Ubuntu 12.04 soit utilisée, la procédure devrait être la même sous les systèmes basés sur Debian.

Sommaire

Nous allons procéder en 4 étapes.

  1. Préparation du système
  2. Installation de FFMPEG et des codecs supplémentaires
  3. Installation de PHP
  4. Installation de PHP-FFMPEG

Préparation du système

Nous allons installer le tout dans /opt. Le but étant de réellement séparer ces programmes de ceux du système de base. ffmpeg sera dans /opt/build-ffmpeg et PHP dans /opt/build-php/VERSION, où VERSION sera la version de PHP installée. Ce qui laisse la possibilité de faire cohabiter plusieurs versions (ex: 5.4, 5.5, et les futures).

Nous plaçons les sources des logiciels dans /opt/sources. Nous ferons tout cela sous l’utilisateur root. Sous Ubuntu, tapez simplement :

sudo su -

Après avoir entrez votre mot de passe, vous serez en root.

Maintenant, créons les répertoires cités ci-dessus:

mkdir /opt/build-ffmpeg
mkdir /opt/build-php
mkdir /opt/sources

Pour compiler les différents logiciels, il faut installer certaines dépendances.

apt-get update && apt-get dist-upgrade
apt-get install build-essential git autoconf libtool
apt-get build-dep php5
apt-get install libxml2-dev libfcgi-dev libfcgi0ldbl libjpeg62-dbg libmcrypt-dev libssl-dev libc-client2007e libc-client2007e-dev

Dans l’ordre:

  • on met à jour le système.
  • build-essential/autoconf/libtool permet d’avoir tout le nécessaire pour compiler et installer les logiciels. Git pour télécharger certaines sources de logiciel.
  • ligne 3 et 4 pour permettre de compiler tranquillement PHP.

Installation de FFMPEG

Commençons par installer les codecs nécessaires. Cette partie est optionnelle mais nécessaire pour prendre en charge certains formats (ex: vidéo HD via x264). Vous pouvez choisir les codecs que vous souhaitez utiliser.

Yasm

Yasm n’est pas un codec, mais est nécessaire pour en installer certains (notamment x264). La version des dépôts Ubuntu 12.04, la 1.1.0, n’est pas assez récente pour x264.

cd /opt/sources
wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
tar xzf yasm-1.2.0.tar.gz
cd yasm-1.2.0
./configure --prefix=/opt/build-ffmpeg
make
make install
make clean
make distclean

On indique bien « –prefix=/opt/build-ffmpeg » pour spécifier la destination de l’installation.

Vous remarquerez un dossier « /opt/build-ffmpeg/bin » où les logiciels sont placés pour être utilisés. Nous allons donc indiquer ce répertoire dans $PATH afin que x264 (par exemple) puisse trouver la nouvelle version de Yasm.

export PATH=/opt/build-ffmpeg/bin:$PATH

Ceci n’est nécessaire que durant l’installation des codecs et de FFMPEG. D’ailleurs, cette commande est temporaire. Si vous vous déconnectez $PATH sera réinitialisée à son état d’origine.

Codec FAAC

cd /opt/sources
wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
tar xzf faac-1.28.tar.gz
cd faac-1.28
./configure --prefix=/opt/build-ffmpeg

Ici, il y a une petite subtilité. Si vous lancez « make » tout de suite, vous aller avoir cette erreur:

 erreur: ambiguates old declaration ‘const char* strcasestr(const char*, const char*)’

Il faut ouvrir le fichier common/mp4v2/mpeg4ip.h avec votre éditeur de texte préféré, et commenter la ligne 126 comme ceci:

//char *strcasestr(const char *haystack, const char *needle);

On peut reprendre le cours de l’installation:

make
make install
make clean
make distclean

Codec Lame MP3

cd /opt/sources
wget --output-document=lame-3.99.5.tar.gz "http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Flame%2Ffiles%2Flame%2F3.99%2F&ts=1386242655&use_mirror=switch"
tar xzf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure --prefix=/opt/build-ffmpeg
make
make install
make clean
make distclean

Codec AAC

cd /opt/sources
git clone --depth 1 git://git.code.sf.net/p/opencore-amr/fdk-aac
cd fdk-aac
autoreconf -fiv
./configure --prefix=/opt/build-ffmpeg --enable-shared
make
make install
make clean
make distclean

Codec x264

cd /opt/sources
git clone --depth 1 git://git.videolan.org/x264.git
cd x264
./configure --prefix=/opt/build-ffmpeg --enable-static --enable-shared
make
make install
make clean
make distclean

Codec VP8/VP9

cd /opt/sources
git clone --depth 1 http://git.chromium.org/webm/libvpx.git
cd libvpx
./configure --prefix=/opt/build-ffmpeg --disable-examples --enable-shared
make
make install
make clean

Pfiou, c’est fini pour les codecs. Tout doit être bien installé dans « /opt/build-ffmpeg »

Maintenant, passons à l’installation de FFMPEG.

FFMPEG

cd /opt/sources
git clone --depth 1 git://source.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
./configure --prefix=/opt/build-ffmpeg \
--enable-shared \
--enable-gpl \
--enable-nonfree \
--enable-pthreads \
--enable-libx264 \
--enable-libfaac \
--enable-libmp3lame \
--enable-libvpx \
--extra-cflags="-I/opt/build-ffmpeg/include" \
--extra-ldflags="-L/opt/build-ffmpeg/lib" \
--extra-libs="-ldl"

Quelques explications.
La commande « configure » indique plusieurs choses. Tout d’abord, les codecs que nous souhaitons activer (ex: –enable-libx264 pour x264). Si vous avez fait le choix de ne pas installer certains codecs, alors supprimez la ligne –enable-xxxx correspondante.
Les options « –extra-cflags » et « –extra-ldflags » sont importantes. Elles indiquent où doit être cherchés les library. Sans ces options, PHP-FFMPEG ne parvient pas à utiliser correctement les libs.

L’option « –enable-shared » est aussi importante, c’est l’objet de ce tuto d’ailleurs. Elle permettra de compiler PHP-FFMPEG.

make
make install
make clean
make distclean

À ce stade, FFMPEG peut-être utilisé en tapant /opt/build-ffmpeg/bin/ffmpeg. Mais vous aurez l’erreur suivante :

ffmpeg: error while loading shared libraries: libavdevice.so.55: cannot open shared object file: No such file or directory

FFMPEG ne cherche pas /opt/buil-ffmpeg/lib pour charger ses libs, d’où l’erreur. Si vous n’avez pas besoin d’utiliser FFMPEG en ligne de commande, alors pas d’inquiétude. PHP-FFMPEG fonctionnera sans problème.
Si toutefois vous souhaitez utiliser FFMPEG en ligne de commande, exécutez les commandes suivantes:

echo "/opt/build-ffmpeg/lib" > /etc/ld.so.conf.d/ffmpeg.conf
ldconfig

Vous pouvez tester à nouveau la commande.

C’est tout pour l’installation de FFMPEG.

Installation de PHP

Le plus dur est fait. Nous allons installer PHP 5.5.7.

Sous Ubuntu 12.04, il est nécessaire de créer un lien symbolique pour utiliser correctement les fonctions liées à l’IMAP :

ln -s /usr/lib/libc-client.a /usr/lib/x86_64-linux-gnu/libc-client.a

Pour information, l’erreur lors de la commande configure sera:

configure: error: Cannot find imap library (libc-client.a). Please check your c-client installation.

Maintenant, nous allons utiliser une variable pour définir la version de PHP à installer.
Exécutez la commande suivante:

export PHP_INSTALL_VERSION=5.5.7

La dernière version stable a ce jour est la 5.5.7. Vous pouvez grâce à cette variable choisir la version à installer. Ainsi, il n’est pas nécessaire de modifier chaque commande, ce qui facilite la création de script ou les copier/coller :)

cd /opt/sources
wget "http://de.php.net/get/php-$PHP_INSTALL_VERSION.tar.bz2/from/this/mirror" -O "php-$PHP_INSTALL_VERSION.tar.bz2"
tar jxf "php-$PHP_INSTALL_VERSION.tar.bz2"
cd "php-$PHP_INSTALL_VERSION"
./configure \
--prefix="/opt/build-php/$PHP_INSTALL_VERSION" \
--with-config-file-path=/opt/build-php/etc \
--with-config-file-scan-dir=/opt/build-php/etc/conf.d \
--with-pdo-pgsql \
--with-zlib-dir \
--with-freetype-dir \
--enable-mbstring \
--with-libxml-dir=/usr \
--enable-soap \
--enable-calendar \
--with-curl \
--with-mcrypt \
--with-zlib \
--with-gd \
--with-pgsql \
--disable-rpath \
--enable-inline-optimization \
--with-bz2 \
--with-zlib \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-pcntl \
--enable-mbregex \
--with-mhash \
--enable-zip \
--with-pcre-regex \
--with-mysql \
--with-pdo-mysql \
--with-mysqli \
--with-jpeg-dir=/usr \
--with-png-dir=/usr \
--enable-gd-native-ttf \
--with-openssl \
--with-libdir=/lib/x86_64-linux-gnu \
--enable-ftp \
--with-imap \
--with-imap-ssl \
--with-kerberos \
--with-gettext \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--enable-fpm \
--disable-cgi

Précision :

  • dans mon cas, j’utilise PHP en Cli et PHP-FPM pour mes sites web (–with-fpm-user=www-data / –with-fpm-group=www-data / –enable-fpm).
  • je désactive le mode CGI (–disable-cgi) dont je n’ai pas l’utilité.
  • j’ai choisi de créer un dossier commun pour la configuration des différentes versions PHP installées :
    • –with-config-file-path précise où se trouve mon fichier php.ini.
    • –with-config-file-scan-dir indique où trouver d’autre fichier de configuration (ex: ffmpeg.ini).

On termine l’installation :

make
make install
make clean
make distclean
mkdir /opt/build-php/etc/
mkdir /opt/build-php/etc/conf.d

Installation de PHP terminée.

Installation de PHP-FFMPEG

On utilise toujours la variable $PHP_INSTALL_VERSION. Feignant jusqu’au bout !!

cd /opt/sources
git clone https://github.com/tony2001/ffmpeg-php.git
cd ffmpeg-php/
/opt/build-php/$PHP_INSTALL_VERSION/bin/phpize
CPPFLAGS="-I/opt/build-ffmpeg/include" LIBS="-I/opt/build-ffmpeg/lib" ./configure --prefix=/opt/build-php/php-ffmpeg \
--enable-skip-gd-check \
--with-ffmpeg=/opt/build-ffmpeg \
--with-php-config="/opt/build-php/$PHP_INSTALL_VERSION/bin/php-config"

Précisions:

  • CPPFLAGS et LIBS indiquent où doivent être trouver les « headers » (include) et les libs de FFMPEG.
  • –prefix=/opt/build-php/php-ffmpeg est juste là pour être sur que rien n’est installé ailleurs, mais ce n’est pas utilisé lors du « make install ».
  • –enable-skip-gd-check comme GD est inclus dans PHP, on ignore la vérification.
  • –with-ffmpeg=/opt/build-ffmpeg indique où se trouve FFMPEG
  • –with-php-config chemin vers la commande php-config qui retourne des paramètres de configuration.

Si tout se passe bien, on continue:

make
make install
make clean
make distclean

« make install » va copier le fichier « ffmpeg.so » dans le bon dossier de notre installation de PHP.
Ensuite, on finit par activer l’extension:

echo "extension=ffmpeg.so" > "/opt/build-php/etc/conf.d/20-ffmpeg.ini"

Cette commande ne doit être exécutée qu’une seule fois. Pour les prochaines versions de PHP à installer, ce même fichier sera utilisé (grâce à –with-config-file-scan-dir).

Et pour terminer, on regarde si PHP-FFMPEG est bien pris en compte dans PHP:

/opt/build-php/$PHP_INSTALL_VERSION/bin/php -i | grep "ffmpeg"

Voici à quoi doit ressembler le résultat de la commande :

Additional .ini files parsed => /opt/build-php/etc/conf.d/20-ffmpeg.ini
ffmpeg
ffmpeg-php version => 0.7.0
ffmpeg-php built on => Dec 13 2013 02:07:54
ffmpeg-php gd support  => enabled
ffmpeg libavcodec version => Lavc55.45.101
ffmpeg libavcodec license => nonfree and unredistributable
ffmpeg libavformat version => Lavf55.22.100
ffmpeg libavformat license => nonfree and unredistributable
ffmpeg swscaler version => SwS2.5.101
ffmpeg swscaler license => nonfree and unredistributable
ffmpeg codec_list => a64multi(v), a64multi5(v), aasc(v), aic(v), amv(v), amv(v), anm(v), ansi(v), asv1(v), asv1(v), asv2(v), asv2(v), aura(v), aura2(v), avrp(v), avrp(v), avrn(v), avs(v), avui(v), avui(v), ayuv(v), ayuv(v), bethsoftvid(v), bfi(v), binkvideo(v), bmp(v), bmp(v), bmv_video(v), brender_pix(v), c93(v), cavs(v), cdgraphics(v), cdxl(v), cinepak(v), cljr(v), cljr(v), cllc(v), comfortnoise(a), comfortnoise(a), cpia(v), camstudio(v), cyuv(v), dfa(v), dirac(v), dnxhd(v), dnxhd(v), dpx(v), dpx(v), dsicinvideo(v), dvvideo(v), dvvideo(v), dxa(v), dxtory(v), eacmv(v), eamad(v), eatgq(v), eatgv(v), eatqi(v), 8bps(v), 8svx_exp(a), 8svx_fib(a), escape124(v), escape130(v), exr(v), ffv1(v), ffv1(v), ffvhuff(v), ffvhuff(v), flashsv(v), flashsv(v), flashsv2(v), flashsv2(v), flic(v), flv(v), flv(v), 4xm(v), fraps(v), frwu(v), g2m(v), gif(v), gif(v), h261(v), h261(v), h263(v), h263(v), h263i(v), h263p(v), h263p(v), h264(v), hevc(v), hnm4video(v), huffyuv(v), huffyuv(v), idcinvideo(v), iff(v), iff(v), indeo2(v), indeo3(v), indeo4(v), indeo5(v), interplayvideo(v), jpeg2000(v), jpeg2000(v), jpegls(v), jpegls(v), jv(v), kgv1(v), kmvc(v), lagarith(v), ljpeg(v), loco(v), mdec(v), mimic(v), mjpeg(v), mjpeg(v), mjpegb(v), mmvideo(v), motionpixels(v), mpeg1video(v), mpeg1video(v), mpeg2video(v), mpeg2video(v), mpeg4(v), mpeg4(v), mpegvideo(v), msa1(v), msmpeg4v1(v), msmpeg4v2(v), msmpeg4v2(v), msmpeg4(v), msmpeg4(v), msrle(v), mss1(v), mss2(v), msvideo1(v), msvideo1(v), mszh(v), mts2(v), mvc1(v), mvc2(v), mxpeg(v), nuv(v), paf_video(v), pam(v), pam(v), pbm(v), pbm(v), pcx(v), pcx(v), pgm(v), pgm(v), pgmyuv(v), pgmyuv(v), pictor(v), png(v), png(v), ppm(v), ppm(v), prores(v), prores(v), prores_aw(v), prores_ks(v), prores_lgpl(v), ptx(v), qdraw(v), qpeg(v), qtrle(v), qtrle(v), r10k(v), r10k(v), r210(v), r210(v), rawvideo(v), rawvideo(v), rl2(v), roqvideo(v), roqvideo(v), rpza(v), rv10(v), rv10(v), rv20(v), rv20(v), rv30(v), rv40(v), s302m(a), s302m(a), sanm(v), sgi(v), sgi(v), sgirle(v), smackvid(v), smc(v), smvjpeg(v), snow(v), snow(v), sp5x(v), sunrast(v), sunrast(v), svq1(v), svq1(v), svq3(v), targa(v), targa(v), targa_y216(v), theora(v), thp(v), tiertexseqvideo(v), tiff(v), tiff(v), tmv(v), truemotion1(v), truemotion2(v), camtasia(v), tscc2(v), txd(v), ultimotion(v), utvideo(v), utvideo(v), v210(v), v210(v), v210x(v), v308(v), v308(v), v408(v), v408(v), v410(v), v410(v), vb(v), vble(v), vc1(v), vc1image(v), vcr1(v), vmdvideo(v), vmnc(v), vp3(v), vp5(v), vp6(v), vp6a(v), vp6f(v), vp8(v), vp9(v), vqavideo(v), webp(v), wmv1(v), wmv1(v), wmv2(v), wmv2(v), wmv3(v), wmv3image(v), wnv1(v), xan_wc3(v), xan_wc4(v), xbm(v), xbm(v), xface(v), xface(v), xl(v), xwd(v), xwd(v), y41p(v), y41p(v), yop(v), yuv4(v), yuv4(v), 012v(v), zerocodec(v), zlib(v), zlib(v), zmbv(v), zmbv(v), aac(a), aac(a), aac_latm(a), ac3(a), ac3(a), ac3_fixed(a), alac(a), alac(a), als(a), amrnb(a), amrwb(a), ape(a), atrac1(a), atrac3(a), binkaudio_dct(a), binkaudio_rdft(a), bmv_audio(a), cook(a), dca(a), dca(a), dsicinaudio(a), eac3(a), eac3(a), evrc(a), wavesynth(a), flac(a), flac(a), g723_1(a), g723_1(a), g729(a), gsm(a), gsm_ms(a), iac(a), imc(a), mace3(a), mace6(a), metasound(a), mlp(a), mp1(a), mp1float(a), mp2(a), mp2(a), mp2float(a), mp2fixed(a), mp3(a), mp3float(a), mp3adu(a), mp3adufloat(a), mp3on4(a), mp3on4float(a), mpc7(a), mpc8(a), nellymoser(a), nellymoser(a), paf_audio(a), qcelp(a), qdm2(a), real_144(a), real_144(a), real_288(a), ralf(a), shorten(a), sipr(a), smackaud(a), sonic(a), sonic(a), sonicls(a), tak(a), truehd(a), truespeech(a), tta(a), tta(a), twinvq(a), vmdaudio(a), vorbis(a), vorbis(a), wavpack(a), wavpack(a), wmalossless(a), wmapro(a), wmav1(a), wmav1(a), wmav2(a), wmav2(a), wmavoice(a), ws_snd1(a), pcm_alaw(a), pcm_alaw(a), pcm_bluray(a), pcm_dvd(a), pcm_f32be(a), pcm_f32be(a), pcm_f32le(a), pcm_f32le(a), pcm_f64be(a), pcm_f64be(a), pcm_f64le(a), pcm_f64le(a), pcm_lxf(a), pcm_mulaw(a), pcm_mulaw(a), pcm_s8(a), pcm_s8(a), pcm_s8_planar(a), pcm_s8_planar(a), pcm_s16be(a), pcm_s16be(a), pcm_s16be_planar(a), pcm_s16be_planar(a), pcm_s16le(a), pcm_s16le(a), pcm_s16le_planar(a), pcm_s16le_planar(a), pcm_s24be(a), pcm_s24be(a), pcm_s24daud(a), pcm_s24daud(a), pcm_s24le(a), pcm_s24le(a), pcm_s24le_planar(a), pcm_s24le_planar(a), pcm_s32be(a), pcm_s32be(a), pcm_s32le(a), pcm_s32le(a), pcm_s32le_planar(a), pcm_s32le_planar(a), pcm_u8(a), pcm_u8(a), pcm_u16be(a), pcm_u16be(a), pcm_u16le(a), pcm_u16le(a), pcm_u24be(a), pcm_u24be(a), pcm_u24le(a), pcm_u24le(a), pcm_u32be(a), pcm_u32be(a), pcm_u32le(a), pcm_u32le(a), pcm_zork(a), interplay_dpcm(a), roq_dpcm(a), roq_dpcm(a), sol_dpcm(a), xan_dpcm(a), adpcm_4xm(a), adpcm_adx(a), adpcm_adx(a), adpcm_afc(a), adpcm_ct(a), adpcm_dtk(a), adpcm_ea(a), adpcm_ea_maxis_xa(a), adpcm_ea_r1(a), adpcm_ea_r2(a), adpcm_ea_r3(a), adpcm_ea_xas(a), g722(a), g722(a), g726(a), g726(a), g726le(a), adpcm_ima_amv(a), adpcm_ima_apc(a), adpcm_ima_dk3(a), adpcm_ima_dk4(a), adpcm_ima_ea_eacs(a), adpcm_ima_ea_sead(a), adpcm_ima_iss(a), adpcm_ima_oki(a), adpcm_ima_qt(a), adpcm_ima_qt(a), adpcm_ima_rad(a), adpcm_ima_smjpeg(a), adpcm_ima_wav(a), adpcm_ima_wav(a), adpcm_ima_ws(a), adpcm_ms(a), adpcm_ms(a), adpcm_sbpro_2(a), adpcm_sbpro_3(a), adpcm_sbpro_4(a), adpcm_swf(a), adpcm_swf(a), adpcm_thp(a), adpcm_xa(a), adpcm_yamaha(a), adpcm_yamaha(a), vima(a), ssa(s), ssa(s), ass(s), ass(s), dvbsub(s), dvbsub(s), dvdsub(s), dvdsub(s), jacosub(s), microdvd(s), mov_text(s), mov_text(s), mpl2(s), pgssub(s), pjs(s), realtext(s), sami(s), srt(s), srt(s), subrip(s), subrip(s), subviewer(s), subviewer1(s), text(s), vplayer(s), webvtt(s), xsub(s), xsub(s), libfaac(a), libmp3lame(a), libvpx(v), libvpx(v), libvpx-vp9(v), libvpx-vp9(v), libx264(v), libx264rgb(v), bintext(v), xbin(v), idf(v), 
ffmpeg.allow_persistent => 0 => 0
ffmpeg.show_warnings => 0 => 0

En théorie, vous pouvez maintenant utiliser PHP-FFMPEG avec la nouvelle version de PHP installée. Vous pouvez ensuite recommencer avec une nouvelle version en adaptant la variable $PHP_INSTALL_VERSION.

Sources

Ceci est une adaptation des informations glanées sur les sites suivants :

ffmpeg et Helyar.net : pour l’installation de ffmpeg.
HowtoForge : explique l’installation de plusieurs versions de PHP (pour ISPConfig à la base, mais convient parfaitement même sans utiliser ISPConfig).
tony2001 via GitHub : pour une version améliorée de php-ffmpeg.

Une réflexion au sujet de « Howto: PHP-FFMPEG avec un PHP custom. »

  1. Bonjour.

    Merci pour ce guide, car il correspond exactement à l’erreur que j’avais en essayant d’installer ffmpeg + php-ffmpeg avec les autres guides.

    Du coup, je n’ai aucune erreur pour toute l’installation.

    Par contre, quand je fais php -i | grep « ffmpeg »
    J’ai cette erreur :
    PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib/php5/20121212/ffmpeg.so’ – /usr/lib/php5/20121212/ffmpeg.so: undefined symbol: avcodec_alloc_frame in Unknown on line 0

    Est-ce que vous savez d’où ça peut venir ?

    Merci beaucoup d’avance.

    Adrien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Notifiez-moi des commentaires à venir via email. Vous pouvez aussi vous abonner sans commenter.