IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 二.ffmpeg 编译和配置 -> 正文阅读

[移动开发]二.ffmpeg 编译和配置

copy from zhujiamin
各Android版本FFmpeg编译流程图

在这里插入图片描述
二、FFmpeg内部配置(configure)编译(Mkaefile)流程知识

configure:FFmpeg配置文件,用于检测FFmpeg的编译环境,并根据用户配置的选项生成config.mak,config.h等文件,提供给Makefile使用

configure的整体流程可以分成以下几步:

在这里插入图片描述
Makefile:FFmpeg的Makefile文件,根据configure生成的配置文件编译源码,与之相关的文件主要有:
config.mak:由configure生成的Makefile,保存了用户在configure的配置信息
libxxx/Makefile:每个类库的Makefile
library.mak:编译类库的Makefile(和libxxx/Makefile配合使用)
common.mak:包含一些通用代码的Makefile

在这里插入图片描述
三、编译工作:放置NDK、编译脚本写法、配置项介绍

FFmpeg的NDK编译环境已上传至SVN:http://svn.adc.com/svn_tcpm/Multi_intelligence

8+R项目的FFmpeg源码目录为vendor/oplus/multimedia/mmserver/oplusmedia/libffmpeg_utils/ffmpeg_cm_14_1/

编译脚本:vendor/oplus/multimedia/mmserver/oplusmedia/libffmpeg_utils/ffmpeg_cm_14_1/build_ffmpeg_android.sh

1.设置ndk及其工具链路径,ndk路径默认放在编译服务器根目录,以及android api版本(使用最新的api版本29,实测编译生成的so在P/Q/R版本都能正常使用)
在这里插入图片描述
8+R项目编译FFmpeg使用的是ndkr20,ndk r17及之前的版本使用gcc编译器,之后版本已弃用gcc改用clang编译器,两种ndk版本中的系统目录(包含编译链接过程引用的系统库、文件)、工具链、编译器等路径不同,clang编译环境在llvm目录下

2.将整体编译框架写在build()函数,分别编译32位armv7-a和64位armv8-a,编译流程主要是configure、make
在这里插入图片描述
3.编译FFmpeg的重点是在configure配置项的写法,每个配置项的描述可以在用命令“./configure --help”查看
在这里插入图片描述
在这里插入图片描述

整个configure()函数的目的就是为了执行最后一行./configure,为了适配不同指令架构,先定义一些配置变量再保存到CONFIG_FLAGS,接下来逐一介绍编译所需的配置项

–target-os=OS compiler targets OS [$target_os]
指定编译目标系统为android(网上有不少教程指定为linux系统,生成的so格式如"libavutil.so.57",无法在android系统使用,需要修改configure中的命名规则。指定为android即可无需修改configure)

–prefix=PREFIX install in PREFIX [$prefix_default]
make install文件下载路径,下载到FFmpeg根目录的android文件夹,并根据arm架构创建子目录

–arch=ARCH select architecture [$arch]
指定arm架构

–sysroot=PATH root of cross-build tree
交叉构建系统目录(包含编译链接过程引用的系统库、文件),clang的sysroot在llvm目录下

–cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]
指定编译工具的前缀名,这样就无需单独配置编译链接工具,统一通过前缀名找到

–cc=CC use C compiler CC [ c c d e f a u l t ] ? ? c x x = C X X u s e C c o m p i l e r C X X [ cc_default] --cxx=CXX use C compiler CXX [ ccd?efault]??cxx=CXXuseCcompilerCXX[cxx_default]
指定C编译器

–extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS]
添加C编译器选项,通常用于指定额外头文件路径、架构、fpu等,如-I/usr/include(引用Linux系统头文件)

–extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS]
指定编译器的一些优化参数和额外引用库路径,如-L/usr/lib(链接Linux系统库),-nostdlib(不链接系统标准启动文件和标准库文件)

–extra-libs=ELIBS add ELIBS []
指定额外引用库的名字

enable和disable配置项:

启用:交叉编译、编译动态库、位置无关代码、neon优化、汇编优化(–enable-asm,一定要打开,大幅度提升解码速度)、dav1d解码库

禁用:编译静态库、ffmpeg、ffplay、ffprobe等工具,avdevice、avfilter、devices、filters、doc、symver、network、encoders、muxers等与OPPO播放框架无关的内容,

FFmpeg内置的demuxer、decoder默认是全部打开的,无需再enable

切记不要配置–enable-gpl,打开GPL需要将代码开源,因此依赖GPL协议的配置项也不能使用,如x264、x265、xavs2等

–enable-debug=LEVEL set the debug level []
–disable-stripping disable stripping of executables and shared libraries
编译带符号表的库,size会很大。默认注释掉的,需要debug时打开

四、执行编译

执行./build_ffmpeg_android.sh,so编译到–prefix指定的路径
在这里插入图片描述
同时,脚本会将so拷贝到prebuilt目录。之后编译Android代码时,Android_prebuilt.mk通过预编译的方式将so分别copy到system和vendor分区,供其它module使用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至此,FFmpeg源码库的编译方法已经讲完了,dav1d解码库的编译,以及FFmpeg编译和调试的技巧后面再介绍

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-01-12 00:07:14  更:2022-01-12 00:07:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:31:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码