Linux下编译FFmpeg库

一、下载ndk

下载地址
在这里插入图片描述
找到ndk-r17复制下载链接
在这里插入图片描述
接着打开linux终端,用wget命令下载链接资源,然后回车等待资源下载完成。
在这里插入图片描述

二、ndk环境配置

首先解压ndk的zip文件。
执行unzip android-ndk-r17c-linux-x86_64.zip?hl=zh_cn 解压该文件(可以使用ls命令查看文件的名称)。解压完成可以看到多了一个解压后的文件
在这里插入图片描述
配置ndk的环境变量
使用vim打开vim /etc/profile文件进行编辑。在该文件的最后进行配置,然后保存退出编辑
在这里插入图片描述
执行source /etc/profile命令使配置好的环境变量生效。然后执行ndk-build 测试环境变量是否配置成功。出现下面这个样的提示就代表成功了。
在这里插入图片描述

三、FFmpeg下载

下载下载地址
在这里插入图片描述
下载该链接的资源
在这里插入图片描述
下载好了可以看到如下
在这里插入图片描述
解压FFmpeg压缩包
需要注意这个压缩包不是zip包所以不能用uzip解压。对于tar包可以使用tar命令解压。执行tar xvf ffmpeg-4.0.5.tar.bz2 进行解压。
x表示解压、v表示输出详情、f表示文件。
在这里插入图片描述

四、编译FFmpeg

进入ffmpeg-4.0.5可以看到里面有个configure文件,该文件是一个shell脚本。通过它可以编译FFmpeg。但是该文件直接编译的结果只能运行在linux中,我们需要的结果是可以运行在Android中,因此需要给它传递一些参数。

创建一个buildFFmpeg.sh脚本,专门用来执行configure。

#!/bin/bash
#指定NDK路径
NDK_ROOT=/root/ndk/android-ndk-r17c
#指明NDK交叉编译gcc所在目录
TOOLCHAIN=${NDK_ROOT}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
#抑制警告
#从as的 externalNativeBuild/xxx/build.ninja
FLAGS="-isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,--noexecstack -Wformat -Werror=format-security  -O0 -fPIC"
INCLUDES=" -isystem $NDK_ROOT/sources/android/support/include"

PREFIX=./android/armeabi-v7_1
#执行configure脚本用于生成makefile
./configure \
#指定编译出来的文件的存放位置
--prefix=$PREFIX \
#优化大小
--enable-small \
#不编译FFmpeg程序,我们需要的是静态或者动态库
--disable-programs \
#关闭avdevice模块,此模块在Android中用不着
--disable-avdevice \
#关闭所有编码器,播放时不需要编码
--disable-encoders \
#关闭所有的复用器,不需要生成mp4这种文件
--disable-muxers \
#关闭视频滤镜
--disable-filters \
#开启交叉编译
--enable-cross-compile \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
#编译成静态库
--disable-shared \
--enable-static \
--sysroot=$NDK_ROOT/platforms/android-21/arch-arm \
#传给gcc的参数
--extra-cflags="$FLAGS $INCLUDES" \
--extra-cflags="-isysroot $NDK_ROOT/sysroot/" \
--arch=arm \
#目标平台
--target-os=android
# 清理一下
make clean
#执行makefile
make install

友情提示,需要把执行configure脚本传递的参数之间的注释去除掉,不然会出现找不到命令的情况,像下面这样就好
在这里插入图片描述
保存退出编辑,然后执行 ./buildFFmpeg.sh 命令来执行脚本。如果提示没有权限,需要先给文件权限 执行chmod 777 buildFFmpeg.sh,然后再执行。
在这里插入图片描述
如果执行脚本时出现下面这个错误
在这里插入图片描述
解决方法:

  • 1、检查参数 cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- 是否正确(可以到对应的ndk目录看)
  • 2、执行yum install gcc命令尝试安装gcc编译器

解决了问题后,再次尝试编译,经过漫长的等待~可以查看编译后的结果如下
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值