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 를 추가해주면 된다.
이클립스 프로젝트 소스도 첨부한다.
'Knowledge > Android' 카테고리의 다른 글
넥서스(롤리팝)에서 WiFi 연동 개발시 유의사항 (0) | 2015.02.26 |
---|---|
ADT에서 AndroidStudio로 변경된 안드로이드 개발환경 (0) | 2015.01.16 |
AOSP 직접 빌드하여 넥서스4에 설정하기 #3 - 기기 플래싱 (4) | 2014.08.01 |
AOSP 직접 빌드하여 넥서스4에 설정하기 #2 - 프레임워크 빌드 (0) | 2014.08.01 |
AOSP 직접 빌드하여 넥서스4에 설정하기 #1 - 커널 빌드 (3) | 2014.08.01 |