记一次编译ffmpeg过程:
环境准备
- ubuntu16.04 我是64位,所以还要额外安装32位依赖库
- ndk环境
首先去官网下载最新的源码:ffmpeg4.0.2
随便解压到一个目录,先运行一次命令./configure,如果没错可以进行下一步操作,编写脚本
新建一个xxx.sh文件,往里面写入如下内容:
代码语言:shell复制#!/bin/bash
NDK=/opt/android-ndk-r14b #ndk目录
SYSROOT=$NDK/platforms/android-14/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
CPU=armv7-a #需要编译哪种架构的so库
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
function build_android
{
./configure
--prefix=$PREFIX #规定编译文件在哪里生成
--enable-neon
--enable-hwaccels
--enable-shared #生成动态库(共享库)
--target-os=android #目标系统
--enable-jni
--enable-mediacodec #硬解码支持
--enable-decoder=h264_mediacodec
--disable-static #禁止生成静态库
--disable-doc
--enable-ffmpeg
--disable-ffplay
--disable-ffprobe
--enable-avdevice
--disable-doc
--disable-symver
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- #交叉编译链
--arch=arm #目标平台架构
--cpu=armv7-a
--enable-cross-compile #启用交叉编译方式
--sysroot=$SYSROOT
--extra-cflags="-Os -fpic $ADDI_CFLAGS"
--extra-ldflags="$ADDI_LDFLAGS"
$ADDITIONAL_CONFIGURE_FLAG
}
build_android
放入解压之后的根目录,我这里命名为build.sh。然后在终端执行命令 bash build.sh。我第一次编译提示如下错误jni not found:
找了搜索好几天无果,后面拿着log结合别的文章看了又看,觉得可能是ndk版本的问题,于是换成r14,结果编译成功了。
ndk-r16版本:
ndk-r14版本:
主要是缺失了include文件夹,include文件夹里有个jni.h头文件,所以会报错jni not found。
然后再次运行脚本,没有错误,就执行下面两个命令:
代码语言:shell复制make
make install
编译完成后,在当前目录下的android/arm/下会有inclue 和 lib两文件夹 inclue 存放的是相关模块的.h文件,lib 存放的就是.so文件
最后放上ffmpeg编译好的github地址:ffmpeg_build_demo