用window 10 自带的linux子系统编译ffmpeg并引入项目(上)
引言
一直想学习ffmpeg在android上的应用,但发现ffmpeg编译需要各种支持软件。今年最新的window10周年纪念版发布居然在window中放入了一个完整的linux的bash。那我是不是就能通过只通过windows就完美的完成ffmpeg的编译到开发呢?抱着试试看的太多我开始了我的探索之旅。
liunx环境安装
- 打开控制面板— 程序与功能— 启用或关闭 Windows 功能:
- 勾选适用于 Linux 的 Windows 子系统(Beta)并点击确定;
- 安装后需要重启,然后打开命令提示符,执行如下命令即可开启(可直接在管理员模式下输入Bash命令开启):C:\windows\system32\bash.exe
- 运行bash.exe文件中的第一次,系统会提示您接受服务条款。 那么该命令将从Windows Store下载Bash on Ubuntu on Windows。
- 下载安装完成后会让你输入账号和密码
ffmpeg编译环境搭建
- 为了编译ffmepg首先要给你的linux安装上gcc 和 g++其实单独安装很麻烦直接安装build-essential软件包就好了打开bash命令行输入sudo apt-get install build-essential可能部分包会下载失败,多打几次这个命令就好。
- 编译android用的so当然需要ndk了,翻墙去下载ndk吧,这里一定要下载linux版的ndk,我开始用windows的ndk试了半天发现不对。ndk地址
- 解压ndk
- 配置ndk环境变量 打开bash执行$sudo vim ~/.bashrc
- 如上图最后一行是我的ndk的地址。这里修改文件用的vim以前不会vim真是现学的。保存后输入ndk-build如果不提示找不到命令你就成功了
编译ffmpeg
感谢这篇博客给我的启发和帮助 [windows10下编译ffmpeg for android](http://blog.csdn.net/huweijian5/article/details/52840177)
1. 下载ffmpeg地址
2. 配置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代码如下
#!/bin/bash
NDK=/mnt/c/android/android-ndk-r10
SYSROOT=$NDK/platforms/android-L/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CPU=arm
PREFIX=/mnt/c/android/ffmpeg-3.2.1/so
ADDI_CFLAGS="-marm"
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-doc \
--disable-symver \
--enable-small \
--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
}
build_one
read -p "Press any key to continue." var
ndk是你ndk的路径
prefix是你生成so的地址
3.接着打开bash切到.sh的目录下执行build_android.sh经过漫长的等待你就可以在so目录下看到编译好的so了。
中间的过程基本都是靠自己摸索,因为我没查到任何人是通过我这个方式来编译ffmpeg给android用的。中间可能有遗漏的地方。欢迎留言交流