3. 환경구성
• 작업 환경
• OS : Linux Ubuntu 12.04
• 필요 Tool
• NDK version 10 , Eclipse for Android( SDK 및 안드로이드 빌드환경 이
포함됨),CDT
• Download : http://developer.android.com/tools/sdk/ndk/index.html
4. 환경구성
• NDK 다운로드 및 ffmpeg 다운로드
• http://developer.android.com/tools/sdk/ndk/index.html : NDK
• https://www.ffmpeg.org/ : ffmpeg 2.3
5. 환경 구성
• Step1. NDK와 ffmpeg-2.3을 다운로드 한다
• Step2. NDK의 압축을 풀고, NDK 폴더 내의 sources 폴더에
ffmpeg-2.3을 압축을 푼다.
• Step3. NDK 환경변수 설정
6. 환경 구성
• Linux
• /etcpofile 내에 환경 변 수 추가
• $PATH=‘NDK 설치 경로’
• Window
• 내컴퓨터 의 속성 -> 고급 시스템 설정 -> 환경변수 ->NDK설치 경로
추가
7. FFMPEG 컴파일
• ./configure 내의 아래의 부분을 수정해준다
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
8. FFMPEG 컴파일
• Config.sh 쉘 스크립트 파일 작성
#!/bin/bash
NDK=$HOME/Desktop/adt/android-ndk-r9
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
function build_one
{
./configure
--prefix=$PREFIX
--enable-shared
--disable-static
--disable-doc
--disable-ffmpeg
--disable-ffplay
--disable-ffprobe
--disable-ffserver
--disable-avdevice
--disable-doc
--disable-symver
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi-
--target-os=linux
--arch=arm
--enable-cross-compile
--sysroot=$SYSROOT
--extra-cflags="-Os -fpic $ADDI_CFLAGS"
--extra-ldflags="$ADDI_LDFLAGS"
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one
:자신이 설치한 경로
9. FFMPEG 컴파일
• Sudo chmod +x config.sh
• ./config.sh
• 정상적으로 완료 되었으면 ffmpeg-2.3. 폴더 내에 android 폴더
가 생성 되어있음
10. Android.mk 파일 작성
• Ffmpeg-2.3/Android/arm/ 경로에 작성
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= libavcodec
LOCAL_SRC_FILES:= lib/libavcodec-55.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= libavformat
LOCAL_SRC_FILES:= lib/libavformat-55.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= libswscale
LOCAL_SRC_FILES:= lib/libswscale-2.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= libavutil
LOCAL_SRC_FILES:= lib/libavutil-52.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= libavfilter
LOCAL_SRC_FILES:= lib/libavfilter-3.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:= libwsresample
LOCAL_SRC_FILES:= lib/libswresample-0.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
11. Android.mk 파일 작성
• Ffmpeg 라이브러리를 사용하고자 하는 Android project 내에
jni 폴더를 생성 후 jni 폴더 내에 Android.mk 파일 생성
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := tutorial03
LOCAL_SRC_FILES := tutorial03.c
LOCAL_LDLIBS := -llog -ljnigraphics -lz -landroid
LOCAL_SHARED_LIBRARIES := libavformat libavcodec libswscale libavutil
include $(BUILD_SHARED_LIBRARY)
$(call import-module,ffmpeg-2.0.1/android/arm)
자신이 설치한 경로의
android/arm
libwsresample 추가
13. Tutorial 실행
• 다운로드 받은 Tutorial 내의 Tutorial2를 eclipse 내에 import 시킨
다.
• File ->import->Android/Exsisting Android Code Into Workspace
• File ->new->other->C/C++/Convert to a C/C++ Project
14. Tutorial 실행
• Tutorial 2 프로젝트의 properties
• C/C++ General
• Includes에서 ndk/source/ffmpeg-2.3 추가
• ndk/platforms/android-9/arch-arm/user/include 추가
• C/C++Build
• Builder Settings 내의 Build command를 ndk-build로 수정