ffmpeg6.0编译(NDK)
ffmpeg 6.0 支持vulkan 需要手动安装Vulkan 并将include里面的vk_video 和 vulkan 拷贝到 android-ndk-r25c/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/
vulkan 下载
cp -r vk_video $NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/
cp -r vulkan $NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/
1 下载ffmpeg源码(网速差的可以直接传文件包到Linux上安装)
mkdir ffmpeg
cd ffmpeg
wget https://ffmpeg.org/releases/ffmpeg-6.0.tar.xz
2 解压
xz -d ffmpeg-6.0.tar.xz 先解压成xz -d ffmpeg-6.0.tar
tar -zxf ffmpeg-6.0.tar -C ./ 解压到当前目目录
3 下载NDK 版本 (r25c)
cd /home
mkdir ndk
cd ndk
wget https://dl.google.com/android/repository/android-ndk-r25c-linux.zip
4 解压
unzip android-ndk-r25c-linux.zip
5 配置环境
cd /etc/profile.d/
touch ndk.sh
vim ndk.sh 输入下面的内容保存并退出
export NDK_ROOT=/home/ndk/android-ndk-r25c
export PATH=$NDK_ROOT:$PATH
激活配置:source /etc/profile
echo $NDK_ROOT 输出如图所示的结果说明配置成功
6开始配置编译文件并对ffmpeg进行编译
把ffmpeg源码编译成.so文件,可以供Android进行调用
第一步修改configure里面的配置
把
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
修改为
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
配置–cross-prefix-clang=PREFIX
--cross-prefix=PREFIX use PREFIX for compilation tools [$cross_prefix]# 这里添加--cross-prefix-clang=PREFIX use PREFIX for compilation clang tools [$cross_prefix]
找到如图所示把cc_default="clang"改为cxx_default=“clang++”,如果用的是C语言可以不修改cross-prefix-clang前缀也添加上
set_default target_os
if test "$target_os" = android; thencc_default="clang"# 这里修改 默认值cxx_default="clang++"
fiar_default="${cross_prefix}${ar_default}"
cc_default="${cross_prefix}${cc_default}"
cxx_default="${cross_prefix}${cxx_default}"
nm_default="${cross_prefix}${nm_default}"
pkg_config_default="${cross_prefix}${pkg_config_default}"
ranlib_default="${cross_prefix}${ranlib_default}"
strip_default="${cross_prefix}${strip_default}"
windres_default="${cross_prefix}${windres_default}"
添加编译脚本android_build.sh,添加权限chmod 777 android_build.sh,执行脚本 sh android_build.sh
# 指定ndk路径
NDK=$NDK_HOME# 指定平台路径
PLATFORM=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot# 指定交叉编译链
TOOLCHHAINS=$NDK/toolchains/llvm/prebuilt/linux-x86_64#输出路径
PREFIX=./androidfunction build_android
{echo "开始编译ffmpeg"./configure \--prefix=$PREFIX/$ABI \--bindir=$PREFIX/$ABI/bin --disable-postproc \--disable-debug \--disable-doc \--enable-FFmpeg \--disable-doc \--disable-symver \--disable-static \--enable-shared \--cross-prefix=$CROSS_PREFIX \--target-os=android \--arch=$ARCH \--cpu=$CPU \--cc=$CC \--cxx=$CXX \--enable-cross-compile \--sysroot=$SYSROOT \--extra-cflags="-I$PLATFORM/usr/include -fPIC -DANDROID -mfpu=neon -mfloat-abi=softfp $OPTIMIZE_CFLAGS" \ --disable-vulkan \--extra-ldflags="$ADDI_LDFLAGS"make cleanmake -j4make installecho "编译结束"
}run_armv8# armv7-a
function build_armv7()
{API=28ABI=armeabi-v7aARCH=armCPU=armv7-aCC=$TOOLCHHAINS/bin/armv7a-linux-androideabi$API-clangCXX=$TOOLCHHAINS/bin/armv7a-linux-androideabi$API-clang++CROSS_PREFIX=$TOOLCHHAINS/bin/arm-linux-androideabi-# 编译build_android
}build_armv7
编译好的文件在当前目录的Android文件夹里面, 如果与prefix路径不匹配, 可以在ffbuild的config.log中查看prefix
相关文章:
ffmpeg6.0编译(NDK)
ffmpeg 6.0 支持vulkan 需要手动安装Vulkan 并将include里面的vk_video 和 vulkan 拷贝到 android-ndk-r25c/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/ vulkan 下载 cp -r vk_video $NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/…...
达观RPA实战-编码与解码
一、应用背景 项目中我们经常需要获取某个服务的JSON数据。如果响应返回的是JSON格式的数据,客户端通过JSON工具可正常解析。但如果碰到值里面有中文的,特别是返回的格式是类似“{"name": "\u5927\u7231\u4e2d\u56fd"}”处理起来会比较麻烦。本文将从编…...
配置Swagger开发环境有效,生产环境无效
安全扫描:通用信息泄漏【未授权访问ip:端口号/swagger-ui.html】 步骤一:配置启用变量【开发环境可用生产环境不可用】 application-dev.yml: swagger:enable: true application-pro.yml: swagger:enable: false 步骤二:根据配置变量控…...
Jmeter系列-线程组的执行顺序(10)
重点 每个测试计划至少需要有一个线程组 线程组下不同组件的执行优先级/顺序 1、配置元件、监听器 2、前置处理器 3、定时器 4、逻辑控制器 5、取样器 6、后置处理器 7、断言 取样器执行顺序 在没有逻辑控制器情况下,取样器是按从上往下的顺序执行的 参考文章…...
c# 面试题
简述 private、 protected、 public、 internal 修饰符的访问权限。 答: Private(拍非得) : 私有成员, 在类的内部才可以访问。 protected (普泰忒): 保护成员,该类内部和继承类中可以访问。 Publ…...
目录优先的图片库网站PiGallery2
什么是 PiGallery2 ? PiGallery2 是一个快速的目录优先的图片库网站,具有丰富的用户界面,针对在低资源服务器(尤其是树莓派)上运行进行了优化 所谓 目录优先 是指,这种网站的设计是以显示不同的目录&#x…...
17-垃圾回收相关概念
目录 一、System.gc()的理解二、内存溢出和内存泄漏2、内存泄漏 三、Stop the World1、什么是 stop the word ? 四、垃圾回收的并行和并发1、并发和并发2、垃圾回收的并行和并发 五、安全点与安全区域1、什么是安全点?2、安全区域 六、强引用(不可回收&…...
Ubuntu-server 22.04LTS源码编译apache服务器
1 系统环境 # cat /etc/os-release PRETTY_NAME"Ubuntu 22.04.3 LTS" NAME"Ubuntu" VERSION_ID"22.04" VERSION"22.04.3 LTS (Jammy Jellyfish)" VERSION_CODENAMEjammy IDubuntu ID_LIKEdebian HOME_URL"https://www.ubuntu.co…...
科技资讯|苹果虚拟纸可在Vision Pro中为广告、书籍等提供MR内容和动画
近日,美国专利商标局正式授予苹果一项与虚拟纸张相关的专利。这是与虚拟纸张这项发明相关的第二项专利,鉴于苹果 Vision Pro 将于明年上市,那么我们离苹果实现虚拟纸张的发明又近了一步。 虚拟纸张将能够包含 2D、3D 和动画等 MR内容&#…...
JavaScript-promise使用+状态
Promise 什么是PromisePromise对象就是异步操作的最终完成和失败的结果; Promise的基本使用: 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compati…...
xshell---git上传文件到gitee远程仓库配置
1.git下载 如果没有xshell下没有下载过git,可以参考这篇的教程:Linux配置安装 git 详细教程 下载后可以通过 git --version 查看git的版本号,验证是否安装成功 2.新建仓库 首先需要在gitee上注册一个账号 然后再主页面点击右上边框的 号…...
【GO语言基础】前言
系列文章目录 【Go语言学习】ide安装与配置 【GO语言基础】前言 【GO语言基础】变量常量 【GO语言基础】数据类型 文章目录 系列文章目录一、基础知识包和函数函数声明语法简洁性 括号成对出现GO常用DOS命令命名规则项目目录结构注释 总结 一、基础知识 包和函数 //声明本代…...
巧妙的设计
1. 判空逻辑,如果为空,抛异常,下面代码来自kafka client: Assert.notNull(queue, () -> "No cache found for " + txIdPrefix); 2. 本地cache设计,一下代码来自kafka client: private final Map<String, BlockingQueue<CloseSafeProducer<K, V&g…...
前端JavaScript中MutationObserver:监测DOM变化的强大工具
🎬 岸边的风:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 引言 1. MutationObserver简介 2. MutationObserver的属性 3. MutationObserver的应用场景 3.1 动态内容加载 …...
28335 GPIO作为输入的配置记录
28335 GPIO配置为输入,可以启动输入滤波功能,看了网上很多的讲解,把滤波配置记录一下: 主要是配置两个参数: GpioCtrlRegs.GPXCTRL.bit.QUALPRDX :用于配置采样的周期,由配置值和SYSCLKOUT共同…...
js脚本解决markdown本地图片->图床问题,附源代码和编译后的exe
前提条件 安装picgo-core,安装步骤: npm install -g picgo -g 然后配置图床 picgo set uploader ? Choose a(n) uploader (Use arrow keys)smms ❯ tcyungithubqiniuimguraliyunupyun (Move up and down to reveal more choices) 配置好后便可使用项目 快速开始-获取项目…...
C#不通过byte[],直接对内存映射文件复制内存
背景 多个进程直接需要传递大量图片,所以对性能要求较高。支付复制内存显然比转成byte[]再复制优越。 命名空间 using System; using System.Diagnostics; using System.Runtime.InteropServices; 代码 public CMainTestForm() { InitializeCo…...
ELK之Logstash启动异常:Logstash could not be started because there is already...
Logstash启动异常: Logstash could not be started because there is already another instance using the configured data directory. If you wish to run multiple instances, you must change the "path.data" setting. 提示我们已经有一个实例在用da…...
Matlab Simulink支持system generator插件
文章目录 前言一、System Generator 简介二、System Generator 特性三、System Generator 安装1、确定是否已安装 System Generator 工具2、vivado 卸载3、vivado 安装 四、解决版本不兼容问题五、使用 System Generator 前言 目前有在 Simulink 中开发完成后将其转换成 Veril…...
redis设计规范
部分内容参考:阿里redis开发规范 同时,结合shigen在实习中的实践经验总结。 key的名称设计 可读性和管理性 业务名: 表名: id pro:user:1001简洁性 控制key的长度,可以用缩写 transaction -> tras拒绝bigkey 防止网卡流量、慢查询&…...
用于非线性多载波卫星信道的多输入多输出符号速率信号数字预失真器DPD(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
【Spark】用udf和withColumn在dafaframe中创建新列
udf使用 import org.apache.spark.sql.functions.udf udf接收一个函数(func)作为参数,返回一个UserDefinedFunction。 UserDefinedFunction接收列(Column)作为参数,并返回Column. func可以接收普通类型参数…...
AIGC 设计能替代真正的设计师设计吗?
AIGC 设计能替代真正的设计师设计吗? 目录 一、写在前面的话 二、AIGC 设计能替代真正的设计师吗? 1.1、传统设计师设计 1.2、AIGC设计 1.3、相关概念 1.4、观点分析 (1)、审美角度 (2)、版权角度 …...
【1++的C++进阶】之emplace详解
👍作者主页:进击的1 🤩 专栏链接:【1的C进阶】 在前面C11系列的文章里,我们漏掉了几个知识点,这篇文章对其中一个知识点进行讲解,关于剩余的知识点的文章在后面会相继出炉。 C11中,针…...
React入门
一、react开始 1、react是什么 用于构建用户界面的JavaScript库 操作DOM呈现页面 (发送请求获取数据和处理数据不由react处理)fessbook开发 2、为什么要学 原生js操作DOM繁琐、效率低 使用原生js直接操作DOM,浏览器会进行大量重绘重排 原…...
第三方登录以及验证
第三方登录是指用户可以通过使用已有的第三方账号进行登录,而无需再次注册新的账号。常见的第三方登录平台包括微信、QQ、微博、GitHub等。 验证是指系统需要验证用户提供的信息是否正确,以确保用户可以登录系统。验证方式包括密码验证、手机号验证、邮…...
MS SQL Server问题汇总
1.报SQL Server Agent连接不上的错误 15:38:57.991 [debezium-sqlserverconnector-sqlserver_transaction_log_source-change-event-source-coordinator] WARN i.d.connector.sqlserver.SqlServerStreamingChangeEventSource - No maximum LSN recorded in the database; pl…...
在线海报图片设计器、图片编辑器源码/仿照稿定设计源码
在线海报设计系统素材设计源码是一个漂亮且功能强大的在线海报图片设计器,仿照稿定设计而成。该系统适用于多种场景,包括海报图片生成、电商分享图、文章长图、视频/公众号封面等。用户无需下载软件,即可轻松实现创意,迅速完成排版…...
KMP算法(C++)
KMP算法与BF算法不一样的在于,当主串与子串不匹配时,主串不回溯,选择了子串回溯,大大提高了运算效率。 借用了next1【】数组,让子串回溯。get_next函数求next1【】数组,get_next函数的实现难点在于下列几行…...
C++的异常类型与多级catch匹配
try-catch 的用法: try{// 可能抛出异常的语句 }catch(exceptionType variable){// 处理异常的语句 } 我们还遗留下一个问题,就是 catch 关键字后边的exceptionType variable,这节就来详细分析一下。exceptionType是异常类型,它指明了当前的 catch 可以处理什么类型的异常…...
电子商务网站推广方法和技巧/广州推广引流公司
兰州计算机学校排行情况得到了很多学生和家长的关注。我国计算机事业飞速发展,特别是在最近几年的计算机发展都是我们有目共睹和亲身体验的。伴随着网络时代的发展,计算机行业急需热门专业的人才也是受到现在初高中应往届毕业生的亲睐。下文3721职校网就…...
浅谈政府门户网站建设/上海站优云网络科技有限公司
概述 通过可视化设置好ip地址,子网掩码,网关,dns后,重启电脑或者关机后,网卡的网关会自动消失,自己不见了,导致上不去网。 解决办法 方法一:通过注册表解决 1、开始–运行–输入“…...
山东中讯网站建设/seo软件哪个好
ps:本来想上传pytesseract包的 实在是不知道怎么加附件.... 在验证码识别时候因为每次请求登录界面时候验证码都会随机刷新,所以使用selenium库进行屏幕截图然后 识别输入, 上代码: import pytesseractfrom PIL import Image…...
wordpress文章采集插件/广告投放网站平台
在使用word2vec对文本进行分析时能产生一个bin文件,可以用ANSJ调用该文件得到相近词,等同于替换 ./distance vectors.bin命令。 代码如下: import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.FileInputSt…...
安装wordpress时选择中文语言失败/交易链接大全
本篇主要讲述我们日常使用中和maven相关的基础概念。后面两篇主要讲述一、按照惯例,先普及一下概念,后面会用到你也可以直接跳过,后面用到的时候,再回来看。1. mavenMaven全名叫Apache Maven,是一个软件项目管理和项目…...
网站建设资费/谷歌搜索引擎入口
搜索引擎之中文分词实现(java版)前几天读到google研究员吴军的数学之美系列篇,颇有感触。而恰好自己前段时间做了个基于统计语言模型的中文切分系统的课程项目,于是乎,帖出来与大家共同学习。分词技术在搜索引擎&#…...