FFmpeg是很好用的一个音视频库,功能强大,但是用起来并不是很方便。之前一直不想用FFmpeg,因为感觉编译太麻烦,但是到了不得不用的时候了,没办法,参考了网上大神的方法,在这里自己也记录一下方便以后再次查看。
一、环境
Ubuntu14.04
二、NDK环境配置
NDK下载链接:https://developer.android.google.cn/ndk/downloads/index.html
下载完后解压到任意路径即可,然后Alt+T打开终端执行以下命令,其中NDK_HOME的值改为你自己的NDK路径
export NDK_HOME=/home/y/adm/software/android-ndk-r14b
export PATH=$NDK_HOME:$PATH
三、FFmpeg源码下载及配置
FFmpeg下载地址:http://www.ffmpeg.org/download.html
一样解压到任意路径,然后找到解压后目录中的/ffmpeg-3.3.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)'
四、编译
在FFmpeg根目录新建一个空文档,改名为:build.sh
在其中写入以下内容:
其中有些地方需要修改
1、TMPDIR=为临时目录,自己新建一个,把路径写在这里
2、NDK=你自己的NDK路径
3、SYSROOT=编译时的platform版本,根据需要自己选择一个版本
4、TOOLCHAIN=这里主要还是前边部分的NDK路径需要修改为你自己的
5、PREFIX=编译后的so等文件的生成路径,自己新建一个文件夹,把路径写在这里
#!/bin/bash
export TMPDIR=/home/y/adm/software/ffmpeg/tmpdir
NDK=/home/y/adm/software/android-ndk-r14b
SYSROOT=$NDK/platforms/android-16/arch-arm/
TOOLCHAIN=/home/y/adm/software/android-ndk-r14b/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CPU=arm
PREFIX=/home/y/adm/software/ffmpeg/result/
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
修改完后打开终端,切换到FFmpeg根目录,执行:
大概需要几分钟,等待编译结果。
编译完成后,打开PREFIX指定的目录,其中有include和lib两个文件夹,删除lib文件夹中的pkgconfig文件夹和so的链接文件,此时该文件夹中应只剩so库,余下的include和lib就是开发需要的文件了
PS:在编译最后出现了这么一句话:
build.sh: 35: build.sh: build_one: not found
但是编译结果好像是正常的,反正是sh文件的最后一句了,应该不影响结果