<작업환경>

운영체제 : windows 10

작업도구 : cygwin

라이브러리 : ffmpeg 3.2.9



1. 컴파일 환경설정



https://www.cygwin.com/ 에서 자신의 운영체제에 맞게 cygwin을 설치한다.

여기서는 64비트 사용


설치할때 Select Packages 화면에서

make 와  dos2unix 패키지를 선택하여 설치한다.






2. ffmpeg 다운로드


https://www.ffmpeg.org/download.html 에서  ffmpeg3.2 'Hypatia'를 받는다.


ffmpeg-3.2.tar.bz2 파일을 다운로드 받고 압축을 풀고 원하는 폴더에 압축을 푼다.


여기서는 D:/ffmpeg-3.2.9 에 압축을 해제하였다.





3. configure 수정



D:/ffmpeg-3.2.9/configure 파일을 수정해야한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
다음 코드를 찾아 원본을 수정으로 변경한다.
 
 
 
#원본
#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)'
cs


수정을 안하면 빌드해서 만들어지는 파일들이 .so로 나오지 않아 안드로이드에서 사용을 할 수 없다.





4. 빌드 스크립트 작성



D:/ffmpeg-3.2.9/build_android.sh  쉘파일을 만들고 다음과 같이 작성한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/bin/bash
NDK=c:/Users/whkong/AppData/Local/Android/sdk/ndk-bundle
SYSROOT=$NDK/platforms/android-16/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64
CUR=`cygpath -m $(pwd)`
TEMPDIR=`cygpath -/tmp`
TMP=`cygpath -/tmp`
function build_one
{
sed -'s/ln_s="ln -s -f"/ln_s="cp -f"/g' ./configure
./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
sed -':a;N;$!ba;s/gcc 4.9\r/gcc 4.9/g' ./config.h # 4.9은 toolchain의 version과 같음
sed -':a;N;$!ba;s/gcc 4.9\r/gcc 4.9/g' ./config.mak
# make clean
# make
# make install
}
CPU=arm
PREFIX=$CUR/android/$CPU
ADDI_CFLAGS="-marm"
build_one
 
cs

여기서 주의점은 다음과 같다


NDK=c:/Users/whkong/AppData/Local/Android/sdk/ndk-bundle

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

TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64


NDK는 현재 NDK가 설치된 위치를 가지는 변수이다.

자신이 NDK를 설치한 위치를 잘 확인하자.  보통 안드로이드 스튜디오에서 설치했다면 안드로이드 폴더에 있다.


TOOCHAIN 에서는 arm-linux-androideabi의 버전과 prebuilt 안에 있는 폴더가 windows 인지 linux인지 확인하자.

보통 윈도우os 안드로이드 스튜디오에서 설치하였다면 windows로 되어있다.


마지막주의점은

cygwin에서 작업한다면 경로가 문제가 된다. 기존 윈도우 운영체제와 경로가 다르기 때문에

cygpath명령어로 경로 설정을 해줘야 한다.


그리고 sed명령어는 알아서 찾아보도록 한다.(인터넷에 많음)






4. Build


cygwin을 실행시켜 해당 폴더로 이동해

build_android.sh 쉘파일을 실행시킨다.


파일 이 정상 작동 하였다면 마지막에 다음과 같은 화면이 나온다.


워닝은 가볍에 무시해주자.



여기서 만약 파일 실행이 안되고 '/r' 관련 에러가 뜬다면

dos2unix 프로그램을 이용하여 unix형식으로 변경해 줘야한다.


에러가 뜨는 이유는 윈도우와 리눅스가 개행하는 문자가 다르기 때문이다.

유닉스는'\n'  윈도우는 '\n\r' 이다.




순차적으로 make clean, make, make install을 한다.


그런데 아마도 make를 할때 다음과 같은 문제가 발생할 것이다.


shared 라이브러리를 빌드할때 심볼릭 링크 파일을 정확하게 인식을 못해서 libxxx.so 파일에 대한 에러가 발생하는데..

심볼릭 링크 파일인 libxxx.so를 지우고,

원본 파일인 libxxx-nn.so 파일을 복사해서 libxxx.so파일로 이름을 바꿔주면 된다.

(빌드 스크립트 중간에 멈췄기 때문에 에러날때마다 make를 수차례 진행해주고,

make가 완료되면 make install을 계속해서 진행해주어야한다)


예를 들어 위와 같은 문제라면


같이 지우고 복사를 해주고 다시 

make를 실행한다.


여러번 지우고 복사를 반복하다보면 make실행이 끝난다.


make install을 실행하면


android/arm 폴더에 include 폴더와 lib 폴더가 생성된것을 볼 수 있다.

안에는 헤더파일과 .so파일이 생성되어 있다.





5. 참조사이트


http://www.androidpub.com/index.php?mid=android_dev_info&search_target=user_id&search_keyword=novaever&document_srl=1645684

http://dev2.prompt.co.kr/77

http://gavinliu.cn/2017/03/05/Android-FFmpeg-Mac-AndroidStudio-CMake-%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA/

http://whiteduck.tistory.com/130

https://m.blog.naver.com/PostView.nhn?blogId=just4u78&logNo=220628698165&proxyReferer=http%3A%2F%2Fwww.masterqna.com%2Fandroid%2F62884%2Fffmpeg-%25EB%25B9%258C%25EB%2593%259C%25EC%25A4%2591-%25EC%25A7%2588%25EB%25AC%25B8%25EC%259E%2585%25EB%258B%2588%25EB%258B%25A4

http://game.tistory.com/entry/building-FFmpeg20x-for-androidndk-windowscygwin64


언제나 구글링은 위대하다.

+ Recent posts