NDK编译ffmpeg包含硬件加速vulkan和mediacodec

news2024/10/7 16:15:42

NDK编译ffmpeg包含硬件加速vulkan和mediacodec

flyfish

ffmpeg:ffmpeg-6.0
NDK:android-ndk-r25c
硬件加速:vulkan 和 mediacodec
target CPU:armv8-a
host:Ubuntu 22.04

因为这里要编译硬件加速版本的ffmpeg-6.0,所以需要把vulkan中include下的两个文件夹
vk_videovulkan 拷贝到 android-ndk-r25c/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/

vulkan下载地址
Vulkan视频解码是厂商通用硬件加速视频解码的新规范。
目前,支持以下编解码器 H.264, HEVC, AV1

因为这里用的是android-ndk-r25c,与旧版的NDK有所不同
aarch64-linux-android-nm被llvm-nm替代
aarch64-linux-android-ar 被llvm-ar替代

编译脚本如下

#!/bin/bash
make clean
#配置NDK和TOOLCHAIN路径
export NDK=/media/a/flyfish/android_sdk/android-ndk-r25c
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
AR=$TOOLCHAIN/bin/llvm-ar
NM=$TOOLCHAIN/bin/llvm-nm
RANLIB=$TOOLCHAIN/bin/llvm-ranlib
STRIP=$TOOLCHAIN/bin/llvm-strip

#arm64-v8a 参数配置
ARCH=arm64
CPU=armv8-a
API=28
CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU"

 
function build_android
{
./configure \
--prefix=$PREFIX \
--enable-postproc \
--enable-debug \
--disable-asm \
--enable-doc \
--enable-ffmpeg \
--enable-ffplay \
--enable-ffprobe \
--enable-symver \
--disable-avdevice \
--enable-static \
--enable-shared \
--enable-neon \
--enable-hwaccels \
--enable-jni \
--enable-mediacodec \
--enable-decoder=h264_mediacodec \
--enable-decoder=hevc_mediacodec \
--enable-decoder=mpeg4_mediacodec \
--cross-prefix=$CROSS_PREFIX \
--target-os=android \
--arch=$ARCH \
--cpu=$CPU \
--cc=$CC \
--cxx=$CXX \
--ar=$TOOLCHAIN/bin/llvm-ar \
--nm=$TOOLCHAIN/bin/llvm-nm \
--ranlib=$RANLIB \
--strip=$STRIP \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS"
 
make clean
make -j4
make install
 
echo "build complete"
 
}

# 函数调用
build_android

将上述脚本拷贝到build.sh
放置到ffmpeg-6.0中
增加可执行权限后,执行 ./build.sh
编译结果在ffmpeg-6.0/android//armv8-a文件夹中
包括bin include lib share

将ffmpeg和so文件传到target设备
执行

第一句主要让ffmpeg从当前目录下找so文件

export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH
./ffmpeg -hwaccels

在这里插入图片描述
可以看到已经包括vulkan和mediacodec硬件加速

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

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

相关文章

微服务学习2——利用nacos实现服务治理

(本文参考黑马程序员项目) 个人仓库地址:https://gitee.com/jkangle/springboot-exercise.git 1.当前项目中存在的问题 不同微服务之间的调用通过硬编码的形式,这样可能在需要打量修改的时候出现问题,因此引入了服务…

新版Grafana仪表盘

一 Grafana 是什么 Grafana 是一个开源的指标量监测和可视化工具,常用于展示基础设施的时序数据和应用 程序运行分析。 官网指路: https://grafana.com/ 与前文相关的两个概念: 1)数据源(Datasource)&…

Xcode 15 beta 3 (15A5195k) 发布下载 - Apple 平台 IDE

Xcode 15 beta 3 (15A5195k) 发布下载 - Apple 平台 IDE (visonOS 1 beta 已发布) 7 月 5 日(北京时间今日凌晨)已发布。 IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接:https://sysin.org/blog/apple-xcode-15/&#xf…

macOS Sonoma 14 beta 3 (23A5286g) ISO、IPSW、PKG 下载

macOS Sonoma 14 beta 3 (23A5286g) ISO、IPSW、PKG 下载,7 月 5 日(北京时间今日凌晨)已发布 本站下载的 macOS 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安…

【PyQt5】构建强大的Python图形用户界面应用程序 -- 入门指南

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

微服务学习3——利用sentinel实现服务器的容错

1.Sentinel服务器容错 (本文参考黑马程序员项目) 个人仓库地址:https://gitee.com/jkangle/springboot-exercise.git 在服务器中,由于网络原因可能会出现线程阻塞的情况,当线程阻塞的时候如果有大量的请求涌入&#x…

echarts滚动条样式修改

