2009년 6월 24일 수요일

[펌] FFMPEG 를 minGW에서 빌드하고, MSVC에서 사용하는것

출처 : http://jayhouse.egloos.com/1909473


최신 FFMPEG을 SVN으로 다운받습니다.

MSYS, minGW를 설치해야 합니다. 다음 링크에 가면 자세한 설명과 다운 받아야 할 파일이 있습니다.

http://arrozcru.no-ip.org/ffmpeg_wiki/tiki-index.php

MSYS 설치

1.MSYS-1.0.11-2004.04.30-1.exe
2.MSYS-1.0.11-20071204.tar.bz2
3.bash-3.1-MSYS-1.0.11-snapshot.tar.bz2
4.coreutils
5.make-3.81-MSYS-1.0.11-2.tar.bz2
6.Fixing "msys.bat"

MinGW 설치
binutils-2.18.50-20080109.tar.gz
gcc-core-4.2.1-sjlj-2.tar.gz
gcc-g++-4.2.1-sjlj-2.tar.gz
mingw-runtime-3.14.tar.gz and patch file
w32api-3.11.tar.gz

MinGW 파일 전부 설치후 패치를 꼭 해주셔야 합니다.파일 몇개 없다고 빌드가 안되거나 MSVC에서 링크가 되는데 문제가 생길수도 있습니다.

특히 gcc의 3.XX 버전으로 빌드를 하시면 MSVC에서 힙메모리를 잡다가 죽더군요파일들을 C:\msys\mingw 에 압축풀고
C:\msys\etc\fstab.sample
파일을 사본 복사하여 fstab로 이름을 바꿉니다.
c:/mingw /mingw
의 내용을
c:/msys/mingw /mingw
와 같이 수정하여 저장합니다

C:\msys 폴더에 msys.bat 파일이 있습니다.
맨 윗부분에
call "C:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT" 요렇게 수정을 합니다. 물론 경로 맞춰서

=====================================================================================
MSYS 와 MinGW를 설치 했으면 이제 ffmpeg-0.4.9를 다운받습니다. 검색엔진에 검색하면 쉽게 나옵니다.
msys 를 실행하고 프롬프트 창에서 빌드를 하면 됩니다.linux 스타일 명령입니다.
ffmpeg가 설치되어 있는 폴더로 이동후
./configure --enable-memalign-hack
를 치면 config.h 파일이 생성 됩니다

. dll로 만들어서 하는 부분에서 저도 lib 명령이 안먹혀서 실패했습니다.

아는분 알려주세요 ^^그래서 저는 그냥 static lib로 만들어서 사용했습니다

.make하면 빌드가 되죠.
에러가 발생하면 뭔가 빠진 것일 겁니다.
저도 하고나서 쓰는거라..^^;;

이제 빌드가 되면
make install
을 합니다.
그럼 중요한 파일들이 msys/local 밑으로 복사됩니다.avcodec.a, avcodec.a, avformat.a, avformat.a 등 이 생성 됐을 겁니다.

이름이 다를수도 있습니다.

ffmpeg의 루트 폴더에보면 output_example.c라는 파일이 있습니다.

MSVC에서 빌드하도록 환경을 맞춰줘야 합니다.

win32 console 프로젝트를 만듭니다. precompiled header는 사용하지 않도록 합니다.

파일은 .c로 해야합니다. cpp로하면 ffmpeg이 제대로 빌드 되지 않습니다.

property page에서 C/C++ 페이지의 additional include directories에서복사된 폴더에서 include를 지정해 줍니다.linker의 general 페이지에서 additional library directories에서libavcodec폴더와 libavformat폴더를 마찮가지로 추가합니다.

또 msys가 설치되어 있는 폴더 중에서
C:\msys\mingw\lib; C:\msys\mingw\lib\gcc\mingw32\3.4.5;

다음과 같이 두 경로를 추가합니다.(경로 자기 경로에 맞춰서 해주셔야 합니다.)

