当前位置: 首页 > news >正文

ubuntu下交叉编译安卓FFmpeg 和 官方指导链接

将之前的编译方法在此记录

Linux系统:Ubuntu 18.04.6 LTS

交叉编译工具链:gcc-aarch64-linux-gnu g+±aarch64-linux-gnu

ffmpeg版本:5.1.3

1.下载源码

ffmpeg官网:https://ffmpeg.org/download.html#releases

img

下载完成后,压缩包解压到Ubuntu中。

2.安装依赖

a.安装交叉编译工具链
sudo apt-get update
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
b.安装依赖项
sudo apt-get install -y pkg-config-aarch64-linux-gnu
sudo apt-get install libmp3lame-dev libx264-dev libxvidcore-dev
sudo apt-get update && sudo apt-get -y install \autoconf \automake \build-essential \cmake \git-core \libass-dev \libfreetype6-dev \libgnutls28-dev \libmp3lame-dev \libsdl2-dev \libtool \libva-dev \libvdpau-dev \libvorbis-dev \libxcb1-dev \libxcb-shm0-dev \libxcb-xfixes0-dev \meson \ninja-build \pkg-config \texinfo \wget \yasm \zlib1g-dev \libunistring-dev

3.生成Makefile文件

首先cd到解压好的ffmpeg源码目录中。(如果之前编译过,需要先make clean 一下)

chmod +x configure
./configure --enable-cross-compile --target-os=android --arch=aarch64 --enable-neon --cross-prefix=/usr/bin/aarch64-linux-gnu- --cc=/usr/bin/aarch64-linux-gnu-gcc --cxx=/usr/bin/aarch64-linux-gnu--g++ --prefix=/home/LIB/ffmpeg-5.1.3_linux_arm64 --disable-asm  --enable-parsers --disable-decoders --enable-decoder=h264 --enable-decoder=aac --disable-debug --enable-ffmpeg --enable-shared --disable-static --disable-stripping --disable-doc 
//可不加此配置--extra-ldflags="-L/usr/aarch64-linux-gnu/lib -lm"
解释:
--enable-cross-compile 表示启用交叉编译模式。
--target-os=android 表示编译目标平台为安卓系统。
--arch=aarch64 表示编译目标架构为aarch64。
--cross-prefix 指定交叉编译工具链的前缀路径。上文下载gcc-aarch64-linux-gnu之后,默认安装到了/usr/bin/aarch64-linux-gnu-gcc,这里使用/usr/bin/aarch64-linux-gnu-。
--cc 和 --cxx 分别指定C编译器和 C++ 编译器的路径。
--prefix 指定安装目录,在执行make install之后才会安装。
--disable-asm 表示禁用汇编优化。
--enable-parsers 表示启用解析器。
--disable-decoders 表示禁用所有解码器。
--enable-decoder=h264 和 --enable-decoder=aac 表示启用 H.264 和 AAC 解码器。
--disable-debug 表示禁用调试信息。
--enable-ffmpeg 表示编译 FFmpeg 命令行工具。
--enable-shared 表示编译动态链接库,生成共享库文件。
--disable-static 表示禁用静态链接库。
--disable-stripping 表示禁用剥离符号表。
--disable-doc 表示禁用文档生成。
./configure --prefix=/home/mdz/Documents/Project/ffmpeg_android \
--enable-shared \
--disable-static \
--disable-doc \
--disable-programs \
--disable-avdevice \
--disable-swscale \
--disable-postproc \
--disable-avfilter \
--disable-network \
--disable-everything \
--enable-decoder=h264 \
--enable-protocol=file \
--enable-muxer=mp4 \
--enable-demuxer=mov \
--enable-parser=h264 \
--enable-bsf=h264_mp4toannexb \
--enable-openssl \
--enable-jni \
--enable-mediacodec \
--enable-decoder=h264_mediacodec \
--enable-hwaccel=h264_mediacodec \
--cross-prefix=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30- \
--target-os=android \
--arch=aarch64 \
--sysroot=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot \
--extra-cflags="-Os -fpic $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include $ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/arm-linux-androideabi" \
--extra-ldflags="$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/aarch64-linux-android"

4.编译

需要sudo自己加

make -j$(nproc)

$(nproc)表示本系统线程数,为了多线程编译。也可写-j4。

如果出现xxx权限不够,使用chmod加执行权限

sudo chmod -R 777 ./

5.安装

需要sudo自己加

 make install

此时,编译好的库文件就会被安装到上面configure配置的安装目录中了,找到复制完成文件夹就可以在android项目开发时使用。

6.移动和使用

由于安装的链接库目录中存在link,所以需要打包后再进行移动,解压后再在项目中使用。

tar -zcvf 压缩包 被压缩1

官方的FFmpeg编译说明和指导

安卓:
在Ubuntu下,clone这个仓库,配置好所需环境,即可开始编译。
编译说明:https://github.com/arthenica/ffmpeg-kit/tree/main/android#21-prerequisites

其他:
参考官方指导:https://trac.ffmpeg.org/wiki/CompilationGuide

相关文章:

  • Python筑基之旅专栏(导航)
  • 【MySQL精通之路】InnoDB(6)-磁盘结构
  • LeetCode题练习与总结:将有序数组转换为二叉搜索树--108
  • YoloV9改进策略:卷积篇|使用PConv替换YoloV8中的卷积|即插即用,简单高效
  • 【MySQL精通之路】InnoDB(18)-备份与恢复
  • DOS学习-目录与文件应用操作经典案例-ren
  • Python小游戏——俄罗斯方块
  • 蓝桥杯第18489题——拔苗助长(质数+map)
  • 修改元组元素
  • NIO的ByteBuffer和Netty的ByteBuf的性能
  • 服务器数据恢复—服务器raid常见故障表现原因解决方案
  • 测试基础06:软件产品的运行环境dev、sit、test、fat、uat、pre、pro
  • Eclipse下载安装教程(包含JDK安装)【保姆级教学】【2024.4已更新】
  • SpringSession原理简析
  • 【软考中级 软件设计师】计算机网络和安全
  • JS 中的深拷贝与浅拷贝
  • 《深入 React 技术栈》
  • 【Amaple教程】5. 插件
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Django 博客开发教程 8 - 博客文章详情页
  • exports和module.exports
  • laravel 用artisan创建自己的模板
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • mysql外键的使用
  • node-glob通配符
  • php的插入排序,通过双层for循环
  • Spring核心 Bean的高级装配
  • v-if和v-for连用出现的问题
  • 从零搭建Koa2 Server
  • 服务器从安装到部署全过程(二)
  • 检测对象或数组
  • 解析 Webpack中import、require、按需加载的执行过程
  • 码农张的Bug人生 - 见面之礼
  • 实战|智能家居行业移动应用性能分析
  • 算法之不定期更新(一)(2018-04-12)
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • Linux权限管理(week1_day5)--技术流ken
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​如何防止网络攻击?
  • ​字​节​一​面​
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #pragma once与条件编译
  • #Ubuntu(修改root信息)
  • (CPU/GPU)粒子继承贴图颜色发射
  • (Forward) Music Player: From UI Proposal to Code
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (二)延时任务篇——通过redis的key监听,实现延迟任务实战
  • (二十六)Java 数据结构
  • (论文阅读40-45)图像描述1
  • (南京观海微电子)——COF介绍
  • (转)c++ std::pair 与 std::make
  • (转)程序员疫苗:代码注入
  • (转)德国人的记事本
  • ./configure、make、make install 命令