[작성자-밍이~~]

[최초작성일-2016.11.03]


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


Android 에서 FFmpeg 를 사용하기 위한 과정을 설명합니다.

인터넷에 좋은 자료들이 많이 있지만,

Android 를 위해 FFmpeg 를 빌드하고, 실제 사용할 수 있는 개발자료들이 통합해서 정리된 부분은 많지 않은것 같습니다.

옛날 자료들도 많구요..

이 포스팅도 완벽하지는 않겠지만, 누군가에게는 도움이 될까 하여 작성하게 되었습니다.




그 첫번째 포스팅으로 FFmpeg 빌드하는 과정을 설명합니다.

환경구축 등의 내용은 과감히(?) 생략합니다. NDK 설치나 Android Studio Project 생성 등은 다루지 않습니다.

(저보다는 훨씬 더 잘 설명해 주시는 분들이 인터넷에 많이 계세요~~)


환경은 다음과 같습니다.

OS X El Capitan (맥 입니다. 윈도우즈 사용자 분들은. Cygwin 를 이용해서 빌드가 가능합니다.)

FFmpeg 3.2 "Hypatia" - 2016-10-27. released

Android Studio 2.2.2

NDK : 13.0.3315539


맥 보다는 윈도우즈 사용자 분들이 훨씬 많으시겠지만... 안타깝게도 제가 맥 사용자 입니다. ^^

윈도우즈에서 빌드하는 방법은 인터넷에서 어렵지 않게 찾아볼 수 있을 것이며, 

Cygwin을 사용 경험이 있으신 분은 이 포스팅 만으로도 가능할 것으로 예상합니다.


1. FFmpeg 다운로드

우선 FFmpeg 소스를 다운로드 받아봅니다.

https://www.ffmpeg.org/download.html 에서 받을 수 있습니다.

해당 포스팅에서는 2016년 10월 27일에 릴리즈 된 FFmpeg 3.2 "Hypatia" 를 사용합니다.


ffmpeg-3.2.tar.bz2 파일을 다운로드 받고 압축을 풀고 아래 경로에 넣어 놓습니다. $NDK 는 각자의 환경에 잘 맞춰 주세요.

$NDK/sources


저는 다음과 같이 배치하였습니다.

2. configure 수정

$NDK/sources/ffmpeg-3.2/configure 파일을 수정해야 합니다.

해당 파일을 수정하지 않으면, 빌드해서 만들어 지는 파일들의 파일명이 .so 로 만들어 지지 않아 Android 에서 사용이 불가능 하게 됩니다.

SLIBNAME_WITH_MAJOR / LIB_INSTALL_EXTRA_CMD / SLIB_INSTALL_NAME / SLIB_INSTALL_LINKS 부분을 찾아 수정합니다.

#원본

#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)'


3. Build Script 작성

빌드 스크립트를 제작해 봅니다.

$NDK/sources/ffmpeg-3.2/build_android.sh 을 다음 내용으로 만듭니다.

제 환경은 맥이니까 실행권한도 주어야합니다. chmod +x build_android.sh 이런식으로요.

붉은색 볼드로 적혀있는 부분은 각자의 환경에 맞게 잘 수정해 줍니다.

#!/bin/bash

NDK=/Users/prompt/Library/Android/sdk/ndk-bundle

SYSROOT=$NDK/platforms/android-16/arch-arm/

TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-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


4. Build

빌드 준비는 끝났습니다. 간단(?)하네요.

./build_android.sh 를 실행시켜 빌드합니다. 

잠시 후 빌드가 완료되면 아래의 디렉토리가 생성된것을 확인할 수 있습니다.

$NDK/sources/ffmpeg-3.2/android


사실 빌드시간은 잠시가 아니라 꽤 오래 걸립니다. CC 와 다양한 메시지, warning 들을 볼 수 있을텐데요.

일단 가볍게 무시해 봅시다 :) 


android 디렉토리 밑에는 arm 디렉토리가 있고, 그 하위로 .h 가 모여있는 include 디렉토리.so 가 모여있는 lib 디렉토리가 있습니다.


5. 요약

요약하면 다음과 같습니다.

FFmpeg 다운로드 -> configure 수정 -> Build Script 작성 -> Build


간단(?)하네요. ^^

다음 포스팅은 FFmpeg 를 실제 사용해 보기 직전의 개발환경 구축을 진행하도록 하겠습니다.


관련글 - FFmpeg for Android(2) - JNI 개발환경 구축

관련글 - FFmpeg for Android(3) - Sample JNI 제작

관련글 - FFmpeg for Android(4) - ffmpeg.c 빌드 및 사용




by 밍이~~ 2016.11.03 09:00
  • 2016.12.07 14:04 ADDR EDIT/DEL REPLY

    비밀댓글입니다

    • 밍이~~ 2016.12.09 18:00 신고 EDIT/DEL

      build_android.sh 의 세번째 줄의 TOOLCHAIN 부분을 확인해 보시겠어요??
      빌드하려는 시스템의 경로에 맞게 수정해 보세요~

      해보신 후 결과 알려주시면 고맙겠습니다~ :)

| 1 2 3 4 5 6 7 8 9 ··· 79 |