[스트리밍] 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

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.