Linux下编译FFmpeg-4.2.2并移植到Android(一)

系统:虚拟机中安装ubuntu16.04.6
FFmpeg版本:4.2.2
android NDK版本:r20b

前言:刚开始编译的时候同时看了很多人的博客,然后确定了大家的步骤基本都差不多,于是挑了一个详细的,跟一个大神的简略版对照着进行编译。大神的简略版是雷霄骅(leixiaohua1020)的专栏中的.

然后因为没有关注版本的差异化开始了我的踩雷之路:

刚开始用的是文章最简单的基于FFmpeg的移动端例子:Android HelloWorld
的配置。
然后压根就没有生成simplefflib这个文件夹,不管是绝对路径还是相对路径还是改名字统统不行。

后面经过逐行的检查,我发现ndk-r20b根本就没有arm-linux-androideabi-gcc 这个交叉编译工具。在网上搜索来搜索去,看到了说在android-ndk最后一个具有gcc的版本是r17c。网上的建议是换个具有gcc工具的ndk例如r17c.这个我就没有去尝试了,本来打算自己下载个gcc,但是身为一名小白,实在无从下手就放弃了。
后面偶然间看到了别的博主的新版本ndk+新版本ffmpeg的配置。进行尝试才总算编译出了相应的动态库。
参照的文章是:编译FFmpeg4.1.3并移植到Android app中使用(最详细的FFmpeg-Android编译教程)
这个博主用的是r19c一样不具备gcc所以我就拿他的配置来用,按照我的系统跟版本情况,修改后的配置如下:

#!/bin/bash
#这个配置生成的是一整套完整功能的库,没有剪裁掉功能
cd ffmpeg-4.2.2#在ffmpeg所在路径下编译
NDK=/home/zhang/android-ndk-r20b
ADDI_LDFLAGS="-fPIE -pie"
ADDI_CFLAGS="-fPIE -pie -march=armv7-a -mfloat-abi=softfp -mfpu=neon"
CPU=armv7-a
ARCH=arm
HOST=arm-linux
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin
PREFIX=/home/zhang/$CPU#这里是写你输出文件要存放的位置
port PKG_CONFIG_PATH=$x264/lib/pkgconfig:$PKG_CONFIG_PATH
configure()
{
    ./configure \
--prefix=$PREFIX \
--toolchain=clang-usan \
--enable-cross-compile \
--target-os=android \
--arch=$ARCH \
--sysroot=$SYSROOT \
--cc=$TOOLCHAIN/armv7a-linux-androideabi21-clang \
--cxx=$TOOLCHAIN/armv7a-linux-androideabi21-clang++ \
--strip=$TOOLCHAIN/arm-linux-androideabi-strip \
--extra-cflags="$ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
--disable-static \#不生产成静态文件 就是xxx.a
--disable-doc \
--disable-ffplay \
--disable-symver \
--disable-ffprobe \
--enable-neon \
--enable-gpl \
--enable-shared \#运行生产动态文件就是xxx.o
}
build()
{
    configure
    make clean
    make -j4
    make install
}

build

将这个build.sh文件放在ffmpeg源码所处位置的同一级目录下,例如我的是这样的
文件所处位置
ffmpeg相关参数意思可参照文章ffmpeg ./configure 的相关参数说明
android-ndk-r20b是ndk解压包
build.sh就是上面的配置文件
ffmpeg-4.2.2就是ffmpeg的源码解压包
运行完后生成的文件在 armv7-a里面
如下:
生成文件所在位置

*注意 x264需要自己编译引入,ffmpeg并不包含x264

可以根据自己的需求对模块进行裁剪,
查看所有编译配置选项:./configure --help
查看支持的解码器:./configure --list-decoders
查看支持的编码器:./configure --list-encoders
查看支持的硬件加速:./configure --list-hwaccels
赋予脚本执行权限:chmod 777 build.sh
执行脚本开始编译:./build.sh

其实两个配置文件的主要差别就在于编译工具链上,r17c及其以前是用的gcc,后续的版本把gcc去掉了,用的是clang
旧配置:
在这里插入图片描述

新配置

在这里插入图片描述

其他写的比较详细的参考链接:利用NDK(r20) 编译FFmpeg 4.2.1 Android版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值