手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

   2016-10-01 0
核心提示:之前曾写过一篇 《FFmpeg在Linux下安装编译过程》 ,今天有空就用Android Studio编译FFmpeg库并移植,并附上调用ffmpeg简单示例,看下Agenda如下: 下载FFmpeg 3.1.3 下载NDK 配置ndk环境 编译FFmpeg 移植到Android平台 调用编译的so示例 下载FFmpeg 3.1.3网址

之前曾写过一篇 《FFmpeg在Linux下安装编译过程》 ,今天有空就用Android Studio编译FFmpeg库并移植,并附上调用ffmpeg简单示例,看下Agenda如下:

  • 下载FFmpeg 3.1.3

  • 下载NDK

  • 配置ndk环境

  • 编译FFmpeg

  • 移植到Android平台

  • 调用编译的so示例

下载FFmpeg 3.1.3

网址: https://ffmpeg.org/download.html#build-mac

 手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

双击解压如下,得到一个文件夹: 

下载NDK

  • 供参考下载地址见本文最下面,也可自行下载。

  • 双击解压如下,同样得到一个文件夹:

     手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

配置ndk环境

  • 启动终端Terminal

  • 进入当前用户的home目录

    • 输入cd ~ 或 /Users/YourUserName

  • 创建.bash_profile

    • 输入touch .bash_profile

  • 编辑.bash_profile文件

    因为是为了配置NDK开发环境,输入Android NDK下目录,前面是android sdk的,可以不用动它,最终.bash_profile文件如下:

    export PATH=$(PATH):/Users/hejunlin/android-sdks/platform-tools    export NDK_ROOT=/Users/hejunlin/Downloads/android-ndk-r10e                    
    export PATH=$PATH:$NDK_ROOT
    • 1

    • 2

    • 3

    • 输入open -e .bash_profile

  • 保存文件,关闭.bash_profile

  • 更新刚配置的环境变量

    输入source .bash_profile

  • 看看刚刚设置的环境变量

离开了编辑器后,在终端输入 $PATH 并且按enter键来确认是否编辑成功,此时应该会出现所有的环境变量(以:号相分隔)

 手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

表明配置成功

接下来·开始进行测试ndk是否能正常编译jni

(1) 终端进入到 NDK下面的 samples 目录下。 

(2) 输入 cd hello-jni/ ,回车,然后执行 ndk-build 

出现以下界面代表配置成功。 

 手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

编译FFmpeg

  • 在编译前,在源码中,修改FFmpeg的configure

  • 下载FFmpeg源代码之后,首先需要对源代码中的configure文件进行修改。由于编译出来的动态库文件名的版本号在.so之后(例如“libavcodec.so.5.100.1”),而android平台不能识别这样文件名,所以需要修改这种文件名。在configure文件中找到下面几行代码(在3209-3212行):

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

替换为下面内容:

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

  • 2

  • 3

  • 4

接下来开始写shell脚本

这里有一个坑:我用记事本写了个sh脚本,一直报如下错误:

 手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

这种情况应该有两种原因:

  • 1.在WIN底下用文本编辑工具修改过参数变量,在保存的时候没注意编码格式造成的,

  • 2.也有可能是在VIM里修改,第一行末尾按到ctrl+v

    这里避开这个弯,我找到FFmpeg下一个version.sh的shell脚本,复制了一份 

    重命名为build_android.sh。脚本如下:

#!/bin/sh
NDK=/Users/hejunlin/Downloads/android-ndk-r10e
SYSROOT=$NDK/platforms/android-21/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-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
  • 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

  • 31

  • 32

  • 33

  • 34

如果大家要编译,记得改下前三行,对应自己机器上的环境

接着开始执行这个shell脚本,在终端输入 ./ build_android.sh , 如图: 

 手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

开始进行自动编译: 

 手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

中间过程: 

 手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

喝杯咖啡时间,就编译好了,结果如下: 

 手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

这时会发现 FFmpeg下多了一个文件夹android: 

 手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

打开如下: 

 手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

这样我们要的so就有了,当然,这只是基本的。

本文出自逆流的鱼yuiop: http://blog.csdn.net/hejjunlin/article/details/52661331

移植到Android平台

接下来写在Android studio写一个示例,调用ffmpeg中方法

建一个工程:在src/main下建一个jni目录 

 手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

把前面编译好的android目录移植过来 

 手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

simplest_ffmpeg_helloworld.c代码如下: 

 手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

Android.mk文件内容如下: 

 手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

本文出自逆流的鱼yuiop: http://blog.csdn.net/hejjunlin/article/details/52661331

开始编译目标so,在Studio中的Terminal面板中:执行ndk-build

(在此之前记得要在local.properties下配置ndk目录) 

 手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

会在libs下面生成一些so,也可以看到我们目标so: 

 手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

然后建立一个jniLibs文件夹,把这些so拷贝进去

调用编译的so示例

接着写MainActivity代码,如下:

 手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

最终效果如图:

以上相关资料及下载的ffmpeg及ndk下载链接:

https://pan.baidu.com/s/1eRVON4m

(永久链接)

第一时间获得博客更新提醒,以及更多 android干货,源码分析 ,欢迎关注我的微信公众号,扫一扫下方二维码或者长按识别二维码,即可关注。

 手把手图文并茂教你用 Android Studio 编译 FFmpeg 库并移植

 
标签: FFmpeg Android Studio
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

点击排行