Windows 下编译 FFmpeg 小记(移植到Android)

96
_SOLID
2017.05.14 13:23* 字数 679

本文是基于 Windows 10 下的 Linux 子系统,不得不说 Win 10 的子系统功能特别赞,默认我们的磁盘挂载在这个系统上,我们不需要再去装虚拟机或者双系统就可以很方便的完成 Linux 上才能做的事,大大的节省了我们的开发时间,为在 Windows 上进行开发的开发人员开辟了一块新的天地。

1. 如何开启这个子系统
2. 下载 ffmpeg 源码:https://ffmpeg.org/ , 当前版本为3.3
3. 下载 Linux 下的 NDK:https://developer.android.com/ndk/downloads/index.html

由于是在 Linux 下编译,所以务必要下载 Linux 版本的 NDK

4. 解压到一个文件夹,在根目录下找到 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)'  

上面的替换主要是为了解决生成 so 文件的命名问题

5. 新建编译脚本 & 编译:

在与ffmpeg源码文件夹同级的目录下建立build_android.sh文件,内容如下

#!/bin/sh
cd ffmpeg-3.3
make clean
#这里的这些变量根据自己本地的环境切换
export NDK=/mnt/d/ProgramFiles/Development/SDK/ndk-bundle-linux/android-ndk-r14b
export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt  
export PLATFORM=$NDK/platforms/android-19/arch-arm
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
export PREFIX=../ffmpeglib  
build_one(){  
./configure --target-os=linux --prefix=$PREFIX --enable-cross-compile \
--enable-runtime-cpudetect \
--disable-asm \
--arch=arm \
--cc=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \
--disable-stripping \
--nm=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-nm \
--sysroot=$PLATFORM \
--enable-gpl --enable-shared --disable-static --enable-small \
--disable-ffprobe --disable-ffplay --disable-ffmpeg --disable-ffserver --disable-debug \
--extra-cflags="-fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a"   

}  
  
build_one  
  
make  
make install  
cd ..

记得最上面的变量一定要根据自己的开发环境切换

安装 gcc

apt-get install gcc

安装 make

apt-get install make

最后打开命令行输入 bash 进入 linux 子系统,切换目录至 build_android.sh 所在的目录下,在命令行中输入 <code>./build_android</code> 执行上面的脚本等待编译的完成即可

编译完成后ffmpeg源码的同级目录下会多一个 ffmpeglib 目录,此目录中包含so库文件以及编程会使用到的头文件,将其拷贝到自己项目的目录中即可使用。

6. 新建一个Android Studio工程,写一个Demo

项目结构如下图(使用最新的 cmake 构建):


项目结构

本项目是基于雷神的 最简单的基于FFmpeg的移动端例子:Android HelloWorld 这篇文章有更多细节的介绍。

运行截图:

运行截图

到此本文就完了,在构建的过程中遇到了很多的坑,也花费了不少的时间,使用FFmpeg也走出了第一步,后面还需要更多的学习,如果读者在构建的过程中遇到问题也欢迎留言。

源码地址:https://github.com/burgessjp/BlogDemo/tree/master/FFmpegStatDemoForAndroid

参考文章:

Android开发
Web note ad 1