win10下 ffmpeg 编译成android可以使用的so文件_淼素的博客-程序员宅基地_windows下编译so文件

技术标签: android  Android  

前两天看一个视频转换成gif的软件。用起来很不舒服,然后呢就想自己做一个看看。就开始研究ffmpeg,第一步编译成so文件就把我搞得死去活来的,主要是一点经验也没有,然后就是各种失败,最后总算出来,发现这两天忙项目,都快忘记了,今天写一下做下记录。

需要准备下载的东西

MinGW下载安装

mingw 下载地址。下载完双击下一步下一步就好。但是要记住的你的安装地址,等会要配置。

下载完打开,把下图这些全部安装了。

image

环境配置path下面

image

双击打开msys.bat等会要用到。

image

ffmpeg下载最新的就好,我下载的是ffmpeg-4.4.1,往下一拖就看见了

NDK 以前用android studio安装过了,也可以不用下载,但是要用20+的版本,好像是17+以上的就可以,主要涉及到了编译文件的区别。后面说一下。

ffmpeg开始编译

1.修改ffmpeg的configure文件

地址看下图。直接拖动到android studio中就好。

image

--cross-prefix-clang=PREFIX use PREFIXfor compilation clang tools [$cross_prefix]

image

cross_prefix_clang

image


ar_default="${cross_prefix}${ar_default}"

cc_default="${cross_prefix_clang}${cc_default}"

cxx_default="${cross_prefix_clang}${cxx_default}"

nm_default="${cross_prefix}${nm_default}" 

image

完事,根据图复制对应的就好了,行数也差不多。

2编写build_android.sh文件

在configure同目录下新建build_android.sh文件,直接拖到android studio,复制下面代码,修改NDK参数,其他不变。


NDK=D:/sdk/ndk/21.1.6352462

SYSROOT=$NDK/toolchains/llvm/prebuilt/windows-x86_64/sysroot

PLATFORM=$NDK/toolchains/llvm/prebuilt/windows-x86_64

function build

{

./configure\

--prefix=$PREFIX \

--target-os=android \

--arch=$CPU \

--enable-shared \

--disable-static \

--disable-doc \

--disable-ffmpeg \

--disable-ffplay \

--disable-ffprobe \

--disable-avdevice \

--disable-symver \

--enable-cross-compile \

--sysroot=$SYSROOT \

--cross-prefix=$PLATFORM/bin/arm-linux-androideabi- \

--cross-prefix-clang=$PLATFORM/bin/armv7a-linux-androideabi16- \

--extra-cflags="-I$SYSROOT/usr/include"\

--extra-ldflags="-L$SYSROOT/usr/lib"

      $ADDITIONAL_CONFIGURE_FLAG

      make clean

make -j4

make install

}

CPU=armv7-a

PREFIX=$(pwd)/android_all/$CPU

build

read -p"Press any key to continue."

3开始编译

操作如下图所示,开始等着就好了。完成后会在ffmpeg的目录下面生成android_all文件夹。

image.png

步骤没问题的话基本上等半个来小时就可以了。

问题总结

看这篇文章的时候,可能已经搜索了很多文章了。其实编译错误的主要问题就是版本问题,很多文章都提到不要用最新的。最新的编译会失败报错,我也是转悠了好多,这里面主要涉及到了高版本ndk的问题,低版本是带着gcc编译器的,好像是从ndk17以后就不带这个编译器了,开始使用 clang进行编译。所以在编译过程中有一大部分提示gcc或者clang找不到,建议使用clang编译,gcc有很多问题,还要修改头文件指定,而且还不是最新的版本。如果不行,除了MinGW其他的都重新走一遍。万里长城第一步,突然项目就忙起来了。只能发下抽空在看了。
搞得时候感觉很麻烦,有一堆问题。现在出来了,过了几天以前的哪堆问题全忘记了。

0人点赞

日记本

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_21174855/article/details/121553062

智能推荐

Springboot Maven yaml 自动多环境打包工具_net_wolf的博客-程序员宅基地

在很多情况下,我们需要为开发环境,集成测试环境,生产环境打包.它们的配置文件有细微的差异,最好是一次能够生产所有环境的war包.比较常见的是设置application.properties中的spring.profiles.active环境变量 但是yml的精简特性很值得称道,用过之后就不能忍受property 文件的臃肿了.试着google基于yml的多环境打包,并没有一个很直观...

kernel space and user space_lianliange85的博客-程序员宅基地

1.What's the difference between kernel stack and user stack ?In short, nothing - apart from using a different location in memory(and hence a different value for the stackpointer register), and

wps画流程图交叉弧形_word流程图-WPS绘制流程图的正确打开方式,超级简单_weixin_39696518的博客-程序员宅基地

