用window 10 自带的linux子系统编译ffmpeg并引入项目(上)

用window 10 自带的linux子系统编译ffmpeg并引入项目(上)

引言

一直想学习ffmpeg在android上的应用,但发现ffmpeg编译需要各种支持软件。今年最新的window10周年纪念版发布居然在window中放入了一个完整的linux的bash。那我是不是就能通过只通过windows就完美的完成ffmpeg的编译到开发呢?抱着试试看的太多我开始了我的探索之旅。

liunx环境安装

  1. 打开控制面板— 程序与功能— 启用或关闭 Windows 功能:
  2. 勾选适用于 Linux 的 Windows 子系统(Beta)并点击确定;用window 10 自带的linux子系统编译ffmpeg并引入项目(上)_第1张图片
  3. 安装后需要重启,然后打开命令提示符,执行如下命令即可开启(可直接在管理员模式下输入Bash命令开启):C:\windows\system32\bash.exe
  4. 运行bash.exe文件中的第一次,系统会提示您接受服务条款。 那么该命令将从Windows Store下载Bash on Ubuntu on Windows。
  5. 下载安装完成后会让你输入账号和密码

ffmpeg编译环境搭建

  1. 为了编译ffmepg首先要给你的linux安装上gcc 和 g++其实单独安装很麻烦直接安装build-essential软件包就好了打开bash命令行输入sudo apt-get install build-essential可能部分包会下载失败,多打几次这个命令就好。
  2. 编译android用的so当然需要ndk了,去下载ndk吧,这里一定要下载linux版的ndk,我开始用windows的ndk试了半天发现不对。ndk地址
  3. 解压ndk
  4. 配置ndk环境变量 打开bash执行$sudo vim ~/.bashrc 用window 10 自带的linux子系统编译ffmpeg并引入项目(上)_第2张图片
  5. 如上图最后一行是我的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用的。中间可能有遗漏的地方。欢迎留言交流

你可能感兴趣的:(ffmpeg)