[스트리밍] FFmpeg 를 이용한 리눅스 스트리밍 시스템 구축
zb4_pds_doc_124.ziphttp://www.ohmi.co.kr/gnu4/bbs/board.php?bo_table=linux_study&wr_id=22
0. 연구 목적
요즘 동영상은 인터넷 사용에서 필수적인 요소로 작용한다.
처음 html페이지는 정적이었고, 스크립트를 넣어서 상호 작용을 하며,
그림 파일을 업로드 하여 서버에서 썸네일(손톱만한 크기의 그림)을 자동 생성한다.
지금부터 하려는 것은 사용자의 동영상을 서버에 올리면, 그 동영상에서 스크린샷(특정부위를 그림파일으로 만듦)을
찍고, 원하는 포멧으로 변환하여 플레이 하려 한다. 내가 원하는 것을 정리하면 다음과 같다.
1. 동영상 파일을 올리면, 서버에서 자동으로 스크린 샷을 찍어 동영상을 간단히 소개 할 수 있다.
2. 동영상 파일을 특정파일 포멧 으로 변환 할 수 있다.
3. 동영상 파일을 원하는 화면크기, 용량으로 변환 할 수 있다.
4. 동영상을 서버에서 스트리밍으로 전송할 수 있다. ==> ffserver 는 조금 별로
(스트리밍 : 파일을 모두 받지 않고, 받은 만큼 플레이 가능, 앞으로가기, 뒤로 가기 지원)
위와 같은 목적으로 난 본 연구를 진행했다.
1. 연구 환경
H/W : Core2Duo 6400, RAM 1G, HDD 200G(SATA)
S/W : SULinux 1.4 Server (RHEL4와 호환)
2. 설치
SULinux는 X가 없는 시스템이다. 그래서 엄청 많은 패키지를 설치해야 했으며, CentOS 4.4 와 http://atrpms.net/dist/el4/에서 rpm으로 묶어진 파일들을 받아 설치한다.
다음과 같은 40개의 rpm을 설치하고야 ffmpeg 패키지가 설치가 가능했다.
imlib2-devel-1.3.0-6.el4.at.i386.rpm
libogg0-1.1.3-7.el4.at.i386.rpm
libmp3lame0-3.97-15.el4.at.i386.rpm
libraw1394-1.2.1-0_8.el4.at.i386.rpm
libraw1394-devel-1.2.1-0_8.el4.at.i386.rpm
SDL-devel-1.2.7-8.i386.rpm
libavformat51-0.4.9-19_r7407.el4.at.i386.rpm
fontconfig-devel-2.2.3-7.i386.rpm
libvorbis-1.1.2-5.el4.at.i386.rpm
ffmpeg-0.4.9-19_r7407.el4.at.i386.rpm
alsa-lib-1.0.6-5.RHEL4.i386.rpm
libraw1394_8-1.2.1-0_8.el4.at.i386.rpm
libungif-devel-4.1.3-1.i386.rpm
libavutil49-0.4.9-19_r7407.el4.at.i386.rpm
xvidcore-1.1.2-1.el4.rf.i386.rpm
SDL-1.2.7-8.i386.rpm
libdc1394_control13-1.1.0-6.el4.at.i386.rpm
imlib2-1.3.0-6.el4.at.i386.rpm
ffmpeg-devel-0.4.9-19_r7407.el4.at.i386.rpm
xorg-x11-devel-6.8.2-1.EL.13.37.5.i386.rpm
faac-1.25-1.el4.at.i386.rpm
libavcodec51-0.4.9-19_r7407.el4.at.i386.rpm
libpostproc51-0.4.9-19_r7407.el4.at.i386.rpm
faac-devel-1.25-1.el4.at.i386.rpm
libvorbis0-1.1.2-5.el4.at.i386.rpm
libdc1394-1.1.0-6.el4.at.i386.rpm
libungif-progs-4.1.3-1.i386.rpm
libogg-1.1.3-7.el4.at.i386.rpm
alsa-utils-1.0.6-4.i386.rpm
libogg-devel-1.1.3-7.el4.at.i386.rpm
libdc1394-devel-1.1.0-6.el4.at.i386.rpm
x264-0.0.0-0.3.20061214.el4.rf.i386.rpm
libungif-4.1.3-1.i386.rpm
libmp4v2_0-1.25-1.el4.at.i386.rpm
alsa-lib-devel-1.0.6-5.RHEL4.i386.rpm
libvorbisenc2-1.1.2-5.el4.at.i386.rpm
xorg-x11-libs-6.8.2-1.EL.13.37.5.i386.rpm
libfaac0-1.25-1.el4.at.i386.rpm
libvorbis-devel-1.1.2-5.el4.at.i386.rpm
libvorbisfile3-1.1.2-5.el4.at.i386.rpm
3. 실행 테스트
명령어들의 자세한 옵션은 (http://ffmpeg.mplayerhq.hu/documentation.html ) 이 페이지를 참조 하기 바란다.
1) 동영상 변환
ffmpeg -i test.mpeg test.flv
위 명령은 test.mpeg파일을 test.flv(플레시비디오)파일을 변환하는 명령이다.
그 밖에 여러 옵션들과, 특정 옵션들을 jpg파일으로 변환하는 여러 옵션들이 있다.
2) 동영상 플레이
ffplay 명령으로 플레이 한다. 하지만, SULinux는 X를 지원하지 않으므로 확인 하지 못했다.
3) 스트리밍 서버
ffserver -f ffserver.conf
위 명령으로 서버 운영이 가능하며, ffserver.conf 파일 설정에 따라 스트리밍 서버가 작동한다.
동영상 변환과 동시에 보여 주는 기능, 파일을 보여주는 기능등이 있지만, 파일 하나 하나 conf 파일을 수정 해야 하기에
다른 좋은 방법을 찾기로 한다.
flv파일으로 변환한 다음, 플레쉬에서 제어하고, php에서 그 파일의 위치를 보내주는 방식이 있다.
이 방식을 이용하면 될 듯 하고, 자세한 내용은 본 문서의 참고문서를 참조하라.
4. php API설치
wget http://nchc.dl.sourceforge.net/sourceforge/ffmpeg-php/ffmpeg-php-0.5.0.tbz2
tar xvfpj ffmpeg-php-0.5.0.tbz2
cd ffmpeg-php-0.5.0
/usr/local/php/bin/phpize
./configure –with-php-config=/usr/local/php/bin/php-config
make
cp modules/ffmpeg.so /usr/local/php/lib/php/extensions/
php.ini 파일을 열어서
extension_dir = “/usr/local/php/lib/php/extensions”
extension=ffmpeg.so ## 추가
php -v
에서 에러가 없다면.. 모듈 추가 완료된 것이다.
위와같이 모듈로 설치 하면 된다^^;
5. 현재 ffmpeg에서 지원하는 파일 포멧
파일 포멧 : http://ffmpeg.mplayerhq.hu/ffmpeg-doc.html#TOC22
이미지 포멧 : http://ffmpeg.mplayerhq.hu/ffmpeg-doc.html#TOC23
비디오 포멧 : http://ffmpeg.mplayerhq.hu/ffmpeg-doc.html#TOC24
오디오 포멧 : http://ffmpeg.mplayerhq.hu/ffmpeg-doc.html#TOC25
6. 마치며
설치와 운영 마주치는 에러에 많은 혼란을 격게 되었다. 하지만, 모든 일이 그렇듯 노력과 시간없이는 되는 일이 없다.
본 연구는 필요에 따라 계속 될 것이다. 본 문서는 언제든 수정 될 수 있고, 최신 버전은 ohmi.co.kr에서 작업 할 것이다.
7. 참고 문서
– ffmpeg 설치 및 운영, rpm
http://atrpms.net/dist/el4/ffmpeg/
http://ffmpeg.mplayerhq.hu/documentation.html
– php flv 스트리밍 서버
http://www.realitystorm.com/experiments/flash/streamingFLV/index.cfm
http://www.flashcomguru.com/index.cfm/2005/11/2/Streaming-flv-video-via-PHP-take-two
– php ffmpeg API
http://ffmpeg-php.sourceforge.net/apidoc.php