[an error occurred while processing this directive]
【久々のcoffee break】ffmpeg-php のインストールで四苦八苦・・・

第326日目:【久々のcoffee break】ffmpeg-php のインストールで四苦八苦・・・

【追記 2012/08/17 10:05】
ども、ども、▲('A`)/です。
えーと、本編でも書いた様に、ffmpeg-phpを攻略したのも束の間、PHPMotionで
四苦八苦しています。
Webからのsetupの所でPHPShieldが有効にならないので、siteadminのページが
表示できないのです。
こんなエラーが出て・・・

Warning: dl() [function.dl]: Temporary module name should contain only filename 
in /home/dokuo/public_html/phpmotion/classes/config.php on line 2
PHP script /home/dokuo/public_html/phpmotion/classes/config.php is protected by phpSHIELD
 and requires the phpSHIELD loader phpshield.5.2.fre.
The phpSHIELD loader has not been installed, or is not installed correctly.
Please visit the phpSHIELD php encoder site to download required loader.

どうしたものかと途方に暮れている所に、「9.1-RC1が公開されたみたい」という
知らせが飛び込んできて、、、
PHPMotionは一度仕切りなおしという事にして、急遽dokuo号に9.1の環境を構築して
ソース入手に取り掛かっています。
9.1-RC1が手に入ったら、いつものベンチマークを取って日記でお知らせしますね。

▲(‘A`)の縁側日記

こちらも、不定期で更新中です。
雑記帳というスレットを作りましたので、ご自由にお使いください。
(びんたんの使い方はこちらのページをご覧ください。)
それでは、また!▲('A`)/

↓ 本編はこちらです。

(2012/08/16 13:40)
ども、ども、▲('A`)/です。
えーと、世の中的にはお盆休みも終わりになっているかと思います。
(まだ帰省先から移動中という人もいるかも、です。)
今日は久しぶりのcoffee breakとして、動画変換ソフトのffmpegのPHP拡張モジュールである
ffmpeg-php のインストールについて書いてみようと思います。
なんでまたそんなのに手を出してるの?と言いますと、ちょっとね、
あぶらみくん( `э´)からお題を頂きまして・・・

( `э´)「ねえ、ねえ、YouTubeみたいなサイトって作れないかなあ?」
▲('A`)「うーん、ちょっと調べてみるよ・・・」
(小一時間経過)
▲('A`)「えーとね、何かね、動画配信・投稿サイトを作るソフト、って
    いうのがあるみたいなんだ。」
( `э´)「おっ、いいねえ。」
▲('A`)「PHPMotion とか ClipBacket って言うのがあるんだけど・・・」
( `э´)「ふん、ふん。」
▲('A`)「ただね、もっぱらLinuxサーバでの事例がほとんどなんだ・・・」
( `э´)「ガクッ!FreeBSDでは使えないの?」
▲('A`)「うーん、事例が少ないし、うちのサーバってportsからインストール
    していないソフトも混在しているからねえ・・・」
( `э´)「そうなのか・・・」
▲('A`)「まあ、ダメもとで、挑戦してみるよ・・・」
( `э´)「よろしくてすっ!」

とまあ、dokuo号を使って色々やっている訳です。
こんな風な事がきっかけになって、BIG-Serverのお客様に面白いソフトを
ご紹介したりするのです、ハイ。

で、今はどこまで攻略したかといいますと、狙いをPHPMotionに絞って
環境構築しているのですが、PHPMotionを使おうとする場合には以下のソフトが
必要になるそうです。
・Apache
・PHP (バージョンは 5.2系?)
・ffmpeg
・mencoder
・mplayer
・flvtool2
そして今回取り上げる
・ffmpeg-php
えーと、ffmpegについては日記第64日目にちょこっと取り上げました。
あの事はpkg_addコマンドでffmpegやmencoder、mplayerのバイナリをインストールしていました。
ただ、音声とか映像のコーデックが一部含まれていなかったりするので、面倒でもportsから
ソースベースでインストールしてみるのもあり、だと思います。
今回はそこらへんも含めて書きますね。

まずは、ffmpegについて書きますね。
ffmpegをportsからインストールする時、make config と叩いて
パラメータを確認しながら変更してみましょう。

cd /usr/ports/multimedia/ffmpeg
make config
そうすると、以下の2つの画面が表示されます。
  

で、以下のパラメータを追加で選択しておくと大体のコーデックを
サポートできると思います。
(VORBIS、X264、XVIDはデフォルトで選択されています。)

FAAC
GSM
LAME
OPTIMIZED_CFLAGS
SDL

で、次に以下のコマンドを実行すると、インストールされます。

make install clean

ここでffmpegがインストールされると、/usr/local/include に
ヘッダーファイルがインストールされます。
大抵は /usr/local/include/ffmpeg というディレクトリが作られて
そこに設置されます。

さて、次はffmpeg-phpをインストールしようと、以下の手順で実行して
みたところ・・・・あれっ?

cd /tmp
fetch -o ffmpeg-php-0.6.0.tbz2 http://sourceforge.net/projects/ffmpeg-php/files/ffmpeg-php/0.6.0/ffmpeg-php-0.6.0.tbz2/download
tar xjvf ffmpeg-php-0.6.0.tbz2
cd ffmpeg-php-0.6.0
phpize
./configure
make

こんなエラーが出て、うまくいきません。
どうもインクルードするヘッダファイルが見つからない様です。

In file included from /tmp/ffmpeg-php-0.6.0/ffmpeg-php.c:42:
/usr/local/include/ffmpeg/avcodec.h:30:30: error: libavutil/avutil.h: No such file or directory
In file included from /tmp/ffmpeg-php-0.6.0/ffmpeg-php.c:42:
/usr/local/include/ffmpeg/avcodec.h:1035: error: expected ':', ',', ';', '}' or '__attribute__' before '*' token

どうしてなのかなあ?と最初ソースffmpeg-php.cを見たのですが、
PHPは判らないので、次は /usr/local/include の中を見ました。
こんな感じです。

# ls -l /usr/local/include/
total 1470
drwxr-xr-x   3 root  wheel     512 Aug  9 09:26 GL
drwxr-xr-x   2 root  wheel    1024 Aug 10 01:16 SDL
drwxr-xr-x   9 root  wheel    2048 Aug 10 02:43 X11
-r--r--r--   1 root  wheel   34085 Aug 10 01:15 aalib.h
-r--r--r--   1 root  wheel   13917 Aug  9 09:11 ansidecl.h
drwxr-xr-x   2 root  wheel    1536 Aug  9 09:05 apache22
drwxr-xr-x   2 root  wheel    2048 Aug  9 09:04 apr-1
drwxr-xr-x   3 root  wheel     512 Aug 10 02:35 atk-1.0
-r--r--r--   1 root  wheel    2284 Aug  9 09:01 autosprintf.h
-r--r--r--   1 root  wheel  198148 Aug  9 09:11 bfd.h
-r--r--r--   1 root  wheel   29684 Aug  9 09:11 bfdlink.h
drwxr-xr-x  77 root  wheel    4608 Aug 10 02:19 boost
drwxr-xr-x   2 root  wheel     512 Aug 10 02:34 cairo
-r--r--r--   1 root  wheel   14169 Aug  9 09:15 check.h
drwxr-xr-x   2 root  wheel     512 Aug 10 02:39 cups
drwxr-xr-x   2 root  wheel     512 Aug  9 09:04 db42
-r--r--r--   1 root  wheel   16736 Aug  9 09:11 dis-asm.h
drwxr-xr-x   2 root  wheel     512 Aug  9 09:25 drm
-r--r--r--   1 root  wheel    4673 Aug 10 01:32 entities.h
-r--r--r--   1 root  wheel   40339 Aug  9 09:01 expat.h
-r--r--r--   1 root  wheel    3364 Aug  9 09:01 expat_external.h
-r--r--r--   1 root  wheel    2363 Aug 10 01:17 faac.h
-r--r--r--   1 root  wheel    3059 Aug 10 01:17 faaccfg.h
-r--r--r--   1 root  wheel    1461 Aug 10 01:17 faad.h
-r--r--r--   1 root  wheel    6875 Aug 10 02:34 fam.h
lrwxr-xr-x   1 root  wheel      33 Aug 10 02:30 ffi.h -> ../lib/libffi-3.0.9/include/ffi.h
lrwxr-xr-x   1 root  wheel      39 Aug 10 02:30 ffitarget.h -> ../lib/libffi-3.0.9/include/ffitarget.h
drwxr-xr-x   2 root  wheel    1024 Aug 10 01:26 ffmpeg
drwxr-xr-x   2 root  wheel     512 Aug 10 01:32 fontconfig
drwxr-xr-x   3 root  wheel     512 Aug 10 01:32 freetype2
-r--r--r--   1 root  wheel    3890 Aug 10 01:32 ft2build.h
drwxr-xr-x   4 root  wheel     512 Aug 10 02:47 gail-1.0
-r--r--r--   1 root  wheel    7184 Aug  9 09:17 gcrypt-module.h
-r--r--r--   1 root  wheel   70861 Aug  9 09:17 gcrypt.h
-r--r--r--   1 root  wheel   32650 Aug 10 01:32 gd.h
-r--r--r--   1 root  wheel    1154 Aug 10 01:32 gd_io.h
-r--r--r--   1 root  wheel    4744 Aug  9 09:03 gdbm.h
-r--r--r--   1 root  wheel    2812 Aug 10 01:32 gdcache.h
-r--r--r--   1 root  wheel     623 Aug 10 01:32 gdfontg.h
-r--r--r--   1 root  wheel     621 Aug 10 01:32 gdfontl.h
-r--r--r--   1 root  wheel     590 Aug 10 01:32 gdfontmb.h
-r--r--r--   1 root  wheel     585 Aug 10 01:32 gdfonts.h
-r--r--r--   1 root  wheel     617 Aug 10 01:32 gdfontt.h
-r--r--r--   1 root  wheel    2396 Aug 10 01:32 gdfx.h
-r--r--r--   1 root  wheel    1752 Aug 10 01:32 gdhelpers.h
drwxr-xr-x   4 root  wheel     512 Aug 10 02:41 gdk-pixbuf-2.0
-r--r--r--   1 root  wheel   15523 Aug  9 09:01 gettext-po.h
-r--r--r--   1 root  wheel   14474 Aug 10 02:29 gif_lib.h
drwxr-xr-x   3 root  wheel     512 Aug 10 02:33 gio-unix-2.0
drwxr-xr-x   5 root  wheel     512 Aug 10 02:33 glib-2.0
-r--r--r--   1 root  wheel   86221 Aug  9 09:09 gmp.h
-r--r--r--   1 root  wheel  114646 Aug  9 09:09 gmpxx.h
drwxr-xr-x   2 root  wheel     512 Aug 10 02:39 gnutls
drwxr-xr-x   2 root  wheel    1024 Aug 10 02:35 gobject-introspection-1.0
drwxr-xr-x   4 root  wheel    1024 Aug  9 09:26 gpac
-r--r--r--   1 root  wheel   23522 Aug  9 09:17 gpg-error.h
-r--r--r--   1 root  wheel    1681 Aug 10 01:21 gsm.h
drwxr-xr-x   4 root  wheel     512 Aug 10 02:47 gtk-2.0
drwxr-xr-x   3 root  wheel     512 Aug 10 02:47 gtk-unix-print-2.0
-r--r--r--   1 root  wheel    9244 Aug  9 08:59 iconv.h
-r--r--r--   1 root  wheel    7816 Aug  9 09:25 intel_bufmgr.h
drwxr-xr-x   2 root  wheel     512 Aug 10 02:41 jasper
-r--r--r--   1 root  wheel   11222 Aug 10 02:40 jbig.h
-r--r--r--   1 root  wheel    1674 Aug  9 09:12 jconfig.h
-r--r--r--   1 root  wheel   14581 Aug  9 09:12 jerror.h
-r--r--r--   1 root  wheel    3250 Aug  9 09:12 jinclude.h
-r--r--r--   1 root  wheel   12783 Aug  9 09:12 jmorecfg.h
-r--r--r--   1 root  wheel   16470 Aug  9 09:12 jpegint.h
-r--r--r--   1 root  wheel   48475 Aug  9 09:12 jpeglib.h
drwxr-xr-x   2 root  wheel     512 Aug 10 01:21 lame
drwxr-xr-x   2 root  wheel     512 Aug 10 02:17 layout
drwxr-xr-x   2 root  wheel     512 Aug 10 01:26 libavcodec
drwxr-xr-x   2 root  wheel     512 Aug 10 01:26 libavdevice
drwxr-xr-x   2 root  wheel     512 Aug 10 01:26 libavfilter
drwxr-xr-x   2 root  wheel     512 Aug 10 01:26 libavformat
drwxr-xr-x   2 root  wheel     512 Aug 10 01:26 libavutil
-r--r--r--   1 root  wheel    1550 Aug  9 08:59 libcharset.h
drwxr-xr-x   2 root  wheel     512 Aug 10 02:57 libdv
drwxr-xr-x   2 root  wheel     512 Aug  9 09:21 libexslt
-r--r--r--   1 root  wheel   16647 Aug  9 09:01 libintl.h
drwxr-xr-x   2 root  wheel     512 Aug  9 09:13 libpng
drwxr-xr-x   2 root  wheel     512 Aug 10 01:26 libpostproc
drwxr-xr-x   2 root  wheel     512 Aug 10 01:26 libswscale
drwxr-xr-x   3 root  wheel     512 Aug  9 09:20 libxml2
drwxr-xr-x   2 root  wheel     512 Aug  9 09:21 libxslt
drwxr-xr-x   2 root  wheel    1024 Aug  9 09:08 libyasm
-r--r--r--   1 root  wheel     235 Aug  9 09:08 libyasm-stdint.h
-r--r--r--   1 root  wheel    2448 Aug  9 09:08 libyasm.h
-r--r--r--   1 root  wheel    1395 Aug  9 08:59 localcharset.h
-r--r--r--   1 root  wheel   27127 Aug 10 02:29 mad.h
-r--r--r--   1 root  wheel    5542 Aug 10 01:17 mp4ff.h
-r--r--r--   1 root  wheel   11106 Aug 10 01:17 mp4ffint.h
drwxr-xr-x   2 root  wheel     512 Aug 10 01:16 mp4v2
-r--r--r--   1 root  wheel    6282 Aug  9 09:10 mpf2mpfr.h
-r--r--r--   1 root  wheel   45657 Aug  9 09:10 mpfr.h
-r--r--r--   1 root  wheel    8463 Aug 10 01:17 neaacdec.h
drwxr-xr-x   2 root  wheel     512 Aug  9 09:25 nouveau
drwxr-xr-x   2 root  wheel     512 Aug 10 01:24 ogg
drwxr-xr-x   2 root  wheel     512 Aug 10 02:58 opencore-amrnb
drwxr-xr-x   2 root  wheel     512 Aug 10 02:58 opencore-amrwb
drwxr-xr-x   4 root  wheel     512 Aug 10 01:23 orc-0.4
drwxr-xr-x   3 root  wheel     512 Aug 10 02:45 pango-1.0
-r--r--r--   1 root  wheel   13990 Aug  9 09:05 pcre.h
-r--r--r--   1 root  wheel    6600 Aug  9 09:05 pcre_scanner.h
-r--r--r--   1 root  wheel    6253 Aug  9 09:05 pcre_stringpiece.h
-r--r--r--   1 root  wheel   26529 Aug  9 09:05 pcrecpp.h
-r--r--r--   1 root  wheel    6783 Aug  9 09:05 pcrecpparg.h
-r--r--r--   1 root  wheel    5452 Aug  9 09:05 pcreposix.h
drwxr-xr-x   6 root  wheel     512 Aug 10 01:29 php
drwxr-xr-x   2 root  wheel     512 Aug 10 02:32 pixman-1
lrwxr-xr-x   1 root  wheel      12 Aug  9 09:13 png.h -> libpng/png.h
lrwxr-xr-x   1 root  wheel      16 Aug  9 09:13 pngconf.h -> libpng/pngconf.h
-r--r--r--   1 root  wheel   22621 Aug 10 02:57 popt.h
drwxr-xr-x   2 root  wheel     512 Aug 10 01:26 postproc
drwxr-xr-x   2 root  wheel    2048 Aug  9 09:03 python2.6
drwxr-xr-x   3 root  wheel     512 Aug 10 01:23 schroedinger-1.0
drwxr-xr-x   2 root  wheel     512 Aug 10 02:29 speex
-r--r--r--   1 root  wheel    2198 Aug  9 09:11 symcat.h
drwxr-xr-x   2 root  wheel     512 Aug 10 01:24 theora
-r--r--r--   1 root  wheel   33815 Aug 10 02:40 tiff.h
-r--r--r--   1 root  wheel    3429 Aug 10 02:40 tiffconf.h
-r--r--r--   1 root  wheel   22674 Aug 10 02:40 tiffio.h
-r--r--r--   1 root  wheel    1702 Aug 10 02:40 tiffio.hxx
-r--r--r--   1 root  wheel     415 Aug 10 02:40 tiffvers.h
drwxr-xr-x   2 root  wheel    3072 Aug 10 02:17 unicode
drwxr-xr-x   2 root  wheel     512 Aug 10 01:24 vorbis
drwxr-xr-x   2 root  wheel     512 Aug 10 01:25 vpx
-rw-r--r--   1 root  wheel   38663 Aug  9 09:26 x264.h
-rw-r--r--   1 root  wheel      50 Aug  9 09:26 x264_config.h
drwxr-xr-x   2 root  wheel    1024 Aug 10 02:31 xcb
-r--r--r--   1 root  wheel   26437 Aug  9 09:25 xf86drm.h
-r--r--r--   1 root  wheel   11017 Aug  9 09:25 xf86drmMode.h
-rw-r--r--   1 root  wheel   33179 Aug 10 01:26 xvid.h
# 

エラーメッセージを見続けていたら、

   \  __  /
   _ (m) _ピコーン
      |ミ|
    /  `´  \
     ('A`)    
     ノヽノヽ
       くく

「待てよ・・・」となりまして。
もしかして「インクルードするヘッダファイルは /usr/local/include/ffmpeg/ に
全部あるものだと思っていないか?」このソースは・・・
試しに /usr/local/include の中にある2つのディレクトリを
こんな風に/usr/local/include/ffmpeg/の中にコピーしてみました。

mkdir /usr/local/include/ffmpeg/libavutil
mkdir /usr/local/include/ffmpeg/libavcodec
cp /usr/local/include/libavcodec/* /usr/local/include/ffmpeg/libavcodec
cp /usr/local/include/libavutil/* /usr/local/include/ffmpeg/libavutil

それと、どうもgoogleさんで調べたら、パッチファイルを当ててあげないと
いけないようでしたので、ffmpeg-phpのサイトからパッチを手に入れて、
当ててあげました。
パッチファイルの入手方法です。
1)サイトのメニューから「support」をクリック
2)「Project Trackers」と書かれている所の「Patches」というリンクをクリック
3)パッチファイルのページが表示されるので、一番上の
 「fix toGDImage and php 5.4 build」をクリック
4)ページが切り替わるので、下段の方に「Attached File ( 1 )」と書かれたリンクを
 クリックすると、patch.diff と書かれた行が出てきます。向かって右の方に
 「download」と書かれたリンクがあるので、クリックするとパッチファイルが
 ダウンロードできます。

こうして手に入れたパッチファイルはココに置いておきます。
先程展開した /tmp/ffmpeg-php-0.6.0 の中に設置して、以下のコマンドを実行します。

patch < patch.diff

で、パッチを当てたら終わりか?と思ったら、ffmpeg_frame.c のソース中の
変数 PIX_FMT_RGBA32PIX_FMT_RGB32 に変更します。
(RGBA の A を取り除くのです。)
viエディタを使う場合にはこういう風に置換して保存すればOKです。

vi ffmpeg_frame.c
:%s/PIX_FMT_RGBA32/PIX_FMT_RGB32
:wq

お待たせしました。
これで もう一度 make を行なうと、エラーは出ずに最後に以下の2行が
メッセージとして表示されれば成功です。

Build complete.
Don't forget to run 'make test'.

後は make install を実行すれば PHPのEXTENSION(拡張モジュール)が置かれている
ディレクトリにモジュールが設置されます。
こんな風に

# make install
Installing shared extensions: /usr/local/lib/php/extensions/debug-non-zts-20060613/
#

で、実際に有効にするには php.ini に以下の行を追加します。

extension=ffmpeg.so

追加が終わったら、Apacheを再起動します。
php.info が設置されていたらリロードしてみると、以下の画像の様に
ffmpeg と書かれた欄が表示されます。



えーと、本当はPHPMotionのインストール方法をご紹介できたら良かったのですが、
実はまだ攻略中(挑戦中)でして・・・
いやあ、うまく行きません。
何か「PHPShield」という新しい壁が出てきまして、難儀しています・・・トホホ。

攻略が出来て、うまく動いたら別の機会に日記でご報告しようと思います。
長ーい目で見てください。よろしくです。

今日は朝は土砂降りの雨でしたが、ようやく落ち着いてきました。
短い夏ですが、怪我や事故に遭わないように気をつけてくださいね。
それでは、また!▲('A`)/

325日目に戻る。   327日目に続く。

目次に戻る
1日目 2日目 3日目 4日目 5日目 6日目 7日目
8日目 9日目 10日目 11日目 12日目 13日目 14日目
15日目 16日目 17日目 18日目 19日目 20日目 21日目
22日目 23日目 24日目 25日目 26日目 27日目 28日目
29日目 30日目 31日目 32日目 33日目 34日目 35日目
36日目 37日目 38日目 39日目 40日目 41日目 42日目
43日目 44日目 45日目 46日目 47日目 48日目 49日目
50日目 51日目 52日目 53日目 54日目 55日目 56日目
57日目 58日目 59日目 60日目 61日目 62日目 63日目
64日目 65日目 66日目 67日目 68日目 69日目 70日目
71日目 72日目 73日目 74日目 75日目 76日目 77日目
78日目 79日目 80日目 81日目 82日目 83日目 84日目
85日目 86日目 87日目 88日目 89日目 90日目 91日目
92日目 93日目 94日目 95日目 96日目 97日目 98日目
99日目 100日目 101日目 102日目 103日目 104日目 105日目
106日目 107日目 108日目 109日目 110日目 111日目 112日目
113日目 114日目 115日目 116日目 117日目 118日目 119日目
120日目 121日目 122日目 123日目 124日目 125日目 126日目
127日目 128日目 129日目 130日目 131日目 132日目 133日目
134日目 135日目 136日目 137日目 138日目 139日目 140日目
141日目 142日目 143日目 144日目 145日目 146日目 147日目
148日目 149日目 150日目 151日目 152日目 153日目 154日目
155日目 156日目 157日目 158日目 159日目 160日目 161日目
162日目 163日目 164日目 165日目 166日目 167日目 168日目
169日目 170日目 171日目 172日目 173日目 174日目 175日目
176日目 177日目 178日目 179日目 180日目 181日目 182日目
183日目 184日目 185日目 186日目 187日目 188日目 189日目
190日目 191日目 192日目 193日目 194日目 195日目 196日目
197日目 198日目 199日目 200日目 201日目 202日目 203日目
204日目 205日目 206日目 207日目 208日目 209日目 210日目
211日目 212日目 213日目 214日目 215日目 216日目 217日目
218日目 219日目 220日目 221日目 222日目 223日目 224日目
225日目 226日目 227日目 228日目 229日目 230日目 231日目
232日目 233日目 234日目 235日目 236日目 237日目 238日目
239日目 240日目 241日目 242日目 243日目 244日目 245日目
246日目 247日目 248日目 249日目 250日目 251日目 252日目
253日目 254日目 255日目 256日目 257日目 258日目 259日目
260日目 261日目 262日目 263日目 264日目 265日目 266日目
267日目 268日目 269日目 270日目 271日目 272日目 273日目
274日目 275日目 276日目 277日目 278日目 279日目 280日目
281日目 282日目 283日目 284日目 285日目 286日目 287日目
288日目 289日目 290日目 291日目 292日目 293日目 294日目
295日目 296日目 297日目 298日目 299日目 300日目 301日目
302日目 303日目 304日目 305日目 306日目 307日目 308日目
309日目 310日目 311日目 312日目 313日目 314日目 315日目
316日目 317日目 318日目 319日目 320日目 321日目 322日目
323日目 324日目 325日目 326日目 327日目 328日目 329日目
330日目 331日目 332日目 333日目 334日目 335日目 336日目
337日目 338日目 339日目 340日目 341日目 342日目 343日目
344日目 345日目 346日目 347日目 348日目 349日目 350日目
351日目 352日目 353日目 354日目 355日目 356日目 357日目
358日目 359日目 360日目 361日目 362日目 363日目 364日目

いま一番お得なページ! 解析
[an error occurred while processing this directive]