zl程序教程

您现在的位置是:首页 >  其他

当前栏目

ffmpeg-编译

2023-03-07 09:11:25 时间

记一次编译ffmpeg过程:

环境准备

  1. ubuntu16.04 我是64位,所以还要额外安装32位依赖库
  2. ndk环境

首先去官网下载最新的源码:ffmpeg4.0.2

随便解压到一个目录,先运行一次命令./configure,如果没错可以进行下一步操作,编写脚本

新建一个xxx.sh文件,往里面写入如下内容:

#!/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。

然后再次运行脚本,没有错误,就执行下面两个命令:

make 
make install

编译完成后,在当前目录下的android/arm/下会有inclue 和 lib两文件夹  inclue 存放的是相关模块的.h文件,lib 存放的就是.so文件 

最后放上ffmpeg编译好的github地址:ffmpeg_build_demo