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

一 下载源码 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.mzph.cn/news/5979.shtml

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

相关文章

python爬虫入门

基础回顾 使用函数, 先导入, 直接点方法名使用 import math m math.log10(100) print(m)python 交互模式 input输入示例 age int(input("请输入年龄")) age 1 print(age)if else 的使用 和java一样, 只是不加括号, else if 阉割成了 elif 与或非 java : &am…

网络中的一些概念对比

HTTP与HTTPS 从安全性和效率性进行阐述: 对于HTTP HTTP默认端口是80 HTTP是明文传输,数据以纯文本、明文形式在网络上传输,容易受到黑客的攻击和数据窃取。 对于HTTPS HTTPS默认端口是443 HTTPS用的是SSL或者TLS协议对数据进行加密&am…

No3: 学习过程中故障成长积累

文章目录 故障积累1、编码错误导致 故障积累1、编码错误导致

5.2 Bootstrap 过渡效果(Transition)插件

文章目录 Bootstrap 过渡效果(Transition)插件使用案例 Bootstrap 过渡效果(Transition)插件 过渡效果(Transition)插件提供了简单的过渡效果。 注意:如果您想要单独引用该插件的功能&#xff0…

Typescript:类的装饰器

装饰器 装饰器为我们在类的声明及成员上通过元编程语法添加标注提供了一种方式 装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上。 装饰器使用 expression这种形式,expression求值后必…

【ACM】—蓝桥杯大一暑期集训Day5

🚀欢迎来到本文🚀 🍉个人简介:陈童学哦,目前正在学习C/C、Java、算法等方向,一个正在慢慢前行的普通人。 🏀系列专栏:陈童学的日记 💡其他专栏:CSTL&#xff…

Qt6 Qt Quick UI原型学习QML第五篇

文章目录 效果QML语法父文件 MyQML.qmlQML语法子文件 TLineEditV1.qmlQML语法子文件 TTextEdit.qml 效果 QML语法父文件 MyQML.qml import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Controls 2.12Window {id: windowvisible: truewidth: 600height: 600title:…

Linux系统进程概念详解

这里写目录标题 冯诺依曼体系结构操作系统(Operator System)1.概念2.目的3.管理4.系统调用和库函数概念 进程1.概念2.描述进程-PCB3.查看进程4.通过系统调用获取进程标示符5.通过系统调用创建进程-fork 进程状态1.Linux内核源代码2.进程状态查看 进程优先级1.基本概念2.查看系统…

投个 3D 冰壶,上班玩一玩

本篇文章将介绍如何使用物理引擎和图扑 3D 可视化技术来呈现冰壶运动的模拟。 Oimo.js 物理引擎 Oimo.js 是一个轻量级的物理引擎,它使用 JavaScript 语言编写,并且基于 OimoPhysics 引擎进行了改进和优化。Oimo.js 核心库只有 150K ,专门用…

交易流水指标统计——pandas

1、根据交易流水,计算每个交易交易对象的如下指标, 总收入笔数、总收入月数、最大月收入笔数、最大月收入笔数所在日期(年月日格式) import pandas as pd path r"C:\Users\xxx\Desktop\科技数据.xlsx"df pd.read_exc…

5G的发展过程

目录 1.什么是5G 2.5G与4G的区别 3.5G的应用领域 4.5G给人类带来的福利 5.5G未来的发展趋势 1.什么是5G 5G技术是第五代移动通信技术,它是对之前的2G、3G和4G技术的升级和革新。5G技术具有更高的数据传输速度、更低的延迟和更大的网络容量,为人们提供…

Java-API简析_java.net.InetSocketAddress类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131870760 出自【进步*于辰的博客】 因为我发现目前,我对Java-API的学习意识比较薄弱…

GAMES104复习总结,课堂提炼(一)

主要是给自己看的,Games104课程很全面,王希老师学识广播,课程组也很认真努力。但是在文字版里面有大量的示例,比如可能会为了引入话题讲个故事等等。。。对于上课来说引人入胜,对于要找工作的我来说,每次看…

办公软件ppt的制作

毕业找工作太难了,赶紧多学点什么东西吧,今天开始办公软件ppt的制作学习。 本文以WPS作为默认办公软件,问为什么不是PowerPoint,问就是没钱买不起,绝对不是不会破解的原因。 一.认识软件 在快捷工具栏中顾名思义就是一…

微服务基础理论

微服务简介 微服务Microservices之父,马丁.福勒,对微服务大概的概述如下: 就目前而言,对于微服务业界并没有一个统一的、标准的定义(While there is no precise definition of this architectural style ) 。但通在其…

Express 框架的基本操作

目录 1、应用生成器 2、基本路由 2.1、在跟路由下配置 GET请求,返回对应相应内容。 2.2、在跟路由下配置 POST请求,返回对应相应内容。 2.3、在跟路由下配置 PUT请求,返回对应相应内容。 2.4、在根路由下配置DELETE请求,返回对…

音视频开发-ffmpeg介绍-系列一

目录 一.简介 FFmpeg框架的基本组成包含: 二. FFmpeg框架梳理音视频的流程​编辑 基本概念: 三.ffmpeg、ffplay、ffprobe区别 4.1 ffmpeg是用于转码的应用程序 4.2 fffplay是用于播放的应用程序 4.3 ffprobe是用于查看文件格式的应用程序 4.4 ffmpeg是用于转…

华为鲲鹏920 aarch64 版本 Ambari HDP 下载地址

声明:为有效缓解各位同行兄弟们的痛,特推出此文 本文能够适配兼容 华为鲲鹏920 aarch64 版本,仅限 CentOS7、openEuler20.03-LTS 操作系统 以下是详细下载地址 1、CentOS7 aarch64版本 CentOS7 aarch64 https://mirrors.huaweicloud.com/…

Langchain 的 Conversation summary memory

Langchain 的 Conversation summary memory 现在让我们看一下使用稍微复杂的内存类型 - ConversationSummaryMemory 。这种类型的记忆会随着时间的推移创建对话的摘要。这对于随着时间的推移压缩对话中的信息非常有用。对话摘要内存对发生的对话进行总结,并将当前摘…

91、RabbitMQ事务消息

RabbitMQ事务消息 通过对信道的设置实现 channel.txSelect(); 通知服务器开启事务模式;服务端会返回Tx.Select-ok channel.basicPublish; 发送消息,可以是多条,可以是消费消息提交ack channel.txCommit() 提交事务 channel.txRollback() 回滚事务 …