Ffmpeg for Android
Contents
• 환경 구성
• Ffmpeg 컴파일
• Tutorial 실행
환경구성
• 작업 환경
• OS : Linux Ubuntu 12.04
• 필요 Tool
• NDK version 10 , Eclipse for Android( SDK 및 안드로이드 빌드환경 이
포함됨),CDT
• Download : http://developer.android.com/tools/sdk/ndk/index.html
환경구성
• NDK 다운로드 및 ffmpeg 다운로드
• http://developer.android.com/tools/sdk/ndk/index.html : NDK
• https://www.ffmpeg.org/ : ffmpeg 2.3
환경 구성
• Step1. NDK와 ffmpeg-2.3을 다운로드 한다
• Step2. NDK의 압축을 풀고, NDK 폴더 내의 sources 폴더에
ffmpeg-2.3을 압축을 푼다.
• Step3. NDK 환경변수 설정
환경 구성
• Linux
• /etcpofile 내에 환경 변 수 추가
• $PATH=‘NDK 설치 경로’
• Window
• 내컴퓨터 의 속성 -> 고급 시스템 설정 -> 환경변수 ->NDK설치 경로
추가
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)'
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
:자신이 설치한 경로
FFMPEG 컴파일
• Sudo chmod +x config.sh
• ./config.sh
• 정상적으로 완료 되었으면 ffmpeg-2.3. 폴더 내에 android 폴더
가 생성 되어있음
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)
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 추가
Tutorial 실행
• Tutorial 다운로드
• https://github.com/roman10/android-ffmpeg-tutorial
Tutorial 실행
• 다운로드 받은 Tutorial 내의 Tutorial2를 eclipse 내에 import 시킨
다.
• File ->import->Android/Exsisting Android Code Into Workspace
• File ->new->other->C/C++/Convert to a C/C++ Project
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로 수정
Tutorial 실행
• 아래와 같이 MainActivity를 수정 ( 순서 주의)

Ffmpeg for android

  • 1.
  • 2.
    Contents • 환경 구성 •Ffmpeg 컴파일 • Tutorial 실행
  • 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 컴파일 • Sudochmod +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 추가
  • 12.
    Tutorial 실행 • Tutorial다운로드 • https://github.com/roman10/android-ffmpeg-tutorial
  • 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 실행 • Tutorial2 프로젝트의 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로 수정
  • 15.
    Tutorial 실행 • 아래와같이 MainActivity를 수정 ( 순서 주의)