windows环境下用ndk编译出供android的ffmpeg

来源:互联网 发布:新疆天山云广电网络 编辑:程序博客网 时间:2024/04/29 17:00

需要 

1、android sudio(android开发工具)

2、ndk (android 的开发工具包,java代码可以通过ndk调用c/c++代码)

3、mingw(暂且理解为windows环境下编译c/c++代码的工具)

4、ffmpeg(处理视频、音频等多媒体的库)


在android studio下的ndk环境搭建:

1、打开sdk manager

2、选择sdk tools选择ndk下载


下载完成之后ndk的目录默认是在sdk的目录下面。

接下来就是配置ndk的环境变量,

新建一个变量叫NDK_ROOT,他的值就是ndk的安装目录,

然后再path的变量底下加上




接下来安装mingw

下载地址

一直点击下一步,知道如下图

这里写图片描述

红色截图必须安装,其他的可以自行选择。

选择之后点击左上角的installation,进行安装。

mingw的环境变量配置如下:


根据自己的实际安装地址填写。


接下来编译ffmpeg

修改ffmeg源码下的configure文件

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)'
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

修改成:

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'SLIB_INSTALL_LINKS='$(SLIBNAME)'

增加build_android.sh文件

 #!/bin/bash NDK=你对应的ndk目录 SYSROOT=$NDK/platforms/android-9/arch-arm/TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64function 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





其中NDK,SYSROOT,TOOLCHAIN是你需要更加本地环境情况需要配置的

我自己本地的配置如下

NDK=C:/WorkSoftwear/Sdk/ndk-bundleSYSROOT=$NDK/platforms/android-9/arch-arm/TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64


开始编译

安装Mingw成功后,双击目录MinGW/msys/1.0/msys.bat批处理文件,然后输入命令cd 你的目录 进入对应的ffmpeg根目录下(即进入到build.android.sh所在目录下)后输入./build_android.sh进行编译,大概十几分钟左右。(途中会有一些warning,和deprecated api,不会影响结果)。 

第一条命令错误是因为linux下文件夹分隔符“/”和window下是相反,复制过来的路径需要修改,结束之后可以看到在ffmpeg文件夹下面多了一个android文件夹

第一条命令错误是因为linux下文件夹分隔符“/”和window下是相反,复制过来的路径需要修改,结束之后可以看到在ffmpeg文件夹下面多了一个android文件夹

如果是eclipse使用,那么你需要一个Android.mk文件,android studio忽略

LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE:= libavcodecLOCAL_SRC_FILES:= lib/libavcodec-56.soLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/includeinclude $(PREBUILT_SHARED_LIBRARY)include $(CLEAR_VARS)LOCAL_MODULE:= libavformatLOCAL_SRC_FILES:= lib/libavformat-56.soLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/includeinclude $(PREBUILT_SHARED_LIBRARY)include $(CLEAR_VARS)LOCAL_MODULE:= libswscaleLOCAL_SRC_FILES:= lib/libswscale-3.soLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/includeinclude $(PREBUILT_SHARED_LIBRARY)include $(CLEAR_VARS)LOCAL_MODULE:= libavutilLOCAL_SRC_FILES:= lib/libavutil-54.soLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/includeinclude $(PREBUILT_SHARED_LIBRARY)include $(CLEAR_VARS)LOCAL_MODULE:= libavfilterLOCAL_SRC_FILES:= lib/libavfilter-5.soLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/includeinclude $(PREBUILT_SHARED_LIBRARY)include $(CLEAR_VARS)LOCAL_MODULE:= libwsresampleLOCAL_SRC_FILES:= lib/libswresample-1.soLOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/includeinclude $(PREBUILT_SHARED_LIBRARY)








0 0