FFMPEG android mac 编译 支持DASH/OPENSSL问题汇总

news2025/1/12 20:51:42

一 下载源码 FFMPEG 

https://github.com/FFmpeg/FFmpeg/tree/release/4.3

二 编写脚本

支持https 就必须添加open SSL 的编译 具体可以查看我的另一个关于open SSL 的

然后我们配置的一些路径 涉及 ndk 的一定要查看你用的ndk 版本 是否存在这些路径这是第一步

然后如果支持dash 需要你加入

--enable-demuxer=dash

--enable-libxml2

三 遇到问题 汇总

在打包编译的过程中遇到了很多问题。。。感觉上是一步一个坎。不过坚持下来感觉还是很有收获

  • 爆出一些 在你的 什么系统目录中创建文件 但是没权限的问题。

这些问题一般是 NDK 或者 tool chain。等等这些 配置路径 有问题。 才会在你的usr/local/创建文件。不然都是在你的输出目录中创建 的。  

  • 提示没有libxml-2.0 可能是系统没有安装 

尝试mac 终端 执行 

brew install libxml2

安装 libxml2

发现它输出了提示 需要配置这些才能找到 libxml2 

重新执行脚本编译 还是提示不存在 。继续检查问题

最后还是重新做了libxml2库的交叉编译

libxml2 做完交叉编译。后面更新了 脚本中libxml2的 头文件和 lib 库 位置  解决了问题

 交叉编译 遇到的问题。

  • python 库找不到。 我自己电脑重新装了个python 。
  • FFmpeg 编译提示 libxml2 使用了一些 libm 的 函数。提示libm 找不到。于是 在ffmpeg
    的脚本中增加了 -lm 配置。提示交叉编译去寻找libm库 这个 ndk 中有 
  •    --extra-ldflags “... -lm”

最后ffmpeg 终于打出来了  运行时又遇到问题

  • 提示找不到 这些库的函数 但是其实打出来的so 是存在这些函数的。

我目前遇到的问题 都是libavdevice  和 libswresample.so 这两个库 中的函数找不到 其他的库没有问题。

解决方案直接使用extern"C"{} 包含用到的这两个库的头文件解决 运行 顺利!!!

由于使用FFPlay 作为解码 但是FFPlay 依赖了SDL2 于是 又是长途跋涉 编译SDL2 。移植到Android 
一开始 不知道怎么用。看了网上教程 成功打出了SO 。但是运行时又发现了错误 
       A  signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
2023-07-14 14:34:12.585 32214-32214 DEBUG                   crash_dump64                         A  Cause: null pointer dereference
2023-07-14 14:34:12.585 32214-32214 DEBUG                   crash_dump64                         A      x0  0000000000000000  x1  000000718cce7f2c  x2  0000000000000001  x3  0000000000000046
2023-07-14 14:34:12.585 32214-32214 DEBUG                   crash_dump64                         A      x4  0000000000000021  x5  00000000095f2afe  x6  0000000000000010  x7  7f7f7f7f7f7f7f7f
2023-07-14 14:34:12.585 32214-32214 DEBUG                   crash_dump64                         A      x8  2153fb133faec1e2  x9  2153fb133faec1e2  x10 0000000000000001  x11 0000000000000000
2023-07-14 14:34:12.585 32214-32214 DEBUG                   crash_dump64                         A      x12 0000006e0b5f9eb0  x13 000000000000001b  x14 0000000000000000  x15 000023fea22b16d4
2023-07-14 14:34:12.585 32214-32214 DEBUG                   crash_dump64                         A      x16 00000071967f8740  x17 0000007199d362f4  x18 0000006df69c0000  x19 0000006dfdff7000
2023-07-14 14:34:12.585 32214-32214 DEBUG                   crash_dump64                         A      x20 0000006dfdff7000  x21 0000006dfdff7000  x22 0000000000007d8b  x23 0000000000007d8b
2023-07-14 14:34:12.585 32214-32214 DEBUG                   crash_dump64                         A      x24 0000006e0b5fbcb0  x25 0000006e0b5fbcb0  x26 0000006e0b5fbff8  x27 00000000000fc000
2023-07-14 14:34:12.585 32214-32214 DEBUG                   crash_dump64                         A      x28 0000006e0b503000  x29 0000006e0b5fb6a0
2023-07-14 14:34:12.585 32214-32214 DEBUG                   crash_dump64                         A      lr  0000006dfdede0c4  sp  0000006e0b5fb680  pc  0000006dfdede0c4  pst 0000000060001000
2023-07-14 14:34:12.585 32214-32214 DEBUG                   crash_dump64                         A  backtrace:
2023-07-14 14:34:12.585 32214-32214 DEBUG                   crash_dump64                         A        #00 pc 00000000000430c4  /data/app/~~gIZm42M6DxNHr3fUBYvqEQ==/com.example.myapplication-_P36bPxgYfbo3B-q6_6iKg==/lib/arm64/libSDL2.so (Android_JNI_GetManifestEnvironmentVariables+56) (BuildId: f86a91bd5bd4523559afe28c1d3e7f863ec43bb5)
 


