출처 : http://aslike.egloos.com/3081595
Project 생성하기
> Library 준비하기
앞선 강좌에서 설명한대로 http://ffmpeg.zeranoe.com/builds/ 에서 Windows용 빌드 파일들을 다운로드 받습니다.
FFmpeg-xxxxxx-win32-dev 파일에서 include / lib 폴더만
그리고 FFmpeg-xxxxxxx-win32-shared 파일에서 bin 폴더만
별도의 공간에 압축을 풀어둡시다.
Visual C++를 통해서 ffmpeg 프로그램을 만들기 위해서는 준비과정이 하나더 필요합니다
( gcc 계열로 컴파일 하시는 분들은 건너뛰셔도 됩니다 )
Visual stduio 의 버전이 2013 이전 버전이라면, inttypes.h 파일을 추가해 줘야 하는데요.
아래 사이트에서 해당 파일을 받을 수 있습니다
https://code.google.com/p/msinttypes/
다운로드를 받고 압축을 풀어보면 2개의 헤더 파일을 볼 수 있습니다
VC++ 2010을 기준으로 stdint.h 는 제공되고 있으므로, 사실 상 필요한 것은 inttypes.h뿐이지만, VC++ 6.0 의 경우 stdint.h 가 없으므로, 같이 포함되어 있는 헤더파일을 사용하면 됩니다.
이번 강좌에는 VC++ 2010을 기준으로 작성했기 때문에 stdint.h가 있다는 전제하에 진행하겠습니다.
inttypes.h 헤더 파일만 아까 압축을 풀어둔 ffmpeg 폴더 내의 include/libavutil/ 밑에 복사합니다.
그리고 include/libavutil/common.h 파일을 Text Editor로 열어서 아래와 같이 편집합니다.
#include <inttypes.h> -> #include “inttypes.h”
common.h와 같은 디렉토리에 있는 (방금 복사한) inttypes.h를 우선 불러오도록 하기 위함입니다.
어찌되었든, 컴파일러로 하여금 inttypes.h를 불러올 수 있도록 하는 조치이기 때문에
사실, inttypes.h를 VC의 기본 include 폴더에 복사하셔도 무방합니다만,
일단 inttypes.h를 설치한 목적이 ffmpeg 프로젝트를 위해서 이기 때문에 이렇게 사용하는 것도 나쁘지 않은 방법입니다.
> Project 생성
이제 본격적으로 시작해 보도록 하겠습니다
Visual Studio ( 또는 C++ )를 열고 프로젝트를 생성합니다
Win32 프로젝트를 하나 생성할 것입니다
강좌에서는 Console 프로젝트로 생성해서 진행할건데, 꼭 Console 프로젝트 일 필요는 없습니다.
프로젝트를 생성할 때는, Empty Project로 설정합시다
이제 프로젝트 속성 설정을 해주도록 하겠습니다
아래 3가지 중 한가지 방법으로 속성창을 띄우도록 합시다
1. Solution Explorer에서 프로젝트에 마우스 오른쪽 버튼을 클릭 -> Properties
2. Menu의 Project -> Properties
3. 단축키 Alt + F7
먼저 유니코드 설정부터 해제하겠습니다. ( VC++ 6.0 사용자는 필요없는 과정입니다 )
왼쪽 속성 목록에 General (일반) 설정이 Default 로 떠있습니다.
Character Set이 [Use Unicode Character set ] 으로 설정되어 있을텐데, 이를 [Not Set]으로 바꿔줍니다.
다음은 ffmpeg 라이브러리를 사용할 수 있도록 Path 설정을 하는 것입니다.
일반적으로 Visual C++에서는 Path 설정을 2가지 방법으로 할 수 있습니다.
“VC++ Directories” 를 이용한 방법과 C++ 및 Linker 설정에서 “Additional Include / Library Directories” 에서 설정하는 방법입니다. (아래 이미지 참조)
[VC++ Directories]
[Additional Include / Library Directories]
** 왼쪽의 C/C++ 속성이 보이지 않는다면 속성 창을 닫고, 프로젝트에 빈 cpp 파일을 하나 추가하신 후, 다시 속성 창을 열어보면 생겨있습니다.
참고로 “VC++ Directories”에 등록하는 방법은 VC++ 2010 이전에는 Global Path였습니다. 다시 말해 한번 설정해 놓으면 이후 새로운 프로젝트를 생성할 때, 다시 Path를 등록 시키지 않아도 사용할 수 있었습니다. ( 2010 이후 부터는 프로젝트 속성으로 바뀌면서, 별도로 Global Path를 설정하지 않는 이상, Project 단위로 다시 Path를 추가해야 합니다 )
Path를 지정하는데에는 어느 쪽을 사용해도 문제는 없습니다만, 저 같은 경우 Project단위로 소스코드를 배포하는 일이 많았던 지라 후자를 더 사용하고 있는 편입니다.
Include Directories 에는 아까 압축을 풀었던 Include 폴더의 Path를
Library Directories 에는 아까 압축을 풀었던 Lib 폴더의 Path를 작성합니다.
가령, 아까 압축을 풀어둔 폴더의 Path가 D:\ffmpeg 인 경우,
Include Directories에는 “D:\ffmpeg\include” 를 추가하고,
Library Directories에는 “D:\ffmpeg\lib” 를 추가합니다.
마지막으로 컴파일 후, 바로 실행할 수 있도록 dll path를 지정하도록 하겠습니다.
역시, 속성 창에서 진행됩니다.
아래 화면과 같이 속성 목록의 “Debugging” 을 선택하고 Environment(환경) 에 설정하시면 됩니다.
아래와 같이 입력합시다
PATH=%PATH%;$(압축을 풀어둔 폴더)\bin
가령, 아까 압축을 풀어둔 폴더의 Path가 D:\ffmpeg 인 경우,
PATH=%PATH%;D:\ffmpeg\bin
이 됩니다.
> Hello FFmpeg
이번 시간에는 간단하게 Console에 “Hello FFmpeg” 이라는 문구만 찍는 아주 단순한 프로그램만 만들어보도록 하겠습니다.
main.cpp
///> Include FFMpeg extern "C" { #include <libavformat/avformat.h> } ///> Library Link On Windows System #pragma comment( lib, "avformat.lib" ) #pragma comment( lib, "avutil.lib" ) int main(void) { av_log( NULL, AV_LOG_INFO, "Hello FFmpeg\n" ); return 0; } |
만일 프로젝트 세팅 및 모든 과정이 정상적으로 되었다면,
Console 창이 뜨면서 “Hello FFmpeg” 이라는 문구가 뜰 것입니다.
아래 링크는 VC++ 2010용 샘플 프로젝트 파일입니다.
(dll포함) Library를 모두 포함하고 있어서 약 12MB 정도입니다만,
프로젝트를 열어서 바로 실행해 볼 수 있겠금 했습니다.
다음 시간에는 ffmpeg을 이용해서 미디어 파일을 열고 닫는 방법에 대해서 알아보겠습니다