저는 입사 4개월차 초보 개발자 입니다. 전문가가 아니기에 작성하는 정보에 오류가 있을 수 있음을 밝힙니다. 오류가 있을 경우 지적해주시면 최대한 고치도록 노력하겠습니다. 모든 정보는 정확하지 않을 경우 추측성 어조를 사용해 표현했습니다. 또한, 되도록 출처와 관련된 정보를 포함하는 링크 주소를 남기려 노력했습니다. 감사합니다. |
ffmpeg 라이브러리 사용하기 1단계
- 설치 및 예제 컴파일
작성일
- 2018-11-16
환경
- windows10 64bit
- visual studio 2017
1. 설치하기
위 사이트에서 빨간색 네모 박스가 쳐진 선택지를 각각 선택한 후 다운로드 하면 됩니다.
저의 경우 Version은 위의 20181114-... 을 선택했고 Architecture은 64bit를 선택했습니다.
Linking은 Shared와 Dev 둘 모두 다운받아야합니다.
설치 후 압축을 풀면 위의 왼쪽 사진과 같게됩니다.
여기서 필요한 것은 빨간 화살표가 가리키고 있는 bin, include, lib 폴더입니다.
이들만 따로 복사해서 ffmpeg이라는 이름의 폴더 안에 별도로 넣어 관리하면 편리하게 사용할 수 있습니다.
2. 프로젝트에 추가하기
visual studio 2017 을 사용해 Test용으로 빈프로젝트를 하나 만들었습니다.
프로젝트 폴더 안에 위에서 만든 ffmpeg이라는 이름의 폴더를 복사 붙여넣기합니다.
이제 폴더안의 bin, include, lib 각각을 프로젝트에 추가해 주어야합니다.
a. bin
동적 라이브러리 (*.dll) 가 들어있는 폴더 입니다.
'프로젝트(P) - 프로젝트 속성(P) - 구성 속성 - 디버깅 - 환경' 의 경로에 bin 폴더의 경로를 추가합니다.
PATH=원하는 경로;%PATH% 의 형태로 입력하면 됩니다.
저의 경우 'PATH=$(SolutionDir)\addition\ffmpeg\bin;%PATH%' 와 같이 경로를 추가했습니다.
b. include
헤더 파일 (*.h) 이 들어있는 폴더 입니다.
'프로젝트(P) - 프로젝트 속성(P) - 구성 속성 - C/C++ - 일반 - 추가 포함 디렉터리' 의 경로에 include 폴더의 경로를 추가합니다.
저의 경우 '$(SolutionDir)\addition\ffmpeg\include' 와 같이 경로를 추가했습니다.
c. lib
정적 라이브러리 (*.lib) 가 들어있는 폴더 입니다.
'프로젝트(P) - 프로젝트 속성(P) - 구성 속성 - 링커 - 일반 - 추가 라이브러리 디렉터리' 의 경로에 lib 폴더의 경로를 추가합니다.
저의 경우 '$(SolutionDir)\addition\ffmpeg\lib' 와 같이 경로를 추가했습니다.
정적 라이브러리의 경우 추가적으로
'프로젝트(P) - 프로젝트 속성(P) - 구성 속성 - 링커 - 입력 - 추가 종속성' 의 경로에 사용할 lib 파일 이름을 추가합니다.
저의 경우 avformat.lib, avcodec.lib, avutil.lib 세 가지를 추가했습니다.
이 것으로 프로젝트에 ffmpeg 라이브러리 추가가 끝났습니다.
3. 예제 코드 빌드 및 에러 잡기
이제 기본 예제 코드를 빌드해보겠습니다.
1
2
3
4
5
6
7
8
9
|
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libavutil/avutil.h>
#include <stdio.h>
int main(void) {
av_register_all();
return 0;
}
|
cs |
여러 가지 에러가 발생합니다. 발생한 에러들과 해결 방법을 정리합니다.
fatal error C1189: #error: missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS |
libavutil의 common.h 에서 __STDC_CONSTANT_MACROS가 정의되지 않았을 경우 에러가 발생하도록 해놓아서 발생하는 에러입니다.
잘 모르겠지만,
__STDC_CONSTANT_MACROS 를 정의하면 C++프로그램이 C99 표준에 정의된 stdint.h 를 사용할 수 있다고 하는 것 같습니다.
ffmpeg 헤더 파일들을 include 하기 전에 아래 코드를 삽입하면 해결됩니다.
1
2
3
|
#ifndef __STDC_CONSTANT_MACROS
#define __STDC_CONSTANT_MACROS
#endif
|
cs |
error LNK2019: "void __cdecl av_register_all(void)" (?av_register_all@@YAXXZ) 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다. |
테스트를 위해 사용한 함수 av_register_all()이 deprecated 이기 때문에 발생하는 에러입니다.
예전에는 사용했지만 지금은 또는 이제 머지 않을 미래에는 사용하지 않을 함수이니 다른 방법을 사용하라는 뜻입니다.
프로젝트 맨 위에 다음 코드를 작성하면 해결됩니다.
1
|
#pragma warning(disable : 4996)
|
cs |
LNK2019 "void __cdecl av_register_all(void)" (?av_register_all@@YAXXZ) 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다. |
빌드를 성공적으로 마쳤습니다.
이번 글에서는 ffmpeg 라이브러리를 설치하고 예제 코드를 빌드해보았습니다.
감사합니다.
'개발 > c' 카테고리의 다른 글
[백준] 17822 원판 돌리기 (0) | 2020.04.22 |
---|---|
[백준] 3111 검열 (0) | 2019.03.05 |
[백준] 4179 불! (0) | 2018.12.13 |
winpcap pcap_pkthdr 구조체에서 caplen과 len의 차이 (0) | 2018.12.01 |
ffmpeg 이란? (1) | 2018.11.02 |