티스토리 뷰

728x90

출처 : Android NDK FFmpeg 컴파일 강좌 (1/4)
Android NDK FFmpeg 컴파일 강좌 (4/4)
Android NDK FFmpeg 컴파일 강좌 (3/4)
Android NDK FFmpeg 컴파일 강좌 (2/4)
Android NDK FFmpeg 컴파일 강좌 (새로운 시도)
http://blog.daum.net/hopefullife/209
Android NDK Overview
Android NDK 빌드환경을 사용하지 않는 Makefile
Decoding audio via Android using FFMpeg
OpenMAX AL for ffmpeg
live-converter
read-only stream buffer interface in ffmpeg #1
FFmpeg port for Android ndk
android-ndk-r7 编译 ffmpeg-0.10
Android AudioRecord to FFMPEG encode native AAC
http://www.2cto.com/kf/201201/116171.html
http://pastebin.com/P02Fmw53
AndroidCompile

안드로이드펍에서 남은그루터기, 로봇시대 글을 보고, 컴파일 해보았는데, 작업해야될 부분이 많았어서,
인터넷에서 여러가지 글을 찾아보고, 간단하게 할 수 있는 방법을 찾아 보았습니다.

일주일 동안의 고생한 내용을 정리합니다. 안드로이드펍의 남은그루터기님과, 로봇시대님에게 감사한마음 글로나마 드립니다.

toolchain을 /opt/android-8-toolchain 설치하고, ffmpeg 폴더에 config.sh 파일을 아래와 같이 만들었습니다.
C 드라이브에 ffmpegtmp 폴더를 만들고, 남은그루터기님 처럼 configure 파일은 수정하지 않았습니다.

그리고, 남은그루터기님의 소스를 받아서 rtsp 주소로 실행하면 "Open Movie Error: -2" 라고 나오는데,
지원이 안되는 것으로 알고 있었는데, 프로젝트의 AndroidManifest.xml 파일에 인터넷 접근 권한을 추가 해야  되더군요.
2일이나 고생해서 찾았습니다.

config.sh 파일

export TMPDIR=c:/ffmpegtmp
export ANDROID_ROOT=/opt/android-8-toolchain

./configure --target-os=linux \
--arch=arm \
--enable-cross-compile \
--cc=$ANDROID_ROOT/bin/arm-linux-androideabi-gcc \
--cross-prefix=$ANDROID_ROOT/bin/arm-linux-androideabi- \
--extra-cflags="-marm -march=armv7-a -mfloat-abi=softfp -mfpu=neon" \
--extra-ldflags="-Wl,--fix-cortex-a8" \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-devices \
--disable-filters \
--disable-yasm \
--enable-network \
--enable-protocol=tcp \
--enable-demuxer=rtsp \
--enable-decoder=h264

남은그루터기님은 각라이브러리 폴더에 Android.mk을 만드셨지만,
config.sh 파일은 만들고 ./config.sh 실행하고 make 컴파일 실행하면,
각 라이브러리 폴더에 .a 파일로 파일이 생성됩니다.
jni 컴파일 할때도 이 라이브러리 파일만 참조 하시면 됩니다.

CPU별 --extra-cflags 추가 플래그

arm v6
    -marm -march=armv6

arm v7vfpv3
    -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a

arm v7vfp
    -mfloat-abi=softfp -mfpu=vfp -marm -march=armv7-a

arm v7n
    -mfloat-abi=softfp -mfpu=neon -marm -march=armv7-a -mtune=cortex-a8

arm v6+vfp
    -DCMP_HAVE_VFP -mfloat-abi=softfp -mfpu=vfp -marm -march=armv6

컴파일

$ ./config.sh

$ make

BasicPlayer.c 수정 - 남은그루터기 소스 원본의 내용 일부

#include "avcodec.h"
#include "avformat.h"
#include "swscale.h"

수정된 소스

#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libswscale/swscale.h"

Application.mk

APP_ABI := armeabi armeabi-v7a
APP_PLATFORM := android-8

Android.mk

# 참조
#      http://berabue.tistory.com/67
#      http://www.newsmth.net/bbsanc.php?path=%2Fgroups%2Fcomp.faq%2FMobileDev%2Fandroid%2FM.1315568907.n0&ap=275

# 컴파일하고자 하는 소스파일 위치를 알려줍니다. Android.mk를 jni에 놔두었으니 프로젝트/jni폴더가 됩니다.
LOCAL_PATH := $(call my-dir)

FFMPEGDIR := D:/Windows/cygwin/home/bluesanta/BluePlayer/jni/ffmpeg

# LOCAL로 시작하는것들을 초기화시킨다고합니다. LOCAL_PATH는 제외.
include $(CLEAR_VARS)

LOCAL_C_INCLUDES := $(FFMPEGDIR)

# List 'cpufeatures' in your list of static library dependencies
LOCAL_STATIC_LIBRARIES := cpufeatures

# 생성될 so파일명입니다.
LOCAL_MODULE    := libbasicplayer

# 컴파일할 소스파일을 추가합니다.  
LOCAL_SRC_FILES := Interface.c BasicPlayer.c

LDFFMPEG = -L$(FFMPEGDIR)/libavformat -L$(FFMPEGDIR)/libavcodec -L$(FFMPEGDIR)/libavutil -L$(FFMPEGDIR)/libswscale
LOCAL_LDLIBS    := $(LDFFMPEG) -lavformat -lswscale -lavcodec -lavutil -lz -lm -llog -ljnigraphics

# 공유 라이브러리를 생성합니다.
include $(BUILD_SHARED_LIBRARY)

# At the end of your Android.mk, import the 'android/cpufeatures'
$(call import-module,android/cpufeatures)

컴파일

$ ndk-build

댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
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
글 보관함