提示SDL 中 so NULLPtr ,结果去源码看了下。这里空指针是没有拿到javaVm 对象。
解决方案 发现需要systemloadlibrary. sdl 的库。因为sdl 通过jnionload 获取javaVm 对象。
于是 System.loadLibrary("SDL2")

RUN 发现又出幺蛾子了。提示找不到SDLActvity  waht happened ??? ??  难道我还的把源码里的java 文件放我项目里吗? 
最后妥协了 把SDL 的java 文件放到我的项目里 

RUN 发现又出问题了。一堆什么系统native 库报错。最后尝试调用了  

SDL.setupJNI()


解决问题。这次RUN 出来了。

附加:

 

发现 ffmpeg  avformat_open_input  crash ? 这是什么原因 。

查找crash 崩溃可以按这个链接查看 Android NDK开发崩溃signal 11 (SIGSEGV), code 1 (SEGV_MAPERR) 的解决方法_ 十 月的博客-CSDN博客大家遇到这种问题检查 是否空指针或者野指针

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/778204.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

按照Vue写WPF(1):属性绑定

文章目录 前言代码实现效果代码逻辑 总结 前言 作为一个使用Vue非常熟练的C#全干工程师。当我在接触WPF的时候,我就一直想用Vue的想法去重写WPF框架。经过一个星期的琢磨,终于琢磨出来了如何优雅的入参。期间看了上百篇博客,浏览了一堆的视频…

如何把打包的vue项目放到flask中:Flask init参数详解

