NDK로 ffmpeg 빌드해서 썸네일 만들기

|

FFMpeg를 안드로이드용으로 빌드하는 방법은 안드로이드펍 "남은그루터기"님의 강좌를 참고.


http://www.androidpub.com/1645684

http://www.androidpub.com/1646144

http://www.androidpub.com/1646529

http://www.androidpub.com/1646540



내가 작업한 환경은

NDK-r10c

cygwin 64bit

ffmpeg 0.8.15


NDK와 cygwin은 최신버전,

ffmpeg도 최신버전으로 사용하고 싶었으나.... 빌드 방법이 많이 달라지는 듯 함... (최신버전으로 했다가 실패하고 강좌기준 버전으로...)


강좌대로 따라하면 ffmpeg만 빌드했을때 별 이상 없이 빌드가 되는데,

안드로이드 JNI를 연결하려고 하니 이런저런 문제가 발생한다.


일단 제일 큰 문제는 ffmpeg는 c로 작성되어있는데, 안드로이드 JNI를 사용하려면 C++로 하는게 편하다.

C로 빌드하게되면 JNI 함수에 필수적으로 들어가는 env 변수나 다른 기능들의 심볼을 찾을 수 없다고 나온다.

(javah로 생성하는 h 파일도 C++기준으로 작성되니...)


간단히 몇가지 해결방법을 써보자면,

UINT64_C가 undefined 되었다는 오류는 INT64_C와 UINT64_C를 정의해주면 되고

ffmpeg의 함수들을 못찾는 문제는 avcodec.h, avformat.h, swscale.h등의 ffmpeg 헤더 include부분을 extern "C"로 묶어주면 된다.

하다보면 로깅을 위해 사용하는 android/log.h 내 함수들도 못찾는 경우가 생기는데,

Android.mk에서 LOCAL_LDLIBS에 -L$(SYSROOT)/usr/lib -llog 옵션을 추가해주면 된다.


이클립스에서 .h와 .cpp파일에 오류가 수두룩빽빽 나오는 경우에는

프로젝트속성 - C/C++ General - Paths and Synbols 에서 include에 ndk 헤더들,

NDK/platforms/안드로이드버전/arch-arm/usr/include 를 추가해주면 된다.


이클립스 프로젝트 소스도 첨부한다.




FFMpegWrapper.zip




And