linker input 페이지에서avformat.a avcodec.a avutil.a libgcc.a libmingwex.a파일을 추가하여 링크시킵니다.

빌드를 누르시면 당연히 에러가 발생하겟죠... 처음에 한번에 되면 운 좋으신것입니다.

inline에 관련된 에러는 MSVC같은경우 inline을 __inline으로 해야 되는 경우가 있습니다.다른곳에서는 그냥 inline도 되는데 왜 여기서만 __inline으로 해야 되는지 잘 모르겠습니다.

그냥 #define inline __inline 으로 만들으셔서 오류나는 파일 꼭대기에 한군대만 넣으셔도 됩니다.common.h 같은 곳에그밖에 수정할 사항은 링크에 보시면 있습니다.자세한 사항은 나중에 업데이트 하도록 하겠습니다.

- revision history 2008.07.30 최초 작성 2008.07.31 빌드성공, 비디오 플레이어 제작 성공

2009년 6월 23일 화요일

FFmpeg Building in MSVC 02.

2. Msys 설치 ( 이글을 보는 중간에도 , 아래 기입한것보다 더 최신버전이 있으면 그것을 다운 받아서 설치, 덮어쓰시길바란다.)

2.1. Msys 1.0.11 을 설치한다.설치 옵션: C:\msys -> y -> y -> C:\MinGW
(* 위 Msys 는 1.0 이라는 폴더를 생성해내는대 , 지우도록하고 c:\msys 에다가 설치를 하자.)

2.2. 아래의 파일을 압축해제 하여, C:\msys에 덮어 씌운다.make-3.81-msys-1.0.11-2.tar.bz2bash-3.1-MSYS-1.0.11-snapshot.tar.bz2

2.3. 아래의 파일을 압축해제 한 후, 파일명을 msys-1.0.dll로 이름 변경 후, C:\msys\bin에 덮어 씌운다.msys-1.0.dll-SNAP-1.0.11-2006.04.23.tar.bz2

2.4. 아래의 파일을 압축해제 한 후, /bin 경로에 있는 pr.exe 파일만 C:\msys\bin에 덮어 씌운다.coreutils-5.97-msys-1.0.11-snapshot.tar.bz2

2.5. C:\msys 폴더 위치의 msys.bat 파일의 맨 위에 (1 ln : @echo 위에 적도록한다.)
, 아래의 내용을 추가한다. ( MSVC 6.0 에서 하길 바란다.)

** Visual Studio 6.0 버전 기준
call "C:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT"

** Visual Studio 7.1 버전
call "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\vcvars32.bat"

** Visual Studio 9.0 버전
call "C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat"

설치상 오류로 call 이라는 명령어가 안되는 경우도 생기게 되는대 ,
프로그램 설치를 앞서부터 다시 해보시길 바라며, 혹시나 call 명령어가 되는대 , 환경설치가 안된다면, 위 */vcvars32.bat 파일을 열어서 , 모두 복사한뒤에, msys.bat 가장위에 붙여넣기를 한다.



3.2. msys 파일을 실행시켜, FFMPEG 소스코드 경로로 이동한다.
소스는 아무곳에나 있는곳을 해도 되나 가급적 MINGW 콘솔에서 계정이 생성된곳에 복사해 넣도록한다.
본인컴퓨터.
C:\msys\home\Microsoft\ffmpeg

3.3. config 파일 설정을 한다.
$ ./configure --enable-memalign-hack
(위와 같이 하면 ffmpeg.exe 를 만드는과정임)

3.4. Make 실행을 한다.
$ make

3.5. Make Install 실행을 한다.
$ make install


3.6. 각각의 lib ,dll 생성시에는 /FFmpeg/libavcode , /FFmpeg/libavfilter ,.... 등등의 폴더로 이동해서
$ make
..
$ make install

을 이용해서 생성한다.

