본문 바로가기

C++

ffmpeg 프로젝트 만들기

출처 : 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 정도입니다만,

프로젝트를 열어서 바로 실행해 볼 수 있겠금 했습니다.


HelloFFmpeg.7z.001

HelloFFmpeg.7z.002


다음 시간에는 ffmpeg을 이용해서 미디어 파일을 열고 닫는 방법에 대해서 알아보겠습니다