ffmpeg-编译

2023-02-14 10:15:34 浏览数 (1)

记一次编译ffmpeg过程:

环境准备
  1. ubuntu16.04 我是64位,所以还要额外安装32位依赖库
  2. 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

0 人点赞