参数列表 import_name: the name of the application package,感觉没什么用static_url_path: can be used to specify a different path for the static files on the web. Defaults to the name of the static_folder folder。描述静态文件(css&#x…

vue3-Api和数据响应式的变化

问题1&#xff1a;为什么vue3中去掉了vue构造函数&#xff1f; 问题2&#xff1a;谈谈你对vue3数据响应式的理解 去掉了Vue构造函数 在过去&#xff0c;如果遇到一个页面有多个vue应用时&#xff0c;往往会遇到一些问题 <!-- vue2 --> <div id"app1">&…

sketch如何在线打开?有没有什么软件可以辅助

Sketch 在线打开的方法有哪些&#xff1f;这个问题和我之前回答过的「Sketch 可以在线编辑吗&#xff1f;」是一样的答案&#xff0c;没有。很遗憾&#xff0c;Sketch 没有在线打开的方法&#xff0c;Sketch 也做不到可以在线编辑。那么&#xff0c;那些广告里出现的设计软件工…

基于Java+SpringBoot+vue前后端分离网上购物商城系统设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

【高阶数据结构】B树

文章目录 一、B-树1. 常见的搜索结构2. B树概念3. B-树的查找4. B-树的插入分析 二、B树和B*树1. B树2. B*树 三、B-树的应用1. 索引2. MySQL索引简介2.1 MyISAM2.2 InnoDB 一、B-树 1. 常见的搜索结构 种类数据格式时间复杂度顺序查找无要求O(N)二分查找有序O(log2N)二叉搜索…

体验文心千帆:开启智能大模型时代的新征程

目录 前言文心千帆的申请和使用感受1.1 注册流程简单1.2 试用初体验 二、文心千帆大模型平台功能介绍2.1 强大的对话式语言模型2.2 丰富的应用场景 三、如何使用 API3.1 API 列表ERNIE-BotERNIE-Bot-turboBLOOMZ-7BEmbedding-V1Prompt模板 3.2 API 调用基本流程3.2.1 创建智能云…

如何在armv6 armv7 armv8(aarch64)嵌入式板子上面安装nginx服务器,支持H265码流

如何在armv6 armv6 armv8 aarch64 嵌入式板子上面安装nginx服务器支持推送H265的视频流 开始吧 一&#xff0c;准备工作二&#xff0c;configure时遇到的出错问题1、checking for C compiler … found but is not working2&#xff0c;error: can not detect int size3&#xf…

【python】使用difflib对比json差异

之前自己使用python写了方法进行对比json数据&#xff0c;这次使用difflib模块实现&#xff1a; 一个json数据存在text1.txt&#xff1a; 另一个json数据存在text2.txt&#xff1a; 1、导入difflib模块 import difflib 2、调用difflib中的HtmlDiff类&#xff0c;使用make_fi…

ShardingSphere分库分表实战之广播表

&#x1f680; ShardingSphere &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&…

多个springmvc项目共用同一个redis导致session冲突的问题 的解决方案

由于redis来做session的统一管理插件&#xff0c;如果多个项目使用同一个redis来管理session的话&#xff0c;那么session很有可能会出现冲突。 下图&#xff1a;默认session在redis中的key值是spring:session:sessions:sessionId&#xff0c;如果多个项目中出现了相同的sessi…

网络安全(黑客)自学的一些建议

1.选择方向 首先是选择方向的问题&#xff0c;网络安全是一个很宽泛的专业&#xff0c;包含的方向特别多。比如 web安全&#xff0c;系统安全&#xff0c;无线安全 &#xff0c;二进制安全&#xff0c;运维安全&#xff0c;渗透测试&#xff0c;软件安全&#xff0c;IOT安全&a…

docker-compose搭建RocketMq集群

集群架构&#xff1a;双主 机器&#xff1a;172.50.2.41 172.50.2.42 一、创建目录 mkdir -p /docker/alibaba/rocketmq/logs/nameserver mkdir -p /docker/alibaba/rocketmq/logs/broker mkdir -p /docker/alibaba/rocketmq/store/broker mkdir -p /docker/alibaba/rocket…

通过Appium和Accessibility Inspector获取iOS应用元素定位的方法

在 iOS 移动应用程序上使用选择器查找元素定位是我们在移动端 UI 自动化测试的先决条件。 但是&#xff0c;由于应用程序内容在原生 iOS 应用程序中的呈现方式&#xff0c;我们可以用来定位应用程序元素的选择器与 Web 浏览器元素有很大不同。 在本文中&#xff0c;我们将了解 …

Spring Boot 日志文件有什么用

目录 一、自定义打印日志 1.1 日志框架说明 1.2 实现自定义打印日志 1.3 日志的格式说明 2.1 日志的级别 2.2 设置日志级别的作用&#xff1a; 2.3 如何设置日志的级别 二、 日志的持久化 3.1 设置日志保存路径 &#xff08;在 .yml 配置文件中设置日志保存路径&…

一、二维前缀和算法

文章目录 前缀和模板724. 寻找数组的中心下标238. 除自身以外数组的乘积560. 和为 K 的子数组974. 和可被 K 整除的子数组525. 连续数组1314. 矩阵区域和 前缀和模板 一维前缀和&#xff1a; import java.util.*;public class Main {public static void main(String[] args) …

docker-compose启动minio

一、创建文件夹 mkdir -p /docker/stand-alone-minio/data mkdir -p /docker/stand-alone-minio/configchmod 777 -R /docker/stand-alone-minio/data chmod 777 -R /docker/stand-alone-minio/config 二、docker-compose.yml version: 3.9services:minio:image: minio/mini…

【Vue3基础】计算属性

一、需求 二、代码 1、创建项目 创建项目&#xff1a; 1、 npm init vuelatest 2、一路回车 3、输入项目名&#xff0c;不要大写&#xff0c;如vue3bilibili 4、 cd vue3bilibili 5、 npm install 6、npm run dev启动&#xff0c;可以获取网址 2、App.vue文件中&#xff1a;…

UNIX网络编程卷一 学习笔记 第二十五章 信号驱动式IO

信号驱动式IO指进程预先告知内核&#xff0c;当某个描述符上发生某事时&#xff0c;内核使用信号通知相关进程&#xff0c;它在历史上曾被称为异步IO&#xff0c;但信号驱动式IO不是真正的异步IO&#xff0c;真正的异步IO通常定义为进程执行IO系统调用告知内核启动某个IO操作&a…