1.修改的样式如下: 2.相关代码 // 基于准备好的dom,初始化echarts实例 const myChart echarts.init(this.$refs.tasksChart) // 绘制图表 myChart.setOption({grid: {top: 4%,left: 12%,right: 4%,bottom: 23%},// tooltip: {// formatter: {b} {c…

【ElasticSearch】JavaRestClient实现索引库和文档的增删改查

文章目录 一、RestClient1、什么是RestClient2、导入demo工程3、数据结构分析与索引库创建4、初始化JavaRestClient 二、RestClient操作索引库1、创建索引库2、删除索引库3、判断索引库是否存在 三、RestClient操作文档1、新增文档2、查询文档3、删除文档4、修改文档5、批量导入…

视觉SLAM-光流法

文章目录 目录 前言 🌟光流法的基本原理 🌟OpenCV中的光流法实现 🌟光流法的应用 🌟代码实现 🍉OpenCV代码 🍉OpenCV代码 🌟总结 前言 当我们观察一个视频或连续帧的图像时&#xff0c…

【Bubbliiiing视频记录】Pytorch 搭建自己的Unet语义分割平台

来源 b站 地址 什么是语义分割 语义分割:对图像每个像素点进行分类 常见神经网络处理过程:Encoder提取特征,接着Docoder恢复成原图大小的图片 UNet整体结构 分为三个部分 主干特征提取部分: 卷积和最大池化的堆叠获得五个初…

Snail-Camunda

gitee地址:snail-camunda 当前版本:V1.0 💖💖💖希望大家动动发财的小手帮忙star一下,感谢! ⭐项目介绍 本项目是对Camunda接口…

data和filter协议文件包含

实验目的 通过本实验,了解php封装伪协议,掌握filter协议和data协议的用法 实验环境 操作机:kali 靶机:Windows Server 2003 实验地址:http://靶机ip/exp/include2/filter/ http://靶机ip/exp/include/include3.php…

【C++ OJ练习】1.求和

1.题目链接 求123...n_牛客题霸_牛客网 2.解题思路 利用C构造函数的特性 既然不能使用循环 那么我们可以定义n个对象 就会调用n次构造函数 去代替循环 每次调用的时候进行加法的计算 3.代码 class Sum { public:Sum(){_sum _i;_i;}static void Init(){_i 1;_sum 0;}st…

ruoyi若依 组织架构设计--[ 菜单管理 ]

ruoyi若依 组织架构设计--[ 菜单管理 ] 1. 关于ruoyi组织架构各个表的设计2. 从产品的角度考虑 [ 菜单管理 ]2.1菜单树List页面2.2 菜单树新增2.3 菜单树修改2.4 删除菜单 1. 关于ruoyi组织架构各个表的设计 1.部门表 ancestors字段。 添加这个字段,方便列举所有子…

用maven安装Netty

Netty简单介绍 官网:https://netty.io/index.html Netty是一个异步的、事件驱动的网络应用框架,既可用于开发高性能的服务端,也可用于开发客户端。 Netty是一个NIO的客户端和服务端框架,用于快速、容易地开发网络应用&#xff0c…

Linux·图解Linux网络包接收过程

因为要对百万、千万、甚至是过亿的用户提供各种网络服务,所以在一线互联网企业里面试和晋升后端开发同学的其中一个重点要求就是要能支撑高并发,要理解性能开销,会进行性能优化。而很多时候,如果你对Linux底层的理解不深的话&…

Paddle OCR 安装使用教程

简介 PaddleOCR是飞浆开源文字识别模型,最新开源的超轻量PP-OCRv3模型大小仅为16.2M。同时支持中英文识别;支持倾斜、竖排等多种方向文字识别;支持GPU、CPU预测,并且支持使用paddle开源组件训练自己的超轻量模型,对于…

微信小程序路由跳转,API调用,页面传值

路由跳转 wx.switchTab 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。 wx.switchTab({url: /pages/tarbar/index })wx.reLaunch 关闭所有页面,打开到应用内的某个页面。 wx.reLaunch({url: /pages/index/index })wx.redirectTo 关闭当前页面…

13服务端实战:初始化项目

本章开始将进行服务端的实战开发,包含了 Devops、服务端以及其他涉及到的中间件的模块。 由于 NestJS 的文档非常完善以及之前有写过比较完整的 NestJS 的小册,如果对 NestJS 非常熟悉的同学可以快速跳过本章,另外整个实战篇的代码都会按照流…

shell命令以及运行原理、Linux权限、粘滞位

今天我带来Linux重点知识:shell命令以及运行原理、Linux权限、粘滞位的知识点。 目录 shell命令以及运行原理Linux权限的概念Linux下的用户su命令 Linux权限管理文件访问者的分类文件的类型和访问权限文件权限值的表达方法 Linux关于权限的知识点补充1.Linux创建用户…