window环境下使用ndk编译出android studio/Eclipse能使用的ffmpeg动态库

window环境下使用ndk编译出android studio 能使用的ffmpeg动态库

目录

  • window环境下使用ndk编译出android studio 能使用的ffmpeg动态库
    • ffmepg介绍
    • 环境准备
      • ndk环境搭建
      • 安装minGW软件并配置它的环境变量
        • 安装过程
        • 环境变量配置
    • 编译ffmpeg
      • 源码下
      • 编译文件配置
        • 编辑ffmpeg文件夹下面的configure文件
        • 增加build_androidsh文件
    • 开始编译

ffmepg介绍

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec。–来至百度百科

对于一些不熟悉Linux系统的开发者来说,本文将带领你们来使用window操作系统来编辑ffmepg动态,来为我们的android studio使用(或者Eclipse)

环境准备

ndk环境搭建

1.android studio通过sdk Manager/SDK TOOls分类下,NDK直接下载,
window环境下使用ndk编译出android studio/Eclipse能使用的ffmpeg动态库_第1张图片
次方法下载完的路径在android Manager下载目录Android sdk目录下的ndk-bundle中

2.离线下载方式,解压到一个地址即可

接下来环境变量配置
window环境下使用ndk编译出android studio/Eclipse能使用的ffmpeg动态库_第2张图片

安装minGW软件,并配置它的环境变量

下载地址:minGW下载地址

安装过程

window环境下使用ndk编译出android studio/Eclipse能使用的ffmpeg动态库_第3张图片

接下来进入下载管理器过程,类似android Manager的工具
window环境下使用ndk编译出android studio/Eclipse能使用的ffmpeg动态库_第4张图片

接下来进入选择安装模块的界面,需要安装红色框选择的两个模块
window环境下使用ndk编译出android studio/Eclipse能使用的ffmpeg动态库_第5张图片
安装方法是右键要安装的模块->下拉选择框中选择“Mark for instatllation->选择菜单栏“Installation->点击选择Apply changes项
会调整到这个界面,apply即可
window环境下使用ndk编译出android studio/Eclipse能使用的ffmpeg动态库_第6张图片

环境变量配置

配置minGW安装目录下的bin到环境变量
window环境下使用ndk编译出android studio/Eclipse能使用的ffmpeg动态库_第7张图片

编译ffmpeg

源码下

这里下载ffmpeg源码,解压即可

编译文件配置

编辑ffmpeg文件夹下面的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)'

将其修改成:

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文件

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

 #!/bin/bash 
NDK=你对应的ndk目录 
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64
function 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=C:/WorkSoftwear/Sdk/ndk-bundle
SYSROOT=$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,不会影响结果)。
window环境下使用ndk编译出android studio/Eclipse能使用的ffmpeg动态库_第8张图片
第一条命令错误是因为linux下文件夹分隔符“/”和window下是相反,复制过来的路径需要修改,结束之后可以看到在ffmpeg文件夹下面多了一个android文件夹

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

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE:= libavcodec
LOCAL_SRC_FILES:= lib/libavcodec-56.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE:= libavformat
LOCAL_SRC_FILES:= lib/libavformat-56.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE:= libswscale
LOCAL_SRC_FILES:= lib/libswscale-3.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE:= libavutil
LOCAL_SRC_FILES:= lib/libavutil-54.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE:= libavfilter
LOCAL_SRC_FILES:= lib/libavfilter-5.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE:= libwsresample
LOCAL_SRC_FILES:= lib/libswresample-1.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)

你可能感兴趣的:(android)