3.7 각각의 binary 는 'make install' 을 쓰게 되면 특정폴더로 이동시키게 되는대, prefix 옵션을 주지 않으면 "C:\msys\local" 여기에 , bin , lib , share , include 등의 폴더에 복사 생성될것이다.

3.8 라이브러리를 MSVC 에서 응용 사용할려면 다음에 올리는것을 보시오
(* 하지만, 샘플이라고 올라온 example ... , test/*.c , ffmpeg.c , ffplay.c 등의 예제는 당연 바로 컴파일되지 않는다 . 이역시 다음에 계속 기제 하도록한다).

FFmpeg Building in MSVC 01.

FFmpeg Building in MSVC 01.
------------------------------------
웹페이지에 수차례 반복되어 있는 오류가 그대로 있는듯하다.
아래 설치 파일들을 설치하고 오류가 있는 모듈들은 모두 덮어씌워야한다.
우선 구해야하는 파일들 목록 : ffmpeg-r19159.tar
--------------------------------------------------------------
binutils-2.17.50-20060824-1.tar.gz
gcc-core-3.4.5-20060117-3.tar.gz
gcc-g++-3.4.5-20060117-3.tar.gz
mingwrt-3.15.1-mingw32.tar.gz
w32api-3.12-mingw32-dev.tar.gz
----------------------------------------------------------
기본적으로 아래 되어 있는것들을 모두 다운 받으시길
----------------------------------------------------------
mingw-runtime-3.15.2-1.tar.bz2
msys-1.0.dll-SNAP-1.0.11-2006.04.23.tar (MSYS-1.0.11-20080821-dll.tar.gz)
bash-3.1-MSYS-1.0.11-snapshot.tar (bash-3.1-MSYS-1.0.11-1.tar.bz2 이것을 요구하는싸이트도 있긴하던대 , 먼저 덮어쓴뒤, snapshot 를 덮어쓰도록 한다. )

binutils-2.17.50-20060824-1.tar.tar ( binutils-2.18.50-20080109-2.tar.gz 최신버전이 있으면
최신버전을 쓰도록한다.)
w32api-3.7.tar.tar (w32api-3.13-mingw32-dev.tar.gz 이거 다운받도록한다.)
mingw-runtime-3.10.tar.tar
coreutils-5.97-MSYS-1.0.11-snapshot.tar
make-3.81-MSYS-1.0.11-2.tar.bz2

mingwrt-3.15.2-mingw32-dev.tar.gz

MSYS-1.0.11-2004.04.30-1.exe
MinGW-5.1.4.exe

--------------------------------------------------------------------------------
다 구했으면 우선 아래부터 먼저 설치 한다.
1.2. MinGW 5.1.4 설치 시, 자동으로 다운로드 받는 아래의 파일을 압축해제 하여,
C:\MinGW 에 덮어 씌운다. // 자동으로 다운 받은내용을 자동으로 설치 안됨. ㅡㅡ;
binutils-2.17.50-20060824-1.tar.gz
gcc-core-3.4.5-20060117-3.tar.gz
gcc-g++-3.4.5-20060117-3.tar.gz
mingwrt-3.15.1-mingw32.tar.gz
w32api-3.12-mingw32-dev.tar.gz (** FFMPEG Source 가 최근 것인 경우 w32api-3.12 버전을 사용하고, 구 버전인 경우 w32api-3.11 버전을 사용하도록 한다. 무조건 최신버전이 좋은거다.)


1.3. 설치 후, 내 컴퓨터->시스템 등록정보 -> 고급->환경변수->Path 에 C:\MinGW\bin 이 있는지 확인하고, 없으면 추가한다. ( 이것 역시 자동으로 안되니 필히 설치 하며, xp 라도 rebooting 해서 확인 받도록 한다. )
확인 : ;; msys 창을 열어서 , msys console에서 link 라고 명령어를 넣어보도록한다.
link 툴의 설명이 줄줄이 안뜨면 될때까지 한다.



여기까지 정보는 여기서 확인할수 있다.
http://brightkey.tistory.com/tag/build%20ffmpeg