不知道大家在办公的时候习惯使用什么版本的软件?这几天小编在绘制流程图的时候发现一个特别有意思的,你会绘制带有动态走向的流程图吗?不信你看看起来是不是挺高大上的,你知道是怎么完成的吗?今天小编大家快速绘制流程图!刚一打开WPS新建流程图的时候小编根本不知道怎么使用?点击插入形状绘制的时候根本没有反应?小编在一边琢磨,那就先下载一个模板复制其中的形状插入的!还在一边想怎么和在文档中绘制的方式不一样啊!...

Streams--Java 8 中的 Streams API 详解_Tate-Ling的博客-程序员宅基地

转载自:https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/为什么需要 StreamStream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是

python sklearn库logistics_python sklearn库实现简单逻辑回归的实例代码_励练的博客-程序员宅基地

Sklearn简介Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression)、降维(Dimensionality Reduction)、分类(Classfication)、聚类(Clustering)等方法。当我们面临机器学习问题时,便可根据下图来选择相应的方法。Sklearn具有以下特点:简单高效的数据挖掘和数据分析工...

转载一篇ECS 构架_edison_maze的博客-程序员宅基地

浅谈《守望先锋》中的 ECS 构架今天读了一篇 《守望先锋》架构设计与网络同步 。这是根据 GDC 2017 上的演讲 Overwatch Gameplay Architecture and Netcode 视频翻译而来的,所以并没有原文。由于是个一小时的演讲,不可能讲得面面俱到,所以理解起来有些困难,我反复读了三遍,然后把英文视频找来(订阅 GDC Vault 可以看,有版权)看了一遍,大致理解...

随便推点

Java学习,基础篇-运算符_你在玩火的博客-程序员宅基地

运算符学习资源:西部开源–秦疆,B站up主‘遇见狂神说’。Java语言支持如下运算符:int a = 10;int b = 21;int c = 100;long d = 10101010101010L;short e = 99;byte f = 1;算术运算符:+,-,*,/,%,++,–System.out.println(a+b);System.out.println(a-b);System.out.println(a*b);System.out.println((do

浪潮受邀出席“市长论坛-深圳智慧城市国际圆桌研讨会”_美通社的博客-程序员宅基地

#subheadlines div {font-size: 17px;} #dvContent table[name=logo_release]+p+div[id^=prni_] {clear:both;} ...

7月第1周 | Crust Network 项目周报_旷工说事的博客-程序员宅基地

01Crust 社区活动01Crust去中心化存储市场已于2月28日正式开放。截至6月28日,全网节点2642个,全网容量达到617PB。目前网络处于代币缺少状态。从5月5日起,Crust Maxwell预览网进行了减产,此后预览网日产出为1500CRU。预览网数据可参考6月第4周周报:02【数据创造价值】活动火热进行中,为了保证活动的公平公正,让更多人能体验到Crust分布式存储的同时获得奖励,Crust技术运营团队已对“数据算力”规则进行优化升级,并立即实施,以遏

Jenkins 踩坑(四)|基于接口自动化测试完成 Jenkins+GitHub+Allure 的结合_普通网友的博客-程序员宅基地

本文为霍格沃兹测试学院优秀学员 Jekins 学习踩坑笔记。测试开发技能进阶,文末加群。一、前提关于使用Jenkins创建job完成自动化测试,核心在于项目的拉取和执行,至于job的创建大同小异,需要了解的可以参考文章: [Jenkins之job创建、参数化与定时构建以及时区偏差填坑]另外还需要的就是执行机的环境(以GitHub拉取项目为例),需要具体细节操作可自行百度Google或参考文章: [Jenkins如何管理、配置、运行node节点,用slave进行分布式运行]* 需要配置`Jav.

3D开发基础知识和简单示例_问·道的博客-程序员宅基地

3D开发基础知识和简单示例 引言现在物联网概念这么火,如果监控的信息能够实时在手机的客服端中以3D形式展示给我们,那种体验大家可以发挥自己的想象。那生活中我们还有很多地方用到这些,如上图所示的Kinect 在医疗上的应用,当然还有体感游戏等等。3D 用...

python flask与django的区别_【Python基础】flask和django的对比区别是什么 - 收获啦_久微的博客-程序员宅基地

首先:Django 是一个重量级的框架,Flask是一个轻量型的框架;那么Django框架他到底重在哪呢?对比Flask框架,Django原生提供了众多的功能组件,让开发更简便快速。提供项目工程管理的自动化脚本工具数据库ORM支持(对象关系映射,英语:Object Relational Mapping)模板表单Admin管理站点文件管理认证权限session机制缓存Django是用python语言...

推荐文章

热门文章

相关标签