Search

'toolchain'에 해당되는 글 2건

  1. 2012.05.26 Android NDK FFmpeg 컴파일 강좌 - toolchain사용 (4)
  2. 2012.05.24 Android NDK - toolchain 사용 컴파일

출처 : 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

신고

Android NDK - toolchain 사용 컴파일

Programming/안드로이드 2012.05.24 15:17 Posted by 파란크리스마스

출처 : http://stackoverflow.com/questions/9251747/record-rtsp-stream-with-ffmpeg-libavformat
http://limga.tistory.com/3
http://kaludin.egloos.com/2651893
http://dranger.com/ffmpeg/tutorial01.html
http://dc.csie.ntut.edu.tw/files/DC006lab.pdf
http://www.cantgetnosleep.com/wordpress/?p=111

main.c 파일

#include <stdio.h>

int main(int argc, char* argv[])
{
	printf("Hello Android NDK! \n");	

	return 0;
}

Makefile 파일

TARGET = hello

TOOLCHAIN = D:/Windows/cygwin/opt/android-8-toolchain

CROSS  = $(TOOLCHAIN)/bin/arm-linux-androideabi-
INCDIR = $(TOOLCHAIN)/sysroot/usr/include
LIBDIR = $(TOOLCHAIN)/sysroot/usr/lib

CC 	= $(CROSS)gcc
AR 	= $(CROSS)ar
LD 	= $(CROSS)ld
NM 	= $(CROSS)nm
RANLIB 	= $(CROSS)ranlib
STRIP = $(CROSS)strip

INCLUDE = -I. -I$(INCDIR) 

CFLAGS = -Wall
LDFLAGS = -nostdlib -Wl,--dynamic-linker,"//system/bin/linker" -L$(LIBDIR) -lc -lm -lstdc++ -ldl
#LDFLAGS = -static -lc -lm -lstdc++

# crt 
CRTOBJ = $(LIBDIR)/crtbegin_dynamic.o

# application file
APPSOURCES = main.c
APPOBJS = $(APPSOURCES:.c=.o)

# define the rule
.SUFFIXES:.c .o 

.c.o:
	@echo Compiling: $< 
	$(CC) -c $(CFLAGS)  $(INCLUDE) -o $@ $<

all: app

app: $(APPOBJS)
	@echo Linking: $(TARGET) 
	$(CC) -o $(TARGET) $(APPOBJS) $(CRTOBJ) $(LDFLAGS)
	$(STRIP) -s $(TARGET)

clean:
	@rm -vf $(APPOBJS) $(TARGET) 
	

테스트

 

신고


 

티스토리 툴바