1. First install subversion and ruby via yum or up2date:
yum -y install subversion ruby
yum install subversion*
yum install ncurses-devel*
yum install subversion*
yum install ncurses-devel*
2. make ffmpeg
cd /
mkdir ffmpeg
mkdir /usr/local/ffmpeg
cd /usr/local/ffmpeg
mkdir ffmpeg
mkdir /usr/local/ffmpeg
cd /usr/local/ffmpeg
3. Now we need to install MPlayer & FFmpeg sources from SVN:
cd /ffmpeg
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer
cd /usr/local/ffmpeg
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer
cd /usr/local/ffmpeg
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk mplayer
4. Now we need some codecs:
wget http://www.mplayerhq.hu/MPlayer/releases/codecs/essential-20071007.tar.bz2
tar xvjpf essential-20071007.tar.bz2
cd essential-20071007
mkdir /usr/local/lib/codecs
mv * /usr/local/lib/codecs/
chmod -R 755 /usr/local/lib/codecs/
cd /usr/local/ffmpeg
tar xvjpf essential-20071007.tar.bz2
cd essential-20071007
mkdir /usr/local/lib/codecs
mv * /usr/local/lib/codecs/
chmod -R 755 /usr/local/lib/codecs/
cd /usr/local/ffmpeg
5. Next we will install LAME MP3 encoder:
wget http://downloads.sourceforge.net/lame/lame-398-2.tar.gz
tar xvzpf lame-398-2.tar.gz
cd lame-398-2
./configure --prefix=/usr
make
make install
cd /usr/local/ffmpeg
tar xvzpf lame-398-2.tar.gz
cd lame-398-2
./configure --prefix=/usr
make
make install
cd /usr/local/ffmpeg
6. Now we install Libogg:
wget http://downloads.xiph.org/releases/ogg/libogg-1.1.3.tar.gz
tar xvzpf libogg-1.1.3.tar.gz
cd libogg-1.1.3
./configure --prefix=/usr
make
make install
cd /usr/local/ffmpeg
rpm -q libogg 로 설치되었는지 확인
#> libogg-1.1.3-3.el5
설치되었으면 패스..
tar xvzpf libogg-1.1.3.tar.gz
cd libogg-1.1.3
./configure --prefix=/usr
make
make install
cd /usr/local/ffmpeg
rpm -q libogg 로 설치되었는지 확인
#> libogg-1.1.3-3.el5
설치되었으면 패스..
7. We need to make sure the correct lib directories are setup in ldconfig. Edit the /etc/ld.so.conf file and add the following lines:
vi /etc/ld.so.conf
아래 경로 추가해준다.
/usr/lib
/usr/local/lib
아래 경로 추가해준다.
/usr/lib
/usr/local/lib
8. Now save and run the following command:
ldconfig
※ 7, 8 과정은 생략하여도 문제가 없는듯...
9. To install libvorbis we will run:
wget http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.0.tar.gz
tar xvzpf libvorbis-1.2.0.tar.gz
cd libvorbis-1.2.0
./configure --prefix=/usr
make
make install
cd /usr/local/ffmpeg
rpm -q libvorbis 으로 설치확인
# > libvorbis-1.1.2-3.el5_4.4
설치되었으면 패스
tar xvzpf libvorbis-1.2.0.tar.gz
cd libvorbis-1.2.0
./configure --prefix=/usr
make
make install
cd /usr/local/ffmpeg
rpm -q libvorbis 으로 설치확인
# > libvorbis-1.1.2-3.el5_4.4
설치되었으면 패스
10. Now we will install FLVTool2:
wget http://rubyforge.org/frs/download.php/17497/flvtool2-1.0.6.tgz
tar xvzpf flvtool2-1.0.6.tgz
cd flvtool2-1.0.6
ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install
cd /usr/local/ffmpeg
ruby 설치 안되어 있으면 설치하라던데..
리눅스 설치때 설치했으므로 패스
tar xvzpf flvtool2-1.0.6.tgz
cd flvtool2-1.0.6
ruby setup.rb config
ruby setup.rb setup
ruby setup.rb install
cd /usr/local/ffmpeg
ruby 설치 안되어 있으면 설치하라던데..
리눅스 설치때 설치했으므로 패스
11. Next we should build MPlayer & MEncoder and it will take a while unless you have a nice dual or quad core machine. Note that I’ve seen the SVN version of these packages break before, so you can always download the source code from their site (a stable copy) if it fails on make:
cd mplayer
./configure --prefix=/usr
make
make install
cd /usr/local/ffmpeg
./configure --prefix=/usr
make
make install
cd /usr/local/ffmpeg
12. We will now build FFmpeg:
mkdir /usr/local/src/tmp
chmod 777 /usr/local/src/tmp
export TMPDIR=/usr/local/src/tmp
cd /ffmpeg/ffmpeg
./configure --prefix=/usr --enable-libmp3lame --enable-libvorbis --disable-mmx --enable-shared
make
make install
cd /ffmpeg
chmod 777 /usr/local/src/tmp
export TMPDIR=/usr/local/src/tmp
cd /ffmpeg/ffmpeg
./configure --prefix=/usr --enable-libmp3lame --enable-libvorbis --disable-mmx --enable-shared
make
make install
cd /ffmpeg
※ 여기서 make하면, error가 발생하는 경우가 있습니다.
In file included from libavdevice/v4l.c:33:
/usr/include/linux/videodev.h:56: error: syntax error before "ulong"
/usr/include/linux/videodev.h:72: error: syntax error before '}' token
libavdevice/v4l.c: In function `grab_read_header':
libavdevice/v4l.c:75: error: storage size of 'tuner' isn't known
libavdevice/v4l.c:133: error: invalid application of `sizeof' to incomplete type `video_tuner'
libavdevice/v4l.c:140: error: invalid application of `sizeof' to incomplete type `video_tuner'
libavdevice/v4l.c:75: warning: unused variable `tuner'
make: *** [libavdevice/v4l.o] 오류 1
이런 error가 뜨신다면!
vi /usr/include/linux/videodev.h 해서 ulong을 unsigned long으로 바꿔주시면 문제 해결!
13. Symlink some libraries if needed (ignore file exists errors):
ln -s /usr/local/lib/libavformat.so.50 /usr/lib/libavformat.so.50
ln -s /usr/local/lib/libavcodec.so.51 /usr/lib/libavcodec.so.51
ln -s /usr/local/lib/libavutil.so.49 /usr/lib/libavutil.so.49
ln -s /usr/local/lib/libmp3lame.so.0 /usr/lib/libmp3lame.so.0
ln -s /usr/local/lib/libavformat.so.51 /usr/lib/libavformat.so.51
ln -s /usr/local/lib/libavcodec.so.51 /usr/lib/libavcodec.so.51
ln -s /usr/local/lib/libavutil.so.49 /usr/lib/libavutil.so.49
ln -s /usr/local/lib/libmp3lame.so.0 /usr/lib/libmp3lame.so.0
ln -s /usr/local/lib/libavformat.so.51 /usr/lib/libavformat.so.51
14. Now build FFmpeg-PHP:
wget http://downloads.sourceforge.net/ffmpeg-php/ffmpeg-php-0.6.0.tbz2
tar xvjpf ffmpeg-php-0.6.0.tbz2
cd ffmpeg-php-0.6.0
phpize
./configure --prefix=/usr
make
make install
cd /ffmpeg
/**********내경우..CentOS 5.4************************/
(아래경우에도 해결이 안되면 혹시 모르니...
zend를 설치하고 phpize를 실행해보자)
zend는 ZendOptimizer-3.3.9-linux-glibc23-i386 버전을 압축해제하고..
data 폴더 안에 들어가 보면... 여러 php버전이 존재한다...
5_0_x 형식...내 리눅스 php -v 가 뭔지 확인한후 (내껀 PHP 5.1.6 다)
5_1_x_comp폴더 안의 ZendOptimizer.so를 /usr/lib/php/modules 에 카피한후
/etc/php.ini 젤 아래에... extension=ZendOptimizer.so 한줄을 추가해주자..
그리고 service httpd restart 하면 zend설치 완료 phpinfo();에서 확인해보면 올라와있다..흐~
phpize
./configure --enable-shared --with-php-config=/usr/bin/php-config
make
실행중
/root/ffmpeg/ffmpeg-php-0.6.0/ffmpeg_frame.c:421: error: 'PIX_FMT_RGBA32' undeclared (first use in this function)
make: *** [ffmpeg_frame.lo] 오류 1
이런오류를 만나게 되면...
해결 :
perl -i -p -e 's/PIX_FMT_RGBA32/PIX_FMT_RGBA/g;' ffmpeg_frame.c
실행후 다시 시도해 보자...
make
make install
잘된다...흐흐..
모두 설치 했으면 재부팅 또는 service httpd restart를 한다..
그런데 httpd restart가 안되는 경우가 있다...
그렇다면 재부팅...
그리고 ffmpeg를 콘솔에서 실행해본다... 아래와 같은 메시지가 뜬다면..
ffmpeg: error while loading shared libraries: libavdevice.so.52: cannot open shared object file: No such file or directory
ldconfig 한번 때려주자...ㅋ
**
뭐 대략 난감하게 여러 시도를 해봤었다...
위과정을 모두 따라하면서 제대로 설치는 된듯한데...
문제는... ffmpeg-php가 제대로 /usr/lib/php/modules/에 로드 되지 않는 경우였다...
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/ffmpeg.so' - /usr/lib/php/modules/ffmpeg.so: undefined symbol: _php_create_ffmpeg_frame in Unknown on line 0
이런 오류 말이다..
ffmpeg-php.0.5.3.1 이런버전으로 설치했을경우 되지 않았는데...
ffmpeg-php.0.6.0으로 위 오류해결과정을 거치고 나니 해결되었다...
아...정말 힘들었다...
전체적으로 다시 정리해야할듯 싶다... 여기 txt 파일의 설치 입력내용도 참고 할만하다...
모두 정리해서 다시 올려야 겠다...
tar xvjpf ffmpeg-php-0.6.0.tbz2
cd ffmpeg-php-0.6.0
phpize
./configure --prefix=/usr
make
make install
cd /ffmpeg
/**********내경우..CentOS 5.4************************/
(아래경우에도 해결이 안되면 혹시 모르니...
zend를 설치하고 phpize를 실행해보자)
zend는 ZendOptimizer-3.3.9-linux-glibc23-i386 버전을 압축해제하고..
data 폴더 안에 들어가 보면... 여러 php버전이 존재한다...
5_0_x 형식...내 리눅스 php -v 가 뭔지 확인한후 (내껀 PHP 5.1.6 다)
5_1_x_comp폴더 안의 ZendOptimizer.so를 /usr/lib/php/modules 에 카피한후
/etc/php.ini 젤 아래에... extension=ZendOptimizer.so 한줄을 추가해주자..
그리고 service httpd restart 하면 zend설치 완료 phpinfo();에서 확인해보면 올라와있다..흐~
phpize
./configure --enable-shared --with-php-config=/usr/bin/php-config
make
실행중
/root/ffmpeg/ffmpeg-php-0.6.0/ffmpeg_frame.c:421: error: 'PIX_FMT_RGBA32' undeclared (first use in this function)
make: *** [ffmpeg_frame.lo] 오류 1
이런오류를 만나게 되면...
해결 :
perl -i -p -e 's/PIX_FMT_RGBA32/PIX_FMT_RGBA/g;' ffmpeg_frame.c
실행후 다시 시도해 보자...
make
make install
잘된다...흐흐..
모두 설치 했으면 재부팅 또는 service httpd restart를 한다..
그런데 httpd restart가 안되는 경우가 있다...
그렇다면 재부팅...
그리고 ffmpeg를 콘솔에서 실행해본다... 아래와 같은 메시지가 뜬다면..
ffmpeg: error while loading shared libraries: libavdevice.so.52: cannot open shared object file: No such file or directory
ldconfig 한번 때려주자...ㅋ
**
뭐 대략 난감하게 여러 시도를 해봤었다...
위과정을 모두 따라하면서 제대로 설치는 된듯한데...
문제는... ffmpeg-php가 제대로 /usr/lib/php/modules/에 로드 되지 않는 경우였다...
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/ffmpeg.so' - /usr/lib/php/modules/ffmpeg.so: undefined symbol: _php_create_ffmpeg_frame in Unknown on line 0
이런 오류 말이다..
ffmpeg-php.0.5.3.1 이런버전으로 설치했을경우 되지 않았는데...
ffmpeg-php.0.6.0으로 위 오류해결과정을 거치고 나니 해결되었다...
아...정말 힘들었다...
전체적으로 다시 정리해야할듯 싶다... 여기 txt 파일의 설치 입력내용도 참고 할만하다...
모두 정리해서 다시 올려야 겠다...
오류
make: *** [ffmpeg_frame.lo] 오류 1
해결 2
cp ffmpeg_frame.loT ffmpeg_frame.lo
※ 저는 이 과정은 생략하였습니다.
허나 실행은 잘되는군요!ㅋ
15. Now you need to copy the ffmpeg.so file that was created from it’s location (from the build) to /usr/local/lib/php/extensions/, it should look something like:
cp /usr/local/lib/php/extensions/no-debug-non-zts-????????????/ffmpeg.so /usr/local/lib/php/extensions/
16. Modify your php.ini. Try /etc/php.ini or /usr/lib/php.ini or /usr/local/Zend/etc/php.ini as they are common locations, you can do php -i | grep -i ini to find the proper location. Change the extension_dir value as seen below and add the extension as seen below:
extension_dir = “/usr/local/lib/php/extensions/”
extension=ffmpeg.so
extension=ffmpeg.so
17. Now save and restart apache and test php for ffmpeg on both apache via phpinfo() and from shell:
/etc/rc.d/init.d/httpd restart
php -r 'phpinfo();' | grep ffmpeg
Error:cannot restore segment prot after reloc: Permission denied 이런 메세지가 있으면..
vi /etc/sysconfig/selinux
SELINUX=enforcing
위와 같은 설정이 있다면 위부분을
SELINUX=disabled 로 변경
시스템 부팅 selinux가 커널쪽에 무슨 설정이 있다고 합니다 그래서 리붓
SELINUX=disabled 로 변경
시스템 부팅 selinux가 커널쪽에 무슨 설정이 있다고 합니다 그래서 리붓
차후 확인 php -r 'phpinfo();' | grep ffmpeg 정상적으로 보임
18. 테스트 방법...
ffmpeg -i mm.asf -ar 22050 -ab 32 -f flv -s 320x240 video.flv | flvtool2 -U stdin video.flv
ffmpeg -i mm.asf -r 25 -ss 00:00:44 -t 00:00:45 -f image2 images%d.jpg
(이미지가 많이 출력출력된다..)
ffmpeg -i "mm.asf" -an -ss 00:00:33 -qscale 1 -r 0.1 -vframes 6 -y "%d.png"
(이미지 썸네일 총 6개의 1~6.png 파일을 생성한다...)
기존에 생성한 이미지가 존재하면 덮어 씌운다...
중요한 부분은 php 페이지에서
function converttoflv( $in, $out )
{
$cmd = "/usr/bin/ffmpeg -v 0 -i $in -ar 11025 $out 2>&1";
$fh = popen( $cmd, "r" );
while( fgets( $fh ) ) { echo $fh;}
pclose( $fh );
unlink( $in );
}
위 붉은 부분처럼...
ffmpeg 실행경로를 적어줘야 실행된다는것이다...
/usr/bin/ffmpeg 설치경로에 따라 변경되는 부분이기에 꼭 체크 필요하다..
popen 이함수는 파일 포인터를 열어 파이프로 전달시키는 함수이다..
즉 파일이 업로드 되는동안..fgets의 string이 반복되고 파일변환이 끝나면 false를 반환해 while문을
빠져나오고...pclose를 통해 파일포인터를 닫는다...
좀더 자세한 부분을 찾아봐야 할듯..