移植带X264库的FFMPEG到ANDROID(win7上,用MINGW)

编译FFMPEG到ANDROID,可以有两种选择,一种是在UBUNTU上,另外一种是在WINDOWS上用MINGW或者CYGWIN编译,UBUNTU上的编译过程比较简单,CYCWIN可以参考http://www.apkbus.com/android-4516-1-1.html,由于本人一直喜欢用MINGW,所以CYCWIN这里就不多说了,主要介绍WIN7上MINGW的编译方式。

1:基本的环境下载和安装,JDK,ANDROID-SDK,ANDROID-NDK和MINGW等,NDK下载R8B版本就可以了。

2:下载FFMPEG和X264,FFMPEG的版本下载0.10.*和0.11.*都可以,x264下载最新版本就可以了。

3:在android-ndk-r8b的samples目录下,创建一个文件夹,如FFMPEG-TEST,把FFMPEG和X264的源代码拷贝到该文件夹下。

4:在samples目录下添加Android.mk和Application.mk文件


这两个文件和UBUNTU下的一样。


5:先编译X264,在X264目录下创建config.sh文件,把下面添进去

export ARM_ROOT=/E/code/xx/forwindows/android-ndk-r8b
export PLATFORM=$ARM_ROOT/platforms/android-8/arch-arm
export ARM_INC=$PLATFORM/usr/include
export ARM_LIB=$PLATFORM/usr/lib
#export ARM_TOOL=$ARM_ROOT/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86
#export ARM_LIBO=$ARM_TOOL/lib/gcc/arm-eabi/4.4.0
export ARM_TOOL=$ARM_ROOT/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86
export ARM_LIBO=$ARM_TOOL/lib/gcc/arm-linux-androideabi/4.6.x-google
export PATH=$ARM_TOOL/bin:$PATH
export ARM_PRE=arm-linux-androideabi


./configure --prefix=/home/arm_lib \
        --disable-gpac \
        --enable-static \
--enable-pic \
--cross-prefix=$ARM_ROOT/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/${ARM_PRE}- --host=arm-linux \
        --extra-cflags=" -I$ARM_INC -fPIC -DANDROID -fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -Wno-psabi -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -DANDROID  -Wa,--noexecstack -MMD -MP -I/E/code/thread/pthreads-w32-2-9-1-release" \
        --extra-ldflags="-nostdlib -Bdynamic  -Wl,--no-undefined -Wl,-z,noexecstack  -Wl,-z,nocopyreloc -Wl,-soname,/system/lib/libz.so -Wl,-rpath-link=$ARM_LIB,-dynamic-linker=/system/bin/linker -L$ARM_LIB -L/E/code/xx/forwindows/android-ndk-r8b/platforms/android-8/arch-arm/usr/lib -llog -nostdlib $ARM_LIB/crtbegin_dynamic.o $ARM_LIB/crtend_android.o -lc -lm -ldl -lgcc " 
        
        #--cross-prefix=/usr/watermark/android-ndk-r5b/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86/bin/${ARM_PRE}- --host=arm-linux

上面这个是针对本人机子上的环境,具体根据自己的情况进行调整

6:启动MINGW,CD到X264目录下,config.sh && make -j4

7:在libffmpeg目录下创建android.mk文件,可以先参考上面链接的MK文件的CODE方式,但这样做的话,由于链接的文件太多,会出现FILE NUMBER的错误,需要把LIBFFMPEG.SO分成多个小的STATCI来编译,最后才链接成一个大的SO文件,关键的修改方法如下

#第一个模块

LOCAL_SRC_FILES := $(AVUTIL_SRC_FILES) 

ifeq ($(ARCH_ARM),yes)
LOCAL_ARM_MODE := arm
LOCAL_SRC_FILES += $(AVCODEC_ARM_SRC_FILES)
LOCAL_ARM_NEON := true
TARGET_ARCH_ABI := armeabi-v7a
LOCAL_CFLAGS += -march=armv7-a
LOCAL_MODULE := libffmpeg_avutil
endif
include $(BUILD_STATIC_LIBRARY)  现编成静态的


include $(CLEAR_VARS) #第二个模块
include $(LOCAL_PATH)/config.mak
LOCAL_PRELINK_MODULE:= false
LOCAL_MODULE_TAGS := optional
LOCAL_CFLAGS += $(ASFLAGS)
LOCAL_CFLAGS += -std=c99
LOCAL_LDLIBS := -llog
LOCAL_C_INCLUDES+=$(LOCAL_PATH)/../x264/include
#LOCAL_STATIC_LIBRARIES := libx264
LOCAL_LDFLAGS+=$(LOCAL_PATH)/../x264/libx264.a
LOCAL_SRC_FILES := $(AVCODEC_SRC_FILES)
#ifeq ($(ARCH_ARM),yes)
#ifeq ($(HAVE_NEON),yes)
LOCAL_ARM_NEON := true
TARGET_ARCH_ABI := armeabi-v7a
LOCAL_CFLAGS += -march=armv7-a
LOCAL_MODULE := libffmpeg_codec
#else
#LOCAL_MODULE := libffmpeg_vfp
#endif
#endif
include $(BUILD_STATIC_LIBRARY)

。。。。。。。。。。。。。


LOCAL_WHOLE_STATIC_LIBRARIES := libffmpeg_avutil libffmpeg_codec libffmpeg_format  #只能用LOCAL_WHOLE_STATIC_LIBRARIES

include $(BUILD_SHARED_LIBRARY)


8:开始编译,CD到FFMPEG-TEST目录下,$NDK/ndk-build后,在obj\local\armeabi目录下生成了libffmpeg.so文件



9:用JNI调用你的libffmpeg.so 文件吧

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值